summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/TreeGen.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-10-28 14:41:00 +0000
committerMartin Odersky <odersky@gmail.com>2009-10-28 14:41:00 +0000
commit0ce248ef65575dce910c82e5714d808851557669 (patch)
tree289a451fe6a621cd4fbc7345f1ec3094c3e819d2 /src/compiler/scala/tools/nsc/ast/TreeGen.scala
parentcf53536f9e1b668e9e05c280db84ef2eb502765c (diff)
downloadscala-0ce248ef65575dce910c82e5714d808851557669.tar.gz
scala-0ce248ef65575dce910c82e5714d808851557669.tar.bz2
scala-0ce248ef65575dce910c82e5714d808851557669.zip
Fixed #1342.
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/TreeGen.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreeGen.scala14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreeGen.scala b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
index 89762ce258..db5c2f2afe 100644
--- a/src/compiler/scala/tools/nsc/ast/TreeGen.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreeGen.scala
@@ -271,7 +271,6 @@ abstract class TreeGen
DefDef(accessor setFlag lateDEFERRED, EmptyTree)
def mkRuntimeCall(meth: Name, args: List[Tree]): Tree = {
- assert(meth.toString != "boxArray") // !!! can be removed once arrays are in.
Apply(Select(mkAttributedRef(ScalaRunTimeModule), meth), args)
}
@@ -302,6 +301,19 @@ abstract class TreeGen
def mkForwarder(target: Tree, vparamss: List[List[Symbol]]) =
(target /: vparamss)((fn, vparams) => Apply(fn, vparams map paramToArg))
+ /** Applies a wrapArray call to an array, making it a WrappedArray
+ */
+ def mkWrapArray(tree: Tree, elemtp: Type) = {
+ val predef = mkAttributedRef(PredefModule)
+ val meth =
+ if ((elemtp <:< AnyRefClass.tpe) && !isPhantomClass(elemtp.typeSymbol) ||
+ isValueClass(elemtp.typeSymbol))
+ Select(predef, "wrapArray")
+ else
+ TypeApply(Select(predef, "genericWrapArray"), List(TypeTree(elemtp)))
+ Apply(meth, List(tree))
+ }
+
/** Used in situations where you need to access value of an expression several times
*/
def evalOnce(expr: Tree, owner: Symbol, unit: CompilationUnit)(within: (() => Tree) => Tree): Tree = {