rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchdefprop
changeset 1633 a34e2191b6be
parent 1632 8ac637d7d62a
child 1635 deef1427bbe7
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Jun 22 00:09:56 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Jun 22 17:19:16 2014 +0200
     1.3 @@ -365,7 +365,14 @@
     1.4          final LocalsMapper lmapper =
     1.5                  new LocalsMapper(stackMapIterator.getArguments());
     1.6  
     1.7 -        append(destObject).append(".").append(name).append(" = function(");
     1.8 +        boolean obj = "java/lang/Object".equals(jc.getClassName());
     1.9 +        
    1.10 +        if (obj) {
    1.11 +            append("Object.defineProperty(").append(destObject).
    1.12 +            append(", '").append(name).append("', { configurable: true, writable: true, value: function(");
    1.13 +        } else {
    1.14 +            append(destObject).append(".").append(name).append(" = function(");
    1.15 +        }
    1.16          lmapper.outputArguments(this, m.isStatic());
    1.17          append(") {").append("\n");
    1.18  
    1.19 @@ -374,6 +381,9 @@
    1.20              append("  throw 'no code found for ")
    1.21                 .append(jc.getClassName()).append('.')
    1.22                 .append(m.getName()).append("';\n");
    1.23 +            if (obj) {
    1.24 +                append("}");
    1.25 +            }
    1.26              append("};");
    1.27              return;
    1.28          }
    1.29 @@ -1393,7 +1403,11 @@
    1.30          while (openBraces-- > 0) {
    1.31              append('}');
    1.32          }
    1.33 -        append("\n};");
    1.34 +        if (obj) {
    1.35 +            append("\n}});");
    1.36 +        } else {
    1.37 +            append("\n};");
    1.38 +        }
    1.39      }
    1.40  
    1.41      private int generateIf(StackMapper mapper, byte[] byteCodes,