Skip to content

Commit

Permalink
clj-734: fixed the local variables table to have the correct code ind…
Browse files Browse the repository at this point in the history
…ex for let bindings; this allows jdi based debuggers to have access to the locals while still in the let bindings

Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
  • Loading branch information
George Jahad authored and stuarthalloway committed Mar 11, 2011
1 parent 83a5aaf commit 2bc1c14
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/jvm/clojure/lang/Compiler.java
Expand Up @@ -5755,6 +5755,7 @@ public void emitUnboxed(C context, ObjExpr objx, GeneratorAdapter gen){


public void doEmit(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUnboxed){
HashMap<BindingInit, Label> bindingLabels = new HashMap();
for(int i = 0; i < bindingInits.count(); i++)
{
BindingInit bi = (BindingInit) bindingInits.nth(i);
Expand All @@ -5769,6 +5770,7 @@ public void doEmit(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUn
bi.init.emit(C.EXPRESSION, objx, gen);
gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ISTORE), bi.binding.idx);
}
bindingLabels.put(bi, gen.mark());
}
Label loopLabel = gen.mark();
if(isLoop)
Expand Down Expand Up @@ -5803,10 +5805,10 @@ public void doEmit(C context, ObjExpr objx, GeneratorAdapter gen, boolean emitUn
lname += RT.nextID();
Class primc = maybePrimitiveType(bi.init);
if(primc != null)
gen.visitLocalVariable(lname, Type.getDescriptor(primc), null, loopLabel, end,
gen.visitLocalVariable(lname, Type.getDescriptor(primc), null, bindingLabels.get(bi), end,
bi.binding.idx);
else
gen.visitLocalVariable(lname, "Ljava/lang/Object;", null, loopLabel, end, bi.binding.idx);
gen.visitLocalVariable(lname, "Ljava/lang/Object;", null, bindingLabels.get(bi), end, bi.binding.idx);
}
}

Expand Down

0 comments on commit 2bc1c14

Please sign in to comment.