# HG changeset patch # User Jaroslav Tulach # Date 1465362166 -7200 # Node ID 61a5c529136c3c206ff4d5b57155c25db710c1f5 # Parent f807d02bb3d03b22ce7ffc1da1c2971e1ee2230f Use index access to write a property of a direct object diff -r f807d02bb3d0 -r 61a5c529136c rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Jun 08 06:58:24 2016 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Jun 08 07:02:46 2016 +0200 @@ -1885,6 +1885,14 @@ .append(']'); return i; } + if ("$set__VLjava_lang_String_2Ljava_lang_Object_2".equals(mn)) { + append(vars[0].toString()) + .append('[') + .append(vars[1]) + .append("] = ") + .append(vars[2]); + return i; + } } append(accessVirtualMethod(vars[0].toString(), mn, mi, numArguments)); diff -r f807d02bb3d0 -r 61a5c529136c rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Wed Jun 08 06:58:24 2016 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java Wed Jun 08 07:02:46 2016 +0200 @@ -26,7 +26,7 @@ return n.intValue(); } - public static String hiProperty() { + public static String hiProperty(String set) { final Object obj = eval("var x = {}; x.x = 'Hi'; x"); if (obj == null) { throw new IllegalStateException("Some Value returned " + obj); @@ -35,6 +35,9 @@ throw new IllegalStateException("The result is Objs: " + obj.getClass()); } Objs js = (Objs) obj; + if (set != null) { + js.$set("x", set); + } return (String) js.$get("x"); } } diff -r f807d02bb3d0 -r 61a5c529136c rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Wed Jun 08 06:58:24 2016 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java Wed Jun 08 07:02:46 2016 +0200 @@ -40,6 +40,19 @@ @Test public void readAHiProperty() throws Exception { - code.assertExec("Object has property x", LibUse.class, "hiProperty__Ljava_lang_String_2", "Hi"); + code.assertExec( + "Object has property x", LibUse.class, + "hiProperty__Ljava_lang_String_2Ljava_lang_String_2", + "Hi", (Object)null + ); + } + + @Test + public void writeAHiProperty() throws Exception { + code.assertExec( + "Object has property x", LibUse.class, + "hiProperty__Ljava_lang_String_2Ljava_lang_String_2", + "Ahoj", "Ahoj" + ); } }