start of new file
[IRC.git] / Robust / src / IR / Tree / BuildIR.java
index 5f17f23b48a873f82698d42bf4bbdc89fc1659af..3c9847d0729cf0c575e26ec9d75df633876ff636 100644 (file)
@@ -360,6 +360,7 @@ public class BuildIR {
                 isNode(pn,"comp_lte")||isNode(pn,"comp_gt")||
                 isNode(pn,"comp_gte")||isNode(pn,"leftshift")||
                 isNode(pn,"rightshift")||isNode(pn,"sub")||
+                isNode(pn,"urightshift")||isNode(pn,"sub")||
                 isNode(pn,"add")||isNode(pn,"mult")||
                 isNode(pn,"div")||isNode(pn,"mod")) {
            ParseNodeVector pnv=pn.getChildren();
@@ -369,7 +370,8 @@ public class BuildIR {
            return new OpNode(parseExpression(left),parseExpression(right),op);
        } else if (isNode(pn,"unaryplus")||
                   isNode(pn,"unaryminus")||
-                  isNode(pn,"not")) {
+                  isNode(pn,"not")||
+                  isNode(pn,"comp")) {
            ParseNode left=pn.getFirstChild();
            Operation op=new Operation(pn.getLabel());
            return new OpNode(parseExpression(left),op);
@@ -412,7 +414,7 @@ public class BuildIR {
            return con;
        } else if (isNode(pn,"createarray")) {
            //System.out.println(pn.PPrint(3,true));
-           boolean isglobal=pn.getChild("createarray")!=null;
+           boolean isglobal=pn.getChild("global")!=null;
            TypeDescriptor td=parseTypeDescriptor(pn);
            Vector args=parseDimExprs(pn);
            int num=0;
@@ -431,6 +433,9 @@ public class BuildIR {
        } else if (isNode(pn,"this")) {
            NameDescriptor nd=new NameDescriptor("this");
            return new NameNode(nd);
+       } else if (isNode(pn,"isavailable")) {
+           NameDescriptor nd=new NameDescriptor(pn.getTerminal());
+           return new OpNode(new NameNode(nd),null,new Operation(Operation.ISAVAILABLE));
        } else if (isNode(pn,"methodinvoke1")) {
            NameDescriptor nd=parseName(pn.getChild("name"));
            Vector args=parseArgumentList(pn);
@@ -537,7 +542,22 @@ public class BuildIR {
        ParseNode bodyn0=pn.getChild("body");
        ParseNode bodyn=bodyn0.getChild("constructor_body");
        cn.addMethod(md);
-       BlockNode bn=parseBlock(bodyn);
+       BlockNode bn=null;
+       if (bodyn!=null&&bodyn.getChild("block_statement_list")!=null)
+           bn=parseBlock(bodyn);
+       else
+           bn=new BlockNode();
+       if (bodyn!=null&&bodyn.getChild("superinvoke")!=null) {
+           ParseNode sin=bodyn.getChild("superinvoke");
+           NameDescriptor nd=new NameDescriptor("super");
+           Vector args=parseArgumentList(sin);
+           MethodInvokeNode min=new MethodInvokeNode(nd);
+           for(int i=0;i<args.size();i++) {
+               min.addArgument((ExpressionNode)args.get(i));
+           }
+           BlockExpressionNode ben=new BlockExpressionNode(min);
+           bn.addFirstBlockStatement(ben);
+       }
        state.addTreeCode(md,bn);
     }