Bug fixes... Flagexpression parsing was broken.
authorbdemsky <bdemsky>
Wed, 1 Nov 2006 01:45:13 +0000 (01:45 +0000)
committerbdemsky <bdemsky>
Wed, 1 Nov 2006 01:45:13 +0000 (01:45 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Tree/BuildIR.java
Robust/src/IR/Tree/DNFFlag.java
Robust/src/IR/Tree/DNFFlagAtom.java
Robust/src/IR/Tree/FlagNode.java
Robust/src/IR/Tree/SemanticCheck.java

index f73c58b4b23252b24b7b65416bb1981ed951dce4..0169d96752f2fafd53bc5b828b1fcc30ab7e136d 100644 (file)
@@ -1177,7 +1177,8 @@ public class BuildCode {
            else
                output.println(generateTemp(fm, fln.getDst())+"=0;");
        } else if (fln.getType().isChar()) {
-           output.println(generateTemp(fm, fln.getDst())+"='"+fln.getValue()+"';");
+           String st=FlatLiteralNode.escapeString(fln.getValue().toString());
+           output.println(generateTemp(fm, fln.getDst())+"='"+st+"';");
        } else
            output.println(generateTemp(fm, fln.getDst())+"="+fln.getValue()+";");
     }
index c7bdb9189be4e43886e8590ee40de20962dfd1fc..d95ae91a467d4799dd341a8bea4e43d8e196e7a6 100644 (file)
@@ -83,24 +83,26 @@ public class BuildIR {
     }
 
     public FlagExpressionNode parseFlagExpression(ParseNode pn) {
-       if (pn.getChild("or")!=null) {
-           ParseNodeVector pnv=pn.getChild("or").getChildren();
+       if (isNode(pn,"or")) {
+           ParseNodeVector pnv=pn.getChildren();
            ParseNode left=pnv.elementAt(0);
            ParseNode right=pnv.elementAt(1);
            return new FlagOpNode(parseFlagExpression(left), parseFlagExpression(right), new Operation(Operation.LOGIC_OR));
-       } else if (pn.getChild("and")!=null) {
-           ParseNodeVector pnv=pn.getChild("and").getChildren();
+       } else if (isNode(pn,"and")) {
+           ParseNodeVector pnv=pn.getChildren();
            ParseNode left=pnv.elementAt(0);
            ParseNode right=pnv.elementAt(1);
            return new FlagOpNode(parseFlagExpression(left), parseFlagExpression(right), new Operation(Operation.LOGIC_AND));
-       } else if (pn.getChild("not")!=null) {
-           ParseNodeVector pnv=pn.getChild("not").getChildren();
+       } else if (isNode(pn, "not")) {
+           ParseNodeVector pnv=pn.getChildren();
            ParseNode left=pnv.elementAt(0);
            return new FlagOpNode(parseFlagExpression(left), new Operation(Operation.LOGIC_NOT));           
 
-       } else if (pn.getChild("name")!=null) {
-           return new FlagNode(pn.getChild("name").getTerminal());
-       } else throw new Error();
+       } else if (isNode(pn,"name")) {
+           return new FlagNode(pn.getTerminal());
+       } else {
+           throw new Error();
+       }
     }
 
     public Vector parseChecks(ParseNode pn) {
@@ -142,7 +144,7 @@ public class BuildIR {
                 tmp=tmp.getChild("array");
             }
             String paramname=tmp.getChild("single").getTerminal();
-            FlagExpressionNode fen=parseFlagExpression(paramn.getChild("flag"));
+            FlagExpressionNode fen=parseFlagExpression(paramn.getChild("flag").getFirstChild());
             
             td.addParameter(type,paramname,fen);
         }
index 679bdaee7c5b8b15d43aac3bae1377b182fc7ab9..980868876a3f6a9a1a666ef34c7453a8168efe89 100644 (file)
@@ -84,7 +84,7 @@ public class DNFFlag {
        for(int i=0;i<conjunctions.size();i++) {
            for(int i2=0;i2<dnf2.conjunctions.size();i2++) {
                Vector conjunct=(Vector)conjunctions.get(i);
-               Vector conjunct2=(Vector)conjunctions.get(i2);
+               Vector conjunct2=(Vector)dnf2.conjunctions.get(i2);
                Vector newconjunct=new Vector();
                result.conjunctions.add(newconjunct);
                for(int j=0;j<conjunct.size();j++) {
@@ -97,4 +97,19 @@ public class DNFFlag {
        }
        return result;
     }
+
+    public String toString() {
+       String value="";
+       for(int i=0;i<conjunctions.size();i++) {
+           if (i!=0)
+               value+=" || ";
+           Vector conjunct=(Vector)conjunctions.get(i);
+           for(int j=0;j<conjunct.size();j++) {
+               if (j!=0)
+                   value+="&&";
+               value+=conjunct.get(j);
+           }
+       }
+       return value;
+    }
 }
index 09983029d37d0c53ac0b50a9da0d064f4de4b27c..7055720086e15fe839a3608b0ce994988902a70e 100644 (file)
@@ -22,4 +22,11 @@ public class DNFFlagAtom {
     public boolean getNegated() {
        return negated;
     }
+
+    public String toString() {
+       if (negated)
+           return "!"+flag.toString();
+       else
+           return flag.toString();
+    }
 }
index 68f2b2b46606abd667d4bc4b3b2bc7fd6dde3ca6..8e12b0590d5054b5e3dc9512764f8776ad6a5197 100644 (file)
@@ -34,4 +34,8 @@ public class FlagNode extends FlagExpressionNode {
     public DNFFlag getDNF() {
        return new DNFFlag(this);
     }
+
+    public String toString() {
+       return name;
+    }
 }
index 00c89724d2e96c0e6f23c8ea4dbc90a6c0db32fe..c0040f51cf24f1075fdbe4e6b83a265c1cafca41 100644 (file)
@@ -624,7 +624,7 @@ public class SemanticCheck {
            throw new Error("Unknown method call to "+min.getMethodName()+"in task"+md.getSymbol());
        }
        if (!typetolookin.isClass()) 
-           throw new Error();
+           throw new Error("Error with method call to "+min.getMethodName());
        ClassDescriptor classtolookin=typetolookin.getClassDesc();
        System.out.println("Method name="+min.getMethodName());
        Set methoddescriptorset=classtolookin.getMethodTable().getSet(min.getMethodName());