public void load(Variable v) { load(v.getType(), v.getIndex()); }
public void load(Variable v) { load(v.getType(), v.getIndex()); }
public void load(Variable v) { load(v.getType(), v.getIndex()); }
/** * load the value of the variable on the operand stack. unbox it if it's a reference * * @param variable */ public void loadVar(Variable variable) { int index = variable.getIndex(); if (variable.isHolder()) { mv.visitVarInsn(ALOAD, index); mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "get", "()Ljava/lang/Object;"); } else { load(variable); if (variable != Variable.THIS_VARIABLE && variable != Variable.SUPER_VARIABLE) { box(variable.getType()); } } }
/** * load the value of the variable on the operand stack. unbox it if it's a reference * * @param variable */ public void loadVar(Variable variable) { int index = variable.getIndex(); if (variable.isHolder()) { mv.visitVarInsn(ALOAD, index); mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "get", "()Ljava/lang/Object;"); } else { load(variable); if (variable != Variable.THIS_VARIABLE && variable != Variable.SUPER_VARIABLE) { box(variable.getType()); } } }
public void visit(MethodVisitor mv) { final BytecodeHelper helper = new BytecodeHelper(mv); if (field.isStatic()) { helper.load(field.getType(), 0); mv.visitFieldInsn(PUTSTATIC, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType())); } else { mv.visitVarInsn(ALOAD, 0); helper.load(field.getType(), 1); mv.visitFieldInsn(PUTFIELD, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType())); } mv.visitInsn(RETURN); } });
public void visit(MethodVisitor mv) { final BytecodeHelper helper = new BytecodeHelper(mv); if (field.isStatic()) { helper.load(field.getType(), 0); mv.visitFieldInsn(PUTSTATIC, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType())); } else { mv.visitVarInsn(ALOAD, 0); helper.load(field.getType(), 1); mv.visitFieldInsn(PUTFIELD, BytecodeHelper.getClassInternalName(classNode), field.getName(), BytecodeHelper.getTypeDescription(field.getType())); } mv.visitInsn(RETURN); } });
private void defineMethodVariables(Parameter[] paras,boolean isInStaticContext) { Label startLabel = new Label(); thisStartLabel = startLabel; mv.visitLabel(startLabel); makeLocalVariablesOffset(paras,isInStaticContext); boolean hasHolder = false; for (int i = 0; i < paras.length; i++) { String name = paras[i].getName(); Variable answer; ClassNode type = paras[i].getType(); if (paras[i].isClosureSharedVariable()) { answer = defineVar(name, type, true); helper.load(type,currentVariableIndex); helper.box(type); createReference(answer); hasHolder = true; } else { answer = defineVar(name,type,false); } answer.setStartLabel(startLabel); stackVariables.put(name, answer); } if (hasHolder) { nextVariableIndex = localVariableOffset; } }
for (int i = 0; i < parameters.length; i++) { ClassNode type = parameters[i].getType(); helper.load(parameters[i].getType(), newRegister);
for (int i = 0; i < parameters.length; i++) { ClassNode type = parameters[i].getType(); helper.load(parameters[i].getType(), newRegister);
private void defineMethodVariables(Parameter[] paras,boolean isInStaticContext) { Label startLabel = new Label(); thisStartLabel = startLabel; mv.visitLabel(startLabel); makeLocalVariablesOffset(paras,isInStaticContext); boolean hasHolder = false; for (int i = 0; i < paras.length; i++) { String name = paras[i].getName(); Variable answer; ClassNode type = paras[i].getType(); if (paras[i].isClosureSharedVariable()) { answer = defineVar(name, type, true); helper.load(type,currentVariableIndex); helper.box(type); createReference(answer); hasHolder = true; } else { answer = defineVar(name,type,false); } answer.setStartLabel(startLabel); stackVariables.put(name, answer); } if (hasHolder) { nextVariableIndex = localVariableOffset; } }
/** * load the value of the variable on the operand stack. unbox it if it's a reference * * @param variable */ public void loadVar(Variable variable) { int index = variable.getIndex(); if (variable.isHolder()) { mv.visitVarInsn(ALOAD, index); mv.visitMethodInsn(INVOKEVIRTUAL, "groovy/lang/Reference", "get", "()Ljava/lang/Object;"); } else { load(variable); if (variable != Variable.THIS_VARIABLE && variable != Variable.SUPER_VARIABLE) { box(variable.getType()); } } }
public void visit(MethodVisitor mv) { BytecodeHelper helper = new BytecodeHelper(mv); mv.visitVarInsn(ALOAD,0); Parameter[] para = oldMethod.getParameters(); Parameter[] goal = overridingMethod.getParameters(); for (int i = 0; i < para.length; i++) { helper.load(para[i].getType(), i+1); if (!para[i].getType().equals(goal[i].getType())) { helper.doCast(goal[i].getType()); } } mv.visitMethodInsn( INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(classNode), overridingMethod.getName(), BytecodeHelper.getMethodDescriptor(overridingMethod.getReturnType(), overridingMethod.getParameters())); helper.doReturn(oldMethod.getReturnType()); } }
public void visit(MethodVisitor mv) { BytecodeHelper helper = new BytecodeHelper(mv); mv.visitVarInsn(ALOAD,0); Parameter[] para = oldMethod.getParameters(); Parameter[] goal = overridingMethod.getParameters(); for (int i = 0; i < para.length; i++) { helper.load(para[i].getType(), i+1); if (!para[i].getType().equals(goal[i].getType())) { helper.doCast(goal[i].getType()); } } mv.visitMethodInsn( INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(classNode), overridingMethod.getName(), BytecodeHelper.getMethodDescriptor(overridingMethod.getReturnType(), overridingMethod.getParameters())); helper.doReturn(oldMethod.getReturnType()); } }
private void defineMethodVariables(Parameter[] paras,boolean isInStaticContext) { Label startLabel = new Label(); thisStartLabel = startLabel; mv.visitLabel(startLabel); makeLocalVariablesOffset(paras,isInStaticContext); boolean hasHolder = false; for (int i = 0; i < paras.length; i++) { String name = paras[i].getName(); Variable answer; ClassNode type = paras[i].getType(); if (paras[i].isClosureSharedVariable()) { answer = defineVar(name, type, true); helper.load(type,currentVariableIndex); helper.box(type); createReference(answer); hasHolder = true; } else { answer = defineVar(name,type,false); } answer.setStartLabel(startLabel); stackVariables.put(name, answer); } if (hasHolder) { nextVariableIndex = localVariableOffset; } }
for (int i = 0; i < parameters.length; i++) { ClassNode type = parameters[i].getType(); helper.load(parameters[i].getType(), newRegister);
helper.load(ClassHelper.OBJECT_TYPE, returnValueIdx);
helper.load(ClassHelper.OBJECT_TYPE, returnValueIdx);
public void visit(MethodVisitor mv) { BytecodeHelper helper = new BytecodeHelper(mv); mv.visitVarInsn(ALOAD,0); Parameter[] para = oldMethod.getParameters(); Parameter[] goal = overridingMethod.getParameters(); for (int i = 0; i < para.length; i++) { helper.load(para[i].getType(), i+1); if (!para[i].getType().equals(goal[i].getType())) { helper.doCast(goal[i].getType()); } } mv.visitMethodInsn( INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(classNode), overridingMethod.getName(), BytecodeHelper.getMethodDescriptor(overridingMethod.getReturnType(), overridingMethod.getParameters())); helper.doReturn(oldMethod.getReturnType()); } }
helper.load(ClassHelper.OBJECT_TYPE, returnValueIdx);