diff options
author | paltherr <paltherr@epfl.ch> | 2004-01-08 18:52:06 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-01-08 18:52:06 +0000 |
commit | d9eef6e14426c8bb0af852b066f3fe1830dc6d3c (patch) | |
tree | a7f99ff2e1e0b00cbb0323c94595302811eb4d8d /sources/scalac/transformer | |
parent | c5dcb8d01fe46c21695a12094206c24af8fe4d50 (diff) | |
download | scala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.tar.gz scala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.tar.bz2 scala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.zip |
- Added handling of Predef.Array
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index 4702636cc9..d6bb755d18 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -446,6 +446,26 @@ public class LambdaLift extends OwnerTransformer Tree fn1 = transform(fn); switch (fn1) { case TypeApply(Tree fn2, Tree[] targs): + if (args.length == 1 && fn2.symbol() == definitions.PREDEF_ARRAY()) { + switch (args[0]) { + case Sequence(Tree[] items): + assert targs.length == 1: tree; + Tree array = gen.mkNewArray( + args[0].pos, + targs[0].type(), + transform(items), + currentOwner); + // fn2 may be like "{ println("hello"); Predef}.Array" + switch (fn2) { + case Select(Tree qualifier, _): + return gen.Block( + args[0].pos, + new Tree[] {qualifier, array}); + default: + throw Debug.abort("illegal case", fn2); + } + } + } fn1 = copy.TypeApply( fn1, fn2, addFreeArgs(tree.pos, get(free.ftvs, fsym), targs, true)); break; |