@Override public void ifTrue(InstructionBuilder builder) { ifTrue.doBuild(builder); }
@Override public void ifTrue(InstructionBuilder builder) { ifTrue.doBuild(builder); }
@Override public void addDefault(InstructionBuilderCallback callback) { if (defaultAdded) throw new IllegalStateException("A SwitchBlock may only have one default block."); state.visitor.visitLabel(defaultLabel); callback.doBuild(builder); defaultAdded = true; } }
@Override public void addDefault(InstructionBuilderCallback callback) { if (defaultAdded) throw new IllegalStateException("A SwitchBlock may only have one default block."); state.visitor.visitLabel(defaultLabel); callback.doBuild(builder); defaultAdded = true; } }
@Override public void addCase(int caseValue, boolean jumpToEnd, InstructionBuilderCallback callback) { assert caseValue >= min; assert caseValue <= max; if (defaultAdded) throw new IllegalStateException("The default block must come last."); // TODO: Check that no case value is repeated state.visitor.visitLabel(caseLabels[caseValue - min]); callback.doBuild(builder); if (jumpToEnd) state.visitor.visitJumpInsn(GOTO, endSwitchLabel); }
@Override public void addCase(int caseValue, boolean jumpToEnd, InstructionBuilderCallback callback) { assert caseValue >= min; assert caseValue <= max; if (defaultAdded) throw new IllegalStateException("The default block must come last."); // TODO: Check that no case value is repeated state.visitor.visitLabel(caseLabels[caseValue - min]); callback.doBuild(builder); if (jumpToEnd) state.visitor.visitJumpInsn(GOTO, endSwitchLabel); }
public void doBuild(InstructionBuilder builder) { invokeNavigateMethod(builder); term.callback.doBuild(builder); boxIfPrimitive(builder, conduitPropertyType); builder.returnResult(); } });
void doCallback(InstructionBuilderCallback callback) { check(); if (callback != null) callback.doBuild(this); lock(); } }
@Override public void addTry(InstructionBuilderCallback callback) { state.visitor.visitLabel(startLabel); callback.doBuild(builder); state.visitor.visitLabel(endLabel); }
void doCallback(InstructionBuilderCallback callback) { check(); if (callback != null) callback.doBuild(this); lock(); } }
@Override public void addTry(InstructionBuilderCallback callback) { state.visitor.visitLabel(startLabel); callback.doBuild(builder); state.visitor.visitLabel(endLabel); }
private void doCatch(String exceptionInternalName, InstructionBuilderCallback callback) { check(); Label handler = state.newLabel(); callback.doBuild(builder); state.visitor.visitTryCatchBlock(startLabel, endLabel, handler, exceptionInternalName); }
public void doBuild(InstructionBuilder builder) { simpleTerm.callback.doBuild(builder); builder.dupe().when(Condition.NULL, new InstructionBuilderCallback() { public void doBuild(InstructionBuilder builder) { switch (nullHandling) { // It is necessary to load a null onto the stack (even if there's already one // there) because of the verifier. It sees the return when the stack contains an // intermediate value (along the navigation chain) and thinks the method is // returning a value of the wrong type. case ALLOW: builder.loadNull().returnResult(); case FORBID: builder.loadConstant(simpleTerm.description); builder.loadConstant(expression); builder.loadArgument(0); builder.invokeStatic(PropertyConduitSourceImpl.class, NullPointerException.class, "nullTerm", String.class, String.class, Object.class); builder.throwException(); break; } } }); } });
private void doCatch(String exceptionInternalName, InstructionBuilderCallback callback) { check(); Label handler = state.newLabel(); callback.doBuild(builder); state.visitor.visitTryCatchBlock(startLabel, endLabel, handler, exceptionInternalName); }
public void doBuild(InstructionBuilder builder) { builder.loadThis().loadArgument(0).invokeVirtual(getRootMethod); for (InstructionBuilderCallback callback : callbacks) { callback.doBuild(builder); } builder.returnResult(); } });