summaryrefslogtreecommitdiff
path: root/sources/meta
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-23 14:17:11 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-23 14:17:11 +0000
commitc397f80f8b2e960a413d5113b1bc95a1da7f617a (patch)
treeb653e04e7a5fe8f6c0cf86bc0237e0467c66d896 /sources/meta
parent8e76d1283e705ef06ba7e4795b2bd1f31244b15b (diff)
downloadscala-c397f80f8b2e960a413d5113b1bc95a1da7f617a.tar.gz
scala-c397f80f8b2e960a413d5113b1bc95a1da7f617a.tar.bz2
scala-c397f80f8b2e960a413d5113b1bc95a1da7f617a.zip
- Added automatic update of linked tree fields
- Fixed method isType (case Ident and case Select)
Diffstat (limited to 'sources/meta')
-rw-r--r--sources/meta/scalac/ast/MetaTree.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/sources/meta/scalac/ast/MetaTree.java b/sources/meta/scalac/ast/MetaTree.java
index a8ef084b78..461ec184f5 100644
--- a/sources/meta/scalac/ast/MetaTree.java
+++ b/sources/meta/scalac/ast/MetaTree.java
@@ -114,8 +114,17 @@ public class MetaTree extends AbstractTreeExpander {
}
writer.println("):");
writer.indent().print("return ");
- if (kind != TreeKind.Type) writer.print("!");
- writer.println("name.isTypeName();").undent();
+ switch (kind) {
+ case TreeKind.Type:
+ writer.print("name.isTypeName() || name == Name.ERROR");
+ break;
+ case TreeKind.Term:
+ writer.print("!name.isTypeName()");
+ break;
+ default:
+ throw new Error("unexpected kind " + kind);
+ }
+ writer.println(";").undent();
}
writer.println("default:");
@@ -167,6 +176,16 @@ public class MetaTree extends AbstractTreeExpander {
writer.print("public Tree setSymbol(").print(tree.t_Symbol).print(" symbol)");
writer.lbrace();
writer.println("this.symbol = symbol;");
+ if (node.hasLinkedFields()) {
+ writer.print("if (symbol != null)").lbrace();
+ for (int i = 0; i < node.fields.length; i++) {
+ TreeField field = node.fields[i];
+ TreeFieldLink link = field.link;
+ if (link == null) continue;
+ writer.println("this."+field+" = symbol."+link.getLink()+";");
+ }
+ writer.rbrace();
+ }
writer.println("return this;");
writer.rbrace();
writer.println();