Use index access to write a property of a direct object Libraries
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 08 Jun 2016 07:02:46 +0200
branchLibraries
changeset 196861a5c529136c
parent 1967 f807d02bb3d0
child 1969 51183f00d2df
Use index access to write a property of a direct object
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Jun 08 06:58:24 2016 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Jun 08 07:02:46 2016 +0200
     1.3 @@ -1885,6 +1885,14 @@
     1.4                      .append(']');
     1.5                  return i;
     1.6              }
     1.7 +            if ("$set__VLjava_lang_String_2Ljava_lang_Object_2".equals(mn)) {
     1.8 +                append(vars[0].toString())
     1.9 +                    .append('[')
    1.10 +                    .append(vars[1])
    1.11 +                    .append("] = ")
    1.12 +                    .append(vars[2]);
    1.13 +                return i;
    1.14 +            }
    1.15          }
    1.16  
    1.17          append(accessVirtualMethod(vars[0].toString(), mn, mi, numArguments));
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Wed Jun 08 06:58:24 2016 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Wed Jun 08 07:02:46 2016 +0200
     2.3 @@ -26,7 +26,7 @@
     2.4          return n.intValue();
     2.5      }
     2.6  
     2.7 -    public static String hiProperty() {
     2.8 +    public static String hiProperty(String set) {
     2.9          final Object obj = eval("var x = {}; x.x = 'Hi'; x");
    2.10          if (obj == null) {
    2.11              throw new IllegalStateException("Some Value returned " + obj);
    2.12 @@ -35,6 +35,9 @@
    2.13              throw new IllegalStateException("The result is Objs: " + obj.getClass());
    2.14          }
    2.15          Objs js = (Objs) obj;
    2.16 +        if (set != null) {
    2.17 +            js.$set("x", set);
    2.18 +        }
    2.19          return (String) js.$get("x");
    2.20      }
    2.21  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Wed Jun 08 06:58:24 2016 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Wed Jun 08 07:02:46 2016 +0200
     3.3 @@ -40,6 +40,19 @@
     3.4  
     3.5      @Test
     3.6      public void readAHiProperty() throws Exception {
     3.7 -        code.assertExec("Object has property x", LibUse.class, "hiProperty__Ljava_lang_String_2", "Hi");
     3.8 +        code.assertExec(
     3.9 +            "Object has property x", LibUse.class,
    3.10 +            "hiProperty__Ljava_lang_String_2Ljava_lang_String_2",
    3.11 +            "Hi", (Object)null
    3.12 +        );
    3.13 +    }
    3.14 +
    3.15 +    @Test
    3.16 +    public void writeAHiProperty() throws Exception {
    3.17 +        code.assertExec(
    3.18 +            "Object has property x", LibUse.class,
    3.19 +            "hiProperty__Ljava_lang_String_2Ljava_lang_String_2",
    3.20 +            "Ahoj", "Ahoj"
    3.21 +        );
    3.22      }
    3.23  }