From 96572884b2a1e0fd27c3b1d487f524de3f764e0b Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 10 Apr 2007 10:39:15 +0000 Subject: [PATCH] Beginning of support for tags Tags will let us group objects together and specify these groups in the task declaration --- Robust/src/IR/Flat/FKind.java | 1 + Robust/src/IR/TagDescriptor.java | 29 +++++++ Robust/src/IR/TagVarDescriptor.java | 45 +++++++++++ Robust/src/IR/TaskDescriptor.java | 19 ++++- Robust/src/IR/Tree/BuildIR.java | 65 ++++++++++++--- Robust/src/IR/Tree/FlagEffects.java | 14 ++++ Robust/src/IR/Tree/Kind.java | 1 + Robust/src/IR/Tree/SemanticCheck.java | 44 +++++++++- Robust/src/IR/Tree/TagDeclarationNode.java | 35 ++++++++ Robust/src/IR/Tree/TagEffect.java | 37 +++++++++ Robust/src/IR/Tree/TagExpressionList.java | 29 +++++++ Robust/src/Parse/java14.cup | 94 +++++++++++++++++++++- Robust/src/Runtime/DSTM/interface/Makefile | 4 +- Robust/src/designnotes | 20 +++++ 14 files changed, 416 insertions(+), 21 deletions(-) create mode 100644 Robust/src/IR/TagDescriptor.java create mode 100644 Robust/src/IR/TagVarDescriptor.java create mode 100644 Robust/src/IR/Tree/TagDeclarationNode.java create mode 100644 Robust/src/IR/Tree/TagEffect.java create mode 100644 Robust/src/IR/Tree/TagExpressionList.java diff --git a/Robust/src/IR/Flat/FKind.java b/Robust/src/IR/Flat/FKind.java index 264e5711..f89f1145 100644 --- a/Robust/src/IR/Flat/FKind.java +++ b/Robust/src/IR/Flat/FKind.java @@ -16,4 +16,5 @@ public class FKind { public static final int FlatFlagActionNode=13; public static final int FlatCheckNode=14; public static final int FlatBackEdge=15; + public static final int FlatTagActionNode=16; } diff --git a/Robust/src/IR/TagDescriptor.java b/Robust/src/IR/TagDescriptor.java new file mode 100644 index 00000000..4faa30f1 --- /dev/null +++ b/Robust/src/IR/TagDescriptor.java @@ -0,0 +1,29 @@ +package IR; + +/** + * Descriptor + * + * represents a symbol in the language (var name, function name, etc). + */ + +public class TagDescriptor extends Descriptor { + + public TagDescriptor(String identifier) { + super(identifier); + } + + public boolean equals(Object o) { + if (o instanceof TagDescriptor) { + TagDescriptor t=(TagDescriptor) o; + return getSymbol()==t.getSymbol(); + } else return false; + } + + public int hashCode() { + return getSymbol().hashCode(); + } + + public String toString() { + return "Tag "+getSymbol(); + } +} diff --git a/Robust/src/IR/TagVarDescriptor.java b/Robust/src/IR/TagVarDescriptor.java new file mode 100644 index 00000000..5e4613a2 --- /dev/null +++ b/Robust/src/IR/TagVarDescriptor.java @@ -0,0 +1,45 @@ +package IR; + +/** + * Descriptor + * + * represents a symbol in the language (var name, function name, etc). + */ + +public class TagVarDescriptor extends Descriptor { + + protected TagDescriptor td; + protected String identifier; + + public TagVarDescriptor(TagDescriptor t, String identifier) { + super(identifier); + this.td=t; + this.identifier=identifier; + this.safename = "___" + name + "___"; + this.uniqueid=count++; + } + + public String getName() { + return identifier; + } + + public TagDescriptor getTag() { + return td; + } + + public boolean equals(Object o) { + if (o instanceof TagVarDescriptor) { + TagVarDescriptor tvd=(TagVarDescriptor)o; + return tvd.identifier.equals(identifier)&&tvd.td.equals(td); + } + return false; + } + + public int hashCode() { + return identifier.hashCode()^td.hashcode(); + } + + public String toString() { + return td.toString()+" "+identifier; + } +} diff --git a/Robust/src/IR/TaskDescriptor.java b/Robust/src/IR/TaskDescriptor.java index 1ee16345..2e3d2deb 100644 --- a/Robust/src/IR/TaskDescriptor.java +++ b/Robust/src/IR/TaskDescriptor.java @@ -1,5 +1,6 @@ package IR; import IR.Tree.FlagExpressionNode; +import IR.Tree.TagExpressionList; import IR.Tree.FlagEffects; import java.util.Vector; import java.util.Hashtable; @@ -13,6 +14,7 @@ import IR.Tree.Modifiers; public class TaskDescriptor extends Descriptor { protected Hashtable flagstable; + protected Hashtable tagstable; protected Vector vfe; protected String identifier; protected Vector params; @@ -23,6 +25,7 @@ public class TaskDescriptor extends Descriptor { this.identifier=identifier; this.uniqueid=count++; flagstable=new Hashtable(); + tagstable=new Hashtable(); //BUGFIX - added initialization here params=new Vector(); paramtable=new SymbolTable(); } @@ -39,12 +42,22 @@ public class TaskDescriptor extends Descriptor { return paramtable; } - public void addParameter(TypeDescriptor type, String paramname, FlagExpressionNode fen) { + public void addParameter(TypeDescriptor type, String paramname, FlagExpressionNode fen, TagExpressionList tel) { if (paramname.equals("this")) throw new Error("Can't have parameter named this"); VarDescriptor vd=new VarDescriptor(type, paramname); params.add(vd); flagstable.put(vd, fen); + if (tel!=null) {//BUGFIX - added null check here...test with any bristlecone program + tagstable.put(vd, tel); + for(int i=0;i from R +add to R + +Allow addition of new tuples in object allocation +add to R ------------------------------------------------------------------------------ -- 2.34.1