(GeneratorAdapter gen, LocalBinding lb, boolean clear)
| 5665 | } |
| 5666 | |
| 5667 | private void emitLocal(GeneratorAdapter gen, LocalBinding lb, boolean clear){ |
| 5668 | if(closes.containsKey(lb)) |
| 5669 | { |
| 5670 | Class primc = lb.getPrimitiveType(); |
| 5671 | gen.loadThis(); |
| 5672 | if(primc != null) |
| 5673 | { |
| 5674 | gen.getField(objtype, lb.name, Type.getType(primc)); |
| 5675 | HostExpr.emitBoxReturn(this, gen, primc); |
| 5676 | } |
| 5677 | else |
| 5678 | { |
| 5679 | gen.getField(objtype, lb.name, OBJECT_TYPE); |
| 5680 | if(onceOnly && clear && lb.canBeCleared) |
| 5681 | { |
| 5682 | gen.loadThis(); |
| 5683 | gen.visitInsn(Opcodes.ACONST_NULL); |
| 5684 | gen.putField(objtype, lb.name, OBJECT_TYPE); |
| 5685 | } |
| 5686 | } |
| 5687 | } |
| 5688 | else |
| 5689 | { |
| 5690 | int argoff = canBeDirect ?0:1; |
| 5691 | Class primc = lb.getPrimitiveType(); |
| 5692 | // String rep = lb.sym.name + " " + lb.toString().substring(lb.toString().lastIndexOf('@')); |
| 5693 | if(lb.isArg) |
| 5694 | { |
| 5695 | gen.loadArg(lb.idx-argoff); |
| 5696 | if(primc != null) |
| 5697 | HostExpr.emitBoxReturn(this, gen, primc); |
| 5698 | else |
| 5699 | { |
| 5700 | if(clear && lb.canBeCleared) |
| 5701 | { |
| 5702 | // System.out.println("clear: " + rep); |
| 5703 | gen.visitInsn(Opcodes.ACONST_NULL); |
| 5704 | gen.storeArg(lb.idx - argoff); |
| 5705 | } |
| 5706 | else |
| 5707 | { |
| 5708 | // System.out.println("use: " + rep); |
| 5709 | } |
| 5710 | } |
| 5711 | } |
| 5712 | else |
| 5713 | { |
| 5714 | if(primc != null) |
| 5715 | { |
| 5716 | gen.visitVarInsn(Type.getType(primc).getOpcode(Opcodes.ILOAD), lb.idx); |
| 5717 | HostExpr.emitBoxReturn(this, gen, primc); |
| 5718 | } |
| 5719 | else |
| 5720 | { |
| 5721 | gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ILOAD), lb.idx); |
| 5722 | if(clear && lb.canBeCleared) |
| 5723 | { |
| 5724 | // System.out.println("clear: " + rep); |
no test coverage detected