summaryrefslogtreecommitdiff
path: root/sources/meta/scalac/ast/Tree.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/meta/scalac/ast/Tree.java')
-rw-r--r--sources/meta/scalac/ast/Tree.java128
1 files changed, 67 insertions, 61 deletions
diff --git a/sources/meta/scalac/ast/Tree.java b/sources/meta/scalac/ast/Tree.java
index c06f3c6437..a7a933069b 100644
--- a/sources/meta/scalac/ast/Tree.java
+++ b/sources/meta/scalac/ast/Tree.java
@@ -18,32 +18,53 @@ import meta.scalac.Phase;
public class Tree {
//########################################################################
- // Public Constants
+ // Private Fields
- public static final String PACKAGE = "scalac.ast";
- public static final String NAME = "Tree";
+ private final TreeKind
+ Any = TreeKind.Any,
+ Type = TreeKind.Type,
+ Term = TreeKind.Term,
+ Dual = TreeKind.Dual,
+ Test = TreeKind.Test,
+ None = TreeKind.None;
- //########################################################################
- // Private Constants
+ private final Type
+ t_int = TreeType.INT,
+ t_Object = TreeType.Reference(null, "Object"),
+ t_Global = TreeType.Reference("scalac", "Global"),
+ t_Unit = TreeType.Reference("scalac", "Unit"),
+ t_TreeGen = TreeType.Reference("scalac.ast", "TreeGen"),
+ t_Symbol = TreeType.Reference("scalac.symtab", "Symbol"),
+ t_Type = TreeType.Reference("scalac.symtab", "Type"),
+ t_Name = TreeType.Name(Any),
+ t_TypeName = TreeType.Name(Type),
+ t_TermName = TreeType.Name(Term),
+ t_TestName = TreeType.Name(Test),
+ t_Names = TreeType.Array(t_Name),
+ t_Tree = getType(0),
+ t_TypeTree = getType(0, Type),
+ t_TermTree = getType(0, Term),
+ t_Trees = getType(1),
+ t_TypeTrees = getType(1, Type),
+ t_TermTrees = getType(1, Term);
- private static final TreeKind Any = TreeKind.Any;
- private static final TreeKind Type = TreeKind.Type;
- private static final TreeKind Term = TreeKind.Term;
- private static final TreeKind Dual = TreeKind.Dual;
- private static final TreeKind Test = TreeKind.Test;
- private static final TreeKind None = TreeKind.None;
+ private final TreeFieldLink
+ SymFlags = TreeFieldLink.SymFlags,
+ SymName = TreeFieldLink.SymName;
- private static final TreeSymbol NoSym = TreeSymbol.NoSym;
- private static final TreeSymbol HasSym = TreeSymbol.HasSym;
- private static final TreeSymbol DefSym = TreeSymbol.DefSym;
+ private final TreeField
+ tree_symbol = new TreeField(t_Symbol, "symbol");
- private static final TreeFieldLink SymFlags = TreeFieldLink.SymFlags;
- private static final TreeFieldLink SymName = TreeFieldLink.SymName;
+ private final TreeSymbol
+ NoSym = TreeSymbol.NoSym,
+ HasSym = TreeSymbol.HasSym(tree_symbol, false),
+ DefSym = TreeSymbol.HasSym(tree_symbol, true);
- private final List list = new ArrayList();
+ private final List list
+ = new ArrayList();
//########################################################################
- // Public Constants
+ // Public Fields
public final TreeNode
n_Bad = node("Bad" , Any , HasSym),
@@ -57,7 +78,7 @@ public class Tree {
n_TypeDef = node("TypeDef" , None, DefSym),
n_Import = node("Import" , None, HasSym),
n_CaseDef = node("CaseDef" , None, NoSym),
- n_Template = node("Template" , None, HasSym), // !!! HasSym
+ n_Template = node("Template" , None, HasSym),
n_LabelDef = node("LabelDef" , Term, DefSym),
n_Block = node("Block" , Term, NoSym),
n_Tuple = node("Tuple" , Term, NoSym),
@@ -83,38 +104,7 @@ public class Tree {
n_CovariantType = node("CovariantType" , Type, NoSym);
public final TreeNode[] nodes;
-
- public final Type
- t_int = TreeType.INT,
- t_Object = TreeType.Reference(null, "Object"),
- t_Global = TreeType.Reference("scalac", "Global"),
- t_Unit = TreeType.Reference("scalac", "Unit"),
- t_TreeGen = TreeType.Reference("scalac.ast", "TreeGen"),
- t_Symbol = TreeType.Reference("scalac.symtab", "Symbol"),
- t_Type = TreeType.Reference("scalac.symtab", "Type"),
- t_Debug = TreeType.Reference("scalac.util", "Debug"),
- t_Name = TreeType.Name(Any),
- t_TypeName = TreeType.Name(Type),
- t_TermName = TreeType.Name(Term),
- t_TestName = TreeType.Name(Test),
- t_Names = TreeType.Array(t_Name),
- t_Tree = TreeType.Tree(Any),
- t_TypeTree = TreeType.Tree(Type),
- t_TermTree = TreeType.Tree(Term),
- t_Trees = TreeType.Array(t_Tree),
- t_TypeTrees = TreeType.Array(t_TypeTree),
- t_TermTrees = TreeType.Array(t_TermTree),
- t_Treess = TreeType.Array(t_Trees),
- t_ValDef = n_ValDef.getType(0),
- t_ValDefs = n_ValDef.getType(1),
- t_ValDefss = n_ValDef.getType(2),
- t_TypeDef = n_TypeDef.getType(0),
- t_TypeDefs = n_TypeDef.getType(1),
- t_Template = n_Template.getType(0),
- t_CaseDef = n_CaseDef.getType(0),
- t_CaseDefs = n_CaseDef.getType(1),
- t_Ident = n_Ident.getType(0),
- t_Idents = n_Ident.getType(1);
+ public int arrays;
//########################################################################
// Public Constructors
@@ -136,16 +126,16 @@ public class Tree {
setRange(Phase.PARSER, Phase.END).
addField(t_int, "mods", SymFlags).
addField(t_TypeName, "name", SymName).
- addField(t_TypeDefs, "tparams").
- addField(t_ValDefss, "vparams").
+ addField(n_TypeDef.getType(1), "tparams").
+ addField(n_ValDef.getType(2), "vparams").
addField(t_TypeTree, "tpe").
- addField(t_Template, "impl");
+ addField(n_Template.getType(0), "impl");
n_PackageDef.
setDescription("Package declaration").
setRange(Phase.PARSER, Phase.UNKNOWN).
addField(t_TermTree, "packaged").
- addField(t_Template, "impl");
+ addField(n_Template.getType(0), "impl");
n_ModuleDef.
setDescription("Module declaration").
@@ -153,7 +143,7 @@ public class Tree {
addField(t_int, "mods", SymFlags).
addField(t_TermName, "name", SymName).
addField(t_TypeTree, "tpe").
- addField(t_Template, "impl");
+ addField(n_Template.getType(0), "impl");
n_ValDef.
setDescription("Value declaration (var or let)").
@@ -176,8 +166,8 @@ public class Tree {
setRange(Phase.PARSER, Phase.END).
addField(t_int, "mods", SymFlags).
addField(t_TermName, "name", SymName).
- addField(t_TypeDefs, "tparams").
- addField(t_ValDefss, "vparams").
+ addField(n_TypeDef.getType(1), "tparams").
+ addField(n_ValDef.getType(2), "vparams").
addField(t_TypeTree, "tpe").
addField(t_TermTree, "rhs");
@@ -227,13 +217,13 @@ public class Tree {
n_Visitor.
setDescription("Visitor (a sequence of cases)").
setRange(Phase.PARSER, Phase.TRANSMATCH).
- addField(t_CaseDefs, "cases");
+ addField(n_CaseDef.getType(1), "cases");
n_Function.
setDescription("Anonymous function").
setRange(Phase.PARSER, Phase.ANALYZER).
- addField(t_ValDefs, "vparams").
+ addField(n_ValDef.getType(1), "vparams").
addField(t_TermTree, "body");
n_Assign.
@@ -252,7 +242,7 @@ public class Tree {
n_New.
setDescription("Instantiation").
setRange(Phase.PARSER, Phase.END).
- addField(t_Template, "templ");
+ addField(n_Template.getType(0), "templ");
n_Typed.
setDescription("Type annotation").
@@ -355,6 +345,22 @@ public class Tree {
}
//########################################################################
+ // Public Methods
+
+ public Type getType(int rank) {
+ return getType(rank, Any);
+ }
+
+ public Type getType(int rank, TreeKind kind) {
+ arrays = Math.max(arrays , rank);
+ return rank==0 ? TreeType.Tree(kind) : TreeType.Array(getType(rank-1));
+ }
+
+ public String getFormal(String name) {
+ return getType(0) + " " + name;
+ }
+
+ //########################################################################
// Private Methods
private TreeNode node(String name, TreeKind kind, TreeSymbol symbol) {