There can be fields named "in" and string constants with \t, \r, \n and \\
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 08 Nov 2012 18:34:12 +0100
changeset 13745184b2f9697
parent 136 d48a0da4549c
child 138 ca621f0dcdf9
There can be fields named "in" and string constants with \t, \r, \n and \\
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
vm/src/test/java/org/apidesign/vm4brwsr/Instance.java
vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java
vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java
vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java
vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Nov 08 18:32:32 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Nov 08 18:34:12 2012 +0100
     1.3 @@ -115,7 +115,8 @@
     1.4          out.append("() {");
     1.5          for (Variable v : jc.getVariables()) {
     1.6              if (!v.isStatic()) {
     1.7 -                out.append("\n  this." + v.getName() + " = 0;");
     1.8 +                out.append("\n  this.fld_").
     1.9 +                    append(v.getName()).append(" = 0;");
    1.10              }
    1.11          }
    1.12          out.append("\n}\n\nfunction ").append(className).append("_proto() {");
    1.13 @@ -687,7 +688,8 @@
    1.14                  case bc_getfield: {
    1.15                      int indx = readIntArg(byteCodes, i);
    1.16                      CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
    1.17 -                    out.append("stack.push(stack.pop().").append(fi.getFieldName()).append(");");
    1.18 +                    out.append("stack.push(stack.pop().fld_").
    1.19 +                        append(fi.getFieldName()).append(");");
    1.20                      i += 2;
    1.21                      break;
    1.22                  }
    1.23 @@ -714,7 +716,7 @@
    1.24                  case bc_putfield: {
    1.25                      int indx = readIntArg(byteCodes, i);
    1.26                      CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
    1.27 -                    out.append("{ var v = stack.pop(); stack.pop().")
    1.28 +                    out.append("{ var v = stack.pop(); stack.pop().fld_")
    1.29                         .append(fi.getFieldName()).append(" = v; }");
    1.30                      i += 2;
    1.31                      break;
    1.32 @@ -995,7 +997,13 @@
    1.33          if (entry instanceof CPClassInfo) {
    1.34              v = "new java_lang_Class";
    1.35          } else if (entry instanceof CPStringInfo) {
    1.36 -            v = "\"" + entry.getValue().toString().replace("\"", "\\\"") + "\"";
    1.37 +            v = "\"" + entry.getValue().toString().
    1.38 +                replace("\\", "\\\\").
    1.39 +                replace("\n", "\\n").
    1.40 +                replace("\r", "\\r").
    1.41 +                replace("\t", "\\t").
    1.42 +                replace("\"", "\\\"")
    1.43 +                + "\"";
    1.44          } else {
    1.45              v = entry.getValue().toString();
    1.46          }
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Thu Nov 08 18:32:32 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Thu Nov 08 18:34:12 2012 +0100
     2.3 @@ -22,7 +22,7 @@
     2.4   * @author Jaroslav Tulach <jtulach@netbeans.org>
     2.5   */
     2.6  public class Instance {
     2.7 -    private int i;
     2.8 +    private int in;
     2.9      protected short s;
    2.10      public double d;
    2.11      private float f;
    2.12 @@ -32,7 +32,7 @@
    2.13      }
    2.14  
    2.15      public Instance(int i, double d) {
    2.16 -        this.i = i;
    2.17 +        this.in = i;
    2.18          this.d = d;
    2.19      }
    2.20      public byte getByte() {
    2.21 @@ -53,7 +53,7 @@
    2.22      public static double magicOne() {
    2.23          Instance i = new Instance(10, 3.3d);
    2.24          i.b = (byte)0x09;
    2.25 -        return (i.i - i.b) * i.d;
    2.26 +        return (i.in - i.b) * i.d;
    2.27      }
    2.28      public static int virtualBytes() {
    2.29          Instance i = new InstanceSub(7, 2.2d);
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java	Thu Nov 08 18:32:32 2012 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java	Thu Nov 08 18:34:12 2012 +0100
     3.3 @@ -22,8 +22,11 @@
     3.4   * @author Jaroslav Tulach <jtulach@netbeans.org>
     3.5   */
     3.6  public class InstanceSub extends Instance implements GetByte {
     3.7 +    private double in;
     3.8 +    
     3.9      public InstanceSub(int i, double d) {
    3.10          super(i, d);
    3.11 +        in = 555.55;
    3.12      }
    3.13      
    3.14      @Override
     4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Thu Nov 08 18:32:32 2012 +0100
     4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Thu Nov 08 18:34:12 2012 +0100
     4.3 @@ -17,6 +17,8 @@
     4.4   */
     4.5  package org.apidesign.vm4brwsr;
     4.6  
     4.7 +import java.io.File;
     4.8 +import java.io.FileWriter;
     4.9  import java.io.IOException;
    4.10  import javax.script.Invocable;
    4.11  import javax.script.ScriptEngine;
    4.12 @@ -271,7 +273,15 @@
    4.13              Object res = js.eval(sb.toString());
    4.14              assertTrue(js instanceof Invocable, "It is invocable object: " + res);
    4.15              return (Invocable)js;
    4.16 -        } catch (ScriptException ex) {
    4.17 +        } catch (Exception ex) {
    4.18 +            if (sb.length() > 2000) {
    4.19 +                File f = File.createTempFile("execution", ".js");
    4.20 +                FileWriter w = new FileWriter(f);
    4.21 +                w.append(sb);
    4.22 +                w.close();
    4.23 +                sb.setLength(0);
    4.24 +                sb.append(f.getPath());
    4.25 +            }
    4.26              fail("Could not compile:\n" + sb, ex);
    4.27              return null;
    4.28          }
     5.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Thu Nov 08 18:32:32 2012 +0100
     5.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Thu Nov 08 18:34:12 2012 +0100
     5.3 @@ -54,7 +54,7 @@
     5.4      }
     5.5      
     5.6      public static String concatStrings() {
     5.7 -        return (toStringTest(1) + "Ahoj").toString();
     5.8 +        return (toStringTest(1) + "\\\n\r\t").toString();
     5.9      }
    5.10  
    5.11      @Override
     6.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Thu Nov 08 18:32:32 2012 +0100
     6.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Thu Nov 08 18:34:12 2012 +0100
     6.3 @@ -59,7 +59,7 @@
     6.4          assertExec(
     6.5              "Composes strings OK",
     6.6              "org_apidesign_vm4brwsr_StringSample_concatStringsLjava_lang_String",
     6.7 -            "Hello World!1Ahoj"
     6.8 +            "Hello World!1" + "\\\n\r\t"
     6.9          );
    6.10      }
    6.11