summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Jahad <george@georgejahad.com>2011-02-26 10:30:38 -0800
committerStuart Halloway <stu@thinkrelevance.com>2011-03-11 11:15:31 -0500
commit2bc1c1403ac8e4f2ab0db1ac9c3a5082c1ffc6fa (patch)
treebde438dae1aae1b3d99eb7bce590214b3ee874e4
parent83a5aafe8737548253379502e5825d8dcf2bf972 (diff)
clj-734: fixed the local variables table to have the correct code index 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>
-rw-r--r--src/jvm/clojure/lang/Compiler.java6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 18b50c93..1fc04492 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -5755,6 +5755,7 @@ public static class LetExpr implements Expr, MaybePrimitiveExpr{
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);
@@ -5769,6 +5770,7 @@ public static class LetExpr implements Expr, MaybePrimitiveExpr{
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)
@@ -5803,10 +5805,10 @@ public static class LetExpr implements Expr, MaybePrimitiveExpr{
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);
}
}