# HG changeset patch # User Jaroslav Tulach # Date 1354621473 -3600 # Node ID 962a24ecd8f8377b4864c6f7f717f6762631303b # Parent 55d2676f82c9fd806951e183535830a700a6a2fb Variables brought into inner functions are still mutable diff -r 55d2676f82c9 -r 962a24ecd8f8 emul/src/main/java/java/lang/AnnotationImpl.java --- a/emul/src/main/java/java/lang/AnnotationImpl.java Tue Dec 04 12:23:06 2012 +0100 +++ b/emul/src/main/java/java/lang/AnnotationImpl.java Tue Dec 04 12:44:33 2012 +0100 @@ -16,12 +16,20 @@ return getClass(); } - @JavaScriptBody(args = { "a", "n", "values" }, body = - "var v = values;" - + "for (p in values) {" - + " a[p] = function() { return v[p]; }" - + "}" - + "a['$instOf_' + n] = true;" + @JavaScriptBody(args = { "a", "n", "values" }, body = "" + + "function f(v, p) {\n" + + " var val = v;\n" + + " var prop = p;\n" + + " return function() {\n" + + " return val[prop];\n" + + " };\n" + + "}\n" + + "var props = Object.getOwnPropertyNames(values);\n" + + "for (var i = 0; i < props.length; i++) {\n" + + " var p = props[i];\n" + + " a[p] = new f(values, p);\n" + + "}\n" + + "a['$instOf_' + n] = true;\n" + "return a;" ) private static T create(AnnotationImpl a, String n, Object values) {