@Override public void visit(RaiseInstruction insn) { try { output.writeByte(20); output.writeShort(insn.getException().getIndex()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(MonitorEnterInstruction insn) { try { output.writeByte(39); output.writeShort(insn.getObjectRef().getIndex()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ConstructArrayInstruction insn) { try { output.writeByte(21); output.writeShort(insn.getReceiver().getIndex()); output.writeInt(symbolTable.lookup(insn.getItemType().toString())); output.writeShort(insn.getSize().getIndex()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ExitInstruction insn) { if (insn.getValueToReturn() != null) { escapingVars[insn.getValueToReturn().getIndex()] = true; } }
@Override public void visit(CastNumberInstruction insn) { try { output.writeByte(12); output.writeShort(insn.getReceiver().getIndex()); output.writeByte(insn.getSourceType().ordinal()); output.writeByte(insn.getTargetType().ordinal()); output.writeShort(insn.getValue().getIndex()); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ConstructInstruction insn) { try { output.writeByte(22); output.writeShort(insn.getReceiver().getIndex()); output.writeInt(symbolTable.lookup(insn.getType())); } catch (IOException e) { throw new IOExceptionWrapper(e); } }
@Override public void visit(ConstructMultiArrayInstruction insn) { for (int i = 0; i < insn.getDimensions().size(); ++i) { int a = map[insn.getDimensions().get(i).getIndex()]; insn.getDimensions().set(i, program.variableAt(a)); } }
@Override public void visit(ConstructArrayInstruction insn) { int a = map[insn.getSize().getIndex()]; insn.setSize(program.variableAt(a)); }
@Override public void visit(MonitorExitInstruction insn) { int val = map[insn.getObjectRef().getIndex()]; insn.setObjectRef(program.variableAt(val)); } };
@Override public void visit(ClassConstantInstruction insn) { queue.addLast(insn.getReceiver().getIndex()); queue.addLast(1); }
@Override public void visit(ConstructArrayInstruction insn) { queue.addLast(insn.getReceiver().getIndex()); queue.addLast(1); }
@Override public void visit(ExitInstruction insn) { ReturnStatement stmt = Statement.exitFunction(insn.getValueToReturn() != null ? Expr.var(insn.getValueToReturn().getIndex()) : null); stmt.setLocation(currentLocation); statements.add(stmt); }
@Override public void visit(MonitorExitInstruction insn) { MonitorExitStatement stmt = new MonitorExitStatement(); stmt.setLocation(currentLocation); stmt.setObjectRef(Expr.var(insn.getObjectRef().getIndex())); statements.add(stmt); } }
@Override public void visit(RaiseInstruction insn) { exceptions.add(insn.getException().getIndex()); exceptions.add(currentBlock.getIndex()); }
@Override public void visit(CastNumberInstruction insn) { PrimitiveCastExpr expr = new PrimitiveCastExpr(); expr.setSource(mapOperandType(insn.getSourceType())); expr.setTarget(mapOperandType(insn.getTargetType())); expr.setValue(Expr.var(insn.getValue().getIndex())); assign(expr, insn.getReceiver()); }