public VarAccessType getVarAccessType(String varName) { Parameter param = getParam(varName); if (param != null) { return new ParameterAccessType(param); } else { Field field = type.getField(varName); if (field!=null) { return new FieldAccessType(field); } else { LocalVarContext localVarContext; if (!localVars.containsKey(varName)) { throw new RuntimeException("can not access " + varName + " in parameters, local variables or fields"); } else { localVarContext = localVars.get(varName); } return new LocalVariableAccessType(varName, localVarContext.getIndex(), localVarContext.getType()); } } }
public void visit(FieldAccessType fieldAccessType) { Field field = fieldAccessType.getField(); if (field.isStatic()) { methodByteCodeContext.addInstruction( new FieldInsnNode(GETSTATIC, methodContext.getType().getClassIdentifier(), getExpression.getFieldName(), field.getSignature()), "get static field", getExpression.getFieldName()); } else { methodByteCodeContext.loadThis("get field", getExpression.getFieldName(), "on this"); methodByteCodeContext.addInstruction( new FieldInsnNode(GETFIELD, methodContext.getType().getClassIdentifier(), getExpression.getFieldName(), field.getSignature()), "get field", getExpression.getFieldName()); } lastExpressionType = field.getType(); } public void visit(ParameterAccessType parameterAccessType) {
public void visit(FieldAccessType fieldAccessType) { Field field = fieldAccessType.getField(); if (field.isStatic()) { Type expressionType = evalExp(); methodByteCodeContext.handleConversion(expressionType, field.getType()); methodByteCodeContext.addInstruction(new FieldInsnNode(PUTSTATIC, methodContext.getClassIdentifier(), field.getName(), field.getSignature()), "set static", setStatement.getTo()); } else { methodByteCodeContext.loadThis("set", setStatement.getTo()); Type expressionType = evalExp(); methodByteCodeContext.handleConversion(expressionType, field.getType()); methodByteCodeContext.addInstruction(new FieldInsnNode(PUTFIELD, methodContext.getClassIdentifier(), field.getName(), field.getSignature()), "set", setStatement.getTo()); } } public void visit(LocalVariableAccessType localVariableAccessType) {