From: bdemsky Date: Thu, 16 Feb 2006 01:11:50 +0000 (+0000) Subject: Changes X-Git-Tag: preEdgeChange~977 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9b07221c820f886e2698c606a64238d0a9f44438;p=IRC.git Changes --- diff --git a/Robust/src/IR/Flat/FlatNode.java b/Robust/src/IR/Flat/FlatNode.java index 06a67977..b53eb433 100644 --- a/Robust/src/IR/Flat/FlatNode.java +++ b/Robust/src/IR/Flat/FlatNode.java @@ -1,8 +1,14 @@ package IR.Flat; +import java.util.Vector; public class FlatNode { + Vector next; + public String toString() { throw new Error(); } + public void addNext(FlatNode n) { + next.add(n); + } } diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index 701c92c2..1bd8067e 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -1,26 +1,52 @@ package IR; import IR.Tree.*; +import IR.Flat.*; +import IR.*; import java.util.*; public class State { public State(ParseNode parsetree) { globals=new SymbolTable(); this.parsetree=parsetree; - this.set=new HashSet(); + this.classset=new HashSet(); + this.treemethodmap=new Hashtable(); + this.flatmethodmap=new Hashtable(); } + public SymbolTable globals; public ParseNode parsetree; - public HashSet set; + public HashSet classset; + public Hashtable treemethodmap; + public Hashtable flatmethodmap; public static TypeDescriptor getTypeDescriptor(int t) { TypeDescriptor td=new TypeDescriptor(t); return td; } + public static TypeDescriptor getTypeDescriptor(NameDescriptor n) { TypeDescriptor td=new TypeDescriptor(n); return td; } - public void addClass(ClassNode tdn) { - set.add(tdn); + + public void addClass(ClassDescriptor tdn) { + classset.add(tdn); + } + + public BlockNode getMethodBody(MethodDescriptor md) { + return (BlockNode)treemethodmap.get(md); + + } + + public FlatMethod getMethodFlat(MethodDescriptor md) { + return (FlatMethod)flatmethodmap.get(md); + } + + public void addTreeCode(MethodDescriptor md, BlockNode bn) { + treemethodmap.put(md,bn); + } + + public void addFlatCode(MethodDescriptor md, FlatMethod bn) { + flatmethodmap.put(md,bn); } } diff --git a/Robust/src/IR/Tree/AssignmentNode.java b/Robust/src/IR/Tree/AssignmentNode.java index 7829b41f..f30ccb56 100644 --- a/Robust/src/IR/Tree/AssignmentNode.java +++ b/Robust/src/IR/Tree/AssignmentNode.java @@ -15,4 +15,8 @@ public class AssignmentNode extends ExpressionNode { public String printNode(int indent) { return left.printNode(indent)+" "+op.toString()+" "+right.printNode(indent); } + + public int kind() { + return Kind.AssignmentNode; + } } diff --git a/Robust/src/IR/Tree/BlockExpressionNode.java b/Robust/src/IR/Tree/BlockExpressionNode.java index ca725cff..9cfd9d29 100644 --- a/Robust/src/IR/Tree/BlockExpressionNode.java +++ b/Robust/src/IR/Tree/BlockExpressionNode.java @@ -9,4 +9,8 @@ class BlockExpressionNode extends BlockStatementNode { public String printNode(int indent) { return en.printNode(indent); } + + public int kind() { + return Kind.BlockExpressionNode; + } } diff --git a/Robust/src/IR/Tree/BlockNode.java b/Robust/src/IR/Tree/BlockNode.java index 6851ea89..94179eea 100644 --- a/Robust/src/IR/Tree/BlockNode.java +++ b/Robust/src/IR/Tree/BlockNode.java @@ -1,7 +1,7 @@ package IR.Tree; import java.util.Vector; -class BlockNode extends TreeNode { +public class BlockNode extends TreeNode { Vector blockstatements; int printStyle=0; public final static int NORMAL=0; @@ -15,10 +15,19 @@ class BlockNode extends TreeNode { public void addBlockStatement(BlockStatementNode bsn) { blockstatements.add(bsn); } + public void setStyle(int style) { printStyle=style; } + public int size() { + return blockstatements.size(); + } + + public BlockStatementNode get(int i) { + return (BlockStatementNode) blockstatements.get(i); + } + public String printNode(int indent) { if (printStyle==NORMAL) { String st="{\n"; @@ -56,4 +65,8 @@ class BlockNode extends TreeNode { return st; } else throw new Error(); } + + public int kind() { + return Kind.BlockNode; + } } diff --git a/Robust/src/IR/Tree/BlockStatementNode.java b/Robust/src/IR/Tree/BlockStatementNode.java index 23f9a03c..88981f8c 100644 --- a/Robust/src/IR/Tree/BlockStatementNode.java +++ b/Robust/src/IR/Tree/BlockStatementNode.java @@ -1,6 +1,6 @@ package IR.Tree; -class BlockStatementNode extends TreeNode { +public class BlockStatementNode extends TreeNode { public BlockStatementNode() { } diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index a937ef48..cba62390 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -21,15 +21,15 @@ public class BuildIR { ParseNode type_pn=pnv.elementAt(i); if (isEmpty(type_pn)) /* Skip the semicolon */ continue; - ClassNode cn=parseTypeDecl(type_pn); + ClassDescriptor cn=parseTypeDecl(type_pn); state.addClass(cn); } } } - public ClassNode parseTypeDecl(ParseNode pn) { + public ClassDescriptor parseTypeDecl(ParseNode pn) { if (isNode(pn, "class_declaration")) { - ClassNode cn=new ClassNode(); + ClassDescriptor cn=new ClassDescriptor(); cn.setName(pn.getChild("name").getTerminal()); if (!isEmpty(pn.getChild("super").getTerminal())) { /* parse superclass name */ @@ -40,7 +40,7 @@ public class BuildIR { } else throw new Error(); } - private void parseClassBody(ClassNode cn, ParseNode pn) { + private void parseClassBody(ClassDescriptor cn, ParseNode pn) { ParseNode decls=pn.getChild("class_body_declaration_list"); if (decls!=null) { ParseNodeVector pnv=decls.getChildren(); @@ -55,7 +55,7 @@ public class BuildIR { } } - private void parseClassMember(ClassNode cn, ParseNode pn) { + private void parseClassMember(ClassDescriptor cn, ParseNode pn) { ParseNode fieldnode=pn.getChild("field"); if (fieldnode!=null) { @@ -106,7 +106,7 @@ public class BuildIR { } - private void parseFieldDecl(ClassNode cn,ParseNode pn) { + private void parseFieldDecl(ClassDescriptor cn,ParseNode pn) { ParseNode mn=pn.getChild("modifier"); Modifiers m=parseModifiersList(mn); @@ -226,12 +226,13 @@ public class BuildIR { } - private void parseMethodDecl(ClassNode cn, ParseNode pn) { + private void parseMethodDecl(ClassDescriptor cn, ParseNode pn) { ParseNode headern=pn.getChild("method_header"); ParseNode bodyn=pn.getChild("body"); MethodDescriptor md=parseMethodHeader(headern); BlockNode bn=parseBlock(bodyn); - cn.addMethod(md,bn); + cn.addMethod(md); + state.addTreeCode(md,bn); } public BlockNode parseBlock(ParseNode pn) { diff --git a/Robust/src/IR/Tree/CastNode.java b/Robust/src/IR/Tree/CastNode.java index d9dc9276..e4f82ec4 100644 --- a/Robust/src/IR/Tree/CastNode.java +++ b/Robust/src/IR/Tree/CastNode.java @@ -24,4 +24,8 @@ public class CastNode extends ExpressionNode { else return "("+etd.printNode(indentlevel)+")"+exp.printNode(indentlevel); } + + public int kind() { + return Kind.CastNode; + } } diff --git a/Robust/src/IR/Tree/ClassNode.java b/Robust/src/IR/Tree/ClassNode.java deleted file mode 100644 index f01f8e09..00000000 --- a/Robust/src/IR/Tree/ClassNode.java +++ /dev/null @@ -1,64 +0,0 @@ -package IR.Tree; -import java.util.Vector; -import java.util.Hashtable; -import IR.FieldDescriptor; -import IR.MethodDescriptor; -import IR.NameDescriptor; - -public class ClassNode extends TreeNode { - ClassNode() { - classname=null; - superclass=null; - fields=new Vector(); - methods=new Vector(); - methodmap=new Hashtable(); - } - String classname; - NameDescriptor superclass; - Modifiers modifiers; - Vector fields; - Vector methods; - Hashtable methodmap; - - public String printNode(int indent) { - String st=modifiers.toString()+"class "+classname; - if (superclass!=null) - st+="extends "+superclass.toString(); - st+=" {\n"; - indent+=INDENT; - for(int i=0;i0) - st+="\n"; - - for(int i=0;i - * This is released under the terms of the GPL with NO WARRANTY. - * See the file COPYING for more details. - */ - public class Main { public static void main(String args[]) throws Exception { if (args.length<1) { @@ -28,6 +23,10 @@ public class Main { State state=new State(p); BuildIR bir=new BuildIR(state); bir.buildtree(); + + BuildFlat bf=new BuildFlat(state); + bf.buildflat(); + System.exit(l.numErrors()); } }