diff options
author | paltherr <paltherr@epfl.ch> | 2003-04-23 14:17:11 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-04-23 14:17:11 +0000 |
commit | c397f80f8b2e960a413d5113b1bc95a1da7f617a (patch) | |
tree | b653e04e7a5fe8f6c0cf86bc0237e0467c66d896 /sources/meta | |
parent | 8e76d1283e705ef06ba7e4795b2bd1f31244b15b (diff) | |
download | scala-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.java | 23 |
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(); |