diff options
author | Martin Odersky <odersky@gmail.com> | 2003-03-04 12:10:52 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-03-04 12:10:52 +0000 |
commit | 91c9a415e380539da3c6acabda2cf70afbf2cc47 (patch) | |
tree | aff5d4ff5c546d3f5228cd1bd6b1151211a7ae07 /sources/scalac/typechecker/DeSugarize.java | |
parent | fc497536ed884b4d18860f6db644d4143412c2f5 (diff) | |
download | scala-91c9a415e380539da3c6acabda2cf70afbf2cc47.tar.gz scala-91c9a415e380539da3c6acabda2cf70afbf2cc47.tar.bz2 scala-91c9a415e380539da3c6acabda2cf70afbf2cc47.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac/typechecker/DeSugarize.java')
-rw-r--r-- | sources/scalac/typechecker/DeSugarize.java | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/sources/scalac/typechecker/DeSugarize.java b/sources/scalac/typechecker/DeSugarize.java index cc6654232f..228c94b286 100644 --- a/sources/scalac/typechecker/DeSugarize.java +++ b/sources/scalac/typechecker/DeSugarize.java @@ -263,13 +263,14 @@ public class DeSugarize implements Kinds, Modifiers { tree.pos, 0, Names.isDefinedAt, Tree.ExtTypeDef.EMPTY_ARRAY, duplicator.transform(vparams), gen.mkType(tree.pos, global.definitions.BOOLEAN_TYPE), body1); - Tree newTree = make.New(tree.pos, + Tree result = make.New(tree.pos, make.Template( tree.pos, new Tree[]{constr}, new Tree[]{applyDef, isDefinedAtDef})); - Tree result = make.Typed(tree.pos, - tree, - gen.mkType(tree.pos, - global.definitions.partialFunctionType(targs[0], targs[1]))); + + //Tree result = make.Typed(tree.pos, + // newTree, + // gen.mkType(tree.pos, + // global.definitions.partialFunctionType(targs[0], targs[1]))); print(tree, "partialfun", result); return result; } @@ -277,22 +278,33 @@ public class DeSugarize implements Kinds, Modifiers { private Tree isDefinedAtVisitor(Tree tree) { switch (tree) { case Visitor(CaseDef[] cases): + CaseDef lastCase = cases[cases.length - 1]; + switch (lastCase) { + case CaseDef(Ident(Name name), Tree.Empty, Tree expr): + if (name.isVariable()) + return make.Visitor(tree.pos, + new CaseDef[]{ + make.CaseDef(lastCase.pos, + duplicator.transform(lastCase.pat), + Tree.Empty, + gen.mkBoolean(lastCase.body.pos, true))}); + } CaseDef[] cases1 = new CaseDef[cases.length + 1]; for (int i = 0; i < cases.length; i++) { switch (cases[i]) { case CaseDef(Tree pat, Tree guard, _): - cases1[i] = (CaseDef) make.CaseDef(cases[i].pos, + cases1[i] = (CaseDef) make.CaseDef( + cases[i].pos, duplicator.transform(pat), duplicator.transform(guard), - make.Select(tree.pos, - make.Ident(tree.pos, Names.scala), Names.True)); + gen.mkBoolean(tree.pos, true)); } } - cases1[cases.length] = (CaseDef) make.CaseDef(tree.pos, + cases1[cases.length] = (CaseDef) make.CaseDef( + tree.pos, make.Ident(tree.pos, Names.WILDCARD), - Tree.Empty, - make.Select(tree.pos, - make.Ident(tree.pos, Names.scala), Names.False)); + Tree.Empty, + gen.mkBoolean(tree.pos, false)); return make.Visitor(tree.pos, cases1); default: throw new ApplicationError("visitor expected", tree); |