/** * Defines a new Variable using an AST variable. * @param initFromStack if true the last element of the * stack will be used to initilize * the new variable. If false null * will be used. */ public Variable defineVariable(org.codehaus.groovy.ast.Variable v, boolean initFromStack) { String name = v.getName(); Variable answer = defineVar(name,v.getType(),false); if (v.isClosureSharedVariable()) answer.setHolder(true); stackVariables.put(name, answer); Label startLabel = new Label(); answer.setStartLabel(startLabel); if (answer.isHolder()) { if (!initFromStack) mv.visitInsn(ACONST_NULL); createReference(answer); } else { if (!initFromStack) mv.visitInsn(ACONST_NULL); mv.visitVarInsn(ASTORE, currentVariableIndex); } mv.visitLabel(startLabel); return answer; }
/** * Defines a new Variable using an AST variable. * @param initFromStack if true the last element of the * stack will be used to initilize * the new variable. If false null * will be used. */ public Variable defineVariable(org.codehaus.groovy.ast.Variable v, boolean initFromStack) { String name = v.getName(); Variable answer = defineVar(name,v.getType(),false); if (v.isClosureSharedVariable()) answer.setHolder(true); stackVariables.put(name, answer); Label startLabel = new Label(); answer.setStartLabel(startLabel); if (answer.isHolder()) { if (!initFromStack) mv.visitInsn(ACONST_NULL); createReference(answer); } else { if (!initFromStack) mv.visitInsn(ACONST_NULL); mv.visitVarInsn(ASTORE, currentVariableIndex); } mv.visitLabel(startLabel); return answer; }
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; } }
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; } }
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; } }
/** * Defines a new Variable using an AST variable. * @param initFromStack if true the last element of the * stack will be used to initilize * the new variable. If false null * will be used. */ public Variable defineVariable(org.codehaus.groovy.ast.Variable v, boolean initFromStack) { String name = v.getName(); Variable answer = defineVar(name,v.getType(),false); if (v.isClosureSharedVariable()) answer.setHolder(true); stackVariables.put(name, answer); Label startLabel = new Label(); answer.setStartLabel(startLabel); if (answer.isHolder()) { if (!initFromStack) mv.visitInsn(ACONST_NULL); createReference(answer); } else { if (!initFromStack) mv.visitInsn(ACONST_NULL); mv.visitVarInsn(ASTORE, currentVariableIndex); } mv.visitLabel(startLabel); return answer; }