consistency checking hooks added
authorbdemsky <bdemsky>
Thu, 31 Aug 2006 07:04:08 +0000 (07:04 +0000)
committerbdemsky <bdemsky>
Thu, 31 Aug 2006 07:04:08 +0000 (07:04 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Flat/BuildFlat.java
Robust/src/IR/Flat/FlatCheckNode.java
Robust/src/IR/Tree/BuildIR.java
Robust/src/IR/Tree/ConstraintCheck.java
Robust/src/IR/Tree/SemanticCheck.java
Robust/src/Parse/java14.cup

index 1dea8b46e2c872a85824d9dfc1d54b0fb64f0e84..94d6559754494a537a8391098c9846dc71d66cd1 100644 (file)
@@ -906,6 +906,9 @@ public class BuildCode {
        case FKind.FlatNop:
            output.println("/* nop */");
            return;
+       case FKind.FlatCheckNode:
+           generateFlatCheckNode(fm, (FlatCheckNode) fn, output);
+           return;
        case FKind.FlatFlagActionNode:
            generateFlatFlagActionNode(fm, (FlatFlagActionNode) fn, output);
            return;
@@ -914,6 +917,17 @@ public class BuildCode {
 
     }
 
+    private void generateFlatCheckNode(FlatMethod fm,  FlatCheckNode fcn, PrintWriter output) {
+       output.print(fcn.getSpec()+"(");
+       TempDescriptor[] temps=fcn.getTemps();
+       for(int i=0;i<temps.length;i++) {
+           if (i!=0)
+               output.print(", ");
+           output.print(generateTemp(fm, temps[i]));
+       }
+       output.println(");");
+    }
+
     private void generateFlatCall(FlatMethod fm, FlatCall fc, PrintWriter output) {
        MethodDescriptor md=fc.getMethod();
        ParamsObject objectparams=(ParamsObject) paramstable.get(md);
index 1828f9ddcf7d86967dc163918f0c0dc33624a3fb..f9c3c8e20cae1d22a412d2ee1f6589a90f193265 100644 (file)
@@ -742,10 +742,23 @@ public class BuildFlat {
 
     private NodePair flattenConstraintCheck(Vector ccs) {
        FlatNode begin=new FlatNop();
+       if (ccs==null)
+           return new NodePair(begin,begin);
        FlatNode last=begin;
        for(int i=0;i<ccs.size();i++) {
            ConstraintCheck cc=(ConstraintCheck) ccs.get(i);
-           FlatCheckNode fcn=new FlatCheckNode(getTempforVar(cc.getVar()), cc.getSpec());
+           /* Flatten the arguments */
+           TempDescriptor[] temps=new TempDescriptor[cc.numArgs()];        
+           for(int j=0;j<cc.numArgs();j++) {
+               ExpressionNode en=cc.getArg(j);
+               TempDescriptor td=TempDescriptor.tempFactory("arg",en.getType());
+               temps[j]=td;
+               NodePair np=flattenExpressionNode(en, td);
+               last.addNext(np.getBegin());
+               last=np.getEnd();
+           }
+           
+           FlatCheckNode fcn=new FlatCheckNode(cc.getSpec(), temps);
            last.addNext(fcn);
            last=fcn;
        }
index 146890c1841fe6042c997f5185435c4703d3e908..ce2f09af7bd6a42694ffe820158c240bab4f5ba9 100644 (file)
@@ -1,19 +1,27 @@
 package IR.Flat;
 
 public class FlatCheckNode extends FlatNode {
-    TempDescriptor td;
+    TempDescriptor [] temps;
     String spec;
 
-    public FlatCheckNode(TempDescriptor td, String spec) {
-       this.td=td;
+    public FlatCheckNode(String spec, TempDescriptor[] temps) {
        this.spec=spec;
+       this.temps=temps;
     }
 
     public int kind() {
         return FKind.FlatCheckNode;
     }
+
+    public String getSpec() {
+       return spec;
+    }
+
+    public TempDescriptor [] getTemps() {
+       return temps;
+    }
     
     public TempDescriptor [] readsTemps() {
-       return new TempDescriptor[] {td};
+       return temps;
     }
 }
index f59206f21d165dade1dc153f28e78b46866c4b45..e7bc15a75fa20e4ec29ddb1d34c84e0fc95a5954 100644 (file)
@@ -116,9 +116,12 @@ public class BuildIR {
 
     public ConstraintCheck parseConstraintCheck(ParseNode pn) {
        if (isNode(pn,"cons_check")) {
-           String varname=pn.getChild("name").getTerminal();
-           String specname=pn.getChild("spec").getTerminal();
-           ConstraintCheck cc=new ConstraintCheck(varname, specname);
+           String specname=pn.getChild("name").getChild("identifier").getTerminal();
+           Vector args=parseArgumentList(pn);
+           ConstraintCheck cc=new ConstraintCheck(specname);
+           for(int i=0;i<args.size();i++) {
+               cc.addArgument((ExpressionNode)args.get(i));
+           }
            return cc;
        } else throw new Error();
     }
index 3560e68ffd9e5f76383034d108a4035ba13938d6..a2cfca3d7ae289daa7bbbfcb61ce057b69d10910 100644 (file)
@@ -1,34 +1,40 @@
 package IR.Tree;
 
 import IR.*;
+import java.util.Vector;
 
 public class ConstraintCheck {
-    String varname;
     String specname;
-    VarDescriptor vd;
+    Vector args;
 
-    public ConstraintCheck(String varname, String specname) {
-       this.varname=varname;
+    public ConstraintCheck(String specname) {
        this.specname=specname;
+       args=new Vector();
     }
 
-    public void setVar(VarDescriptor vd) {
-       this.vd=vd;
+    public void addArgument(ExpressionNode en) {
+       args.add(en);
     }
 
-    public VarDescriptor getVar() {
-       return vd;
+    public String getSpec() {
+       return specname;
     }
 
-    public String getVarName() {
-       return varname;
+    public int numArgs() {
+       return args.size();
     }
 
-    public String getSpec() {
-       return specname;
+    public ExpressionNode getArg(int i) {
+       return (ExpressionNode) args.get(i);
     }
 
     public String printNode(int indent) {
-       return "assert "+varname+" "+specname;
+       String str="assert("+specname+"(";
+       for(int i=0;i<numArgs();i++) {
+           if (i>0)
+               str+=",";
+           str+=getArg(i).printNode(0);
+       }
+       return str+")";
     }
 }
index a4abfbd470638ffd2fa16a2815c14e1986d3bcac..eb1b5ec2a9cb962ca9daccdf9f1b0a5d6aa78500 100644 (file)
@@ -78,24 +78,16 @@ public class SemanticCheck {
        checkTypeDescriptor(fd.getType());
     }
 
-    public void checkConstraintCheck(TaskDescriptor td, Vector ccs) {
+    public void checkConstraintCheck(TaskDescriptor td, SymbolTable nametable, Vector ccs) {
        if (ccs==null)
            return; /* No constraint checks to check */
        for(int i=0;i<ccs.size();i++) {
            ConstraintCheck cc=(ConstraintCheck) ccs.get(i);
-           String varname=cc.getVarName();
-
-           //Make sure the variable is declared as a parameter to the task
-           VarDescriptor vd=(VarDescriptor)td.getParameterTable().get(varname);
-           if (vd==null)
-               throw new Error("Parameter "+varname+" in Constraint Check not declared");
-           cc.setVar(vd);
-
-           //Make sure it correspods to a class
-           TypeDescriptor type_d=vd.getType();
-           if (!type_d.isClass())
-               throw new Error("Cannot have non-object argument for flag_effect");
-
+           
+           for(int j=0;j<cc.numArgs();j++) {
+               ExpressionNode en=cc.getArg(j);
+               checkExpressionNode(td,nametable,en,null);
+           }
        }
     }
 
@@ -278,7 +270,7 @@ public class SemanticCheck {
        if (md instanceof MethodDescriptor)
            throw new Error("Illegal taskexit appears in Method: "+md.getSymbol());
        checkFlagEffects((TaskDescriptor)md, ten.getFlagEffects());
-       checkConstraintCheck((TaskDescriptor) md, ten.getChecks());
+       checkConstraintCheck((TaskDescriptor) md, nametable, ten.getChecks());
     }
 
     void checkIfStatementNode(Descriptor md, SymbolTable nametable, IfStatementNode isn) {
index f3e65f5fa76336f949c62012d58d7809fcc0ca01..f86471fbdc2bf9dc6737a50da9b0f70f319d0ee0 100644 (file)
@@ -337,10 +337,10 @@ cons_checks ::= cons_check:cc {:
                RESULT=ccs;
        :};
 
-cons_check ::= IDENTIFIER:id LBRACE IDENTIFIER:spec RBRACE {: 
+cons_check ::= IDENTIFIER:name LPAREN argument_list_opt:args RPAREN {: 
                ParseNode pn=new ParseNode("cons_check");
-               pn.addChild("name").addChild(id);
-               pn.addChild("spec").addChild(spec);
+               pn.addChild("name").addChild("identifier").addChild(name);
+               pn.addChild(args);
                RESULT=pn;
        :};