From: bdemsky Date: Wed, 25 Jul 2007 19:31:32 +0000 (+0000) Subject: changes and a bug fix X-Git-Tag: preEdgeChange~514 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=99765c020c0a00ee78467c17418c8bf851bb7a24;p=IRC.git changes and a bug fix --- diff --git a/Robust/src/ClassLibrary/Object.java b/Robust/src/ClassLibrary/Object.java index 6fbd8047..92971f66 100644 --- a/Robust/src/ClassLibrary/Object.java +++ b/Robust/src/ClassLibrary/Object.java @@ -1,6 +1,6 @@ public class Object { public native int nativehashCode(); - private int cachedCode; + private int cachedCode;//first field has to be a primitive private boolean cachedHash; /* DO NOT USE ANY OF THESE - THEY ARE FOR IMPLEMENTING TAGS */ diff --git a/Robust/src/ClassLibrary/ObjectJava.java b/Robust/src/ClassLibrary/ObjectJava.java index 82b1ef68..0ef8f296 100644 --- a/Robust/src/ClassLibrary/ObjectJava.java +++ b/Robust/src/ClassLibrary/ObjectJava.java @@ -1,5 +1,5 @@ public class Object { - public int cachedCode; + public int cachedCode; //first field has to be a primitive public boolean cachedHash; public native int nativehashCode(); diff --git a/Robust/src/ClassLibrary/ObjectJavaNT.java b/Robust/src/ClassLibrary/ObjectJavaNT.java index 57b50465..ef808ae9 100644 --- a/Robust/src/ClassLibrary/ObjectJavaNT.java +++ b/Robust/src/ClassLibrary/ObjectJavaNT.java @@ -1,8 +1,9 @@ public class Object { - public int cachedCode; + public int cachedCode; //first field has to be a primitive public boolean cachedHash; public native int nativehashCode(); + public Object foo; public int hashCode() { if (!cachedHash) { diff --git a/Robust/src/IR/FieldDescriptor.java b/Robust/src/IR/FieldDescriptor.java index 883147d8..a74e6917 100644 --- a/Robust/src/IR/FieldDescriptor.java +++ b/Robust/src/IR/FieldDescriptor.java @@ -10,23 +10,29 @@ import IR.Tree.ExpressionNode; public class FieldDescriptor extends Descriptor { - public static FieldDescriptor arrayLength=new FieldDescriptor(new Modifiers(Modifiers.PUBLIC|Modifiers.FINAL), new TypeDescriptor(TypeDescriptor.INT), "length", null); + public static FieldDescriptor arrayLength=new FieldDescriptor(new Modifiers(Modifiers.PUBLIC|Modifiers.FINAL), new TypeDescriptor(TypeDescriptor.INT), "length", null, false); protected Modifiers modifier; protected TypeDescriptor td; protected String identifier; protected ExpressionNode en; - - public FieldDescriptor(Modifiers m, TypeDescriptor t, String identifier, ExpressionNode e) { + private boolean isglobal; + + public FieldDescriptor(Modifiers m, TypeDescriptor t, String identifier, ExpressionNode e, boolean isglobal) { super(identifier); this.modifier=m; this.td=t; this.en=e; this.safename = "___" + name + "___"; this.uniqueid=count++; + this.isglobal=isglobal; if (en!=null) throw new Error("Field initializers not implemented"); } + public boolean isGlobal() { + return isglobal; + } + public TypeDescriptor getType() { return td; } diff --git a/Robust/src/IR/MethodDescriptor.java b/Robust/src/IR/MethodDescriptor.java index 2360aae9..79056252 100644 --- a/Robust/src/IR/MethodDescriptor.java +++ b/Robust/src/IR/MethodDescriptor.java @@ -18,7 +18,7 @@ public class MethodDescriptor extends Descriptor { protected SymbolTable paramtable; protected ClassDescriptor cd; protected VarDescriptor thisvd; - + protected boolean isglobal; public MethodDescriptor(Modifiers m, TypeDescriptor rt, String identifier) { super(identifier); @@ -54,7 +54,12 @@ public class MethodDescriptor extends Descriptor { } public MethodDescriptor(Modifiers m, String identifier) { + this(m, identifier, false); + } + + public MethodDescriptor(Modifiers m, String identifier, boolean isglobal) { super(identifier); + this.isglobal=isglobal; this.modifier=m; this.returntype=null; this.identifier=identifier; diff --git a/Robust/src/IR/Tree/AtomicNode.java b/Robust/src/IR/Tree/AtomicNode.java new file mode 100644 index 00000000..465bb2c4 --- /dev/null +++ b/Robust/src/IR/Tree/AtomicNode.java @@ -0,0 +1,20 @@ +package IR.Tree; + +public class AtomicNode extends BlockStatementNode { + BlockNode bn; + public AtomicNode(BlockNode bn) { + this.bn=bn; + } + + public String printNode(int indent) { + return printSpace(indent)+"atomic {\n"+bn.printNode(indent)+"\n"+printSpace(indent)+"}"; + } + + public BlockNode getBlockNode() { + return bn; + } + + public int kind() { + return Kind.AtomicNode; + } +} diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index 6fa0cd6e..5f17f23b 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -329,10 +329,10 @@ public class BuildIR { TypeDescriptor t=parseTypeDescriptor(tn); ParseNode vn=pn.getChild("variables").getChild("variable_declarators_list"); ParseNodeVector pnv=vn.getChildren(); + boolean isglobal=pn.getChild("global")!=null; + for(int i=0;i