List of usage examples for org.objectweb.asm Opcodes IFEQ
int IFEQ
To view the source code for org.objectweb.asm Opcodes IFEQ.
Click Source Link
From source file:lucee.transformer.bytecode.op.OpBool.java
License:Open Source License
/** * * @see lucee.transformer.bytecode.expression.ExpressionBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter, int) */// w ww . j a v a2 s . c om public Type _writeOut(BytecodeContext bc, int mode) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); if (mode == MODE_REF) { _writeOut(bc, MODE_VALUE); adapter.invokeStatic(Types.CASTER, Methods.METHOD_TO_BOOLEAN_FROM_BOOLEAN); return Types.BOOLEAN; } Label doFalse = new Label(); Label end = new Label(); if (operation == AND) { left.writeOut(bc, MODE_VALUE); adapter.ifZCmp(Opcodes.IFEQ, doFalse); right.writeOut(bc, MODE_VALUE); adapter.ifZCmp(Opcodes.IFEQ, doFalse); adapter.push(true); adapter.visitJumpInsn(Opcodes.GOTO, end); adapter.visitLabel(doFalse); adapter.push(false); adapter.visitLabel(end); } if (operation == OR) { left.writeOut(bc, MODE_VALUE); adapter.ifZCmp(Opcodes.IFNE, doFalse); right.writeOut(bc, MODE_VALUE); adapter.ifZCmp(Opcodes.IFNE, doFalse); adapter.push(false); adapter.visitJumpInsn(Opcodes.GOTO, end); adapter.visitLabel(doFalse); adapter.push(true); adapter.visitLabel(end); } else if (operation == XOR) { left.writeOut(bc, MODE_VALUE); right.writeOut(bc, MODE_VALUE); adapter.visitInsn(Opcodes.IXOR); } else if (operation == EQV) { left.writeOut(bc, MODE_VALUE); right.writeOut(bc, MODE_VALUE); adapter.invokeStatic(Types.OPERATOR, Methods_Operator.OPERATOR_EQV_BV_BV); } else if (operation == IMP) { left.writeOut(bc, MODE_VALUE); right.writeOut(bc, MODE_VALUE); adapter.invokeStatic(Types.OPERATOR, Methods_Operator.OPERATOR_IMP_BV_BV); } return Types.BOOLEAN_VALUE; }
From source file:lucee.transformer.bytecode.op.OpContional.java
License:Open Source License
/** * * @see lucee.transformer.bytecode.expression.ExpressionBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter, int) */// w w w . ja v a 2 s . c o m public Type _writeOut(BytecodeContext bc, int mode) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); Label yes = new Label(); Label end = new Label(); // cont ExpressionUtil.visitLine(bc, cont.getStart()); cont.writeOut(bc, MODE_VALUE); ExpressionUtil.visitLine(bc, cont.getEnd()); adapter.visitJumpInsn(Opcodes.IFEQ, yes); // left ExpressionUtil.visitLine(bc, left.getStart()); left.writeOut(bc, MODE_REF); ExpressionUtil.visitLine(bc, left.getEnd()); adapter.visitJumpInsn(Opcodes.GOTO, end); // right ExpressionUtil.visitLine(bc, right.getStart()); adapter.visitLabel(yes); right.writeOut(bc, MODE_REF); ExpressionUtil.visitLine(bc, right.getEnd()); adapter.visitLabel(end); return Types.OBJECT; }
From source file:lucee.transformer.bytecode.op.OpElvis.java
License:Open Source License
public Type _writeOutPureDataMember(BytecodeContext bc, int mode) throws BytecodeException { // TODO use function isNull for this GeneratorAdapter adapter = bc.getAdapter(); Label yes = new Label(); Label end = new Label(); List<Member> members = left.getMembers(); // to array/* w w w .j a va 2s. c o m*/ Iterator<Member> it = members.iterator(); List<DataMember> list = new ArrayList<DataMember>(); while (it.hasNext()) { list.add((DataMember) it.next()); } DataMember[] arr = list.toArray(new DataMember[members.size()]); ExpressionUtil.visitLine(bc, left.getStart()); // public static boolean call(PageContext pc , double scope,String[] varNames) // pc adapter.loadArg(0); // scope adapter.push((double) left.getScope()); //varNames // all literal string? boolean allLiteral = true; for (int i = 0; i < arr.length; i++) { if (!(arr[i].getName() instanceof Literal)) allLiteral = false; } ArrayVisitor av = new ArrayVisitor(); if (!allLiteral) { // String Array av.visitBegin(adapter, Types.STRING, arr.length); for (int i = 0; i < arr.length; i++) { av.visitBeginItem(adapter, i); arr[i].getName().writeOut(bc, MODE_REF); av.visitEndItem(adapter); } } else { // Collection.Key Array av.visitBegin(adapter, Types.COLLECTION_KEY, arr.length); for (int i = 0; i < arr.length; i++) { av.visitBeginItem(adapter, i); Variable.registerKey(bc, arr[i].getName()); av.visitEndItem(adapter); } } av.visitEnd(); // allowNull //adapter.push(false); //ASMConstants.NULL(adapter); // call IsDefined.invoke adapter.invokeStatic(ELVIS, allLiteral ? INVOKE_KEY : INVOKE_STR); ExpressionUtil.visitLine(bc, left.getEnd()); adapter.visitJumpInsn(Opcodes.IFEQ, yes); // left ExpressionUtil.visitLine(bc, left.getStart()); left.writeOut(bc, MODE_REF); ExpressionUtil.visitLine(bc, left.getEnd()); adapter.visitJumpInsn(Opcodes.GOTO, end); // right ExpressionUtil.visitLine(bc, right.getStart()); adapter.visitLabel(yes); right.writeOut(bc, MODE_REF); ExpressionUtil.visitLine(bc, right.getEnd()); adapter.visitLabel(end); return Types.OBJECT; }
From source file:lucee.transformer.bytecode.op.OpNegate.java
License:Open Source License
/** * * @see lucee.transformer.bytecode.expression.ExpressionBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter, int) *//* w ww .ja v a 2 s . com*/ public Type _writeOut(BytecodeContext bc, int mode) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); if (mode == MODE_REF) { _writeOut(bc, MODE_VALUE); adapter.invokeStatic(Types.CASTER, Methods.METHOD_TO_BOOLEAN_FROM_BOOLEAN); return Types.BOOLEAN; } Label l1 = new Label(); Label l2 = new Label(); expr.writeOut(bc, MODE_VALUE); adapter.ifZCmp(Opcodes.IFEQ, l1); adapter.visitInsn(Opcodes.ICONST_0); adapter.visitJumpInsn(Opcodes.GOTO, l2); adapter.visitLabel(l1); adapter.visitInsn(Opcodes.ICONST_1); adapter.visitLabel(l2); return Types.BOOLEAN_VALUE; }
From source file:lucee.transformer.bytecode.statement.ForEach.java
License:Open Source License
@Override public void _writeOut(BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); final int it = adapter.newLocal(Types.ITERATOR); final int item = adapter.newLocal(Types.REFERENCE); //Value/* w ww . j a v a 2s . c om*/ // ForEachUtil.toIterator(value) value.writeOut(bc, Expression.MODE_REF); adapter.invokeStatic(FOR_EACH_UTIL, TO_ITERATOR); //adapter.invokeStatic(COLLECTION_UTIL, TO_ITERATOR); // Iterator it=... adapter.storeLocal(it); TryFinallyVisitor tfv = new TryFinallyVisitor(new OnFinally() { @Override public void _writeOut(BytecodeContext bc) throws BytecodeException { GeneratorAdapter a = bc.getAdapter(); //if(fcf!=null && fcf.getAfterFinalGOTOLabel()!=null)ASMUtil.visitLabel(a,fcf.getFinalEntryLabel()); a.loadLocal(it); a.invokeStatic(FOR_EACH_UTIL, RESET); /*if(fcf!=null){ Label l=fcf.getAfterFinalGOTOLabel(); if(l!=null)a.visitJumpInsn(Opcodes.GOTO, l); }*/ } }, getFlowControlFinal()); tfv.visitTryBegin(bc); // Key // new VariableReference(...) key.writeOut(bc, Expression.MODE_REF); // VariableReference item=... adapter.storeLocal(item); // while ExpressionUtil.visitLine(bc, getStart()); adapter.visitLabel(begin); // hasNext adapter.loadLocal(it); adapter.invokeInterface(Types.ITERATOR, HAS_NEXT); adapter.ifZCmp(Opcodes.IFEQ, end); // item.set(pc,it.next()); adapter.loadLocal(item); adapter.loadArg(0); adapter.loadLocal(it); adapter.invokeInterface(Types.ITERATOR, NEXT); adapter.invokeInterface(Types.REFERENCE, SET); adapter.pop(); // Body body.writeOut(bc); adapter.visitJumpInsn(Opcodes.GOTO, begin); adapter.visitLabel(end); tfv.visitTryEnd(bc); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeQuery(final TagGroup tag, BytecodeContext bc) throws BytecodeException { final GeneratorAdapter adapter = bc.getAdapter(); tag.setNumberIterator(adapter.newLocal(NUMBER_ITERATOR)); boolean isOutput = tag.getType() == TagGroup.TAG_OUTPUT; ParseBodyVisitor pbv = isOutput ? new ParseBodyVisitor() : null; if (isOutput) pbv.visitBegin(bc);//from w w w . ja v a2 s . c o m // Query query=pc.getQuery(@query); tag.setQuery(adapter.newLocal(Types.QUERY)); adapter.loadArg(0); Expression val = tag.getAttribute("query").getValue(); val.writeOut(bc, Expression.MODE_REF); if (val instanceof LitString) adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_QUERY_STRING); else adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_QUERY_OBJ); adapter.storeLocal(tag.getQuery()); tag.setPID(adapter.newLocal(Types.INT_VALUE)); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.storeLocal(tag.getPID()); // int startAt=query.getCurrentrow(); final int startAt = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GET_CURRENTROW_1); adapter.storeLocal(startAt); // if(query.getRecordcount()>0) { DecisionIntVisitor div = new DecisionIntVisitor(); div.visitBegin(); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(Types.QUERY, GET_RECORDCOUNT); div.visitGT(); adapter.push(0); div.visitEnd(bc); Label ifRecCount = new Label(); adapter.ifZCmp(Opcodes.IFEQ, ifRecCount); // startrow int from = adapter.newLocal(Types.INT_VALUE); Attribute attrStartRow = tag.getAttribute("startrow"); if (attrStartRow != null) { // NumberRange.range(@startrow,1) //attrStartRow.getValue().writeOut(bc, Expression.MODE_VALUE); CastInt.toExprInt(attrStartRow.getValue()).writeOut(bc, Expression.MODE_VALUE); //adapter.visitInsn(Opcodes.D2I); adapter.push(1); adapter.invokeStatic(Types.NUMBER_RANGE, RANGE); //adapter.visitInsn(Opcodes.D2I); } else { adapter.push(1); } adapter.storeLocal(from); // numberIterator adapter.loadLocal(from); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(Types.QUERY, GET_RECORDCOUNT); //adapter.visitInsn(Opcodes.I2D); Attribute attrMaxRow = tag.getAttribute("maxrows"); Attribute attrEndRow = tag.getAttribute("endrow"); if (attrMaxRow != null) { CastInt.toExprInt(attrMaxRow.getValue()).writeOut(bc, Expression.MODE_VALUE); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_MAX); } else if (attrEndRow != null) { CastInt.toExprInt(attrEndRow.getValue()).writeOut(bc, Expression.MODE_VALUE); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_END); } else { adapter.invokeStatic(NUMBER_ITERATOR, LOAD_2); } adapter.storeLocal(tag.getNumberIterator()); // Group Attribute attrGroup = tag.getAttribute("group"); Attribute attrGroupCS = tag.getAttribute("groupcasesensitive"); tag.setGroup(adapter.newLocal(Types.STRING)); final int groupCaseSensitive = adapter.newLocal(Types.BOOLEAN_VALUE); if (attrGroup != null) { attrGroup.getValue().writeOut(bc, Expression.MODE_REF); adapter.storeLocal(tag.getGroup()); if (attrGroupCS != null) attrGroupCS.getValue().writeOut(bc, Expression.MODE_VALUE); else adapter.push(false); adapter.storeLocal(groupCaseSensitive); } // pc.us().addQuery(query); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, US); adapter.loadLocal(tag.getQuery()); adapter.invokeInterface(UNDEFINED, ADD_QUERY); // current final int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(from); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(current); // Try TryFinallyVisitor tfv = new TryFinallyVisitor(new OnFinally() { public void _writeOut(BytecodeContext bc) { // query.reset(); // query.go(startAt); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(startAt); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, TagLoop.GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); adapter.pop(); // pc.us().removeQuery(); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, US); adapter.invokeInterface(UNDEFINED, REMOVE_QUERY); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); } }, null); tfv.visitTryBegin(bc); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadLocal(tag.getPID()); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); if (attrGroup != null) { // NumberIterator oldNi=numberIterator; int oldNi = adapter.newLocal(NUMBER_ITERATOR); adapter.loadLocal(tag.getNumberIterator()); adapter.storeLocal(oldNi); // numberIterator=NumberIterator.load(ni,query,group,grp_case); adapter.loadArg(0); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getGroup()); adapter.loadLocal(groupCaseSensitive); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_5); adapter.storeLocal(tag.getNumberIterator()); // current=oldNi.current(); adapter.loadLocal(oldNi); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); tag.getBody().writeOut(bc); //tmp(adapter,current); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); // numberIterator=oldNi; adapter.loadLocal(oldNi); adapter.storeLocal(tag.getNumberIterator()); } else { // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); tag.getBody().writeOut(bc); } // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); tfv.visitTryEnd(bc); adapter.visitLabel(ifRecCount); if (isOutput) pbv.visitEnd(bc); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeGroup(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); boolean isOutput = tag.getType() == TagGroup.TAG_OUTPUT; ParseBodyVisitor pbv = isOutput ? new ParseBodyVisitor() : null; if (isOutput) pbv.visitBegin(bc);// w w w . j ava2 s .c om // Group Attribute attrGroup = tag.getAttribute("group"); tag.setGroup(adapter.newLocal(Types.STRING)); attrGroup.getValue().writeOut(bc, Expression.MODE_REF); adapter.storeLocal(tag.getGroup()); // Group Case Sensitve Attribute attrGroupCS = tag.getAttribute("groupcasesensitive"); int groupCaseSensitive = adapter.newLocal(Types.BOOLEAN_VALUE); if (attrGroupCS != null) attrGroupCS.getValue().writeOut(bc, Expression.MODE_VALUE); else adapter.push(true); adapter.storeLocal(groupCaseSensitive); TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery()); //queryImpl = parent.getQueryImpl(); // current int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // NumberIterator oldNi=numberIterator; int oldNi = adapter.newLocal(NUMBER_ITERATOR); adapter.loadLocal(tag.getNumberIterator()); adapter.storeLocal(oldNi); // numberIterator=NumberIterator.load(ni,query,group,grp_case); adapter.loadArg(0); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getGroup()); adapter.loadLocal(groupCaseSensitive); adapter.invokeStatic(NUMBER_ITERATOR, LOAD_5); adapter.storeLocal(tag.getNumberIterator()); // current=oldNi.current(); adapter.loadLocal(oldNi); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); //tmp(adapter,current); // NumberIterator.release(ni); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeStatic(NUMBER_ITERATOR, REALEASE); // numberIterator=oldNi; adapter.loadLocal(oldNi); adapter.storeLocal(tag.getNumberIterator()); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT); */ wv.visitAfterBody(bc, tag.getEnd()); //query.go(ni.current(),pc.getId()) resetCurrentrow(adapter, tag, current); // ni.first(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, FIRST); adapter.pop(); if (isOutput) pbv.visitEnd(bc); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeInnerGroup(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery());//from w w w. ja va 2 s . c o m //queryImpl = parent.getQueryImpl(); int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // inner current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadArg(0); adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); /*OLD adapter.invokeInterface(Types.QUERY, TagLoop.GO_1); */ NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); resetCurrentrow(adapter, tag, current); // ni.first(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, FIRST); adapter.pop(); }
From source file:lucee.transformer.bytecode.statement.tag.TagGroupUtil.java
License:Open Source License
public static void writeOutTypeInnerQuery(TagGroup tag, BytecodeContext bc) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); //if(tr ue)return ; TagGroup parent = getParentTagGroupQuery(tag, tag.getType()); tag.setNumberIterator(parent.getNumberIterator()); tag.setQuery(parent.getQuery());// www .j av a 2 s.co m tag.setPID(parent.getPID()); //queryImpl = parent.getQueryImpl(); //int currentOuter=ni.current(); int current = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(current); // current int icurrent = adapter.newLocal(Types.INT_VALUE); adapter.loadLocal(current); adapter.push(1); adapter.visitInsn(Opcodes.ISUB); adapter.storeLocal(icurrent); WhileVisitor wv = new WhileVisitor(); if (tag instanceof TagLoop) ((TagLoop) tag).setLoopVisitor(wv); wv.visitBeforeExpression(bc); //while(ni.isValid()) { adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, IS_VALID_1); wv.visitAfterExpressionBeforeBody(bc); // if(!query.go(ni.current()))break; adapter.loadLocal(tag.getQuery()); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.loadLocal(tag.getPID()); adapter.invokeInterface(Types.QUERY, TagLoop.GO); NotVisitor.visitNot(bc); Label _if = new Label(); adapter.ifZCmp(Opcodes.IFEQ, _if); wv.visitBreak(bc); adapter.visitLabel(_if); // current=ni.current(); adapter.loadLocal(tag.getNumberIterator()); adapter.invokeVirtual(NUMBER_ITERATOR, CURRENT); adapter.storeLocal(icurrent); tag.getBody().writeOut(bc); // ni.setCurrent(current+1); /*adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(icurrent); adapter.push(1); adapter.visitInsn(Opcodes.IADD); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT);*/ wv.visitAfterBody(bc, tag.getEnd()); // ni.setCurrent(currentOuter); adapter.loadLocal(tag.getNumberIterator()); adapter.loadLocal(current); adapter.invokeVirtual(NUMBER_ITERATOR, SET_CURRENT); adapter.loadLocal(tag.getQuery()); adapter.loadLocal(current); adapter.loadLocal(tag.getPID()); //adapter.loadArg(0); //adapter.invokeVirtual(Types.PAGE_CONTEXT, GET_ID); adapter.invokeInterface(Types.QUERY, TagLoop.GO); adapter.pop(); //adapter.pop(); }
From source file:lucee.transformer.bytecode.statement.tag.TagIf.java
License:Open Source License
private static Label writeOutElseIfStart(BytecodeContext bc, Tag tag) throws BytecodeException { GeneratorAdapter adapter = bc.getAdapter(); ExprBoolean cont = CastBoolean.toExprBoolean(tag.getAttribute("condition").getValue()); Label endIf = new Label(); ExpressionUtil.visitLine(bc, tag.getStart()); cont.writeOut(bc, Expression.MODE_VALUE); adapter.ifZCmp(Opcodes.IFEQ, endIf); return endIf; }