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();
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);
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;
} 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);
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);
}