summaryrefslogtreecommitdiff
path: root/sources/meta
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-23 14:15:41 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-23 14:15:41 +0000
commit8e76d1283e705ef06ba7e4795b2bd1f31244b15b (patch)
tree57e5e4d84b68a7405f60b0044fee3723bc9351e9 /sources/meta
parent544dd4f57ec5a932e3324fe11a6374d95a0f6c06 (diff)
downloadscala-8e76d1283e705ef06ba7e4795b2bd1f31244b15b.tar.gz
scala-8e76d1283e705ef06ba7e4795b2bd1f31244b15b.tar.bz2
scala-8e76d1283e705ef06ba7e4795b2bd1f31244b15b.zip
- Added information about linked tree fields
Diffstat (limited to 'sources/meta')
-rw-r--r--sources/meta/scalac/ast/Tree.java29
-rw-r--r--sources/meta/scalac/ast/TreeField.java4
-rw-r--r--sources/meta/scalac/ast/TreeNode.java15
3 files changed, 33 insertions, 15 deletions
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;
}