From 8e76d1283e705ef06ba7e4795b2bd1f31244b15b Mon Sep 17 00:00:00 2001 From: paltherr Date: Wed, 23 Apr 2003 14:15:41 +0000 Subject: - Added information about linked tree fields --- sources/meta/scalac/ast/Tree.java | 29 ++++++++++++++++------------- sources/meta/scalac/ast/TreeField.java | 4 +++- sources/meta/scalac/ast/TreeNode.java | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 15 deletions(-) (limited to 'sources/meta') diff --git a/sources/meta/scalac/ast/Tree.java b/sources/meta/scalac/ast/Tree.java index de209f803f..c06f3c6437 100644 --- a/sources/meta/scalac/ast/Tree.java +++ b/sources/meta/scalac/ast/Tree.java @@ -37,6 +37,9 @@ public class Tree { private static final TreeSymbol HasSym = TreeSymbol.HasSym; private static final TreeSymbol DefSym = TreeSymbol.DefSym; + private static final TreeFieldLink SymFlags = TreeFieldLink.SymFlags; + private static final TreeFieldLink SymName = TreeFieldLink.SymName; + private final List list = new ArrayList(); //######################################################################## @@ -131,8 +134,8 @@ public class Tree { n_ClassDef. setDescription("Class and data declaration"). setRange(Phase.PARSER, Phase.END). - addField(t_int, "mods"). - addField(t_TypeName, "name"). + addField(t_int, "mods", SymFlags). + addField(t_TypeName, "name", SymName). addField(t_TypeDefs, "tparams"). addField(t_ValDefss, "vparams"). addField(t_TypeTree, "tpe"). @@ -147,16 +150,16 @@ public class Tree { n_ModuleDef. setDescription("Module declaration"). setRange(Phase.PARSER, Phase.UNKNOWN). - addField(t_int, "mods"). - addField(t_TermName, "name"). + addField(t_int, "mods", SymFlags). + addField(t_TermName, "name", SymName). addField(t_TypeTree, "tpe"). addField(t_Template, "impl"); n_ValDef. setDescription("Value declaration (var or let)"). setRange(Phase.PARSER, Phase.END). - addField(t_int, "mods"). - addField(t_TermName, "name"). + addField(t_int, "mods", SymFlags). + addField(t_TermName, "name", SymName). addField(t_TypeTree, "tpe"). addField(t_TermTree, "rhs"); @@ -171,8 +174,8 @@ public class Tree { n_DefDef. setDescription("Function declaration (def)"). setRange(Phase.PARSER, Phase.END). - addField(t_int, "mods"). - addField(t_TermName, "name"). + addField(t_int, "mods", SymFlags). + addField(t_TermName, "name", SymName). addField(t_TypeDefs, "tparams"). addField(t_ValDefss, "vparams"). addField(t_TypeTree, "tpe"). @@ -181,8 +184,8 @@ public class Tree { n_TypeDef. setDescription("Type declaration"). setRange(Phase.PARSER, Phase.ERASURE). // !!! could/should be removed earlier?) - addField(t_int, "mods"). - addField(t_TypeName, "name"). + addField(t_int, "mods", SymFlags). + addField(t_TypeName, "name", SymName). addField(t_TypeTree, "rhs"); n_Import. @@ -284,12 +287,12 @@ public class Tree { setDescription("Designator"). setRange(Phase.START, Phase.END). addField(t_TermTree, "qualifier"). - addField(t_TestName, "selector"); + addField(t_TestName, "selector", SymName); n_Ident. setDescription("Identifier"). setRange(Phase.START, Phase.END). - addField(t_TestName, "name"); + addField(t_TestName, "name", SymName); n_Literal. setDescription("Literal"). @@ -309,7 +312,7 @@ public class Tree { setDescription("Type selection"). setRange(Phase.PARSER, Phase.ANALYZER). addField(t_TypeTree, "qualifier"). - addField(t_TypeName, "selector"); + addField(t_TypeName, "selector", SymName); n_FunType. setDescription("Function type"). diff --git a/sources/meta/scalac/ast/TreeField.java b/sources/meta/scalac/ast/TreeField.java index 9944e4178b..f27c8c1698 100644 --- a/sources/meta/scalac/ast/TreeField.java +++ b/sources/meta/scalac/ast/TreeField.java @@ -18,13 +18,15 @@ public class TreeField { public final Type type; public final String name; + public final TreeFieldLink link; //######################################################################## // Public Constructors - public TreeField(Type type, String name) { + public TreeField(Type type, String name, TreeFieldLink link) { this.type = type; this.name = name; + this.link = link; } //######################################################################## diff --git a/sources/meta/scalac/ast/TreeNode.java b/sources/meta/scalac/ast/TreeNode.java index e4e16d6ffe..5a985bc3ae 100644 --- a/sources/meta/scalac/ast/TreeNode.java +++ b/sources/meta/scalac/ast/TreeNode.java @@ -54,6 +54,12 @@ public class TreeNode { return symbol == symbol.HasSym || symbol == symbol.DefSym; } + public boolean hasLinkedFields() { + for (int i = 0; i < fields.length; i++) + if (fields[i].link != null) return true; + return false; + } + public boolean definesSymbol() { return symbol == symbol.DefSym; } @@ -80,9 +86,16 @@ public class TreeNode { } public TreeNode addField(Type type, String name) { + return addField(type, name, null); + } + + public TreeNode addField(Type type, String name, TreeFieldLink link) { + if (link != null) + if (symbol != TreeSymbol.HasSym && symbol != TreeSymbol.DefSym) + throw new Error("node "+this+" may not have linked fields"); TreeField[] array = new TreeField[fields.length + 1]; for (int i = 0; i < fields.length; i++) array[i] = fields[i]; - array[fields.length] = new TreeField(type, name); + array[fields.length] = new TreeField(type, name, link); fields = array; return this; } -- cgit v1.2.3