protected void atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup) throws CompileError CtField f = fieldAccess(left, false); boolean is_static = resultStatic; if (op != '=' && !is_static) if (op == '=') { FieldInfo finfo = f.getFieldInfo2(); setFieldType(finfo); AccessorMaker maker = isAccessibleField(f, finfo); if (maker == null) fi = addFieldrefInfo(f, finfo); else fi = 0; fi = atFieldRead(f, is_static); String cname = className; atAssignCore(expr, op, right, fType, fDim, cname); boolean is2w = is2word(fType, fDim); if (doDup) { int dup_code; atFieldAssignCore(f, is_static, fi, is2w);
protected void atFieldRead(ASTree expr) throws CompileError { CtField f = fieldAccess(expr, true); if (f == null) { atArrayLength(expr); return; } boolean is_static = resultStatic; ASTree cexpr = TypeChecker.getConstantFieldValue(f); if (cexpr == null) atFieldRead(f, is_static); else { cexpr.accept(this); setFieldType(f.getFieldInfo2()); } }
public void atCallExpr(CallExpr expr) throws CompileError { ASTree method = expr.oprand1(); if (method instanceof Member) { String name = ((Member)method).get(); if (procHandler != null && name.equals(proceedName)) { procHandler.doit(this, bytecode, (ASTList)expr.oprand2()); return; } else if (name.equals(cflowName)) { atCflow((ASTList)expr.oprand2()); return; } } super.atCallExpr(expr); }
protected void atFieldPlusPlus(int token, boolean isPost, ASTree oprand, Expr expr, boolean doDup) throws CompileError { CtField f = fieldAccess(oprand, false); boolean is_static = resultStatic; if (!is_static) bytecode.addOpcode(DUP); int fi = atFieldRead(f, is_static); int t = exprType; boolean is2w = is2word(t, arrayDim); int dup_code; if (is_static) dup_code = (is2w ? DUP2 : DUP); else dup_code = (is2w ? DUP2_X1 : DUP_X1); atPlusPlusCore(dup_code, doDup, token, isPost, expr); atFieldAssignCore(f, is_static, fi, is2w); }
int var = getMaxLocals(); incMaxLocals(1); while (catchList != null) { addFinally(jsrHook.jsrList, finallyBlock); patchGoto(gotoList, pcEnd); hasReturned = !tryNotReturn; if (finallyBlock != null) {
/** * Generates bytecode for reading a field value. * It returns a fieldref_info index or zero if the field is a private * one declared in an enclosing class. */ private int atFieldRead(CtField f, boolean isStatic) throws CompileError { FieldInfo finfo = f.getFieldInfo2(); boolean is2byte = setFieldType(finfo); AccessorMaker maker = isAccessibleField(f, finfo); if (maker != null) { MethodInfo minfo = maker.getFieldGetter(finfo, isStatic); bytecode.addInvokestatic(f.getDeclaringClass(), minfo.getName(), minfo.getDescriptor()); return 0; } else { int fi = addFieldrefInfo(f, finfo); if (isStatic) { bytecode.add(GETSTATIC); bytecode.growStack(is2byte ? 2 : 1); } else { bytecode.add(GETFIELD); bytecode.growStack(is2byte ? 1 : 0); } bytecode.addIndex(fi); return fi; } }
public void atMember(Member mem) throws CompileError { atFieldRead(mem); }
protected void atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup) throws CompileError { if (left instanceof Member && ((Member)left).get().equals(paramArrayName)) { if (op != '=') throw new CompileError("bad operator for " + paramArrayName); right.accept(this); if (arrayDim != 1 || exprType != CLASS) throw new CompileError("invalid type for " + paramArrayName); atAssignParamList(paramTypeList, bytecode); if (!doDup) bytecode.addOpcode(POP); } else super.atFieldAssign(expr, op, left, right, doDup); }
public void atCastExpr(CastExpr expr) throws CompileError { ASTList classname = expr.getClassName(); if (classname != null && expr.getArrayDim() == 0) { ASTree p = classname.head(); if (p instanceof Symbol && classname.tail() == null) { String typename = ((Symbol)p).get(); if (typename.equals(returnCastName)) { atCastToRtype(expr); return; } else if (typename.equals(wrapperCastName)) { atCastToWrapper(expr); return; } } } super.atCastExpr(expr); }
super.atMember(mem);
@Override protected void atFieldPlusPlus(int token, boolean isPost, ASTree oprand, Expr expr, boolean doDup) throws CompileError { CtField f = fieldAccess(oprand, false); boolean is_static = resultStatic; if (!is_static) bytecode.addOpcode(DUP); int fi = atFieldRead(f, is_static); int t = exprType; boolean is2w = is2word(t, arrayDim); int dup_code; if (is_static) dup_code = (is2w ? DUP2 : DUP); else dup_code = (is2w ? DUP2_X1 : DUP_X1); atPlusPlusCore(dup_code, doDup, token, isPost, expr); atFieldAssignCore(f, is_static, fi, is2w); }
int var = getMaxLocals(); incMaxLocals(1); while (catchList != null) { addFinally(jsrHook.jsrList, finallyBlock); patchGoto(gotoList, pcEnd); hasReturned = !tryNotReturn; if (finallyBlock != null) {
/** * Generates bytecode for reading a field value. * It returns a fieldref_info index or zero if the field is a private * one declared in an enclosing class. */ private int atFieldRead(CtField f, boolean isStatic) throws CompileError { FieldInfo finfo = f.getFieldInfo2(); boolean is2byte = setFieldType(finfo); AccessorMaker maker = isAccessibleField(f, finfo); if (maker != null) { MethodInfo minfo = maker.getFieldGetter(finfo, isStatic); bytecode.addInvokestatic(f.getDeclaringClass(), minfo.getName(), minfo.getDescriptor()); return 0; } int fi = addFieldrefInfo(f, finfo); if (isStatic) { bytecode.add(GETSTATIC); bytecode.growStack(is2byte ? 2 : 1); } else { bytecode.add(GETFIELD); bytecode.growStack(is2byte ? 1 : 0); } bytecode.addIndex(fi); return fi; }
@Override public void atMember(Member mem) throws CompileError { atFieldRead(mem); }
@Override protected void atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup) throws CompileError { if (left instanceof Member && ((Member)left).get().equals(paramArrayName)) { if (op != '=') throw new CompileError("bad operator for " + paramArrayName); right.accept(this); if (arrayDim != 1 || exprType != CLASS) throw new CompileError("invalid type for " + paramArrayName); atAssignParamList(paramTypeList, bytecode); if (!doDup) bytecode.addOpcode(POP); } else super.atFieldAssign(expr, op, left, right, doDup); }
@Override public void atCastExpr(CastExpr expr) throws CompileError { ASTList classname = expr.getClassName(); if (classname != null && expr.getArrayDim() == 0) { ASTree p = classname.head(); if (p instanceof Symbol && classname.tail() == null) { String typename = ((Symbol)p).get(); if (typename.equals(returnCastName)) { atCastToRtype(expr); return; } else if (typename.equals(wrapperCastName)) { atCastToWrapper(expr); return; } } } super.atCastExpr(expr); }
super.atMember(mem);
ASTree right, boolean doDup) throws CompileError CtField f = fieldAccess(left, false); boolean is_static = resultStatic; if (op != '=' && !is_static) if (op == '=') { FieldInfo finfo = f.getFieldInfo2(); setFieldType(finfo); AccessorMaker maker = isAccessibleField(f, finfo); if (maker == null) fi = addFieldrefInfo(f, finfo); else fi = 0; fi = atFieldRead(f, is_static); String cname = className; atAssignCore(expr, op, right, fType, fDim, cname); boolean is2w = is2word(fType, fDim); if (doDup) { int dup_code; atFieldAssignCore(f, is_static, fi, is2w);
protected void atFieldPlusPlus(int token, boolean isPost, ASTree oprand, Expr expr, boolean doDup) throws CompileError { CtField f = fieldAccess(oprand, false); boolean is_static = resultStatic; if (!is_static) bytecode.addOpcode(DUP); int fi = atFieldRead(f, is_static); int t = exprType; boolean is2w = is2word(t, arrayDim); int dup_code; if (is_static) dup_code = (is2w ? DUP2 : DUP); else dup_code = (is2w ? DUP2_X1 : DUP_X1); atPlusPlusCore(dup_code, doDup, token, isPost, expr); atFieldAssignCore(f, is_static, fi, is2w); }
@Override protected void atFieldRead(ASTree expr) throws CompileError { CtField f = fieldAccess(expr, true); if (f == null) { atArrayLength(expr); return; } boolean is_static = resultStatic; ASTree cexpr = TypeChecker.getConstantFieldValue(f); if (cexpr == null) atFieldRead(f, is_static); else { cexpr.accept(this); setFieldType(f.getFieldInfo2()); } }