summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-03-10 14:30:14 +0000
committerpaltherr <paltherr@epfl.ch>2004-03-10 14:30:14 +0000
commitf6f7e50bfd51ff4c126623c2aba1cfc48e7fab1b (patch)
treea42b1f11cb3afffb2ff07f7c96a26e29d2055369 /sources
parentde42629d73467e92dbedee498ccd531e156bcd03 (diff)
downloadscala-f6f7e50bfd51ff4c126623c2aba1cfc48e7fab1b.tar.gz
scala-f6f7e50bfd51ff4c126623c2aba1cfc48e7fab1b.tar.bz2
scala-f6f7e50bfd51ff4c126623c2aba1cfc48e7fab1b.zip
- Fixed ATree generator and Tree checker for ne...
- Fixed ATree generator and Tree checker for new use of Idents with static syms
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/atree/ATreeFromSTree.java27
-rw-r--r--sources/scalac/checkers/TreeChecker.java7
2 files changed, 11 insertions, 23 deletions
diff --git a/sources/scalac/atree/ATreeFromSTree.java b/sources/scalac/atree/ATreeFromSTree.java
index c67ac19e93..8929eaf7cf 100644
--- a/sources/scalac/atree/ATreeFromSTree.java
+++ b/sources/scalac/atree/ATreeFromSTree.java
@@ -229,14 +229,7 @@ public class ATreeFromSTree {
return make.Throw(tree, expression(value));
case New(Template(Tree[] bases, _)):
- switch (bases[0]) {
- case Apply(TypeApply(Tree fun, Tree[] targs), Tree[] vargs):
- return apply(tree, method(fun), targs, vargs);
- case Apply(Tree fun, Tree[] vargs):
- return apply(tree, method(fun), Tree.EMPTY_ARRAY, vargs);
- default:
- throw Debug.abort("illegal case", bases[0]);
- }
+ return expression(bases[0]);
case Apply(TypeApply(Tree fun, Tree[] targs), Tree[] vargs):
return apply(tree, fun, targs, vargs);
@@ -261,17 +254,11 @@ public class ATreeFromSTree {
/** Translates the application. */
private ACode apply(Tree tree, Tree fun, Tree[] targs, Tree[] vargs) {
- switch (fun) {
- case Ident(_):
- return make.Goto(tree, fun.symbol(), expression(vargs));
- default:
- return apply(tree, method(fun), targs, vargs);
- }
- }
-
- /** Translates the application. */
- private ACode apply(Tree tree, AFunction function,Tree[]targs,Tree[]vargs){
+ Symbol symbol = fun.symbol();
+ ACode[] codes = expression(vargs);
+ if (symbol.isLabel()) return make.Goto(tree, symbol, codes);
Type[] types = Tree.typeOf(targs);
+ AFunction function = function(fun);
switch (function) {
case Method(ACode object, Symbol method, AInvokeStyle style):
if (!style.isDynamic()) break;
@@ -283,14 +270,14 @@ public class ATreeFromSTree {
if (generator == null) break;
return generate((Generator)generator, tree, object, types, vargs);
}
- return make.Apply(tree, function, types, expression(vargs));
+ return make.Apply(tree, function, types, codes);
}
//########################################################################
// Private Methods - Translating functions
/** Translates the method. */
- private AFunction method(Tree tree) {
+ private AFunction function(Tree tree) {
Symbol symbol = tree.symbol();
switch (tree) {
diff --git a/sources/scalac/checkers/TreeChecker.java b/sources/scalac/checkers/TreeChecker.java
index b409775629..3c1368552c 100644
--- a/sources/scalac/checkers/TreeChecker.java
+++ b/sources/scalac/checkers/TreeChecker.java
@@ -268,7 +268,8 @@ public class TreeChecker {
Tree fun = TreeInfo.methPart(bases[0]);
assert fun instanceof Tree.Ident: show(tree);
Symbol symbol = fun.symbol();
- assert symbol != null && symbol.isInitializer(): show(tree);
+ assert symbol != null && !symbol.isLabel(): show(tree);
+ assert symbol.isInitializer(): show(tree);
return expression(bases[0], definitions.UNIT_TYPE());
case Apply(Tree vfun, Tree[] vargs):
@@ -342,8 +343,8 @@ public class TreeChecker {
return selection(tree);
case Ident(_):
- if (symbol.owner().isStaticOwner()) return true;
- if (symbol.isInitializer()) return true;
+ if (!symbol.isLabel() && symbol.isInitializer()) return true;
+ if (!symbol.isLabel() && symbol.isStatic()) return true;
assert labels.contains(symbol): show(tree);
assert symbol.owner() == currentMember(): show(tree);
return true;