summaryrefslogtreecommitdiff
path: root/sources/scalac/typechecker/DeSugarize.java
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-03-04 12:10:52 +0000
committerMartin Odersky <odersky@gmail.com>2003-03-04 12:10:52 +0000
commit91c9a415e380539da3c6acabda2cf70afbf2cc47 (patch)
treeaff5d4ff5c546d3f5228cd1bd6b1151211a7ae07 /sources/scalac/typechecker/DeSugarize.java
parentfc497536ed884b4d18860f6db644d4143412c2f5 (diff)
downloadscala-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.java36
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);