# HG changeset patch # User Jaroslav Tulach # Date 1352396052 -3600 # Node ID 45184b2f96975eaa0199f6961b4fbc1fe7bf20ff # Parent d48a0da4549c81dc8c178f3d2aa311f1d2e69f95 There can be fields named "in" and string constants with \t, \r, \n and \\ diff -r d48a0da4549c -r 45184b2f9697 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Nov 08 18:34:12 2012 +0100 @@ -115,7 +115,8 @@ out.append("() {"); for (Variable v : jc.getVariables()) { if (!v.isStatic()) { - out.append("\n this." + v.getName() + " = 0;"); + out.append("\n this.fld_"). + append(v.getName()).append(" = 0;"); } } out.append("\n}\n\nfunction ").append(className).append("_proto() {"); @@ -687,7 +688,8 @@ case bc_getfield: { int indx = readIntArg(byteCodes, i); CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx); - out.append("stack.push(stack.pop().").append(fi.getFieldName()).append(");"); + out.append("stack.push(stack.pop().fld_"). + append(fi.getFieldName()).append(");"); i += 2; break; } @@ -714,7 +716,7 @@ case bc_putfield: { int indx = readIntArg(byteCodes, i); CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx); - out.append("{ var v = stack.pop(); stack.pop().") + out.append("{ var v = stack.pop(); stack.pop().fld_") .append(fi.getFieldName()).append(" = v; }"); i += 2; break; @@ -995,7 +997,13 @@ if (entry instanceof CPClassInfo) { v = "new java_lang_Class"; } else if (entry instanceof CPStringInfo) { - v = "\"" + entry.getValue().toString().replace("\"", "\\\"") + "\""; + v = "\"" + entry.getValue().toString(). + replace("\\", "\\\\"). + replace("\n", "\\n"). + replace("\r", "\\r"). + replace("\t", "\\t"). + replace("\"", "\\\"") + + "\""; } else { v = entry.getValue().toString(); } diff -r d48a0da4549c -r 45184b2f9697 vm/src/test/java/org/apidesign/vm4brwsr/Instance.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Thu Nov 08 18:34:12 2012 +0100 @@ -22,7 +22,7 @@ * @author Jaroslav Tulach */ public class Instance { - private int i; + private int in; protected short s; public double d; private float f; @@ -32,7 +32,7 @@ } public Instance(int i, double d) { - this.i = i; + this.in = i; this.d = d; } public byte getByte() { @@ -53,7 +53,7 @@ public static double magicOne() { Instance i = new Instance(10, 3.3d); i.b = (byte)0x09; - return (i.i - i.b) * i.d; + return (i.in - i.b) * i.d; } public static int virtualBytes() { Instance i = new InstanceSub(7, 2.2d); diff -r d48a0da4549c -r 45184b2f9697 vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java Thu Nov 08 18:34:12 2012 +0100 @@ -22,8 +22,11 @@ * @author Jaroslav Tulach */ public class InstanceSub extends Instance implements GetByte { + private double in; + public InstanceSub(int i, double d) { super(i, d); + in = 555.55; } @Override diff -r d48a0da4549c -r 45184b2f9697 vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Thu Nov 08 18:34:12 2012 +0100 @@ -17,6 +17,8 @@ */ package org.apidesign.vm4brwsr; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import javax.script.Invocable; import javax.script.ScriptEngine; @@ -271,7 +273,15 @@ Object res = js.eval(sb.toString()); assertTrue(js instanceof Invocable, "It is invocable object: " + res); return (Invocable)js; - } catch (ScriptException ex) { + } catch (Exception ex) { + if (sb.length() > 2000) { + File f = File.createTempFile("execution", ".js"); + FileWriter w = new FileWriter(f); + w.append(sb); + w.close(); + sb.setLength(0); + sb.append(f.getPath()); + } fail("Could not compile:\n" + sb, ex); return null; } diff -r d48a0da4549c -r 45184b2f9697 vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Thu Nov 08 18:34:12 2012 +0100 @@ -54,7 +54,7 @@ } public static String concatStrings() { - return (toStringTest(1) + "Ahoj").toString(); + return (toStringTest(1) + "\\\n\r\t").toString(); } @Override diff -r d48a0da4549c -r 45184b2f9697 vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Thu Nov 08 18:32:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Thu Nov 08 18:34:12 2012 +0100 @@ -59,7 +59,7 @@ assertExec( "Composes strings OK", "org_apidesign_vm4brwsr_StringSample_concatStringsLjava_lang_String", - "Hello World!1Ahoj" + "Hello World!1" + "\\\n\r\t" ); }