From: bdemsky Date: Wed, 1 Nov 2006 01:45:13 +0000 (+0000) Subject: Bug fixes... Flagexpression parsing was broken. X-Git-Tag: preEdgeChange~795 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3f7cf6113368be1e0bcd13a1c085468ec217bb4d;p=IRC.git Bug fixes... Flagexpression parsing was broken. --- diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index f73c58b4..0169d967 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -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()+";"); } diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index c7bdb918..d95ae91a 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -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); } diff --git a/Robust/src/IR/Tree/DNFFlag.java b/Robust/src/IR/Tree/DNFFlag.java index 679bdaee..98086887 100644 --- a/Robust/src/IR/Tree/DNFFlag.java +++ b/Robust/src/IR/Tree/DNFFlag.java @@ -84,7 +84,7 @@ public class DNFFlag { for(int i=0;i