diff options
author | George Jahad <george@georgejahad.com> | 2011-02-26 10:30:38 -0800 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2011-03-11 11:15:31 -0500 |
commit | 2bc1c1403ac8e4f2ab0db1ac9c3a5082c1ffc6fa (patch) | |
tree | bde438dae1aae1b3d99eb7bce590214b3ee874e4 | |
parent | 83a5aafe8737548253379502e5825d8dcf2bf972 (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.java | 6 |
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); } } |