/** * creates a temporary variable. * * @param name defines the name * @param node defines the node * @param store defines if the toplevel argument of the stack should be stored * @return the index used for this temporary variable */ public int defineTemporaryVariable(String name, ClassNode node, boolean store) { Variable answer = defineVar(name,node,false); temporaryVariables.addFirst(answer); // TRICK: we add at the beginning so when we find for remove or get we always have the last one usedVariables.removeLast(); if (store) mv.visitVarInsn(ASTORE, currentVariableIndex); return answer.getIndex(); }
/** * creates a temporary variable. * * @param name defines the name * @param node defines the node * @param store defines if the toplevel argument of the stack should be stored * @return the index used for this temporary variable */ public int defineTemporaryVariable(String name, ClassNode node, boolean store) { Variable answer = defineVar(name,node,false); temporaryVariables.addFirst(answer); // TRICK: we add at the beginning so when we find for remove or get we always have the last one usedVariables.removeLast(); if (store) mv.visitVarInsn(ASTORE, currentVariableIndex); return answer.getIndex(); }
/** * creates a temporary variable. * * @param name defines the name * @param node defines the node * @param store defines if the toplevel argument of the stack should be stored * @return the index used for this temporary variable */ public int defineTemporaryVariable(String name, ClassNode node, boolean store) { Variable answer = defineVar(name,node,false); temporaryVariables.addFirst(answer); // TRICK: we add at the beginning so when we find for remove or get we always have the last one usedVariables.removeLast(); if (store) mv.visitVarInsn(ASTORE, currentVariableIndex); return answer.getIndex(); }
/** * 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; }