summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-01-08 18:52:06 +0000
committerpaltherr <paltherr@epfl.ch>2004-01-08 18:52:06 +0000
commitd9eef6e14426c8bb0af852b066f3fe1830dc6d3c (patch)
treea7f99ff2e1e0b00cbb0323c94595302811eb4d8d /sources
parentc5dcb8d01fe46c21695a12094206c24af8fe4d50 (diff)
downloadscala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.tar.gz
scala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.tar.bz2
scala-d9eef6e14426c8bb0af852b066f3fe1830dc6d3c.zip
- Added handling of Predef.Array
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/transformer/LambdaLift.java20
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;