Merge with trunk registers
authorLubomir Nerad <lubomir.nerad@oracle.com>
Mon, 03 Dec 2012 14:44:49 +0100
branchregisters
changeset 2428bd4adaf6590
parent 221 3ee23267706c
parent 241 2177242dff06
child 281 f2352e0b713e
Merge with trunk
core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java
vm/nb-configuration.xml
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/core/pom.xml	Thu Nov 29 20:19:00 2012 +0100
     1.2 +++ b/core/pom.xml	Mon Dec 03 14:44:49 2012 +0100
     1.3 @@ -5,12 +5,12 @@
     1.4    <parent>
     1.5      <groupId>org.apidesign</groupId>
     1.6      <artifactId>bck2brwsr</artifactId>
     1.7 -    <version>1.0-SNAPSHOT</version>
     1.8 +    <version>0.3-SNAPSHOT</version>
     1.9    </parent>
    1.10    <groupId>org.apidesign.bck2brwsr</groupId>
    1.11    <artifactId>core</artifactId>
    1.12 -  <version>1.0-SNAPSHOT</version>
    1.13 -  <name>core</name>
    1.14 +  <version>0.3-SNAPSHOT</version>
    1.15 +  <name>Core JS Annotations</name>
    1.16    <url>http://maven.apache.org</url>
    1.17      <build>
    1.18          <plugins>
    1.19 @@ -36,4 +36,6 @@
    1.20        <scope>test</scope>
    1.21      </dependency>
    1.22    </dependencies>
    1.23 +    <description>Contains esential annotations for associating JavaScript code with
    1.24 +methods and classes.</description>
    1.25  </project>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptOnly.java	Mon Dec 03 14:44:49 2012 +0100
     2.3 @@ -0,0 +1,37 @@
     2.4 +/**
     2.5 + * Back 2 Browser Bytecode Translator
     2.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     2.7 + *
     2.8 + * This program is free software: you can redistribute it and/or modify
     2.9 + * it under the terms of the GNU General Public License as published by
    2.10 + * the Free Software Foundation, version 2 of the License.
    2.11 + *
    2.12 + * This program is distributed in the hope that it will be useful,
    2.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.15 + * GNU General Public License for more details.
    2.16 + *
    2.17 + * You should have received a copy of the GNU General Public License
    2.18 + * along with this program. Look for COPYING file in the top folder.
    2.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    2.20 + */
    2.21 +package org.apidesign.bck2brwsr.core;
    2.22 +
    2.23 +import java.lang.annotation.ElementType;
    2.24 +import java.lang.annotation.Retention;
    2.25 +import java.lang.annotation.RetentionPolicy;
    2.26 +import java.lang.annotation.Target;
    2.27 +
    2.28 +/** Don't include given field or method in generated JavaScript. Rather
    2.29 + * generate completely independent JavaScript code.
    2.30 + *
    2.31 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    2.32 + */
    2.33 +@Retention(RetentionPolicy.CLASS)
    2.34 +@Target({ ElementType.METHOD, ElementType.FIELD })
    2.35 +public @interface JavaScriptOnly {
    2.36 +    /** name of the variable to assign given value to */
    2.37 +    String name() default "";
    2.38 +    /** value to assign to given field */
    2.39 +    String value() default "";
    2.40 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptPrototype.java	Mon Dec 03 14:44:49 2012 +0100
     3.3 @@ -0,0 +1,41 @@
     3.4 +/**
     3.5 + * Back 2 Browser Bytecode Translator
     3.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     3.7 + *
     3.8 + * This program is free software: you can redistribute it and/or modify
     3.9 + * it under the terms of the GNU General Public License as published by
    3.10 + * the Free Software Foundation, version 2 of the License.
    3.11 + *
    3.12 + * This program is distributed in the hope that it will be useful,
    3.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    3.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    3.15 + * GNU General Public License for more details.
    3.16 + *
    3.17 + * You should have received a copy of the GNU General Public License
    3.18 + * along with this program. Look for COPYING file in the top folder.
    3.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    3.20 + */
    3.21 +package org.apidesign.bck2brwsr.core;
    3.22 +
    3.23 +import java.lang.annotation.ElementType;
    3.24 +import java.lang.annotation.Retention;
    3.25 +import java.lang.annotation.RetentionPolicy;
    3.26 +import java.lang.annotation.Target;
    3.27 +
    3.28 +/** Controls how JavaScript inheritance should be handled.
    3.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.30 + */
    3.31 +@Retention(RetentionPolicy.CLASS)
    3.32 +@Target({ ElementType.TYPE })
    3.33 +public @interface JavaScriptPrototype {
    3.34 +    /** Expression that identifies the function where all methods
    3.35 +     * should be added into.
    3.36 +     * @return name of function to contain methods found in given class
    3.37 +     */
    3.38 +    String container();
    3.39 +    /** Expression that defines the way to construct prototype for this
    3.40 +     * class.
    3.41 +     * @return expression to construct prototype
    3.42 +     */
    3.43 +    String prototype();
    3.44 +}
     4.1 --- a/core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java	Thu Nov 29 20:19:00 2012 +0100
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,33 +0,0 @@
     4.4 -/**
     4.5 - * Back 2 Browser Bytecode Translator
     4.6 - * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4.7 - *
     4.8 - * This program is free software: you can redistribute it and/or modify
     4.9 - * it under the terms of the GNU General Public License as published by
    4.10 - * the Free Software Foundation, version 2 of the License.
    4.11 - *
    4.12 - * This program is distributed in the hope that it will be useful,
    4.13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    4.14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    4.15 - * GNU General Public License for more details.
    4.16 - *
    4.17 - * You should have received a copy of the GNU General Public License
    4.18 - * along with this program. Look for COPYING file in the top folder.
    4.19 - * If not, see http://opensource.org/licenses/GPL-2.0.
    4.20 - */
    4.21 -package org.apidesign.bck2brwsr.core;
    4.22 -
    4.23 -import java.lang.annotation.ElementType;
    4.24 -import java.lang.annotation.Retention;
    4.25 -import java.lang.annotation.RetentionPolicy;
    4.26 -import java.lang.annotation.Target;
    4.27 -
    4.28 -/** Don't include given field or method in generated JavaScript.
    4.29 - *
    4.30 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    4.31 - */
    4.32 -@Retention(RetentionPolicy.CLASS)
    4.33 -@Target({ ElementType.METHOD, ElementType.FIELD })
    4.34 -public @interface NoJavaScript {
    4.35 -    
    4.36 -}
     5.1 --- a/emul/pom.xml	Thu Nov 29 20:19:00 2012 +0100
     5.2 +++ b/emul/pom.xml	Mon Dec 03 14:44:49 2012 +0100
     5.3 @@ -5,11 +5,11 @@
     5.4    <parent>
     5.5      <groupId>org.apidesign</groupId>
     5.6      <artifactId>bck2brwsr</artifactId>
     5.7 -    <version>1.0-SNAPSHOT</version>
     5.8 +    <version>0.3-SNAPSHOT</version>
     5.9    </parent>
    5.10    <groupId>org.apidesign.bck2brwsr</groupId>
    5.11    <artifactId>emul</artifactId>
    5.12 -  <version>1.0-SNAPSHOT</version>
    5.13 +  <version>0.3-SNAPSHOT</version>
    5.14    <name>Java API Emulation</name>
    5.15    <url>http://maven.apache.org</url>
    5.16    <properties>
    5.17 @@ -19,7 +19,7 @@
    5.18      <dependency>
    5.19        <groupId>org.apidesign.bck2brwsr</groupId>
    5.20        <artifactId>core</artifactId>
    5.21 -      <version>1.0-SNAPSHOT</version>
    5.22 +      <version>0.3-SNAPSHOT</version>
    5.23        <type>jar</type>
    5.24      </dependency>
    5.25    </dependencies>
     6.1 --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java	Thu Nov 29 20:19:00 2012 +0100
     6.2 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java	Mon Dec 03 14:44:49 2012 +0100
     6.3 @@ -602,7 +602,7 @@
     6.4       */
     6.5      @JavaScriptBody(
     6.6          args={ "self", "i" },
     6.7 -        body="return java_lang_AbstractStringBuilder_appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());"
     6.8 +        body="return java_lang_AbstractStringBuilder(true).appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());"
     6.9      )
    6.10      public AbstractStringBuilder append(int i) {
    6.11          if (i == Integer.MIN_VALUE) {
     7.1 --- a/emul/src/main/java/java/lang/ClassLoader.java	Thu Nov 29 20:19:00 2012 +0100
     7.2 +++ b/emul/src/main/java/java/lang/ClassLoader.java	Mon Dec 03 14:44:49 2012 +0100
     7.3 @@ -29,6 +29,7 @@
     7.4  import java.net.URL;
     7.5  import java.util.Enumeration;
     7.6  import java.util.NoSuchElementException;
     7.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
     7.8  
     7.9  /**
    7.10   * A class loader is an object that is responsible for loading classes. The
    7.11 @@ -147,6 +148,7 @@
    7.12   */
    7.13  public abstract class ClassLoader {
    7.14  
    7.15 +    @JavaScriptBody(args = {}, body = "")
    7.16      private static native void registerNatives();
    7.17      static {
    7.18          registerNatives();
     8.1 --- a/emul/src/main/java/java/lang/Object.java	Thu Nov 29 20:19:00 2012 +0100
     8.2 +++ b/emul/src/main/java/java/lang/Object.java	Mon Dec 03 14:44:49 2012 +0100
     8.3 @@ -25,6 +25,9 @@
     8.4  
     8.5  package java.lang;
     8.6  
     8.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
     8.8 +import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
     8.9 +
    8.10  /**
    8.11   * Class {@code Object} is the root of the class hierarchy.
    8.12   * Every class has {@code Object} as a superclass. All objects,
    8.13 @@ -34,8 +37,10 @@
    8.14   * @see     java.lang.Class
    8.15   * @since   JDK1.0
    8.16   */
    8.17 +@JavaScriptPrototype(container = "Object.prototype", prototype = "new Object")
    8.18  public class Object {
    8.19  
    8.20 +    @JavaScriptBody(args = {}, body = "")
    8.21      private static native void registerNatives();
    8.22      static {
    8.23          registerNatives();
     9.1 --- a/emul/src/main/java/java/lang/String.java	Thu Nov 29 20:19:00 2012 +0100
     9.2 +++ b/emul/src/main/java/java/lang/String.java	Mon Dec 03 14:44:49 2012 +0100
     9.3 @@ -25,8 +25,11 @@
     9.4  
     9.5  package java.lang;
     9.6  
     9.7 +import java.util.Comparator;
     9.8  import org.apidesign.bck2brwsr.core.ExtraJavaScript;
     9.9 -import java.util.Comparator;
    9.10 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    9.11 +import org.apidesign.bck2brwsr.core.JavaScriptOnly;
    9.12 +import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
    9.13  
    9.14  /**
    9.15   * The <code>String</code> class represents character strings. All
    9.16 @@ -99,25 +102,29 @@
    9.17  
    9.18  @ExtraJavaScript(
    9.19      resource="/org/apidesign/vm4brwsr/emul/java_lang_String.js",
    9.20 -    processByteCode=false
    9.21 +    processByteCode=true
    9.22  )
    9.23 +@JavaScriptPrototype(container = "String.prototype", prototype = "new String")
    9.24  public final class String
    9.25      implements java.io.Serializable, Comparable<String>, CharSequence
    9.26  {
    9.27 -    /** The value is used for character storage. */
    9.28 -    private final char value[];
    9.29 -
    9.30 -    /** The offset is the first index of the storage that is used. */
    9.31 -    private final int offset;
    9.32 -
    9.33 -    /** The count is the number of characters in the String. */
    9.34 -    private final int count;
    9.35 -
    9.36 +    @JavaScriptOnly
    9.37      /** Cache the hash code for the string */
    9.38      private int hash; // Default to 0
    9.39 +    
    9.40 +    /** real string to delegate to */
    9.41 +    private Object r;
    9.42  
    9.43      /** use serialVersionUID from JDK 1.0.2 for interoperability */
    9.44      private static final long serialVersionUID = -6849794470754667710L;
    9.45 +    
    9.46 +    @JavaScriptOnly(name="toString", value="function() { return this.fld_r; }")
    9.47 +    private static void jsToString() {
    9.48 +    }
    9.49 +    
    9.50 +    @JavaScriptOnly(name="valueOf", value="function() { return this.toString().valueOf(); }")
    9.51 +    private static void jsValudOf() {
    9.52 +    }
    9.53  
    9.54      /**
    9.55       * Class String is special cased within the Serialization Stream Protocol.
    9.56 @@ -140,9 +147,7 @@
    9.57       * unnecessary since Strings are immutable.
    9.58       */
    9.59      public String() {
    9.60 -        this.offset = 0;
    9.61 -        this.count = 0;
    9.62 -        this.value = new char[0];
    9.63 +        this.r = "";
    9.64      }
    9.65  
    9.66      /**
    9.67 @@ -156,23 +161,7 @@
    9.68       *         A {@code String}
    9.69       */
    9.70      public String(String original) {
    9.71 -        int size = original.count;
    9.72 -        char[] originalValue = original.value;
    9.73 -        char[] v;
    9.74 -        if (originalValue.length > size) {
    9.75 -            // The array representing the String is bigger than the new
    9.76 -            // String itself.  Perhaps this constructor is being called
    9.77 -            // in order to trim the baggage, so make a copy of the array.
    9.78 -            int off = original.offset;
    9.79 -            v = AbstractStringBuilder.copyOfRange(originalValue, off, off+size);
    9.80 -        } else {
    9.81 -            // The array representing the String is the same
    9.82 -            // size as the String, so no point in making a copy.
    9.83 -            v = originalValue;
    9.84 -        }
    9.85 -        this.offset = 0;
    9.86 -        this.count = size;
    9.87 -        this.value = v;
    9.88 +        this.r = original.toString();
    9.89      }
    9.90  
    9.91      /**
    9.92 @@ -184,11 +173,13 @@
    9.93       * @param  value
    9.94       *         The initial value of the string
    9.95       */
    9.96 +    @JavaScriptBody(args = { "self", "charArr" }, body=
    9.97 +        "for (var i = 0; i < charArr.length; i++) {\n"
    9.98 +      + "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n"
    9.99 +      + "}\n"
   9.100 +      + "self.fld_r = charArr.join('');\n"
   9.101 +    )
   9.102      public String(char value[]) {
   9.103 -        int size = value.length;
   9.104 -        this.offset = 0;
   9.105 -        this.count = size;
   9.106 -        this.value = AbstractStringBuilder.copyOf(value, size);
   9.107      }
   9.108  
   9.109      /**
   9.110 @@ -212,20 +203,14 @@
   9.111       *          If the {@code offset} and {@code count} arguments index
   9.112       *          characters outside the bounds of the {@code value} array
   9.113       */
   9.114 +    @JavaScriptBody(args = { "self", "charArr", "off", "cnt" }, body =
   9.115 +        "var up = off + cnt;\n" +
   9.116 +        "for (var i = off; i < up; i++) {\n" +
   9.117 +        "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" +
   9.118 +        "}\n" +
   9.119 +        "self.fld_r = charArr.slice(off, up).join(\"\");\n"
   9.120 +    )
   9.121      public String(char value[], int offset, int count) {
   9.122 -        if (offset < 0) {
   9.123 -            throw new StringIndexOutOfBoundsException(offset);
   9.124 -        }
   9.125 -        if (count < 0) {
   9.126 -            throw new StringIndexOutOfBoundsException(count);
   9.127 -        }
   9.128 -        // Note: offset or count might be near -1>>>1.
   9.129 -        if (offset > value.length - count) {
   9.130 -            throw new StringIndexOutOfBoundsException(offset + count);
   9.131 -        }
   9.132 -        this.offset = 0;
   9.133 -        this.count = count;
   9.134 -        this.value = AbstractStringBuilder.copyOfRange(value, offset, offset+count);
   9.135      }
   9.136  
   9.137      /**
   9.138 @@ -292,9 +277,7 @@
   9.139                  Character.toSurrogates(c, v, j++);
   9.140          }
   9.141  
   9.142 -        this.value  = v;
   9.143 -        this.count  = n;
   9.144 -        this.offset = 0;
   9.145 +        this.r = new String(v, 0, n);
   9.146      }
   9.147  
   9.148      /**
   9.149 @@ -351,9 +334,7 @@
   9.150                  value[i] = (char) (hibyte | (ascii[i + offset] & 0xff));
   9.151              }
   9.152          }
   9.153 -        this.offset = 0;
   9.154 -        this.count = count;
   9.155 -        this.value = value;
   9.156 +        this.r = new String(value, 0, count);
   9.157      }
   9.158  
   9.159      /**
   9.160 @@ -578,9 +559,7 @@
   9.161          for (int i = 0; i < length; i++) {
   9.162              v[i] = (char)bytes[offset++];
   9.163          }
   9.164 -        this.offset = 0;
   9.165 -        this.count = v.length;
   9.166 -        this.value = v;
   9.167 +        this.r = new String(v, 0, v.length);
   9.168      }
   9.169  
   9.170      /**
   9.171 @@ -613,10 +592,7 @@
   9.172       *         A {@code StringBuffer}
   9.173       */
   9.174      public String(StringBuffer buffer) {
   9.175 -        String result = buffer.toString();
   9.176 -        this.value = result.value;
   9.177 -        this.count = result.count;
   9.178 -        this.offset = result.offset;
   9.179 +        this.r = buffer.toString();
   9.180      }
   9.181  
   9.182      /**
   9.183 @@ -635,10 +611,7 @@
   9.184       * @since  1.5
   9.185       */
   9.186      public String(StringBuilder builder) {
   9.187 -        String result = builder.toString();
   9.188 -        this.value = result.value;
   9.189 -        this.count = result.count;
   9.190 -        this.offset = result.offset;
   9.191 +        this.r = builder.toString();
   9.192      }
   9.193  
   9.194      /**
   9.195 @@ -649,8 +622,9 @@
   9.196       * @return  the length of the sequence of characters represented by this
   9.197       *          object.
   9.198       */
   9.199 +    @JavaScriptBody(args = "self", body = "return self.toString().length;")
   9.200      public int length() {
   9.201 -        return count;
   9.202 +        throw new UnsupportedOperationException();
   9.203      }
   9.204  
   9.205      /**
   9.206 @@ -661,8 +635,9 @@
   9.207       *
   9.208       * @since 1.6
   9.209       */
   9.210 +    @JavaScriptBody(args = "self", body="return self.toString().length === 0;")
   9.211      public boolean isEmpty() {
   9.212 -        return count == 0;
   9.213 +        return length() == 0;
   9.214      }
   9.215  
   9.216      /**
   9.217 @@ -683,11 +658,11 @@
   9.218       *             argument is negative or not less than the length of this
   9.219       *             string.
   9.220       */
   9.221 +    @JavaScriptBody(args = { "self", "index" }, 
   9.222 +        body = "return self.toString().charCodeAt(index);"
   9.223 +    )
   9.224      public char charAt(int index) {
   9.225 -        if ((index < 0) || (index >= count)) {
   9.226 -            throw new StringIndexOutOfBoundsException(index);
   9.227 -        }
   9.228 -        return value[index + offset];
   9.229 +        throw new UnsupportedOperationException();
   9.230      }
   9.231  
   9.232      /**
   9.233 @@ -713,10 +688,10 @@
   9.234       * @since      1.5
   9.235       */
   9.236      public int codePointAt(int index) {
   9.237 -        if ((index < 0) || (index >= count)) {
   9.238 +        if ((index < 0) || (index >= length())) {
   9.239              throw new StringIndexOutOfBoundsException(index);
   9.240          }
   9.241 -        return Character.codePointAtImpl(value, offset + index, offset + count);
   9.242 +        return Character.codePointAtImpl(toCharArray(), offset() + index, offset() + length());
   9.243      }
   9.244  
   9.245      /**
   9.246 @@ -743,10 +718,10 @@
   9.247       */
   9.248      public int codePointBefore(int index) {
   9.249          int i = index - 1;
   9.250 -        if ((i < 0) || (i >= count)) {
   9.251 +        if ((i < 0) || (i >= length())) {
   9.252              throw new StringIndexOutOfBoundsException(index);
   9.253          }
   9.254 -        return Character.codePointBeforeImpl(value, offset + index, offset);
   9.255 +        return Character.codePointBeforeImpl(toCharArray(), offset() + index, offset());
   9.256      }
   9.257  
   9.258      /**
   9.259 @@ -771,10 +746,10 @@
   9.260       * @since  1.5
   9.261       */
   9.262      public int codePointCount(int beginIndex, int endIndex) {
   9.263 -        if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) {
   9.264 +        if (beginIndex < 0 || endIndex > length() || beginIndex > endIndex) {
   9.265              throw new IndexOutOfBoundsException();
   9.266          }
   9.267 -        return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex);
   9.268 +        return Character.codePointCountImpl(toCharArray(), offset()+beginIndex, endIndex-beginIndex);
   9.269      }
   9.270  
   9.271      /**
   9.272 @@ -798,19 +773,25 @@
   9.273       * @since 1.5
   9.274       */
   9.275      public int offsetByCodePoints(int index, int codePointOffset) {
   9.276 -        if (index < 0 || index > count) {
   9.277 +        if (index < 0 || index > length()) {
   9.278              throw new IndexOutOfBoundsException();
   9.279          }
   9.280 -        return Character.offsetByCodePointsImpl(value, offset, count,
   9.281 -                                                offset+index, codePointOffset) - offset;
   9.282 +        return Character.offsetByCodePointsImpl(toCharArray(), offset(), length(),
   9.283 +                                                offset()+index, codePointOffset) - offset();
   9.284      }
   9.285  
   9.286      /**
   9.287       * Copy characters from this string into dst starting at dstBegin.
   9.288       * This method doesn't perform any range checking.
   9.289       */
   9.290 +    @JavaScriptBody(args = { "self", "arr", "to" }, body = 
   9.291 +        "var s = self.toString();\n" +
   9.292 +        "for (var i = 0; i < s.length; i++) {\n" +
   9.293 +        "   arr[to++] = s[i];\n" +
   9.294 +        "}"
   9.295 +    )
   9.296      void getChars(char dst[], int dstBegin) {
   9.297 -        AbstractStringBuilder.arraycopy(value, offset, dst, dstBegin, count);
   9.298 +        AbstractStringBuilder.arraycopy(toCharArray(), offset(), dst, dstBegin, length());
   9.299      }
   9.300  
   9.301      /**
   9.302 @@ -843,17 +824,23 @@
   9.303       *            <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
   9.304       *                <code>dst.length</code></ul>
   9.305       */
   9.306 +    @JavaScriptBody(args = { "self", "beg", "end", "arr", "dst" }, body=
   9.307 +        "var s = self.toString();\n" +
   9.308 +        "while (beg < end) {\n" +
   9.309 +        "  arr[dst++] = s[beg++];\n" +
   9.310 +        "}\n"
   9.311 +    )
   9.312      public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
   9.313          if (srcBegin < 0) {
   9.314              throw new StringIndexOutOfBoundsException(srcBegin);
   9.315          }
   9.316 -        if (srcEnd > count) {
   9.317 +        if (srcEnd > length()) {
   9.318              throw new StringIndexOutOfBoundsException(srcEnd);
   9.319          }
   9.320          if (srcBegin > srcEnd) {
   9.321              throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
   9.322          }
   9.323 -        AbstractStringBuilder.arraycopy(value, offset + srcBegin, dst, dstBegin,
   9.324 +        AbstractStringBuilder.arraycopy(toCharArray(), offset() + srcBegin, dst, dstBegin,
   9.325               srcEnd - srcBegin);
   9.326      }
   9.327  
   9.328 @@ -905,16 +892,16 @@
   9.329          if (srcBegin < 0) {
   9.330              throw new StringIndexOutOfBoundsException(srcBegin);
   9.331          }
   9.332 -        if (srcEnd > count) {
   9.333 +        if (srcEnd > length()) {
   9.334              throw new StringIndexOutOfBoundsException(srcEnd);
   9.335          }
   9.336          if (srcBegin > srcEnd) {
   9.337              throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
   9.338          }
   9.339          int j = dstBegin;
   9.340 -        int n = offset + srcEnd;
   9.341 -        int i = offset + srcBegin;
   9.342 -        char[] val = value;   /* avoid getfield opcode */
   9.343 +        int n = offset() + srcEnd;
   9.344 +        int i = offset() + srcBegin;
   9.345 +        char[] val = toCharArray();   /* avoid getfield opcode */
   9.346  
   9.347          while (i < n) {
   9.348              dst[j++] = (byte)val[i++];
   9.349 @@ -1010,18 +997,22 @@
   9.350       * @see  #compareTo(String)
   9.351       * @see  #equalsIgnoreCase(String)
   9.352       */
   9.353 +    @JavaScriptBody(args = { "self", "obj" }, body = 
   9.354 +        "return obj.$instOf_java_lang_String && "
   9.355 +        + "self.toString() === obj.toString();"
   9.356 +    )
   9.357      public boolean equals(Object anObject) {
   9.358          if (this == anObject) {
   9.359              return true;
   9.360          }
   9.361          if (anObject instanceof String) {
   9.362              String anotherString = (String)anObject;
   9.363 -            int n = count;
   9.364 -            if (n == anotherString.count) {
   9.365 -                char v1[] = value;
   9.366 -                char v2[] = anotherString.value;
   9.367 -                int i = offset;
   9.368 -                int j = anotherString.offset;
   9.369 +            int n = length();
   9.370 +            if (n == anotherString.length()) {
   9.371 +                char v1[] = toCharArray();
   9.372 +                char v2[] = anotherString.toCharArray();
   9.373 +                int i = offset();
   9.374 +                int j = anotherString.offset();
   9.375                  while (n-- != 0) {
   9.376                      if (v1[i++] != v2[j++])
   9.377                          return false;
   9.378 @@ -1067,15 +1058,15 @@
   9.379       * @since  1.5
   9.380       */
   9.381      public boolean contentEquals(CharSequence cs) {
   9.382 -        if (count != cs.length())
   9.383 +        if (length() != cs.length())
   9.384              return false;
   9.385          // Argument is a StringBuffer, StringBuilder
   9.386          if (cs instanceof AbstractStringBuilder) {
   9.387 -            char v1[] = value;
   9.388 +            char v1[] = toCharArray();
   9.389              char v2[] = ((AbstractStringBuilder)cs).getValue();
   9.390 -            int i = offset;
   9.391 +            int i = offset();
   9.392              int j = 0;
   9.393 -            int n = count;
   9.394 +            int n = length();
   9.395              while (n-- != 0) {
   9.396                  if (v1[i++] != v2[j++])
   9.397                      return false;
   9.398 @@ -1086,10 +1077,10 @@
   9.399          if (cs.equals(this))
   9.400              return true;
   9.401          // Argument is a generic CharSequence
   9.402 -        char v1[] = value;
   9.403 -        int i = offset;
   9.404 +        char v1[] = toCharArray();
   9.405 +        int i = offset();
   9.406          int j = 0;
   9.407 -        int n = count;
   9.408 +        int n = length();
   9.409          while (n-- != 0) {
   9.410              if (v1[i++] != cs.charAt(j++))
   9.411                  return false;
   9.412 @@ -1127,8 +1118,8 @@
   9.413       */
   9.414      public boolean equalsIgnoreCase(String anotherString) {
   9.415          return (this == anotherString) ? true :
   9.416 -               (anotherString != null) && (anotherString.count == count) &&
   9.417 -               regionMatches(true, 0, anotherString, 0, count);
   9.418 +               (anotherString != null) && (anotherString.length() == length()) &&
   9.419 +               regionMatches(true, 0, anotherString, 0, length());
   9.420      }
   9.421  
   9.422      /**
   9.423 @@ -1173,13 +1164,13 @@
   9.424       *          lexicographically greater than the string argument.
   9.425       */
   9.426      public int compareTo(String anotherString) {
   9.427 -        int len1 = count;
   9.428 -        int len2 = anotherString.count;
   9.429 +        int len1 = length();
   9.430 +        int len2 = anotherString.length();
   9.431          int n = Math.min(len1, len2);
   9.432 -        char v1[] = value;
   9.433 -        char v2[] = anotherString.value;
   9.434 -        int i = offset;
   9.435 -        int j = anotherString.offset;
   9.436 +        char v1[] = toCharArray();
   9.437 +        char v2[] = anotherString.toCharArray();
   9.438 +        int i = offset();
   9.439 +        int j = anotherString.offset();
   9.440  
   9.441          if (i == j) {
   9.442              int k = i;
   9.443 @@ -1218,6 +1209,11 @@
   9.444       */
   9.445      public static final Comparator<String> CASE_INSENSITIVE_ORDER
   9.446                                           = new CaseInsensitiveComparator();
   9.447 +
   9.448 +    private static int offset() {
   9.449 +        return 0;
   9.450 +    }
   9.451 +    
   9.452      private static class CaseInsensitiveComparator
   9.453                           implements Comparator<String>, java.io.Serializable {
   9.454          // use serialVersionUID from JDK 1.2.2 for interoperability
   9.455 @@ -1304,13 +1300,13 @@
   9.456       */
   9.457      public boolean regionMatches(int toffset, String other, int ooffset,
   9.458                                   int len) {
   9.459 -        char ta[] = value;
   9.460 -        int to = offset + toffset;
   9.461 -        char pa[] = other.value;
   9.462 -        int po = other.offset + ooffset;
   9.463 +        char ta[] = toCharArray();
   9.464 +        int to = offset() + toffset;
   9.465 +        char pa[] = other.toCharArray();
   9.466 +        int po = other.offset() + ooffset;
   9.467          // Note: toffset, ooffset, or len might be near -1>>>1.
   9.468 -        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len)
   9.469 -            || (ooffset > (long)other.count - len)) {
   9.470 +        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len)
   9.471 +            || (ooffset > (long)other.length() - len)) {
   9.472              return false;
   9.473          }
   9.474          while (len-- > 0) {
   9.475 @@ -1373,13 +1369,13 @@
   9.476       */
   9.477      public boolean regionMatches(boolean ignoreCase, int toffset,
   9.478                             String other, int ooffset, int len) {
   9.479 -        char ta[] = value;
   9.480 -        int to = offset + toffset;
   9.481 -        char pa[] = other.value;
   9.482 -        int po = other.offset + ooffset;
   9.483 +        char ta[] = toCharArray();
   9.484 +        int to = offset() + toffset;
   9.485 +        char pa[] = other.toCharArray();
   9.486 +        int po = other.offset() + ooffset;
   9.487          // Note: toffset, ooffset, or len might be near -1>>>1.
   9.488 -        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) ||
   9.489 -                (ooffset > (long)other.count - len)) {
   9.490 +        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len) ||
   9.491 +                (ooffset > (long)other.length() - len)) {
   9.492              return false;
   9.493          }
   9.494          while (len-- > 0) {
   9.495 @@ -1428,14 +1424,18 @@
   9.496       *          this.substring(toffset).startsWith(prefix)
   9.497       *          </pre>
   9.498       */
   9.499 +    @JavaScriptBody(args = { "self", "find", "from" }, body=
   9.500 +        "find = find.toString();\n" +
   9.501 +        "return self.toString().substring(from, find.length) === find;\n"
   9.502 +    )
   9.503      public boolean startsWith(String prefix, int toffset) {
   9.504 -        char ta[] = value;
   9.505 -        int to = offset + toffset;
   9.506 -        char pa[] = prefix.value;
   9.507 -        int po = prefix.offset;
   9.508 -        int pc = prefix.count;
   9.509 +        char ta[] = toCharArray();
   9.510 +        int to = offset() + toffset;
   9.511 +        char pa[] = prefix.toCharArray();
   9.512 +        int po = prefix.offset();
   9.513 +        int pc = prefix.length();
   9.514          // Note: toffset might be near -1>>>1.
   9.515 -        if ((toffset < 0) || (toffset > count - pc)) {
   9.516 +        if ((toffset < 0) || (toffset > length() - pc)) {
   9.517              return false;
   9.518          }
   9.519          while (--pc >= 0) {
   9.520 @@ -1475,7 +1475,7 @@
   9.521       *          as determined by the {@link #equals(Object)} method.
   9.522       */
   9.523      public boolean endsWith(String suffix) {
   9.524 -        return startsWith(suffix, count - suffix.count);
   9.525 +        return startsWith(suffix, length() - suffix.length());
   9.526      }
   9.527  
   9.528      /**
   9.529 @@ -1491,12 +1491,21 @@
   9.530       *
   9.531       * @return  a hash code value for this object.
   9.532       */
   9.533 +    @JavaScriptBody(args = "self", body = 
   9.534 +        "var h = 0;\n" +
   9.535 +        "var s = self.toString();\n" +
   9.536 +        "for (var i = 0; i < s.length; i++) {\n" +
   9.537 +        "  var high = (h >> 16) & 0xffff, low = h & 0xffff;\n" +
   9.538 +        "  h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff;\n" +
   9.539 +        "}\n" +
   9.540 +        "return h;\n"
   9.541 +    )
   9.542      public int hashCode() {
   9.543          int h = hash;
   9.544 -        if (h == 0 && count > 0) {
   9.545 -            int off = offset;
   9.546 -            char val[] = value;
   9.547 -            int len = count;
   9.548 +        if (h == 0 && length() > 0) {
   9.549 +            int off = offset();
   9.550 +            char val[] = toCharArray();
   9.551 +            int len = length();
   9.552  
   9.553              for (int i = 0; i < len; i++) {
   9.554                  h = 31*h + val[off++];
   9.555 @@ -1573,10 +1582,14 @@
   9.556       *          than or equal to <code>fromIndex</code>, or <code>-1</code>
   9.557       *          if the character does not occur.
   9.558       */
   9.559 +    @JavaScriptBody(args = { "self", "ch", "from" }, body = 
   9.560 +        "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" +
   9.561 +        "return self.toString().indexOf(ch, from);\n"
   9.562 +    )
   9.563      public int indexOf(int ch, int fromIndex) {
   9.564          if (fromIndex < 0) {
   9.565              fromIndex = 0;
   9.566 -        } else if (fromIndex >= count) {
   9.567 +        } else if (fromIndex >= length()) {
   9.568              // Note: fromIndex might be near -1>>>1.
   9.569              return -1;
   9.570          }
   9.571 @@ -1584,9 +1597,9 @@
   9.572          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
   9.573              // handle most cases here (ch is a BMP code point or a
   9.574              // negative value (invalid code point))
   9.575 -            final char[] value = this.value;
   9.576 -            final int offset = this.offset;
   9.577 -            final int max = offset + count;
   9.578 +            final char[] value = this.toCharArray();
   9.579 +            final int offset = this.offset();
   9.580 +            final int max = offset + length();
   9.581              for (int i = offset + fromIndex; i < max ; i++) {
   9.582                  if (value[i] == ch) {
   9.583                      return i - offset;
   9.584 @@ -1603,11 +1616,11 @@
   9.585       */
   9.586      private int indexOfSupplementary(int ch, int fromIndex) {
   9.587          if (Character.isValidCodePoint(ch)) {
   9.588 -            final char[] value = this.value;
   9.589 -            final int offset = this.offset;
   9.590 +            final char[] value = this.toCharArray();
   9.591 +            final int offset = this.offset();
   9.592              final char hi = Character.highSurrogate(ch);
   9.593              final char lo = Character.lowSurrogate(ch);
   9.594 -            final int max = offset + count - 1;
   9.595 +            final int max = offset + length() - 1;
   9.596              for (int i = offset + fromIndex; i < max; i++) {
   9.597                  if (value[i] == hi && value[i+1] == lo) {
   9.598                      return i - offset;
   9.599 @@ -1641,7 +1654,7 @@
   9.600       *          <code>-1</code> if the character does not occur.
   9.601       */
   9.602      public int lastIndexOf(int ch) {
   9.603 -        return lastIndexOf(ch, count - 1);
   9.604 +        return lastIndexOf(ch, length() - 1);
   9.605      }
   9.606  
   9.607      /**
   9.608 @@ -1682,9 +1695,9 @@
   9.609          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
   9.610              // handle most cases here (ch is a BMP code point or a
   9.611              // negative value (invalid code point))
   9.612 -            final char[] value = this.value;
   9.613 -            final int offset = this.offset;
   9.614 -            int i = offset + Math.min(fromIndex, count - 1);
   9.615 +            final char[] value = this.toCharArray();
   9.616 +            final int offset = this.offset();
   9.617 +            int i = offset + Math.min(fromIndex, length() - 1);
   9.618              for (; i >= offset ; i--) {
   9.619                  if (value[i] == ch) {
   9.620                      return i - offset;
   9.621 @@ -1701,11 +1714,11 @@
   9.622       */
   9.623      private int lastIndexOfSupplementary(int ch, int fromIndex) {
   9.624          if (Character.isValidCodePoint(ch)) {
   9.625 -            final char[] value = this.value;
   9.626 -            final int offset = this.offset;
   9.627 +            final char[] value = this.toCharArray();
   9.628 +            final int offset = this.offset();
   9.629              char hi = Character.highSurrogate(ch);
   9.630              char lo = Character.lowSurrogate(ch);
   9.631 -            int i = offset + Math.min(fromIndex, count - 2);
   9.632 +            int i = offset + Math.min(fromIndex, length() - 2);
   9.633              for (; i >= offset; i--) {
   9.634                  if (value[i] == hi && value[i+1] == lo) {
   9.635                      return i - offset;
   9.636 @@ -1749,9 +1762,11 @@
   9.637       *          starting at the specified index,
   9.638       *          or {@code -1} if there is no such occurrence.
   9.639       */
   9.640 +    @JavaScriptBody(args = { "self", "str", "fromIndex" }, body =
   9.641 +        "return self.toString().indexOf(str.toString(), fromIndex) >= 0;"
   9.642 +    )
   9.643      public int indexOf(String str, int fromIndex) {
   9.644 -        return indexOf(value, offset, count,
   9.645 -                       str.value, str.offset, str.count, fromIndex);
   9.646 +        return indexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex);
   9.647      }
   9.648  
   9.649      /**
   9.650 @@ -1821,7 +1836,7 @@
   9.651       *          or {@code -1} if there is no such occurrence.
   9.652       */
   9.653      public int lastIndexOf(String str) {
   9.654 -        return lastIndexOf(str, count);
   9.655 +        return lastIndexOf(str, length());
   9.656      }
   9.657  
   9.658      /**
   9.659 @@ -1841,8 +1856,7 @@
   9.660       *          or {@code -1} if there is no such occurrence.
   9.661       */
   9.662      public int lastIndexOf(String str, int fromIndex) {
   9.663 -        return lastIndexOf(value, offset, count,
   9.664 -                           str.value, str.offset, str.count, fromIndex);
   9.665 +        return lastIndexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex);
   9.666      }
   9.667  
   9.668      /**
   9.669 @@ -1922,7 +1936,7 @@
   9.670       *             length of this <code>String</code> object.
   9.671       */
   9.672      public String substring(int beginIndex) {
   9.673 -        return substring(beginIndex, count);
   9.674 +        return substring(beginIndex, length());
   9.675      }
   9.676  
   9.677      /**
   9.678 @@ -1947,18 +1961,21 @@
   9.679       *             <code>beginIndex</code> is larger than
   9.680       *             <code>endIndex</code>.
   9.681       */
   9.682 +    @JavaScriptBody(args = { "self", "beginIndex", "endIndex" }, body = 
   9.683 +        "return self.toString().substring(beginIndex, endIndex);"
   9.684 +    )
   9.685      public String substring(int beginIndex, int endIndex) {
   9.686          if (beginIndex < 0) {
   9.687              throw new StringIndexOutOfBoundsException(beginIndex);
   9.688          }
   9.689 -        if (endIndex > count) {
   9.690 +        if (endIndex > length()) {
   9.691              throw new StringIndexOutOfBoundsException(endIndex);
   9.692          }
   9.693          if (beginIndex > endIndex) {
   9.694              throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
   9.695          }
   9.696 -        return ((beginIndex == 0) && (endIndex == count)) ? this :
   9.697 -            new String(value, offset + beginIndex, endIndex - beginIndex);
   9.698 +        return ((beginIndex == 0) && (endIndex == length())) ? this :
   9.699 +            new String(toCharArray(), offset() + beginIndex, endIndex - beginIndex);
   9.700      }
   9.701  
   9.702      /**
   9.703 @@ -2018,10 +2035,10 @@
   9.704          if (otherLen == 0) {
   9.705              return this;
   9.706          }
   9.707 -        char buf[] = new char[count + otherLen];
   9.708 -        getChars(0, count, buf, 0);
   9.709 -        str.getChars(0, otherLen, buf, count);
   9.710 -        return new String(buf, 0, count + otherLen);
   9.711 +        char buf[] = new char[length() + otherLen];
   9.712 +        getChars(0, length(), buf, 0);
   9.713 +        str.getChars(0, otherLen, buf, length());
   9.714 +        return new String(buf, 0, length() + otherLen);
   9.715      }
   9.716  
   9.717      /**
   9.718 @@ -2053,12 +2070,24 @@
   9.719       * @return  a string derived from this string by replacing every
   9.720       *          occurrence of <code>oldChar</code> with <code>newChar</code>.
   9.721       */
   9.722 +    @JavaScriptBody(args = { "self", "arg1", "arg2" }, body =
   9.723 +        "if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);\n" +
   9.724 +        "if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);\n" +
   9.725 +        "var s = self.toString();\n" +
   9.726 +        "for (;;) {\n" +
   9.727 +        "  var ret = s.replace(arg1, arg2);\n" +
   9.728 +        "  if (ret === s) {\n" +
   9.729 +        "    return ret;\n" +
   9.730 +        "  }\n" +
   9.731 +        "  s = ret;\n" +
   9.732 +        "}"
   9.733 +    )
   9.734      public String replace(char oldChar, char newChar) {
   9.735          if (oldChar != newChar) {
   9.736 -            int len = count;
   9.737 +            int len = length();
   9.738              int i = -1;
   9.739 -            char[] val = value; /* avoid getfield opcode */
   9.740 -            int off = offset;   /* avoid getfield opcode */
   9.741 +            char[] val = toCharArray(); /* avoid getfield opcode */
   9.742 +            int off = offset();   /* avoid getfield opcode */
   9.743  
   9.744              while (++i < len) {
   9.745                  if (val[off + i] == oldChar) {
   9.746 @@ -2720,10 +2749,10 @@
   9.747       *          trailing white space.
   9.748       */
   9.749      public String trim() {
   9.750 -        int len = count;
   9.751 +        int len = length();
   9.752          int st = 0;
   9.753 -        int off = offset;      /* avoid getfield opcode */
   9.754 -        char[] val = value;    /* avoid getfield opcode */
   9.755 +        int off = offset();      /* avoid getfield opcode */
   9.756 +        char[] val = toCharArray();    /* avoid getfield opcode */
   9.757  
   9.758          while ((st < len) && (val[off + st] <= ' ')) {
   9.759              st++;
   9.760 @@ -2731,7 +2760,7 @@
   9.761          while ((st < len) && (val[off + len - 1] <= ' ')) {
   9.762              len--;
   9.763          }
   9.764 -        return ((st > 0) || (len < count)) ? substring(st, len) : this;
   9.765 +        return ((st > 0) || (len < length())) ? substring(st, len) : this;
   9.766      }
   9.767  
   9.768      /**
   9.769 @@ -2739,6 +2768,7 @@
   9.770       *
   9.771       * @return  the string itself.
   9.772       */
   9.773 +    @JavaScriptBody(args = "self", body = "return self.toString();")
   9.774      public String toString() {
   9.775          return this;
   9.776      }
   9.777 @@ -2750,9 +2780,10 @@
   9.778       *          of this string and whose contents are initialized to contain
   9.779       *          the character sequence represented by this string.
   9.780       */
   9.781 +    @JavaScriptBody(args = "self", body = "return self.toString().split('');")
   9.782      public char[] toCharArray() {
   9.783 -        char result[] = new char[count];
   9.784 -        getChars(0, count, result, 0);
   9.785 +        char result[] = new char[length()];
   9.786 +        getChars(0, length(), result, 0);
   9.787          return result;
   9.788      }
   9.789  
    10.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js	Thu Nov 29 20:19:00 2012 +0100
    10.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js	Mon Dec 03 14:44:49 2012 +0100
    10.3 @@ -1,2320 +1,2 @@
    10.4 -/* */
    10.5 -
    10.6 -
    10.7 -function java_lang_String_consVAC(self,charArr) {
    10.8 -    for (var i = 0; i < charArr.length; i++) {
    10.9 -        if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);
   10.10 -    }
   10.11 -    self.r = charArr.join("");
   10.12 -}
   10.13 -
   10.14 -function java_lang_String_consVACII(self, charArr, off, cnt) {
   10.15 -    var up = off + cnt;
   10.16 -    for (var i = off; i < up; i++) {
   10.17 -        if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);
   10.18 -    }
   10.19 -    self.r = charArr.slice(off, up).join("");
   10.20 -}
   10.21 -
   10.22 -function java_lang_String_charAtCI(arg0,arg1) {
   10.23 -    return arg0.toString().charCodeAt(arg1);
   10.24 -}
   10.25 -function java_lang_String_lengthI(arg0) {
   10.26 -    return arg0.toString().length;
   10.27 -}
   10.28 -function java_lang_String_isEmptyZ(arg0) {
   10.29 -    return arg0.toString().length === 0;
   10.30 -}
   10.31 -function java_lang_String_valueOfLjava_lang_StringI(n) {
   10.32 -    return n.toString();
   10.33 -}
   10.34 -
   10.35 -function java_lang_String_startsWithZLjava_lang_StringI(self,find,from) {
   10.36 -    find = find.toString();
   10.37 -    return self.toString().substring(from, find.length) === find;
   10.38 -}
   10.39 -function java_lang_String_startsWithZLjava_lang_String(self,find) {
   10.40 -    find = find.toString();
   10.41 -    return self.toString().substring(0, find.length) === find;
   10.42 -}
   10.43 -function java_lang_String_endsWithZLjava_lang_String(self,find) {
   10.44 -    self = self.toString();
   10.45 -    find = find.toString();
   10.46 -    if (find.length > self.length) {
   10.47 -        return false;
   10.48 -    }
   10.49 -    return self.substring(self.length - find.length) === find;
   10.50 -}
   10.51 -
   10.52 -function java_lang_String_indexOfII(arg0,ch) {
   10.53 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
   10.54 -    return arg0.toString().indexOf(ch);
   10.55 -}
   10.56 -function java_lang_String_indexOfIII(arg0,ch,from) {
   10.57 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
   10.58 -    return arg0.toString().indexOf(ch, from);
   10.59 -}
   10.60 -
   10.61 -function java_lang_String_getCharsVACI(self, arr, to) {
   10.62 -    var s = self.toString();
   10.63 -    for (var i = 0; i < s.length; i++) {
   10.64 -        arr[to++] = s[i];
   10.65 -    }
   10.66 -}
   10.67 -
   10.68 -/*
   10.69 -function java_lang_String_codePointAtII(arg0,arg1) {
   10.70 -  var arg2;
   10.71 -;
   10.72 -  var stack = new Array(4);
   10.73 -  var gt = 0;
   10.74 -  for(;;) switch(gt) {
   10.75 -    case 0: stack.push(arg1); // 27
   10.76 -    case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11
   10.77 -    case 4: stack.push(arg1); // 27
   10.78 -    case 5: stack.push(arg0); // 42
   10.79 -    case 6: stack.push(stack.pop().count); // 180 1 97
   10.80 -    case 9: if (stack.pop() > stack.pop()) { gt = 21; continue; } // 161 0 12
   10.81 -    case 12: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   10.82 -    case 15: stack.push(stack[stack.length - 1]); // 89
   10.83 -    case 16: stack.push(arg1); // 27
   10.84 -    case 17: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   10.85 -    case 20:  // 191
   10.86 -    case 21: stack.push(arg0); // 42
   10.87 -    case 22: stack.push(stack.pop().value); // 180 1 100
   10.88 -    case 25: stack.push(arg0); // 42
   10.89 -    case 26: stack.push(stack.pop().offset); // 180 1 99
   10.90 -    case 29: stack.push(arg1); // 27
   10.91 -    case 30: stack.push(stack.pop() + stack.pop()); // 96
   10.92 -    case 31: stack.push(arg0); // 42
   10.93 -    case 32: stack.push(stack.pop().offset); // 180 1 99
   10.94 -    case 35: stack.push(arg0); // 42
   10.95 -    case 36: stack.push(stack.pop().count); // 180 1 97
   10.96 -    case 39: stack.push(stack.pop() + stack.pop()); // 96
   10.97 -    case 40: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_codePointAtImplAIACAIAI(v0, v1, v2)); } // 184 1 113
   10.98 -    case 43: return stack.pop(); // 172
   10.99 -  }
  10.100 -}
  10.101 -function java_lang_String_codePointBeforeII(arg0,arg1) {
  10.102 -  var arg2;
  10.103 -  var arg3;
  10.104 -;
  10.105 -  var stack = new Array(3);
  10.106 -  var gt = 0;
  10.107 -  for(;;) switch(gt) {
  10.108 -    case 0: stack.push(arg1); // 27
  10.109 -    case 1: stack.push(1); // 4
  10.110 -    case 2: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.111 -    case 3: arg2 = stack.pop(); // 61
  10.112 -    case 4: stack.push(arg2); // 28
  10.113 -    case 5: if (stack.pop() < 0) { gt = 16; continue; } // 155 0 11
  10.114 -    case 8: stack.push(arg2); // 28
  10.115 -    case 9: stack.push(arg0); // 42
  10.116 -    case 10: stack.push(stack.pop().count); // 180 1 97
  10.117 -    case 13: if (stack.pop() > stack.pop()) { gt = 25; continue; } // 161 0 12
  10.118 -    case 16: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
  10.119 -    case 19: stack.push(stack[stack.length - 1]); // 89
  10.120 -    case 20: stack.push(arg1); // 27
  10.121 -    case 21: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
  10.122 -    case 24:  // 191
  10.123 -    case 25: stack.push(arg0); // 42
  10.124 -    case 26: stack.push(stack.pop().value); // 180 1 100
  10.125 -    case 29: stack.push(arg0); // 42
  10.126 -    case 30: stack.push(stack.pop().offset); // 180 1 99
  10.127 -    case 33: stack.push(arg1); // 27
  10.128 -    case 34: stack.push(stack.pop() + stack.pop()); // 96
  10.129 -    case 35: stack.push(arg0); // 42
  10.130 -    case 36: stack.push(stack.pop().offset); // 180 1 99
  10.131 -    case 39: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_codePointBeforeImplAIACAIAI(v0, v1, v2)); } // 184 1 114
  10.132 -    case 42: return stack.pop(); // 172
  10.133 -  }
  10.134 -}
  10.135 -function java_lang_String_codePointCountIII(arg0,arg1,arg2) {
  10.136 -  var arg3;
  10.137 -;
  10.138 -  var stack = new Array(4);
  10.139 -  var gt = 0;
  10.140 -  for(;;) switch(gt) {
  10.141 -    case 0: stack.push(arg1); // 27
  10.142 -    case 1: if (stack.pop() < 0) { gt = 17; continue; } // 155 0 16
  10.143 -    case 4: stack.push(arg2); // 28
  10.144 -    case 5: stack.push(arg0); // 42
  10.145 -    case 6: stack.push(stack.pop().count); // 180 1 97
  10.146 -    case 9: if (stack.pop() < stack.pop()) { gt = 17; continue; } // 163 0 8
  10.147 -    case 12: stack.push(arg1); // 27
  10.148 -    case 13: stack.push(arg2); // 28
  10.149 -    case 14: if (stack.pop() >= stack.pop()) { gt = 25; continue; } // 164 0 11
  10.150 -    case 17: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194
  10.151 -    case 20: stack.push(stack[stack.length - 1]); // 89
  10.152 -    case 21: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124
  10.153 -    case 24:  // 191
  10.154 -    case 25: stack.push(arg0); // 42
  10.155 -    case 26: stack.push(stack.pop().value); // 180 1 100
  10.156 -    case 29: stack.push(arg0); // 42
  10.157 -    case 30: stack.push(stack.pop().offset); // 180 1 99
  10.158 -    case 33: stack.push(arg1); // 27
  10.159 -    case 34: stack.push(stack.pop() + stack.pop()); // 96
  10.160 -    case 35: stack.push(arg2); // 28
  10.161 -    case 36: stack.push(arg1); // 27
  10.162 -    case 37: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.163 -    case 38: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_codePointCountImplAIACAIAI(v0, v1, v2)); } // 184 1 115
  10.164 -    case 41: return stack.pop(); // 172
  10.165 -  }
  10.166 -}
  10.167 -function java_lang_String_offsetByCodePointsIII(arg0,arg1,arg2) {
  10.168 -  var arg3;
  10.169 -;
  10.170 -  var stack = new Array(5);
  10.171 -  var gt = 0;
  10.172 -  for(;;) switch(gt) {
  10.173 -    case 0: stack.push(arg1); // 27
  10.174 -    case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11
  10.175 -    case 4: stack.push(arg1); // 27
  10.176 -    case 5: stack.push(arg0); // 42
  10.177 -    case 6: stack.push(stack.pop().count); // 180 1 97
  10.178 -    case 9: if (stack.pop() >= stack.pop()) { gt = 20; continue; } // 164 0 11
  10.179 -    case 12: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194
  10.180 -    case 15: stack.push(stack[stack.length - 1]); // 89
  10.181 -    case 16: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124
  10.182 -    case 19:  // 191
  10.183 -    case 20: stack.push(arg0); // 42
  10.184 -    case 21: stack.push(stack.pop().value); // 180 1 100
  10.185 -    case 24: stack.push(arg0); // 42
  10.186 -    case 25: stack.push(stack.pop().offset); // 180 1 99
  10.187 -    case 28: stack.push(arg0); // 42
  10.188 -    case 29: stack.push(stack.pop().count); // 180 1 97
  10.189 -    case 32: stack.push(arg0); // 42
  10.190 -    case 33: stack.push(stack.pop().offset); // 180 1 99
  10.191 -    case 36: stack.push(arg1); // 27
  10.192 -    case 37: stack.push(stack.pop() + stack.pop()); // 96
  10.193 -    case 38: stack.push(arg2); // 28
  10.194 -    case 39: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_offsetByCodePointsImplAIACAIAIAIAI(v0, v1, v2, v3, v4)); } // 184 1 116
  10.195 -    case 42: stack.push(arg0); // 42
  10.196 -    case 43: stack.push(stack.pop().offset); // 180 1 99
  10.197 -    case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.198 -    case 47: return stack.pop(); // 172
  10.199 -  }
  10.200 -}
  10.201 -*/
  10.202 -
  10.203 -// public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
  10.204 -function java_lang_String_getCharsVIIACAI(arg0,arg1,arg2,arg3,arg4) {
  10.205 -    var s = arg0.toString();
  10.206 -    while (arg1 < arg2) {
  10.207 -        arg3[arg4++] = s[arg1++];
  10.208 -    }
  10.209 -}
  10.210 -
  10.211 -/*
  10.212 -function java_lang_String_getBytesVIIABI(arg0,arg1,arg2,arg3,arg4) {
  10.213 -  var arg5;
  10.214 -  var arg6;
  10.215 -  var arg7;
  10.216 -  var arg8;
  10.217 -  var arg9;
  10.218 -;
  10.219 -  var stack = new Array(4);
  10.220 -  var gt = 0;
  10.221 -  for(;;) switch(gt) {
  10.222 -    case 0: stack.push(arg1); // 27
  10.223 -    case 1: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 12
  10.224 -    case 4: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
  10.225 -    case 7: stack.push(stack[stack.length - 1]); // 89
  10.226 -    case 8: stack.push(arg1); // 27
  10.227 -    case 9: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
  10.228 -    case 12:  // 191
  10.229 -    case 13: stack.push(arg2); // 28
  10.230 -    case 14: stack.push(arg0); // 42
  10.231 -    case 15: stack.push(stack.pop().count); // 180 1 97
  10.232 -    case 18: if (stack.pop() >= stack.pop()) { gt = 30; continue; } // 164 0 12
  10.233 -    case 21: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
  10.234 -    case 24: stack.push(stack[stack.length - 1]); // 89
  10.235 -    case 25: stack.push(arg2); // 28
  10.236 -    case 26: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
  10.237 -    case 29:  // 191
  10.238 -    case 30: stack.push(arg1); // 27
  10.239 -    case 31: stack.push(arg2); // 28
  10.240 -    case 32: if (stack.pop() >= stack.pop()) { gt = 46; continue; } // 164 0 14
  10.241 -    case 35: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
  10.242 -    case 38: stack.push(stack[stack.length - 1]); // 89
  10.243 -    case 39: stack.push(arg2); // 28
  10.244 -    case 40: stack.push(arg1); // 27
  10.245 -    case 41: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.246 -    case 42: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
  10.247 -    case 45:  // 191
  10.248 -    case 46: stack.push(arg4); // 21 4
  10.249 -    case 48: arg5 = stack.pop() // 54 5
  10.250 -    case 50: stack.push(arg0); // 42
  10.251 -    case 51: stack.push(stack.pop().offset); // 180 1 99
  10.252 -    case 54: stack.push(arg2); // 28
  10.253 -    case 55: stack.push(stack.pop() + stack.pop()); // 96
  10.254 -    case 56: arg6 = stack.pop() // 54 6
  10.255 -    case 58: stack.push(arg0); // 42
  10.256 -    case 59: stack.push(stack.pop().offset); // 180 1 99
  10.257 -    case 62: stack.push(arg1); // 27
  10.258 -    case 63: stack.push(stack.pop() + stack.pop()); // 96
  10.259 -    case 64: arg7 = stack.pop() // 54 7
  10.260 -    case 66: stack.push(arg0); // 42
  10.261 -    case 67: stack.push(stack.pop().value); // 180 1 100
  10.262 -    case 70: arg8 = stack.pop() // 58 8
  10.263 -    case 72: stack.push(arg7); // 21 7
  10.264 -    case 74: stack.push(arg6); // 21 6
  10.265 -    case 76: if (stack.pop() <= stack.pop()) { gt = 98; continue; } // 162 0 22
  10.266 -    case 79: stack.push(arg3); // 45
  10.267 -    case 80: stack.push(arg5); // 21 5
  10.268 -    case 82: arg5++; // 132 5 1
  10.269 -    case 85: stack.push(arg8); // 25 8
  10.270 -    case 87: stack.push(arg7); // 21 7
  10.271 -    case 89: arg7++; // 132 7 1
  10.272 -    case 92: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.273 -    case 93: // number conversion  // 145
  10.274 -    case 94: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 84
  10.275 -    case 95: gt = 72; continue; // 167 255 233
  10.276 -    case 98: return; // 177
  10.277 -  }
  10.278 -}
  10.279 -function java_lang_String_getBytesABLjava_lang_String(arg0,arg1) {
  10.280 -  var arg2;
  10.281 -;
  10.282 -  var stack = new Array(4);
  10.283 -  var gt = 0;
  10.284 -  for(;;) switch(gt) {
  10.285 -    case 0: stack.push(arg1); // 43
  10.286 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
  10.287 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
  10.288 -    case 7: stack.push(stack[stack.length - 1]); // 89
  10.289 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
  10.290 -    case 11:  // 191
  10.291 -    case 12: stack.push(arg1); // 43
  10.292 -    case 13: stack.push(arg0); // 42
  10.293 -    case 14: stack.push(stack.pop().value); // 180 1 100
  10.294 -    case 17: stack.push(arg0); // 42
  10.295 -    case 18: stack.push(stack.pop().offset); // 180 1 99
  10.296 -    case 21: stack.push(arg0); // 42
  10.297 -    case 22: stack.push(stack.pop().count); // 180 1 97
  10.298 -    case 25: { var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_StringCoding_encodeABLjava_lang_StringACAIAI(v0, v1, v2, v3)); } // 184 1 166
  10.299 -    case 28: return stack.pop(); // 176
  10.300 -  }
  10.301 -}
  10.302 -function java_lang_String_getBytesABLjava_nio_charset_Charset(arg0,arg1) {
  10.303 -  var arg2;
  10.304 -;
  10.305 -  var stack = new Array(4);
  10.306 -  var gt = 0;
  10.307 -  for(;;) switch(gt) {
  10.308 -    case 0: stack.push(arg1); // 43
  10.309 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
  10.310 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
  10.311 -    case 7: stack.push(stack[stack.length - 1]); // 89
  10.312 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
  10.313 -    case 11:  // 191
  10.314 -    case 12: stack.push(arg1); // 43
  10.315 -    case 13: stack.push(arg0); // 42
  10.316 -    case 14: stack.push(stack.pop().value); // 180 1 100
  10.317 -    case 17: stack.push(arg0); // 42
  10.318 -    case 18: stack.push(stack.pop().offset); // 180 1 99
  10.319 -    case 21: stack.push(arg0); // 42
  10.320 -    case 22: stack.push(stack.pop().count); // 180 1 97
  10.321 -    case 25: { var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_StringCoding_encodeABLjava_nio_charset_CharsetACAIAI(v0, v1, v2, v3)); } // 184 1 168
  10.322 -    case 28: return stack.pop(); // 176
  10.323 -  }
  10.324 -}
  10.325 -function java_lang_String_getBytesAB(arg0) {
  10.326 -  var arg1;
  10.327 -;
  10.328 -  var stack = new Array(3);
  10.329 -  var gt = 0;
  10.330 -  for(;;) switch(gt) {
  10.331 -    case 0: stack.push(arg0); // 42
  10.332 -    case 1: stack.push(stack.pop().value); // 180 1 100
  10.333 -    case 4: stack.push(arg0); // 42
  10.334 -    case 5: stack.push(stack.pop().offset); // 180 1 99
  10.335 -    case 8: stack.push(arg0); // 42
  10.336 -    case 9: stack.push(stack.pop().count); // 180 1 97
  10.337 -    case 12: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_StringCoding_encodeABACAIAI(v0, v1, v2)); } // 184 1 164
  10.338 -    case 15: return stack.pop(); // 176
  10.339 -  }
  10.340 -}
  10.341 -*/
  10.342 -function java_lang_String_equalsZLjava_lang_Object(arg0,arg1) {
  10.343 -    return arg0.toString() === arg1.toString();
  10.344 -}
  10.345 -
  10.346 -function java_lang_String_hashCodeI(self) {
  10.347 -    var h = 0;
  10.348 -    var s = self.toString();
  10.349 -    for (var i = 0; i < s.length; i++) {
  10.350 -        var high = (h >> 16) & 0xffff, low = h & 0xffff;
  10.351 -        h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff;
  10.352 -    }
  10.353 -    return h;
  10.354 -}
  10.355 -
  10.356 -/*
  10.357 -function java_lang_String_contentEqualsZLjava_lang_StringBuffer(arg0,arg1) {
  10.358 -  var arg2;
  10.359 -  var arg3;
  10.360 -  var arg4;
  10.361 -;
  10.362 -  var stack = new Array(2);
  10.363 -  var gt = 0;
  10.364 -  for(;;) switch(gt) {
  10.365 -    case 0: stack.push(arg1); // 43
  10.366 -    case 1: stack.push(stack[stack.length - 1]); // 89
  10.367 -    case 2: arg2 = stack.pop(); // 77
  10.368 -    case 3:  // 194
  10.369 -    case 4: stack.push(arg0); // 42
  10.370 -    case 5: stack.push(arg1); // 43
  10.371 -    case 6: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.contentEqualsZLjava_lang_CharSequence(self, v0)); } // 182 1 146
  10.372 -    case 9: stack.push(arg2); // 44
  10.373 -    case 10:  // 195
  10.374 -    case 11: return stack.pop(); // 172
  10.375 -    case 12: arg3 = stack.pop(); // 78
  10.376 -    case 13: stack.push(arg2); // 44
  10.377 -    case 14:  // 195
  10.378 -    case 15: stack.push(arg3); // 45
  10.379 -    case 16:  // 191
  10.380 -  }
  10.381 -}
  10.382 -function java_lang_String_contentEqualsZLjava_lang_CharSequence(arg0,arg1) {
  10.383 -  var arg2;
  10.384 -  var arg3;
  10.385 -  var arg4;
  10.386 -  var arg5;
  10.387 -  var arg6;
  10.388 -  var arg7;
  10.389 -;
  10.390 -  var stack = new Array(3);
  10.391 -  var gt = 0;
  10.392 -  for(;;) switch(gt) {
  10.393 -    case 0: stack.push(arg0); // 42
  10.394 -    case 1: stack.push(stack.pop().count); // 180 1 97
  10.395 -    case 4: stack.push(arg1); // 43
  10.396 -    case 5: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 185 1 188
  10.397 -    case 8:  // 1
  10.398 -    case 9:  // 0
  10.399 -    case 10: if (stack.pop() == stack.pop()) { gt = 15; continue; } // 159 0 5
  10.400 -    case 13: stack.push(0); // 3
  10.401 -    case 14: return stack.pop(); // 172
  10.402 -    case 15: stack.push(arg1); // 43
  10.403 -    case 16: stack.push(stack.pop().$instOf_java_lang_AbstractStringBuilder ? 1 : 0); // 193 0 186
  10.404 -    case 19: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 58
  10.405 -    case 22: stack.push(arg0); // 42
  10.406 -    case 23: stack.push(stack.pop().value); // 180 1 100
  10.407 -    case 26: arg2 = stack.pop(); // 77
  10.408 -    case 27: stack.push(arg1); // 43
  10.409 -    case 28: if(stack[stack.length - 1].$instOf_java_lang_AbstractStringBuilder != 1) throw {}; // 192 0 186
  10.410 -    case 31: { var self = stack.pop(); stack.push(self.getValueAC(self)); } // 182 1 103
  10.411 -    case 34: arg3 = stack.pop(); // 78
  10.412 -    case 35: stack.push(arg0); // 42
  10.413 -    case 36: stack.push(stack.pop().offset); // 180 1 99
  10.414 -    case 39: arg4 = stack.pop() // 54 4
  10.415 -    case 41: stack.push(0); // 3
  10.416 -    case 42: arg5 = stack.pop() // 54 5
  10.417 -    case 44: stack.push(arg0); // 42
  10.418 -    case 45: stack.push(stack.pop().count); // 180 1 97
  10.419 -    case 48: arg6 = stack.pop() // 54 6
  10.420 -    case 50: stack.push(arg6); // 21 6
  10.421 -    case 52: arg6 += 255; // 132 6 255
  10.422 -    case 55: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 22
  10.423 -    case 58: stack.push(arg2); // 44
  10.424 -    case 59: stack.push(arg4); // 21 4
  10.425 -    case 61: arg4++; // 132 4 1
  10.426 -    case 64: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.427 -    case 65: stack.push(arg3); // 45
  10.428 -    case 66: stack.push(arg5); // 21 5
  10.429 -    case 68: arg5++; // 132 5 1
  10.430 -    case 71: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.431 -    case 72: if (stack.pop() == stack.pop()) { gt = 50; continue; } // 159 255 234
  10.432 -    case 75: stack.push(0); // 3
  10.433 -    case 76: return stack.pop(); // 172
  10.434 -    case 77: stack.push(arg1); // 43
  10.435 -    case 78: stack.push(arg0); // 42
  10.436 -    case 79: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.equalsZLjava_lang_Object(self, v0)); } // 182 1 131
  10.437 -    case 82: if (stack.pop() == 0) { gt = 87; continue; } // 153 0 5
  10.438 -    case 85: stack.push(1); // 4
  10.439 -    case 86: return stack.pop(); // 172
  10.440 -    case 87: stack.push(arg0); // 42
  10.441 -    case 88: stack.push(stack.pop().value); // 180 1 100
  10.442 -    case 91: arg2 = stack.pop(); // 77
  10.443 -    case 92: stack.push(arg0); // 42
  10.444 -    case 93: stack.push(stack.pop().offset); // 180 1 99
  10.445 -    case 96: arg3 = stack.pop(); // 62
  10.446 -    case 97: stack.push(0); // 3
  10.447 -    case 98: arg4 = stack.pop() // 54 4
  10.448 -    case 100: stack.push(arg0); // 42
  10.449 -    case 101: stack.push(stack.pop().count); // 180 1 97
  10.450 -    case 104: arg5 = stack.pop() // 54 5
  10.451 -    case 106: stack.push(arg5); // 21 5
  10.452 -    case 108: arg5 += 255; // 132 5 255
  10.453 -    case 111: if (stack.pop() == 0) { gt = 136; continue; } // 153 0 25
  10.454 -    case 114: stack.push(arg2); // 44
  10.455 -    case 115: stack.push(arg3); // 29
  10.456 -    case 116: arg3++; // 132 3 1
  10.457 -    case 119: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.458 -    case 120: stack.push(arg1); // 43
  10.459 -    case 121: stack.push(arg4); // 21 4
  10.460 -    case 123: arg4++; // 132 4 1
  10.461 -    case 126: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.charAtCI(self, v0)); } // 185 1 189
  10.462 -    case 129:  // 2
  10.463 -    case 130:  // 0
  10.464 -    case 131: if (stack.pop() == stack.pop()) { gt = 106; continue; } // 159 255 231
  10.465 -    case 134: stack.push(0); // 3
  10.466 -    case 135: return stack.pop(); // 172
  10.467 -    case 136: stack.push(1); // 4
  10.468 -    case 137: return stack.pop(); // 172
  10.469 -  }
  10.470 -}
  10.471 -function java_lang_String_equalsIgnoreCaseZLjava_lang_String(arg0,arg1) {
  10.472 -  var arg2;
  10.473 -;
  10.474 -  var stack = new Array(6);
  10.475 -  var gt = 0;
  10.476 -  for(;;) switch(gt) {
  10.477 -    case 0: stack.push(arg0); // 42
  10.478 -    case 1: stack.push(arg1); // 43
  10.479 -    case 2:  // 166
  10.480 -    case 3:  // 0
  10.481 -    case 4: stack.push(4); // 7
  10.482 -    case 5: stack.push(1); // 4
  10.483 -    case 6: gt = 44; continue; // 167 0 38
  10.484 -    case 9: stack.push(arg1); // 43
  10.485 -    case 10: if (!stack.pop()) { gt = 43; continue; } // 198 0 33
  10.486 -    case 13: stack.push(arg1); // 43
  10.487 -    case 14: stack.push(stack.pop().count); // 180 1 97
  10.488 -    case 17: stack.push(arg0); // 42
  10.489 -    case 18: stack.push(stack.pop().count); // 180 1 97
  10.490 -    case 21: if (stack.pop() != stack.pop()) { gt = 43; continue; } // 160 0 22
  10.491 -    case 24: stack.push(arg0); // 42
  10.492 -    case 25: stack.push(1); // 4
  10.493 -    case 26: stack.push(0); // 3
  10.494 -    case 27: stack.push(arg1); // 43
  10.495 -    case 28: stack.push(0); // 3
  10.496 -    case 29: stack.push(arg0); // 42
  10.497 -    case 30: stack.push(stack.pop().count); // 180 1 97
  10.498 -    case 33: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.regionMatchesZZILjava_lang_StringII(self, v0, v1, v2, v3, v4)); } // 182 1 153
  10.499 -    case 36: if (stack.pop() == 0) { gt = 43; continue; } // 153 0 7
  10.500 -    case 39: stack.push(1); // 4
  10.501 -    case 40: gt = 44; continue; // 167 0 4
  10.502 -    case 43: stack.push(0); // 3
  10.503 -    case 44: return stack.pop(); // 172
  10.504 -  }
  10.505 -}
  10.506 -function java_lang_String_compareToILjava_lang_String(arg0,arg1) {
  10.507 -  var arg2;
  10.508 -  var arg3;
  10.509 -  var arg4;
  10.510 -  var arg5;
  10.511 -  var arg6;
  10.512 -  var arg7;
  10.513 -  var arg8;
  10.514 -  var arg9;
  10.515 -  var arg10;
  10.516 -  var arg11;
  10.517 -  var arg12;
  10.518 -  var arg13;
  10.519 -;
  10.520 -  var stack = new Array(2);
  10.521 -  var gt = 0;
  10.522 -  for(;;) switch(gt) {
  10.523 -    case 0: stack.push(arg0); // 42
  10.524 -    case 1: stack.push(stack.pop().count); // 180 1 97
  10.525 -    case 4: arg2 = stack.pop(); // 61
  10.526 -    case 5: stack.push(arg1); // 43
  10.527 -    case 6: stack.push(stack.pop().count); // 180 1 97
  10.528 -    case 9: arg3 = stack.pop(); // 62
  10.529 -    case 10: stack.push(arg2); // 28
  10.530 -    case 11: stack.push(arg3); // 29
  10.531 -    case 12: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Math_minIII(v0, v1)); } // 184 1 127
  10.532 -    case 15: arg4 = stack.pop() // 54 4
  10.533 -    case 17: stack.push(arg0); // 42
  10.534 -    case 18: stack.push(stack.pop().value); // 180 1 100
  10.535 -    case 21: arg5 = stack.pop() // 58 5
  10.536 -    case 23: stack.push(arg1); // 43
  10.537 -    case 24: stack.push(stack.pop().value); // 180 1 100
  10.538 -    case 27: arg6 = stack.pop() // 58 6
  10.539 -    case 29: stack.push(arg0); // 42
  10.540 -    case 30: stack.push(stack.pop().offset); // 180 1 99
  10.541 -    case 33: arg7 = stack.pop() // 54 7
  10.542 -    case 35: stack.push(arg1); // 43
  10.543 -    case 36: stack.push(stack.pop().offset); // 180 1 99
  10.544 -    case 39: arg8 = stack.pop() // 54 8
  10.545 -    case 41: stack.push(arg7); // 21 7
  10.546 -    case 43: stack.push(arg8); // 21 8
  10.547 -    case 45: if (stack.pop() != stack.pop()) { gt = 102; continue; } // 160 0 57
  10.548 -    case 48: stack.push(arg7); // 21 7
  10.549 -    case 50: arg9 = stack.pop() // 54 9
  10.550 -    case 52: stack.push(arg4); // 21 4
  10.551 -    case 54: stack.push(arg7); // 21 7
  10.552 -    case 56: stack.push(stack.pop() + stack.pop()); // 96
  10.553 -    case 57: arg10 = stack.pop() // 54 10
  10.554 -    case 59: stack.push(arg9); // 21 9
  10.555 -    case 61: stack.push(arg10); // 21 10
  10.556 -    case 63: if (stack.pop() <= stack.pop()) { gt = 99; continue; } // 162 0 36
  10.557 -    case 66: stack.push(arg5); // 25 5
  10.558 -    case 68: stack.push(arg9); // 21 9
  10.559 -    case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.560 -    case 71: arg11 = stack.pop() // 54 11
  10.561 -    case 73: stack.push(arg6); // 25 6
  10.562 -    case 75: stack.push(arg9); // 21 9
  10.563 -    case 77: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.564 -    case 78: arg12 = stack.pop() // 54 12
  10.565 -    case 80: stack.push(arg11); // 21 11
  10.566 -    case 82: stack.push(arg12); // 21 12
  10.567 -    case 84: if (stack.pop() == stack.pop()) { gt = 93; continue; } // 159 0 9
  10.568 -    case 87: stack.push(arg11); // 21 11
  10.569 -    case 89: stack.push(arg12); // 21 12
  10.570 -    case 91: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.571 -    case 92: return stack.pop(); // 172
  10.572 -    case 93: arg9++; // 132 9 1
  10.573 -    case 96: gt = 59; continue; // 167 255 219
  10.574 -    case 99: gt = 146; continue; // 167 0 47
  10.575 -    case 102: stack.push(arg4); // 21 4
  10.576 -    case 104: arg4 += 255; // 132 4 255
  10.577 -    case 107: if (stack.pop() == 0) { gt = 146; continue; } // 153 0 39
  10.578 -    case 110: stack.push(arg5); // 25 5
  10.579 -    case 112: stack.push(arg7); // 21 7
  10.580 -    case 114: arg7++; // 132 7 1
  10.581 -    case 117: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.582 -    case 118: arg9 = stack.pop() // 54 9
  10.583 -    case 120: stack.push(arg6); // 25 6
  10.584 -    case 122: stack.push(arg8); // 21 8
  10.585 -    case 124: arg8++; // 132 8 1
  10.586 -    case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.587 -    case 128: arg10 = stack.pop() // 54 10
  10.588 -    case 130: stack.push(arg9); // 21 9
  10.589 -    case 132: stack.push(arg10); // 21 10
  10.590 -    case 134: if (stack.pop() == stack.pop()) { gt = 143; continue; } // 159 0 9
  10.591 -    case 137: stack.push(arg9); // 21 9
  10.592 -    case 139: stack.push(arg10); // 21 10
  10.593 -    case 141: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.594 -    case 142: return stack.pop(); // 172
  10.595 -    case 143: gt = 102; continue; // 167 255 215
  10.596 -    case 146: stack.push(arg2); // 28
  10.597 -    case 147: stack.push(arg3); // 29
  10.598 -    case 148: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.599 -    case 149: return stack.pop(); // 172
  10.600 -  }
  10.601 -}
  10.602 -function java_lang_String_compareToIgnoreCaseILjava_lang_String(arg0,arg1) {
  10.603 -  var arg2;
  10.604 -;
  10.605 -  var stack = new Array(3);
  10.606 -  var gt = 0;
  10.607 -  for(;;) switch(gt) {
  10.608 -    case 0: stack.push(java_lang_String_CASE_INSENSITIVE_ORDER); // 178 1 102
  10.609 -    case 3: stack.push(arg0); // 42
  10.610 -    case 4: stack.push(arg1); // 43
  10.611 -    case 5: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.compareILjava_lang_ObjectLjava_lang_Object(self, v0, v1)); } // 185 1 190
  10.612 -    case 8: stack.push(0); // 3
  10.613 -    case 9:  // 0
  10.614 -    case 10: return stack.pop(); // 172
  10.615 -  }
  10.616 -}
  10.617 -function java_lang_String_regionMatchesZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4) {
  10.618 -  var arg5;
  10.619 -  var arg6;
  10.620 -  var arg7;
  10.621 -  var arg8;
  10.622 -  var arg9;
  10.623 -;
  10.624 -  var stack = new Array(6);
  10.625 -  var gt = 0;
  10.626 -  for(;;) switch(gt) {
  10.627 -    case 0: stack.push(arg0); // 42
  10.628 -    case 1: stack.push(stack.pop().value); // 180 1 100
  10.629 -    case 4: arg5 = stack.pop() // 58 5
  10.630 -    case 6: stack.push(arg0); // 42
  10.631 -    case 7: stack.push(stack.pop().offset); // 180 1 99
  10.632 -    case 10: stack.push(arg1); // 27
  10.633 -    case 11: stack.push(stack.pop() + stack.pop()); // 96
  10.634 -    case 12: arg6 = stack.pop() // 54 6
  10.635 -    case 14: stack.push(arg2); // 44
  10.636 -    case 15: stack.push(stack.pop().value); // 180 1 100
  10.637 -    case 18: arg7 = stack.pop() // 58 7
  10.638 -    case 20: stack.push(arg2); // 44
  10.639 -    case 21: stack.push(stack.pop().offset); // 180 1 99
  10.640 -    case 24: stack.push(arg3); // 29
  10.641 -    case 25: stack.push(stack.pop() + stack.pop()); // 96
  10.642 -    case 26: arg8 = stack.pop() // 54 8
  10.643 -    case 28: stack.push(arg3); // 29
  10.644 -    case 29: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 37
  10.645 -    case 32: stack.push(arg1); // 27
  10.646 -    case 33: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 33
  10.647 -    case 36: stack.push(arg1); // 27
  10.648 -    case 37: // number conversion  // 133
  10.649 -    case 38: stack.push(arg0); // 42
  10.650 -    case 39: stack.push(stack.pop().count); // 180 1 97
  10.651 -    case 42: // number conversion  // 133
  10.652 -    case 43: stack.push(arg4); // 21 4
  10.653 -    case 45: // number conversion  // 133
  10.654 -    case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  10.655 -    case 47: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  10.656 -    case 48: if (stack.pop() > 0) { gt = 66; continue; } // 157 0 18
  10.657 -    case 51: stack.push(arg3); // 29
  10.658 -    case 52: // number conversion  // 133
  10.659 -    case 53: stack.push(arg2); // 44
  10.660 -    case 54: stack.push(stack.pop().count); // 180 1 97
  10.661 -    case 57: // number conversion  // 133
  10.662 -    case 58: stack.push(arg4); // 21 4
  10.663 -    case 60: // number conversion  // 133
  10.664 -    case 61: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  10.665 -    case 62: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  10.666 -    case 63: if (stack.pop() <= 0) { gt = 68; continue; } // 158 0 5
  10.667 -    case 66: stack.push(0); // 3
  10.668 -    case 67: return stack.pop(); // 172
  10.669 -    case 68: stack.push(arg4); // 21 4
  10.670 -    case 70: arg4 += 255; // 132 4 255
  10.671 -    case 73: if (stack.pop() <= 0) { gt = 97; continue; } // 158 0 24
  10.672 -    case 76: stack.push(arg5); // 25 5
  10.673 -    case 78: stack.push(arg6); // 21 6
  10.674 -    case 80: arg6++; // 132 6 1
  10.675 -    case 83: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.676 -    case 84: stack.push(arg7); // 25 7
  10.677 -    case 86: stack.push(arg8); // 21 8
  10.678 -    case 88: arg8++; // 132 8 1
  10.679 -    case 91: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.680 -    case 92: if (stack.pop() == stack.pop()) { gt = 68; continue; } // 159 255 232
  10.681 -    case 95: stack.push(0); // 3
  10.682 -    case 96: return stack.pop(); // 172
  10.683 -    case 97: stack.push(1); // 4
  10.684 -    case 98: return stack.pop(); // 172
  10.685 -  }
  10.686 -}
  10.687 -function java_lang_String_regionMatchesZZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4,arg5) {
  10.688 -  var arg6;
  10.689 -  var arg7;
  10.690 -  var arg8;
  10.691 -  var arg9;
  10.692 -  var arg10;
  10.693 -  var arg11;
  10.694 -  var arg12;
  10.695 -  var arg13;
  10.696 -  var arg14;
  10.697 -;
  10.698 -  var stack = new Array(6);
  10.699 -  var gt = 0;
  10.700 -  for(;;) switch(gt) {
  10.701 -    case 0: stack.push(arg0); // 42
  10.702 -    case 1: stack.push(stack.pop().value); // 180 1 100
  10.703 -    case 4: arg6 = stack.pop() // 58 6
  10.704 -    case 6: stack.push(arg0); // 42
  10.705 -    case 7: stack.push(stack.pop().offset); // 180 1 99
  10.706 -    case 10: stack.push(arg2); // 28
  10.707 -    case 11: stack.push(stack.pop() + stack.pop()); // 96
  10.708 -    case 12: arg7 = stack.pop() // 54 7
  10.709 -    case 14: stack.push(arg3); // 45
  10.710 -    case 15: stack.push(stack.pop().value); // 180 1 100
  10.711 -    case 18: arg8 = stack.pop() // 58 8
  10.712 -    case 20: stack.push(arg3); // 45
  10.713 -    case 21: stack.push(stack.pop().offset); // 180 1 99
  10.714 -    case 24: stack.push(arg4); // 21 4
  10.715 -    case 26: stack.push(stack.pop() + stack.pop()); // 96
  10.716 -    case 27: arg9 = stack.pop() // 54 9
  10.717 -    case 29: stack.push(arg4); // 21 4
  10.718 -    case 31: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 38
  10.719 -    case 34: stack.push(arg2); // 28
  10.720 -    case 35: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 34
  10.721 -    case 38: stack.push(arg2); // 28
  10.722 -    case 39: // number conversion  // 133
  10.723 -    case 40: stack.push(arg0); // 42
  10.724 -    case 41: stack.push(stack.pop().count); // 180 1 97
  10.725 -    case 44: // number conversion  // 133
  10.726 -    case 45: stack.push(arg5); // 21 5
  10.727 -    case 47: // number conversion  // 133
  10.728 -    case 48: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  10.729 -    case 49: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  10.730 -    case 50: if (stack.pop() > 0) { gt = 69; continue; } // 157 0 19
  10.731 -    case 53: stack.push(arg4); // 21 4
  10.732 -    case 55: // number conversion  // 133
  10.733 -    case 56: stack.push(arg3); // 45
  10.734 -    case 57: stack.push(stack.pop().count); // 180 1 97
  10.735 -    case 60: // number conversion  // 133
  10.736 -    case 61: stack.push(arg5); // 21 5
  10.737 -    case 63: // number conversion  // 133
  10.738 -    case 64: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  10.739 -    case 65: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  10.740 -    case 66: if (stack.pop() <= 0) { gt = 71; continue; } // 158 0 5
  10.741 -    case 69: stack.push(0); // 3
  10.742 -    case 70: return stack.pop(); // 172
  10.743 -    case 71: stack.push(arg5); // 21 5
  10.744 -    case 73: arg5 += 255; // 132 5 255
  10.745 -    case 76: if (stack.pop() <= 0) { gt = 155; continue; } // 158 0 79
  10.746 -    case 79: stack.push(arg6); // 25 6
  10.747 -    case 81: stack.push(arg7); // 21 7
  10.748 -    case 83: arg7++; // 132 7 1
  10.749 -    case 86: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.750 -    case 87: arg10 = stack.pop() // 54 10
  10.751 -    case 89: stack.push(arg8); // 25 8
  10.752 -    case 91: stack.push(arg9); // 21 9
  10.753 -    case 93: arg9++; // 132 9 1
  10.754 -    case 96: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.755 -    case 97: arg11 = stack.pop() // 54 11
  10.756 -    case 99: stack.push(arg10); // 21 10
  10.757 -    case 101: stack.push(arg11); // 21 11
  10.758 -    case 103: if (stack.pop() != stack.pop()) { gt = 109; continue; } // 160 0 6
  10.759 -    case 106: gt = 71; continue; // 167 255 221
  10.760 -    case 109: stack.push(arg1); // 27
  10.761 -    case 110: if (stack.pop() == 0) { gt = 153; continue; } // 153 0 43
  10.762 -    case 113: stack.push(arg10); // 21 10
  10.763 -    case 115: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105
  10.764 -    case 118: arg12 = stack.pop() // 54 12
  10.765 -    case 120: stack.push(arg11); // 21 11
  10.766 -    case 122: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105
  10.767 -    case 125: arg13 = stack.pop() // 54 13
  10.768 -    case 127: stack.push(arg12); // 21 12
  10.769 -    case 129: stack.push(arg13); // 21 13
  10.770 -    case 131: if (stack.pop() != stack.pop()) { gt = 137; continue; } // 160 0 6
  10.771 -    case 134: gt = 71; continue; // 167 255 193
  10.772 -    case 137: stack.push(arg12); // 21 12
  10.773 -    case 139: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
  10.774 -    case 142: stack.push(arg13); // 21 13
  10.775 -    case 144: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
  10.776 -    case 147: if (stack.pop() != stack.pop()) { gt = 153; continue; } // 160 0 6
  10.777 -    case 150: gt = 71; continue; // 167 255 177
  10.778 -    case 153: stack.push(0); // 3
  10.779 -    case 154: return stack.pop(); // 172
  10.780 -    case 155: stack.push(1); // 4
  10.781 -    case 156: return stack.pop(); // 172
  10.782 -  }
  10.783 -}
  10.784 -function java_lang_String_startsWithZLjava_lang_StringI(arg0,arg1,arg2) {
  10.785 -  var arg3;
  10.786 -  var arg4;
  10.787 -  var arg5;
  10.788 -  var arg6;
  10.789 -  var arg7;
  10.790 -  var arg8;
  10.791 -;
  10.792 -  var stack = new Array(3);
  10.793 -  var gt = 0;
  10.794 -  for(;;) switch(gt) {
  10.795 -    case 0: stack.push(arg0); // 42
  10.796 -    case 1: stack.push(stack.pop().value); // 180 1 100
  10.797 -    case 4: arg3 = stack.pop(); // 78
  10.798 -    case 5: stack.push(arg0); // 42
  10.799 -    case 6: stack.push(stack.pop().offset); // 180 1 99
  10.800 -    case 9: stack.push(arg2); // 28
  10.801 -    case 10: stack.push(stack.pop() + stack.pop()); // 96
  10.802 -    case 11: arg4 = stack.pop() // 54 4
  10.803 -    case 13: stack.push(arg1); // 43
  10.804 -    case 14: stack.push(stack.pop().value); // 180 1 100
  10.805 -    case 17: arg5 = stack.pop() // 58 5
  10.806 -    case 19: stack.push(arg1); // 43
  10.807 -    case 20: stack.push(stack.pop().offset); // 180 1 99
  10.808 -    case 23: arg6 = stack.pop() // 54 6
  10.809 -    case 25: stack.push(arg1); // 43
  10.810 -    case 26: stack.push(stack.pop().count); // 180 1 97
  10.811 -    case 29: arg7 = stack.pop() // 54 7
  10.812 -    case 31: stack.push(arg2); // 28
  10.813 -    case 32: if (stack.pop() < 0) { gt = 46; continue; } // 155 0 14
  10.814 -    case 35: stack.push(arg2); // 28
  10.815 -    case 36: stack.push(arg0); // 42
  10.816 -    case 37: stack.push(stack.pop().count); // 180 1 97
  10.817 -    case 40: stack.push(arg7); // 21 7
  10.818 -    case 42: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.819 -    case 43: if (stack.pop() >= stack.pop()) { gt = 48; continue; } // 164 0 5
  10.820 -    case 46: stack.push(0); // 3
  10.821 -    case 47: return stack.pop(); // 172
  10.822 -    case 48: arg7 += 255; // 132 7 255
  10.823 -    case 51: stack.push(arg7); // 21 7
  10.824 -    case 53: if (stack.pop() < 0) { gt = 76; continue; } // 155 0 23
  10.825 -    case 56: stack.push(arg3); // 45
  10.826 -    case 57: stack.push(arg4); // 21 4
  10.827 -    case 59: arg4++; // 132 4 1
  10.828 -    case 62: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.829 -    case 63: stack.push(arg5); // 25 5
  10.830 -    case 65: stack.push(arg6); // 21 6
  10.831 -    case 67: arg6++; // 132 6 1
  10.832 -    case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.833 -    case 71: if (stack.pop() == stack.pop()) { gt = 48; continue; } // 159 255 233
  10.834 -    case 74: stack.push(0); // 3
  10.835 -    case 75: return stack.pop(); // 172
  10.836 -    case 76: stack.push(1); // 4
  10.837 -    case 77: return stack.pop(); // 172
  10.838 -  }
  10.839 -}
  10.840 -function java_lang_String_startsWithZLjava_lang_String(arg0,arg1) {
  10.841 -  var arg2;
  10.842 -;
  10.843 -  var stack = new Array(3);
  10.844 -  var gt = 0;
  10.845 -  for(;;) switch(gt) {
  10.846 -    case 0: stack.push(arg0); // 42
  10.847 -    case 1: stack.push(arg1); // 43
  10.848 -    case 2: stack.push(0); // 3
  10.849 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.startsWithZLjava_lang_StringI(self, v0, v1)); } // 182 1 152
  10.850 -    case 6: return stack.pop(); // 172
  10.851 -  }
  10.852 -}
  10.853 -function java_lang_String_endsWithZLjava_lang_String(arg0,arg1) {
  10.854 -  var arg2;
  10.855 -;
  10.856 -  var stack = new Array(4);
  10.857 -  var gt = 0;
  10.858 -  for(;;) switch(gt) {
  10.859 -    case 0: stack.push(arg0); // 42
  10.860 -    case 1: stack.push(arg1); // 43
  10.861 -    case 2: stack.push(arg0); // 42
  10.862 -    case 3: stack.push(stack.pop().count); // 180 1 97
  10.863 -    case 6: stack.push(arg1); // 43
  10.864 -    case 7: stack.push(stack.pop().count); // 180 1 97
  10.865 -    case 10: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.866 -    case 11: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.startsWithZLjava_lang_StringI(self, v0, v1)); } // 182 1 152
  10.867 -    case 14: return stack.pop(); // 172
  10.868 -  }
  10.869 -}
  10.870 -function java_lang_String_lastIndexOfII(arg0,arg1) {
  10.871 -  var arg2;
  10.872 -;
  10.873 -  var stack = new Array(4);
  10.874 -  var gt = 0;
  10.875 -  for(;;) switch(gt) {
  10.876 -    case 0: stack.push(arg0); // 42
  10.877 -    case 1: stack.push(arg1); // 27
  10.878 -    case 2: stack.push(arg0); // 42
  10.879 -    case 3: stack.push(stack.pop().count); // 180 1 97
  10.880 -    case 6: stack.push(1); // 4
  10.881 -    case 7: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.882 -    case 8: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.lastIndexOfIII(self, v0, v1)); } // 182 1 136
  10.883 -    case 11: return stack.pop(); // 172
  10.884 -  }
  10.885 -}
  10.886 -function java_lang_String_lastIndexOfIII(arg0,arg1,arg2) {
  10.887 -  var arg3;
  10.888 -  var arg4;
  10.889 -  var arg5;
  10.890 -  var arg6;
  10.891 -  var arg7;
  10.892 -  var arg8;
  10.893 -;
  10.894 -  var stack = new Array(3);
  10.895 -  var gt = 0;
  10.896 -  for(;;) switch(gt) {
  10.897 -    case 0: stack.push(arg0); // 42
  10.898 -    case 1: stack.push(stack.pop().offset); // 180 1 99
  10.899 -    case 4: arg3 = stack.pop(); // 62
  10.900 -    case 5: stack.push(arg0); // 42
  10.901 -    case 6: stack.push(stack.pop().value); // 180 1 100
  10.902 -    case 9: arg4 = stack.pop() // 58 4
  10.903 -    case 11: stack.push(arg0); // 42
  10.904 -    case 12: stack.push(stack.pop().offset); // 180 1 99
  10.905 -    case 15: stack.push(arg2); // 28
  10.906 -    case 16: stack.push(arg0); // 42
  10.907 -    case 17: stack.push(stack.pop().count); // 180 1 97
  10.908 -    case 20: if (stack.pop() > stack.pop()) { gt = 32; continue; } // 161 0 12
  10.909 -    case 23: stack.push(arg0); // 42
  10.910 -    case 24: stack.push(stack.pop().count); // 180 1 97
  10.911 -    case 27: stack.push(1); // 4
  10.912 -    case 28: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.913 -    case 29: gt = 33; continue; // 167 0 4
  10.914 -    case 32: stack.push(arg2); // 28
  10.915 -    case 33: stack.push(stack.pop() + stack.pop()); // 96
  10.916 -    case 34: arg5 = stack.pop() // 54 5
  10.917 -    case 36: stack.push(arg1); // 27
  10.918 -    case 37: stack.push(65536); // 18 3
  10.919 -    case 39: if (stack.pop() <= stack.pop()) { gt = 73; continue; } // 162 0 34
  10.920 -    case 42: stack.push(arg5); // 21 5
  10.921 -    case 44: stack.push(arg3); // 29
  10.922 -    case 45: if (stack.pop() > stack.pop()) { gt = 71; continue; } // 161 0 26
  10.923 -    case 48: stack.push(arg4); // 25 4
  10.924 -    case 50: stack.push(arg5); // 21 5
  10.925 -    case 52: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.926 -    case 53: stack.push(arg1); // 27
  10.927 -    case 54: if (stack.pop() != stack.pop()) { gt = 65; continue; } // 160 0 11
  10.928 -    case 57: stack.push(arg5); // 21 5
  10.929 -    case 59: stack.push(arg0); // 42
  10.930 -    case 60: stack.push(stack.pop().offset); // 180 1 99
  10.931 -    case 63: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.932 -    case 64: return stack.pop(); // 172
  10.933 -    case 65: arg5 += 255; // 132 5 255
  10.934 -    case 68: gt = 42; continue; // 167 255 230
  10.935 -    case 71:  // 2
  10.936 -    case 72: return stack.pop(); // 172
  10.937 -    case 73: stack.push(arg0); // 42
  10.938 -    case 74: stack.push(stack.pop().offset); // 180 1 99
  10.939 -    case 77: stack.push(arg0); // 42
  10.940 -    case 78: stack.push(stack.pop().count); // 180 1 97
  10.941 -    case 81: stack.push(stack.pop() + stack.pop()); // 96
  10.942 -    case 82: arg6 = stack.pop() // 54 6
  10.943 -    case 84: stack.push(arg1); // 27
  10.944 -    case 85: stack.push(1114111); // 18 4
  10.945 -    case 87: if (stack.pop() < stack.pop()) { gt = 154; continue; } // 163 0 67
  10.946 -    case 90: stack.push(arg1); // 27
  10.947 -    case 91: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
  10.948 -    case 94: arg7 = stack.pop() // 58 7
  10.949 -    case 96: stack.push(arg5); // 21 5
  10.950 -    case 98: stack.push(arg3); // 29
  10.951 -    case 99: if (stack.pop() > stack.pop()) { gt = 154; continue; } // 161 0 55
  10.952 -    case 102: stack.push(arg4); // 25 4
  10.953 -    case 104: stack.push(arg5); // 21 5
  10.954 -    case 106: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.955 -    case 107: stack.push(arg7); // 25 7
  10.956 -    case 109: stack.push(0); // 3
  10.957 -    case 110: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.958 -    case 111: if (stack.pop() != stack.pop()) { gt = 148; continue; } // 160 0 37
  10.959 -    case 114: stack.push(arg5); // 21 5
  10.960 -    case 116: stack.push(1); // 4
  10.961 -    case 117: stack.push(stack.pop() + stack.pop()); // 96
  10.962 -    case 118: stack.push(arg6); // 21 6
  10.963 -    case 120: if (stack.pop() != stack.pop()) { gt = 126; continue; } // 160 0 6
  10.964 -    case 123: gt = 154; continue; // 167 0 31
  10.965 -    case 126: stack.push(arg4); // 25 4
  10.966 -    case 128: stack.push(arg5); // 21 5
  10.967 -    case 130: stack.push(1); // 4
  10.968 -    case 131: stack.push(stack.pop() + stack.pop()); // 96
  10.969 -    case 132: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.970 -    case 133: stack.push(arg7); // 25 7
  10.971 -    case 135: stack.push(1); // 4
  10.972 -    case 136: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  10.973 -    case 137: if (stack.pop() != stack.pop()) { gt = 148; continue; } // 160 0 11
  10.974 -    case 140: stack.push(arg5); // 21 5
  10.975 -    case 142: stack.push(arg0); // 42
  10.976 -    case 143: stack.push(stack.pop().offset); // 180 1 99
  10.977 -    case 146: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  10.978 -    case 147: return stack.pop(); // 172
  10.979 -    case 148: arg5 += 255; // 132 5 255
  10.980 -    case 151: gt = 96; continue; // 167 255 201
  10.981 -    case 154:  // 2
  10.982 -    case 155: return stack.pop(); // 172
  10.983 -  }
  10.984 -}
  10.985 -function java_lang_String_indexOfILjava_lang_String(arg0,arg1) {
  10.986 -  var arg2;
  10.987 -;
  10.988 -  var stack = new Array(3);
  10.989 -  var gt = 0;
  10.990 -  for(;;) switch(gt) {
  10.991 -    case 0: stack.push(arg0); // 42
  10.992 -    case 1: stack.push(arg1); // 43
  10.993 -    case 2: stack.push(0); // 3
  10.994 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.indexOfILjava_lang_StringI(self, v0, v1)); } // 182 1 150
  10.995 -    case 6: return stack.pop(); // 172
  10.996 -  }
  10.997 -}
  10.998 -function java_lang_String_indexOfILjava_lang_StringI(arg0,arg1,arg2) {
  10.999 -  var arg3;
 10.1000 -;
 10.1001 -  var stack = new Array(7);
 10.1002 -  var gt = 0;
 10.1003 -  for(;;) switch(gt) {
 10.1004 -    case 0: stack.push(arg0); // 42
 10.1005 -    case 1: stack.push(stack.pop().value); // 180 1 100
 10.1006 -    case 4: stack.push(arg0); // 42
 10.1007 -    case 5: stack.push(stack.pop().offset); // 180 1 99
 10.1008 -    case 8: stack.push(arg0); // 42
 10.1009 -    case 9: stack.push(stack.pop().count); // 180 1 97
 10.1010 -    case 12: stack.push(arg1); // 43
 10.1011 -    case 13: stack.push(stack.pop().value); // 180 1 100
 10.1012 -    case 16: stack.push(arg1); // 43
 10.1013 -    case 17: stack.push(stack.pop().offset); // 180 1 99
 10.1014 -    case 20: stack.push(arg1); // 43
 10.1015 -    case 21: stack.push(stack.pop().count); // 180 1 97
 10.1016 -    case 24: stack.push(arg2); // 28
 10.1017 -    case 25: { var v6 = stack.pop(); var v5 = stack.pop(); var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_String_indexOfAIACAIAIACAIAIAI(v0, v1, v2, v3, v4, v5, v6)); } // 184 1 144
 10.1018 -    case 28: return stack.pop(); // 172
 10.1019 -  }
 10.1020 -}
 10.1021 -function java_lang_String_indexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {
 10.1022 -  var arg7;
 10.1023 -  var arg8;
 10.1024 -  var arg9;
 10.1025 -  var arg10;
 10.1026 -  var arg11;
 10.1027 -  var arg12;
 10.1028 -  var stack = new Array();
 10.1029 -  var gt = 0;
 10.1030 -  for(;;) switch(gt) {
 10.1031 -    case 0: stack.push(arg6); // 21 6
 10.1032 -    case 2: stack.push(arg2); // 28
 10.1033 -    case 3: if (stack.pop() > stack.pop()) { gt = 17; continue; } // 161 0 14
 10.1034 -    case 6: stack.push(arg5); // 21 5
 10.1035 -    case 8: if (stack.pop() != 0) { gt = 15; continue; } // 154 0 7
 10.1036 -    case 11: stack.push(arg2); // 28
 10.1037 -    case 12: gt = 16; continue; // 167 0 4
 10.1038 -    case 15:  // 2
 10.1039 -    case 16: return stack.pop(); // 172
 10.1040 -    case 17: stack.push(arg6); // 21 6
 10.1041 -    case 19: if (stack.pop() >= 0) { gt = 25; continue; } // 156 0 6
 10.1042 -    case 22: stack.push(0); // 3
 10.1043 -    case 23: arg6 = stack.pop() // 54 6
 10.1044 -    case 25: stack.push(arg5); // 21 5
 10.1045 -    case 27: if (stack.pop() != 0) { gt = 33; continue; } // 154 0 6
 10.1046 -    case 30: stack.push(arg6); // 21 6
 10.1047 -    case 32: return stack.pop(); // 172
 10.1048 -    case 33: stack.push(arg3); // 45
 10.1049 -    case 34: stack.push(arg4); // 21 4
 10.1050 -    case 36: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1051 -    case 37: arg7 = stack.pop() // 54 7
 10.1052 -    case 39: stack.push(arg1); // 27
 10.1053 -    case 40: stack.push(arg2); // 28
 10.1054 -    case 41: stack.push(arg5); // 21 5
 10.1055 -    case 43: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1056 -    case 44: stack.push(stack.pop() + stack.pop()); // 96
 10.1057 -    case 45: arg8 = stack.pop() // 54 8
 10.1058 -    case 47: stack.push(arg1); // 27
 10.1059 -    case 48: stack.push(arg6); // 21 6
 10.1060 -    case 50: stack.push(stack.pop() + stack.pop()); // 96
 10.1061 -    case 51: arg9 = stack.pop() // 54 9
 10.1062 -    case 53: stack.push(arg9); // 21 9
 10.1063 -    case 55: stack.push(arg8); // 21 8
 10.1064 -    case 57: if (stack.pop() < stack.pop()) { gt = 164; continue; } // 163 0 107
 10.1065 -    case 60: stack.push(arg0); // 42
 10.1066 -    case 61: stack.push(arg9); // 21 9
 10.1067 -    case 63: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1068 -    case 64: stack.push(arg7); // 21 7
 10.1069 -    case 66: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 25
 10.1070 -    case 69: arg9++; // 132 9 1
 10.1071 -    case 72: stack.push(arg9); // 21 9
 10.1072 -    case 74: stack.push(arg8); // 21 8
 10.1073 -    case 76: if (stack.pop() < stack.pop()) { gt = 91; continue; } // 163 0 15
 10.1074 -    case 79: stack.push(arg0); // 42
 10.1075 -    case 80: stack.push(arg9); // 21 9
 10.1076 -    case 82: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1077 -    case 83: stack.push(arg7); // 21 7
 10.1078 -    case 85: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 6
 10.1079 -    case 88: gt = 69; continue; // 167 255 237
 10.1080 -    case 91: stack.push(arg9); // 21 9
 10.1081 -    case 93: stack.push(arg8); // 21 8
 10.1082 -    case 95: if (stack.pop() < stack.pop()) { gt = 158; continue; } // 163 0 63
 10.1083 -    case 98: stack.push(arg9); // 21 9
 10.1084 -    case 100: stack.push(1); // 4
 10.1085 -    case 101: stack.push(stack.pop() + stack.pop()); // 96
 10.1086 -    case 102: arg10 = stack.pop() // 54 10
 10.1087 -    case 104: stack.push(arg10); // 21 10
 10.1088 -    case 106: stack.push(arg5); // 21 5
 10.1089 -    case 108: stack.push(stack.pop() + stack.pop()); // 96
 10.1090 -    case 109: stack.push(1); // 4
 10.1091 -    case 110: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1092 -    case 111: arg11 = stack.pop() // 54 11
 10.1093 -    case 113: stack.push(arg4); // 21 4
 10.1094 -    case 115: stack.push(1); // 4
 10.1095 -    case 116: stack.push(stack.pop() + stack.pop()); // 96
 10.1096 -    case 117: arg12 = stack.pop() // 54 12
 10.1097 -    case 119: stack.push(arg10); // 21 10
 10.1098 -    case 121: stack.push(arg11); // 21 11
 10.1099 -    case 123: if (stack.pop() <= stack.pop()) { gt = 146; continue; } // 162 0 23
 10.1100 -    case 126: stack.push(arg0); // 42
 10.1101 -    case 127: stack.push(arg10); // 21 10
 10.1102 -    case 129: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1103 -    case 130: stack.push(arg3); // 45
 10.1104 -    case 131: stack.push(arg12); // 21 12
 10.1105 -    case 133: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1106 -    case 134: if (stack.pop() != stack.pop()) { gt = 146; continue; } // 160 0 12
 10.1107 -    case 137: arg10++; // 132 10 1
 10.1108 -    case 140: arg12++; // 132 12 1
 10.1109 -    case 143: gt = 119; continue; // 167 255 232
 10.1110 -    case 146: stack.push(arg10); // 21 10
 10.1111 -    case 148: stack.push(arg11); // 21 11
 10.1112 -    case 150: if (stack.pop() != stack.pop()) { gt = 158; continue; } // 160 0 8
 10.1113 -    case 153: stack.push(arg9); // 21 9
 10.1114 -    case 155: stack.push(arg1); // 27
 10.1115 -    case 156: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1116 -    case 157: return stack.pop(); // 172
 10.1117 -    case 158: arg9++; // 132 9 1
 10.1118 -    case 161: gt = 53; continue; // 167 255 148
 10.1119 -    case 164:  // 2
 10.1120 -    case 165: return stack.pop(); // 172
 10.1121 -  }
 10.1122 -}
 10.1123 -function java_lang_String_lastIndexOfILjava_lang_String(arg0,arg1) {
 10.1124 -  var arg2;
 10.1125 -;
 10.1126 -  var stack = new Array(3);
 10.1127 -  var gt = 0;
 10.1128 -  for(;;) switch(gt) {
 10.1129 -    case 0: stack.push(arg0); // 42
 10.1130 -    case 1: stack.push(arg1); // 43
 10.1131 -    case 2: stack.push(arg0); // 42
 10.1132 -    case 3: stack.push(stack.pop().count); // 180 1 97
 10.1133 -    case 6: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.lastIndexOfILjava_lang_StringI(self, v0, v1)); } // 182 1 151
 10.1134 -    case 9: return stack.pop(); // 172
 10.1135 -  }
 10.1136 -}
 10.1137 -function java_lang_String_lastIndexOfILjava_lang_StringI(arg0,arg1,arg2) {
 10.1138 -  var arg3;
 10.1139 -;
 10.1140 -  var stack = new Array(7);
 10.1141 -  var gt = 0;
 10.1142 -  for(;;) switch(gt) {
 10.1143 -    case 0: stack.push(arg0); // 42
 10.1144 -    case 1: stack.push(stack.pop().value); // 180 1 100
 10.1145 -    case 4: stack.push(arg0); // 42
 10.1146 -    case 5: stack.push(stack.pop().offset); // 180 1 99
 10.1147 -    case 8: stack.push(arg0); // 42
 10.1148 -    case 9: stack.push(stack.pop().count); // 180 1 97
 10.1149 -    case 12: stack.push(arg1); // 43
 10.1150 -    case 13: stack.push(stack.pop().value); // 180 1 100
 10.1151 -    case 16: stack.push(arg1); // 43
 10.1152 -    case 17: stack.push(stack.pop().offset); // 180 1 99
 10.1153 -    case 20: stack.push(arg1); // 43
 10.1154 -    case 21: stack.push(stack.pop().count); // 180 1 97
 10.1155 -    case 24: stack.push(arg2); // 28
 10.1156 -    case 25: { var v6 = stack.pop(); var v5 = stack.pop(); var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_String_lastIndexOfAIACAIAIACAIAIAI(v0, v1, v2, v3, v4, v5, v6)); } // 184 1 145
 10.1157 -    case 28: return stack.pop(); // 172
 10.1158 -  }
 10.1159 -}
 10.1160 -function java_lang_String_lastIndexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {
 10.1161 -  var arg7;
 10.1162 -  var arg8;
 10.1163 -  var arg9;
 10.1164 -  var arg10;
 10.1165 -  var arg11;
 10.1166 -  var arg12;
 10.1167 -  var arg13;
 10.1168 -  var arg14;
 10.1169 -  var stack = new Array();
 10.1170 -  var gt = 0;
 10.1171 -  for(;;) switch(gt) {
 10.1172 -    case 0: stack.push(arg2); // 28
 10.1173 -    case 1: stack.push(arg5); // 21 5
 10.1174 -    case 3: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1175 -    case 4: arg7 = stack.pop() // 54 7
 10.1176 -    case 6: stack.push(arg6); // 21 6
 10.1177 -    case 8: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 5
 10.1178 -    case 11:  // 2
 10.1179 -    case 12: return stack.pop(); // 172
 10.1180 -    case 13: stack.push(arg6); // 21 6
 10.1181 -    case 15: stack.push(arg7); // 21 7
 10.1182 -    case 17: if (stack.pop() >= stack.pop()) { gt = 24; continue; } // 164 0 7
 10.1183 -    case 20: stack.push(arg7); // 21 7
 10.1184 -    case 22: arg6 = stack.pop() // 54 6
 10.1185 -    case 24: stack.push(arg5); // 21 5
 10.1186 -    case 26: if (stack.pop() != 0) { gt = 32; continue; } // 154 0 6
 10.1187 -    case 29: stack.push(arg6); // 21 6
 10.1188 -    case 31: return stack.pop(); // 172
 10.1189 -    case 32: stack.push(arg4); // 21 4
 10.1190 -    case 34: stack.push(arg5); // 21 5
 10.1191 -    case 36: stack.push(stack.pop() + stack.pop()); // 96
 10.1192 -    case 37: stack.push(1); // 4
 10.1193 -    case 38: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1194 -    case 39: arg8 = stack.pop() // 54 8
 10.1195 -    case 41: stack.push(arg3); // 45
 10.1196 -    case 42: stack.push(arg8); // 21 8
 10.1197 -    case 44: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1198 -    case 45: arg9 = stack.pop() // 54 9
 10.1199 -    case 47: stack.push(arg1); // 27
 10.1200 -    case 48: stack.push(arg5); // 21 5
 10.1201 -    case 50: stack.push(stack.pop() + stack.pop()); // 96
 10.1202 -    case 51: stack.push(1); // 4
 10.1203 -    case 52: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1204 -    case 53: arg10 = stack.pop() // 54 10
 10.1205 -    case 55: stack.push(arg10); // 21 10
 10.1206 -    case 57: stack.push(arg6); // 21 6
 10.1207 -    case 59: stack.push(stack.pop() + stack.pop()); // 96
 10.1208 -    case 60: arg11 = stack.pop() // 54 11
 10.1209 -    case 62: stack.push(arg11); // 21 11
 10.1210 -    case 64: stack.push(arg10); // 21 10
 10.1211 -    case 66: if (stack.pop() > stack.pop()) { gt = 84; continue; } // 161 0 18
 10.1212 -    case 69: stack.push(arg0); // 42
 10.1213 -    case 70: stack.push(arg11); // 21 11
 10.1214 -    case 72: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1215 -    case 73: stack.push(arg9); // 21 9
 10.1216 -    case 75: if (stack.pop() == stack.pop()) { gt = 84; continue; } // 159 0 9
 10.1217 -    case 78: arg11 += 255; // 132 11 255
 10.1218 -    case 81: gt = 62; continue; // 167 255 237
 10.1219 -    case 84: stack.push(arg11); // 21 11
 10.1220 -    case 86: stack.push(arg10); // 21 10
 10.1221 -    case 88: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 5
 10.1222 -    case 91:  // 2
 10.1223 -    case 92: return stack.pop(); // 172
 10.1224 -    case 93: stack.push(arg11); // 21 11
 10.1225 -    case 95: stack.push(1); // 4
 10.1226 -    case 96: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1227 -    case 97: arg12 = stack.pop() // 54 12
 10.1228 -    case 99: stack.push(arg12); // 21 12
 10.1229 -    case 101: stack.push(arg5); // 21 5
 10.1230 -    case 103: stack.push(1); // 4
 10.1231 -    case 104: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1232 -    case 105: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1233 -    case 106: arg13 = stack.pop() // 54 13
 10.1234 -    case 108: stack.push(arg8); // 21 8
 10.1235 -    case 110: stack.push(1); // 4
 10.1236 -    case 111: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1237 -    case 112: arg14 = stack.pop() // 54 14
 10.1238 -    case 114: stack.push(arg12); // 21 12
 10.1239 -    case 116: stack.push(arg13); // 21 13
 10.1240 -    case 118: if (stack.pop() >= stack.pop()) { gt = 144; continue; } // 164 0 26
 10.1241 -    case 121: stack.push(arg0); // 42
 10.1242 -    case 122: stack.push(arg12); // 21 12
 10.1243 -    case 124: arg12 += 255; // 132 12 255
 10.1244 -    case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1245 -    case 128: stack.push(arg3); // 45
 10.1246 -    case 129: stack.push(arg14); // 21 14
 10.1247 -    case 131: arg14 += 255; // 132 14 255
 10.1248 -    case 134: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1249 -    case 135: if (stack.pop() == stack.pop()) { gt = 114; continue; } // 159 255 235
 10.1250 -    case 138: arg11 += 255; // 132 11 255
 10.1251 -    case 141: gt = 62; continue; // 167 255 177
 10.1252 -    case 144: stack.push(arg13); // 21 13
 10.1253 -    case 146: stack.push(arg1); // 27
 10.1254 -    case 147: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1255 -    case 148: stack.push(1); // 4
 10.1256 -    case 149: stack.push(stack.pop() + stack.pop()); // 96
 10.1257 -    case 150: return stack.pop(); // 172
 10.1258 -  }
 10.1259 -}
 10.1260 -*/
 10.1261 -function java_lang_String_substringLjava_lang_StringI(arg0,arg1) {
 10.1262 -    return arg0.toString().substring(arg1);
 10.1263 -}
 10.1264 -function java_lang_String_substringLjava_lang_StringII(arg0,arg1,arg2) {
 10.1265 -    return arg0.toString().substring(arg1, arg2);
 10.1266 -}
 10.1267 -
 10.1268 -function java_lang_String_replaceLjava_lang_StringCC(arg0,arg1,arg2) {
 10.1269 -    if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);
 10.1270 -    if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);
 10.1271 -    var s = arg0.toString();
 10.1272 -    for (;;) {
 10.1273 -        var ret = s.replace(arg1, arg2);
 10.1274 -        if (ret === s) {
 10.1275 -            return ret;
 10.1276 -        }
 10.1277 -        s = ret;
 10.1278 -    }
 10.1279 -}
 10.1280 -function java_lang_String_containsZLjava_lang_CharSequence(arg0,arg1) {
 10.1281 -    return arg0.toString().indexOf(arg1.toString()) >= 0;
 10.1282 -}
 10.1283 -
 10.1284 -/*
 10.1285 -function java_lang_String_subSequenceLjava_lang_CharSequenceII(arg0,arg1,arg2) {
 10.1286 -  var arg3;
 10.1287 -;
 10.1288 -  var stack = new Array(3);
 10.1289 -  var gt = 0;
 10.1290 -  for(;;) switch(gt) {
 10.1291 -    case 0: stack.push(arg0); // 42
 10.1292 -    case 1: stack.push(arg1); // 27
 10.1293 -    case 2: stack.push(arg2); // 28
 10.1294 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.substringLjava_lang_StringII(self, v0, v1)); } // 182 1 147
 10.1295 -    case 6: return stack.pop(); // 176
 10.1296 -  }
 10.1297 -}
 10.1298 -function java_lang_String_concatLjava_lang_StringLjava_lang_String(arg0,arg1) {
 10.1299 -  var arg2;
 10.1300 -  var arg3;
 10.1301 -  var arg4;
 10.1302 -;
 10.1303 -  var stack = new Array(5);
 10.1304 -  var gt = 0;
 10.1305 -  for(;;) switch(gt) {
 10.1306 -    case 0: stack.push(arg1); // 43
 10.1307 -    case 1: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 182 1 133
 10.1308 -    case 4: arg2 = stack.pop(); // 61
 10.1309 -    case 5: stack.push(arg2); // 28
 10.1310 -    case 6: if (stack.pop() != 0) { gt = 11; continue; } // 154 0 5
 10.1311 -    case 9: stack.push(arg0); // 42
 10.1312 -    case 10: return stack.pop(); // 176
 10.1313 -    case 11: stack.push(arg0); // 42
 10.1314 -    case 12: stack.push(stack.pop().count); // 180 1 97
 10.1315 -    case 15: stack.push(arg2); // 28
 10.1316 -    case 16: stack.push(stack.pop() + stack.pop()); // 96
 10.1317 -    case 17: stack.push(new Array(stack.pop())); // 188 5
 10.1318 -    case 19: arg3 = stack.pop(); // 78
 10.1319 -    case 20: stack.push(arg0); // 42
 10.1320 -    case 21: stack.push(0); // 3
 10.1321 -    case 22: stack.push(arg0); // 42
 10.1322 -    case 23: stack.push(stack.pop().count); // 180 1 97
 10.1323 -    case 26: stack.push(arg3); // 45
 10.1324 -    case 27: stack.push(0); // 3
 10.1325 -    case 28: { var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); self.getCharsVIIACAI(self, v0, v1, v2, v3); } // 182 1 138
 10.1326 -    case 31: stack.push(arg1); // 43
 10.1327 -    case 32: stack.push(0); // 3
 10.1328 -    case 33: stack.push(arg2); // 28
 10.1329 -    case 34: stack.push(arg3); // 45
 10.1330 -    case 35: stack.push(arg0); // 42
 10.1331 -    case 36: stack.push(stack.pop().count); // 180 1 97
 10.1332 -    case 39: { var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); self.getCharsVIIACAI(self, v0, v1, v2, v3); } // 182 1 138
 10.1333 -    case 42: stack.push(new java_lang_String); // 187 0 200
 10.1334 -    case 45: stack.push(stack[stack.length - 1]); // 89
 10.1335 -    case 46: stack.push(0); // 3
 10.1336 -    case 47: stack.push(arg0); // 42
 10.1337 -    case 48: stack.push(stack.pop().count); // 180 1 97
 10.1338 -    case 51: stack.push(arg2); // 28
 10.1339 -    case 52: stack.push(stack.pop() + stack.pop()); // 96
 10.1340 -    case 53: stack.push(arg3); // 45
 10.1341 -    case 54: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVIIAC(stack.pop(), v0, v1, v2); } // 183 1 137
 10.1342 -    case 57: return stack.pop(); // 176
 10.1343 -  }
 10.1344 -}
 10.1345 -function java_lang_String_matchesZLjava_lang_String(arg0,arg1) {
 10.1346 -  var arg2;
 10.1347 -;
 10.1348 -  var stack = new Array(2);
 10.1349 -  var gt = 0;
 10.1350 -  for(;;) switch(gt) {
 10.1351 -    case 0: stack.push(arg1); // 43
 10.1352 -    case 1: stack.push(arg0); // 42
 10.1353 -    case 2: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_util_regex_Pattern_matchesZLjava_lang_StringLjava_lang_CharSequence(v0, v1)); } // 184 1 183
 10.1354 -    case 5: return stack.pop(); // 172
 10.1355 -  }
 10.1356 -}
 10.1357 -function java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) {
 10.1358 -  var arg3;
 10.1359 -;
 10.1360 -  var stack = new Array(2);
 10.1361 -  var gt = 0;
 10.1362 -  for(;;) switch(gt) {
 10.1363 -    case 0: stack.push(arg1); // 43
 10.1364 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
 10.1365 -    case 4: stack.push(arg0); // 42
 10.1366 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
 10.1367 -    case 8: stack.push(arg2); // 44
 10.1368 -    case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceFirstLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 182
 10.1369 -    case 12: return stack.pop(); // 176
 10.1370 -  }
 10.1371 -}
 10.1372 -function java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) {
 10.1373 -  var arg3;
 10.1374 -;
 10.1375 -  var stack = new Array(2);
 10.1376 -  var gt = 0;
 10.1377 -  for(;;) switch(gt) {
 10.1378 -    case 0: stack.push(arg1); // 43
 10.1379 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
 10.1380 -    case 4: stack.push(arg0); // 42
 10.1381 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
 10.1382 -    case 8: stack.push(arg2); // 44
 10.1383 -    case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181
 10.1384 -    case 12: return stack.pop(); // 176
 10.1385 -  }
 10.1386 -}
 10.1387 -function java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence(arg0,arg1,arg2) {
 10.1388 -  var arg3;
 10.1389 -;
 10.1390 -  var stack = new Array(2);
 10.1391 -  var gt = 0;
 10.1392 -  for(;;) switch(gt) {
 10.1393 -    case 0: stack.push(arg1); // 43
 10.1394 -    case 1: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
 10.1395 -    case 4: stack.push(16); // 16 16
 10.1396 -    case 6: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_StringI(v0, v1)); } // 184 1 187
 10.1397 -    case 9: stack.push(arg0); // 42
 10.1398 -    case 10: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
 10.1399 -    case 13: stack.push(arg2); // 44
 10.1400 -    case 14: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
 10.1401 -    case 17: { var v0 = stack.pop(); stack.push(java_util_regex_Matcher_quoteReplacementLjava_lang_StringLjava_lang_String(v0)); } // 184 1 180
 10.1402 -    case 20: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181
 10.1403 -    case 23: return stack.pop(); // 176
 10.1404 -  }
 10.1405 -}
 10.1406 -function java_lang_String_splitALjava_lang_StringLjava_lang_StringI(arg0,arg1,arg2) {
 10.1407 -  var arg3;
 10.1408 -;
 10.1409 -  var stack = new Array(3);
 10.1410 -  var gt = 0;
 10.1411 -  for(;;) switch(gt) {
 10.1412 -    case 0: stack.push(arg1); // 43
 10.1413 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
 10.1414 -    case 4: stack.push(arg0); // 42
 10.1415 -    case 5: stack.push(arg2); // 28
 10.1416 -    case 6: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.splitALjava_lang_StringLjava_lang_CharSequenceI(self, v0, v1)); } // 182 1 184
 10.1417 -    case 9: return stack.pop(); // 176
 10.1418 -  }
 10.1419 -}
 10.1420 -function java_lang_String_splitALjava_lang_StringLjava_lang_String(arg0,arg1) {
 10.1421 -  var arg2;
 10.1422 -;
 10.1423 -  var stack = new Array(3);
 10.1424 -  var gt = 0;
 10.1425 -  for(;;) switch(gt) {
 10.1426 -    case 0: stack.push(arg0); // 42
 10.1427 -    case 1: stack.push(arg1); // 43
 10.1428 -    case 2: stack.push(0); // 3
 10.1429 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.splitALjava_lang_StringLjava_lang_StringI(self, v0, v1)); } // 182 1 157
 10.1430 -    case 6: return stack.pop(); // 176
 10.1431 -  }
 10.1432 -}
 10.1433 -function java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) {
 10.1434 -  var arg2;
 10.1435 -  var arg3;
 10.1436 -  var arg4;
 10.1437 -  var arg5;
 10.1438 -  var arg6;
 10.1439 -  var arg7;
 10.1440 -  var arg8;
 10.1441 -  var arg9;
 10.1442 -  var arg10;
 10.1443 -  var arg11;
 10.1444 -  var arg12;
 10.1445 -  var arg13;
 10.1446 -  var arg14;
 10.1447 -;
 10.1448 -  var stack = new Array(6);
 10.1449 -  var gt = 0;
 10.1450 -  for(;;) switch(gt) {
 10.1451 -    case 0: stack.push(arg1); // 43
 10.1452 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
 10.1453 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
 10.1454 -    case 7: stack.push(stack[stack.length - 1]); // 89
 10.1455 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
 10.1456 -    case 11:  // 191
 10.1457 -    case 12: stack.push(0); // 3
 10.1458 -    case 13: arg2 = stack.pop(); // 61
 10.1459 -    case 14: stack.push(arg2); // 28
 10.1460 -    case 15: stack.push(arg0); // 42
 10.1461 -    case 16: stack.push(stack.pop().count); // 180 1 97
 10.1462 -    case 19: if (stack.pop() <= stack.pop()) { gt = 94; continue; } // 162 0 75
 10.1463 -    case 22: stack.push(arg0); // 42
 10.1464 -    case 23: stack.push(stack.pop().value); // 180 1 100
 10.1465 -    case 26: stack.push(arg0); // 42
 10.1466 -    case 27: stack.push(stack.pop().offset); // 180 1 99
 10.1467 -    case 30: stack.push(arg2); // 28
 10.1468 -    case 31: stack.push(stack.pop() + stack.pop()); // 96
 10.1469 -    case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1470 -    case 33: arg3 = stack.pop(); // 62
 10.1471 -    case 34: stack.push(arg3); // 29
 10.1472 -    case 35: stack.push(55296); // 18 1
 10.1473 -    case 37: if (stack.pop() > stack.pop()) { gt = 77; continue; } // 161 0 40
 10.1474 -    case 40: stack.push(arg3); // 29
 10.1475 -    case 41: stack.push(56319); // 18 2
 10.1476 -    case 43: if (stack.pop() < stack.pop()) { gt = 77; continue; } // 163 0 34
 10.1477 -    case 46: stack.push(arg0); // 42
 10.1478 -    case 47: stack.push(arg2); // 28
 10.1479 -    case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
 10.1480 -    case 51: arg4 = stack.pop() // 54 4
 10.1481 -    case 53: stack.push(arg4); // 21 4
 10.1482 -    case 55: stack.push(arg4); // 21 4
 10.1483 -    case 57: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107
 10.1484 -    case 60: if (stack.pop() == stack.pop()) { gt = 66; continue; } // 159 0 6
 10.1485 -    case 63: gt = 96; continue; // 167 0 33
 10.1486 -    case 66: stack.push(arg2); // 28
 10.1487 -    case 67: stack.push(arg4); // 21 4
 10.1488 -    case 69: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
 10.1489 -    case 72: stack.push(stack.pop() + stack.pop()); // 96
 10.1490 -    case 73: arg2 = stack.pop(); // 61
 10.1491 -    case 74: gt = 91; continue; // 167 0 17
 10.1492 -    case 77: stack.push(arg3); // 29
 10.1493 -    case 78: stack.push(arg3); // 29
 10.1494 -    case 79: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
 10.1495 -    case 82: if (stack.pop() == stack.pop()) { gt = 88; continue; } // 159 0 6
 10.1496 -    case 85: gt = 96; continue; // 167 0 11
 10.1497 -    case 88: arg2++; // 132 2 1
 10.1498 -    case 91: gt = 14; continue; // 167 255 179
 10.1499 -    case 94: stack.push(arg0); // 42
 10.1500 -    case 95: return stack.pop(); // 176
 10.1501 -    case 96: stack.push(arg0); // 42
 10.1502 -    case 97: stack.push(stack.pop().count); // 180 1 97
 10.1503 -    case 100: stack.push(new Array(stack.pop())); // 188 5
 10.1504 -    case 102: arg3 = stack.pop(); // 78
 10.1505 -    case 103: stack.push(0); // 3
 10.1506 -    case 104: arg4 = stack.pop() // 54 4
 10.1507 -    case 106: stack.push(arg0); // 42
 10.1508 -    case 107: stack.push(stack.pop().value); // 180 1 100
 10.1509 -    case 110: stack.push(arg0); // 42
 10.1510 -    case 111: stack.push(stack.pop().offset); // 180 1 99
 10.1511 -    case 114: stack.push(arg3); // 45
 10.1512 -    case 115: stack.push(0); // 3
 10.1513 -    case 116: stack.push(arg2); // 28
 10.1514 -    case 117: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_System_arraycopyVLjava_lang_ObjectILjava_lang_ObjectII(v0, v1, v2, v3, v4); } // 184 1 171
 10.1515 -    case 120: stack.push(arg1); // 43
 10.1516 -    case 121: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178
 10.1517 -    case 124: arg5 = stack.pop() // 58 5
 10.1518 -    case 126: stack.push(arg5); // 25 5
 10.1519 -    case 128: stack.push("tr"); // 18 11
 10.1520 -    case 130:  // 165
 10.1521 -    case 131:  // 0
 10.1522 -    case 132: stack.push(6405); // 17 25 5
 10.1523 -    case 135: stack.push("az"); // 18 5
 10.1524 -    case 137:  // 165
 10.1525 -    case 138:  // 0
 10.1526 -    case 139: stack.push(1); // 10
 10.1527 -    case 140: stack.push(arg5); // 25 5
 10.1528 -    case 142: stack.push("lt"); // 18 9
 10.1529 -    case 144:  // 166
 10.1530 -    case 145:  // 0
 10.1531 -    case 146: stack.push(4); // 7
 10.1532 -    case 147: stack.push(1); // 4
 10.1533 -    case 148: gt = 152; continue; // 167 0 4
 10.1534 -    case 151: stack.push(0); // 3
 10.1535 -    case 152: arg6 = stack.pop() // 54 6
 10.1536 -    case 154: stack.push(arg2); // 28
 10.1537 -    case 155: arg11 = stack.pop() // 54 11
 10.1538 -    case 157: stack.push(arg11); // 21 11
 10.1539 -    case 159: stack.push(arg0); // 42
 10.1540 -    case 160: stack.push(stack.pop().count); // 180 1 97
 10.1541 -    case 163: if (stack.pop() <= stack.pop()) { gt = 419; continue; } // 162 1 0
 10.1542 -    case 166: stack.push(arg0); // 42
 10.1543 -    case 167: stack.push(stack.pop().value); // 180 1 100
 10.1544 -    case 170: stack.push(arg0); // 42
 10.1545 -    case 171: stack.push(stack.pop().offset); // 180 1 99
 10.1546 -    case 174: stack.push(arg11); // 21 11
 10.1547 -    case 176: stack.push(stack.pop() + stack.pop()); // 96
 10.1548 -    case 177: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1549 -    case 178: arg9 = stack.pop() // 54 9
 10.1550 -    case 180: stack.push(arg9); // 21 9
 10.1551 -    case 182: // number conversion  // 146
 10.1552 -    case 183: stack.push(55296); // 18 1
 10.1553 -    case 185: if (stack.pop() > stack.pop()) { gt = 214; continue; } // 161 0 29
 10.1554 -    case 188: stack.push(arg9); // 21 9
 10.1555 -    case 190: // number conversion  // 146
 10.1556 -    case 191: stack.push(56319); // 18 2
 10.1557 -    case 193: if (stack.pop() < stack.pop()) { gt = 214; continue; } // 163 0 21
 10.1558 -    case 196: stack.push(arg0); // 42
 10.1559 -    case 197: stack.push(arg11); // 21 11
 10.1560 -    case 199: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
 10.1561 -    case 202: arg9 = stack.pop() // 54 9
 10.1562 -    case 204: stack.push(arg9); // 21 9
 10.1563 -    case 206: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
 10.1564 -    case 209: arg10 = stack.pop() // 54 10
 10.1565 -    case 211: gt = 217; continue; // 167 0 6
 10.1566 -    case 214: stack.push(1); // 4
 10.1567 -    case 215: arg10 = stack.pop() // 54 10
 10.1568 -    case 217: stack.push(arg6); // 21 6
 10.1569 -    case 219: if (stack.pop() != 0) { gt = 230; continue; } // 154 0 11
 10.1570 -    case 222: stack.push(arg9); // 21 9
 10.1571 -    case 224: stack.push(931); // 17 3 163
 10.1572 -    case 227: if (stack.pop() != stack.pop()) { gt = 242; continue; } // 160 0 15
 10.1573 -    case 230: stack.push(arg0); // 42
 10.1574 -    case 231: stack.push(arg11); // 21 11
 10.1575 -    case 233: stack.push(arg1); // 43
 10.1576 -    case 234: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_ConditionalSpecialCasing_toLowerCaseExILjava_lang_StringILjava_util_Locale(v0, v1, v2)); } // 184 1 117
 10.1577 -    case 237: arg8 = stack.pop() // 54 8
 10.1578 -    case 239: gt = 249; continue; // 167 0 10
 10.1579 -    case 242: stack.push(arg9); // 21 9
 10.1580 -    case 244: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107
 10.1581 -    case 247: arg8 = stack.pop() // 54 8
 10.1582 -    case 249: stack.push(arg8); // 21 8
 10.1583 -    case 251:  // 2
 10.1584 -    case 252: if (stack.pop() == stack.pop()) { gt = 262; continue; } // 159 0 10
 10.1585 -    case 255: stack.push(arg8); // 21 8
 10.1586 -    case 257: stack.push(65536); // 18 3
 10.1587 -    case 259: if (stack.pop() > stack.pop()) { gt = 399; continue; } // 161 0 140
 10.1588 -    case 262: stack.push(arg8); // 21 8
 10.1589 -    case 264:  // 2
 10.1590 -    case 265: if (stack.pop() != stack.pop()) { gt = 280; continue; } // 160 0 15
 10.1591 -    case 268: stack.push(arg0); // 42
 10.1592 -    case 269: stack.push(arg11); // 21 11
 10.1593 -    case 271: stack.push(arg1); // 43
 10.1594 -    case 272: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_ConditionalSpecialCasing_toLowerCaseCharArrayACLjava_lang_StringILjava_util_Locale(v0, v1, v2)); } // 184 1 119
 10.1595 -    case 275: arg7 = stack.pop() // 58 7
 10.1596 -    case 277: gt = 315; continue; // 167 0 38
 10.1597 -    case 280: stack.push(arg10); // 21 10
 10.1598 -    case 282: stack.push(2); // 5
 10.1599 -    case 283: if (stack.pop() != stack.pop()) { gt = 308; continue; } // 160 0 25
 10.1600 -    case 286: stack.push(arg4); // 21 4
 10.1601 -    case 288: stack.push(arg8); // 21 8
 10.1602 -    case 290: stack.push(arg3); // 45
 10.1603 -    case 291: stack.push(arg11); // 21 11
 10.1604 -    case 293: stack.push(arg4); // 21 4
 10.1605 -    case 295: stack.push(stack.pop() + stack.pop()); // 96
 10.1606 -    case 296: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_toCharsAIIACAI(v0, v1, v2)); } // 184 1 111
 10.1607 -    case 299: stack.push(arg10); // 21 10
 10.1608 -    case 301: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1609 -    case 302: stack.push(stack.pop() + stack.pop()); // 96
 10.1610 -    case 303: arg4 = stack.pop() // 54 4
 10.1611 -    case 305: gt = 409; continue; // 167 0 104
 10.1612 -    case 308: stack.push(arg8); // 21 8
 10.1613 -    case 310: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
 10.1614 -    case 313: arg7 = stack.pop() // 58 7
 10.1615 -    case 315: stack.push(arg7); // 25 7
 10.1616 -    case 317: stack.push(stack.pop().length); // 190
 10.1617 -    case 318: arg12 = stack.pop() // 54 12
 10.1618 -    case 320: stack.push(arg12); // 21 12
 10.1619 -    case 322: stack.push(arg10); // 21 10
 10.1620 -    case 324: if (stack.pop() >= stack.pop()) { gt = 355; continue; } // 164 0 31
 10.1621 -    case 327: stack.push(arg3); // 45
 10.1622 -    case 328: stack.push(stack.pop().length); // 190
 10.1623 -    case 329: stack.push(arg12); // 21 12
 10.1624 -    case 331: stack.push(stack.pop() + stack.pop()); // 96
 10.1625 -    case 332: stack.push(arg10); // 21 10
 10.1626 -    case 334: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1627 -    case 335: stack.push(new Array(stack.pop())); // 188 5
 10.1628 -    case 337: arg13 = stack.pop() // 58 13
 10.1629 -    case 339: stack.push(arg3); // 45
 10.1630 -    case 340: stack.push(0); // 3
 10.1631 -    case 341: stack.push(arg13); // 25 13
 10.1632 -    case 343: stack.push(0); // 3
 10.1633 -    case 344: stack.push(arg11); // 21 11
 10.1634 -    case 346: stack.push(arg4); // 21 4
 10.1635 -    case 348: stack.push(stack.pop() + stack.pop()); // 96
 10.1636 -    case 349: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_System_arraycopyVLjava_lang_ObjectILjava_lang_ObjectII(v0, v1, v2, v3, v4); } // 184 1 171
 10.1637 -    case 352: stack.push(arg13); // 25 13
 10.1638 -    case 354: arg3 = stack.pop(); // 78
 10.1639 -    case 355: stack.push(0); // 3
 10.1640 -    case 356: arg13 = stack.pop() // 54 13
 10.1641 -    case 358: stack.push(arg13); // 21 13
 10.1642 -    case 360: stack.push(arg12); // 21 12
 10.1643 -    case 362: if (stack.pop() <= stack.pop()) { gt = 386; continue; } // 162 0 24
 10.1644 -    case 365: stack.push(arg3); // 45
 10.1645 -    case 366: stack.push(arg11); // 21 11
 10.1646 -    case 368: stack.push(arg4); // 21 4
 10.1647 -    case 370: stack.push(stack.pop() + stack.pop()); // 96
 10.1648 -    case 371: stack.push(arg13); // 21 13
 10.1649 -    case 373: stack.push(stack.pop() + stack.pop()); // 96
 10.1650 -    case 374: stack.push(arg7); // 25 7
 10.1651 -    case 376: stack.push(arg13); // 21 13
 10.1652 -    case 378: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1653 -    case 379: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
 10.1654 -    case 380: arg13++; // 132 13 1
 10.1655 -    case 383: gt = 358; continue; // 167 255 231
 10.1656 -    case 386: stack.push(arg4); // 21 4
 10.1657 -    case 388: stack.push(arg12); // 21 12
 10.1658 -    case 390: stack.push(arg10); // 21 10
 10.1659 -    case 392: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1660 -    case 393: stack.push(stack.pop() + stack.pop()); // 96
 10.1661 -    case 394: arg4 = stack.pop() // 54 4
 10.1662 -    case 396: gt = 409; continue; // 167 0 13
 10.1663 -    case 399: stack.push(arg3); // 45
 10.1664 -    case 400: stack.push(arg11); // 21 11
 10.1665 -    case 402: stack.push(arg4); // 21 4
 10.1666 -    case 404: stack.push(stack.pop() + stack.pop()); // 96
 10.1667 -    case 405: stack.push(arg8); // 21 8
 10.1668 -    case 407: // number conversion  // 146
 10.1669 -    case 408: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
 10.1670 -    case 409: stack.push(arg11); // 21 11
 10.1671 -    case 411: stack.push(arg10); // 21 10
 10.1672 -    case 413: stack.push(stack.pop() + stack.pop()); // 96
 10.1673 -    case 414: arg11 = stack.pop() // 54 11
 10.1674 -    case 416: gt = 157; continue; // 167 254 253
 10.1675 -    case 419: stack.push(new java_lang_String); // 187 0 200
 10.1676 -    case 422: stack.push(stack[stack.length - 1]); // 89
 10.1677 -    case 423: stack.push(0); // 3
 10.1678 -    case 424: stack.push(arg0); // 42
 10.1679 -    case 425: stack.push(stack.pop().count); // 180 1 97
 10.1680 -    case 428: stack.push(arg4); // 21 4
 10.1681 -    case 430: stack.push(stack.pop() + stack.pop()); // 96
 10.1682 -    case 431: stack.push(arg3); // 45
 10.1683 -    case 432: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVIIAC(stack.pop(), v0, v1, v2); } // 183 1 137
 10.1684 -    case 435: return stack.pop(); // 176
 10.1685 -  }
 10.1686 -}
 10.1687 -function java_lang_String_toLowerCaseLjava_lang_String(arg0) {
 10.1688 -  var arg1;
 10.1689 -;
 10.1690 -  var stack = new Array(2);
 10.1691 -  var gt = 0;
 10.1692 -  for(;;) switch(gt) {
 10.1693 -    case 0: stack.push(arg0); // 42
 10.1694 -    case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179
 10.1695 -    case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toLowerCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 158
 10.1696 -    case 7: return stack.pop(); // 176
 10.1697 -  }
 10.1698 -}
 10.1699 -function java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) {
 10.1700 -  var arg2;
 10.1701 -  var arg3;
 10.1702 -  var arg4;
 10.1703 -  var arg5;
 10.1704 -  var arg6;
 10.1705 -  var arg7;
 10.1706 -  var arg8;
 10.1707 -  var arg9;
 10.1708 -  var arg10;
 10.1709 -  var arg11;
 10.1710 -  var arg12;
 10.1711 -  var arg13;
 10.1712 -  var arg14;
 10.1713 -;
 10.1714 -  var stack = new Array(6);
 10.1715 -  var gt = 0;
 10.1716 -  for(;;) switch(gt) {
 10.1717 -    case 0: stack.push(arg1); // 43
 10.1718 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
 10.1719 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
 10.1720 -    case 7: stack.push(stack[stack.length - 1]); // 89
 10.1721 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
 10.1722 -    case 11:  // 191
 10.1723 -    case 12: stack.push(0); // 3
 10.1724 -    case 13: arg2 = stack.pop(); // 61
 10.1725 -    case 14: stack.push(arg2); // 28
 10.1726 -    case 15: stack.push(arg0); // 42
 10.1727 -    case 16: stack.push(stack.pop().count); // 180 1 97
 10.1728 -    case 19: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 74
 10.1729 -    case 22: stack.push(arg0); // 42
 10.1730 -    case 23: stack.push(stack.pop().value); // 180 1 100
 10.1731 -    case 26: stack.push(arg0); // 42
 10.1732 -    case 27: stack.push(stack.pop().offset); // 180 1 99
 10.1733 -    case 30: stack.push(arg2); // 28
 10.1734 -    case 31: stack.push(stack.pop() + stack.pop()); // 96
 10.1735 -    case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1736 -    case 33: arg3 = stack.pop(); // 62
 10.1737 -    case 34: stack.push(arg3); // 29
 10.1738 -    case 35: stack.push(55296); // 18 1
 10.1739 -    case 37: if (stack.pop() > stack.pop()) { gt = 61; continue; } // 161 0 24
 10.1740 -    case 40: stack.push(arg3); // 29
 10.1741 -    case 41: stack.push(56319); // 18 2
 10.1742 -    case 43: if (stack.pop() < stack.pop()) { gt = 61; continue; } // 163 0 18
 10.1743 -    case 46: stack.push(arg0); // 42
 10.1744 -    case 47: stack.push(arg2); // 28
 10.1745 -    case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
 10.1746 -    case 51: arg3 = stack.pop(); // 62
 10.1747 -    case 52: stack.push(arg3); // 29
 10.1748 -    case 53: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
 10.1749 -    case 56: arg4 = stack.pop() // 54 4
 10.1750 -    case 58: gt = 64; continue; // 167 0 6
 10.1751 -    case 61: stack.push(1); // 4
 10.1752 -    case 62: arg4 = stack.pop() // 54 4
 10.1753 -    case 64: stack.push(arg3); // 29
 10.1754 -    case 65: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108
 10.1755 -    case 68: arg5 = stack.pop() // 54 5
 10.1756 -    case 70: stack.push(arg5); // 21 5
 10.1757 -    case 72:  // 2
 10.1758 -    case 73: if (stack.pop() == stack.pop()) { gt = 95; continue; } // 159 0 22
 10.1759 -    case 76: stack.push(arg3); // 29
 10.1760 -    case 77: stack.push(arg5); // 21 5
 10.1761 -    case 79: if (stack.pop() == stack.pop()) { gt = 85; continue; } // 159 0 6
 10.1762 -    case 82: gt = 95; continue; // 167 0 13
 10.1763 -    case 85: stack.push(arg2); // 28
 10.1764 -    case 86: stack.push(arg4); // 21 4
 10.1765 -    case 88: stack.push(stack.pop() + stack.pop()); // 96
 10.1766 -    case 89: arg2 = stack.pop(); // 61
 10.1767 -    case 90: gt = 14; continue; // 167 255 180
 10.1768 -    case 93: stack.push(arg0); // 42
 10.1769 -    case 94: return stack.pop(); // 176
 10.1770 -    case 95: stack.push(arg0); // 42
 10.1771 -    case 96: stack.push(stack.pop().count); // 180 1 97
 10.1772 -    case 99: stack.push(new Array(stack.pop())); // 188 5
 10.1773 -    case 101: arg3 = stack.pop(); // 78
 10.1774 -    case 102: stack.push(0); // 3
 10.1775 -    case 103: arg4 = stack.pop() // 54 4
 10.1776 -    case 105: stack.push(arg0); // 42
 10.1777 -    case 106: stack.push(stack.pop().value); // 180 1 100
 10.1778 -    case 109: stack.push(arg0); // 42
 10.1779 -    case 110: stack.push(stack.pop().offset); // 180 1 99
 10.1780 -    case 113: stack.push(arg3); // 45
 10.1781 -    case 114: stack.push(0); // 3
 10.1782 -    case 115: stack.push(arg2); // 28
 10.1783 -    case 116: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_System_arraycopyVLjava_lang_ObjectILjava_lang_ObjectII(v0, v1, v2, v3, v4); } // 184 1 171
 10.1784 -    case 119: stack.push(arg1); // 43
 10.1785 -    case 120: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178
 10.1786 -    case 123: arg5 = stack.pop() // 58 5
 10.1787 -    case 125: stack.push(arg5); // 25 5
 10.1788 -    case 127: stack.push("tr"); // 18 11
 10.1789 -    case 129:  // 165
 10.1790 -    case 130:  // 0
 10.1791 -    case 131: stack.push(6405); // 17 25 5
 10.1792 -    case 134: stack.push("az"); // 18 5
 10.1793 -    case 136:  // 165
 10.1794 -    case 137:  // 0
 10.1795 -    case 138: stack.push(1); // 10
 10.1796 -    case 139: stack.push(arg5); // 25 5
 10.1797 -    case 141: stack.push("lt"); // 18 9
 10.1798 -    case 143:  // 166
 10.1799 -    case 144:  // 0
 10.1800 -    case 145: stack.push(4); // 7
 10.1801 -    case 146: stack.push(1); // 4
 10.1802 -    case 147: gt = 151; continue; // 167 0 4
 10.1803 -    case 150: stack.push(0); // 3
 10.1804 -    case 151: arg6 = stack.pop() // 54 6
 10.1805 -    case 153: stack.push(arg2); // 28
 10.1806 -    case 154: arg11 = stack.pop() // 54 11
 10.1807 -    case 156: stack.push(arg11); // 21 11
 10.1808 -    case 158: stack.push(arg0); // 42
 10.1809 -    case 159: stack.push(stack.pop().count); // 180 1 97
 10.1810 -    case 162: if (stack.pop() <= stack.pop()) { gt = 425; continue; } // 162 1 7
 10.1811 -    case 165: stack.push(arg0); // 42
 10.1812 -    case 166: stack.push(stack.pop().value); // 180 1 100
 10.1813 -    case 169: stack.push(arg0); // 42
 10.1814 -    case 170: stack.push(stack.pop().offset); // 180 1 99
 10.1815 -    case 173: stack.push(arg11); // 21 11
 10.1816 -    case 175: stack.push(stack.pop() + stack.pop()); // 96
 10.1817 -    case 176: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1818 -    case 177: arg9 = stack.pop() // 54 9
 10.1819 -    case 179: stack.push(arg9); // 21 9
 10.1820 -    case 181: // number conversion  // 146
 10.1821 -    case 182: stack.push(55296); // 18 1
 10.1822 -    case 184: if (stack.pop() > stack.pop()) { gt = 213; continue; } // 161 0 29
 10.1823 -    case 187: stack.push(arg9); // 21 9
 10.1824 -    case 189: // number conversion  // 146
 10.1825 -    case 190: stack.push(56319); // 18 2
 10.1826 -    case 192: if (stack.pop() < stack.pop()) { gt = 213; continue; } // 163 0 21
 10.1827 -    case 195: stack.push(arg0); // 42
 10.1828 -    case 196: stack.push(arg11); // 21 11
 10.1829 -    case 198: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
 10.1830 -    case 201: arg9 = stack.pop() // 54 9
 10.1831 -    case 203: stack.push(arg9); // 21 9
 10.1832 -    case 205: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
 10.1833 -    case 208: arg10 = stack.pop() // 54 10
 10.1834 -    case 210: gt = 216; continue; // 167 0 6
 10.1835 -    case 213: stack.push(1); // 4
 10.1836 -    case 214: arg10 = stack.pop() // 54 10
 10.1837 -    case 216: stack.push(arg6); // 21 6
 10.1838 -    case 218: if (stack.pop() == 0) { gt = 233; continue; } // 153 0 15
 10.1839 -    case 221: stack.push(arg0); // 42
 10.1840 -    case 222: stack.push(arg11); // 21 11
 10.1841 -    case 224: stack.push(arg1); // 43
 10.1842 -    case 225: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_ConditionalSpecialCasing_toUpperCaseExILjava_lang_StringILjava_util_Locale(v0, v1, v2)); } // 184 1 118
 10.1843 -    case 228: arg8 = stack.pop() // 54 8
 10.1844 -    case 230: gt = 240; continue; // 167 0 10
 10.1845 -    case 233: stack.push(arg9); // 21 9
 10.1846 -    case 235: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108
 10.1847 -    case 238: arg8 = stack.pop() // 54 8
 10.1848 -    case 240: stack.push(arg8); // 21 8
 10.1849 -    case 242:  // 2
 10.1850 -    case 243: if (stack.pop() == stack.pop()) { gt = 253; continue; } // 159 0 10
 10.1851 -    case 246: stack.push(arg8); // 21 8
 10.1852 -    case 248: stack.push(65536); // 18 3
 10.1853 -    case 250: if (stack.pop() > stack.pop()) { gt = 405; continue; } // 161 0 155
 10.1854 -    case 253: stack.push(arg8); // 21 8
 10.1855 -    case 255:  // 2
 10.1856 -    case 256: if (stack.pop() != stack.pop()) { gt = 286; continue; } // 160 0 30
 10.1857 -    case 259: stack.push(arg6); // 21 6
 10.1858 -    case 261: if (stack.pop() == 0) { gt = 276; continue; } // 153 0 15
 10.1859 -    case 264: stack.push(arg0); // 42
 10.1860 -    case 265: stack.push(arg11); // 21 11
 10.1861 -    case 267: stack.push(arg1); // 43
 10.1862 -    case 268: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_ConditionalSpecialCasing_toUpperCaseCharArrayACLjava_lang_StringILjava_util_Locale(v0, v1, v2)); } // 184 1 120
 10.1863 -    case 271: arg7 = stack.pop() // 58 7
 10.1864 -    case 273: gt = 321; continue; // 167 0 48
 10.1865 -    case 276: stack.push(arg9); // 21 9
 10.1866 -    case 278: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCharArrayACI(v0)); } // 184 1 110
 10.1867 -    case 281: arg7 = stack.pop() // 58 7
 10.1868 -    case 283: gt = 321; continue; // 167 0 38
 10.1869 -    case 286: stack.push(arg10); // 21 10
 10.1870 -    case 288: stack.push(2); // 5
 10.1871 -    case 289: if (stack.pop() != stack.pop()) { gt = 314; continue; } // 160 0 25
 10.1872 -    case 292: stack.push(arg4); // 21 4
 10.1873 -    case 294: stack.push(arg8); // 21 8
 10.1874 -    case 296: stack.push(arg3); // 45
 10.1875 -    case 297: stack.push(arg11); // 21 11
 10.1876 -    case 299: stack.push(arg4); // 21 4
 10.1877 -    case 301: stack.push(stack.pop() + stack.pop()); // 96
 10.1878 -    case 302: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Character_toCharsAIIACAI(v0, v1, v2)); } // 184 1 111
 10.1879 -    case 305: stack.push(arg10); // 21 10
 10.1880 -    case 307: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1881 -    case 308: stack.push(stack.pop() + stack.pop()); // 96
 10.1882 -    case 309: arg4 = stack.pop() // 54 4
 10.1883 -    case 311: gt = 415; continue; // 167 0 104
 10.1884 -    case 314: stack.push(arg8); // 21 8
 10.1885 -    case 316: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
 10.1886 -    case 319: arg7 = stack.pop() // 58 7
 10.1887 -    case 321: stack.push(arg7); // 25 7
 10.1888 -    case 323: stack.push(stack.pop().length); // 190
 10.1889 -    case 324: arg12 = stack.pop() // 54 12
 10.1890 -    case 326: stack.push(arg12); // 21 12
 10.1891 -    case 328: stack.push(arg10); // 21 10
 10.1892 -    case 330: if (stack.pop() >= stack.pop()) { gt = 361; continue; } // 164 0 31
 10.1893 -    case 333: stack.push(arg3); // 45
 10.1894 -    case 334: stack.push(stack.pop().length); // 190
 10.1895 -    case 335: stack.push(arg12); // 21 12
 10.1896 -    case 337: stack.push(stack.pop() + stack.pop()); // 96
 10.1897 -    case 338: stack.push(arg10); // 21 10
 10.1898 -    case 340: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1899 -    case 341: stack.push(new Array(stack.pop())); // 188 5
 10.1900 -    case 343: arg13 = stack.pop() // 58 13
 10.1901 -    case 345: stack.push(arg3); // 45
 10.1902 -    case 346: stack.push(0); // 3
 10.1903 -    case 347: stack.push(arg13); // 25 13
 10.1904 -    case 349: stack.push(0); // 3
 10.1905 -    case 350: stack.push(arg11); // 21 11
 10.1906 -    case 352: stack.push(arg4); // 21 4
 10.1907 -    case 354: stack.push(stack.pop() + stack.pop()); // 96
 10.1908 -    case 355: { var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_System_arraycopyVLjava_lang_ObjectILjava_lang_ObjectII(v0, v1, v2, v3, v4); } // 184 1 171
 10.1909 -    case 358: stack.push(arg13); // 25 13
 10.1910 -    case 360: arg3 = stack.pop(); // 78
 10.1911 -    case 361: stack.push(0); // 3
 10.1912 -    case 362: arg13 = stack.pop() // 54 13
 10.1913 -    case 364: stack.push(arg13); // 21 13
 10.1914 -    case 366: stack.push(arg12); // 21 12
 10.1915 -    case 368: if (stack.pop() <= stack.pop()) { gt = 392; continue; } // 162 0 24
 10.1916 -    case 371: stack.push(arg3); // 45
 10.1917 -    case 372: stack.push(arg11); // 21 11
 10.1918 -    case 374: stack.push(arg4); // 21 4
 10.1919 -    case 376: stack.push(stack.pop() + stack.pop()); // 96
 10.1920 -    case 377: stack.push(arg13); // 21 13
 10.1921 -    case 379: stack.push(stack.pop() + stack.pop()); // 96
 10.1922 -    case 380: stack.push(arg7); // 25 7
 10.1923 -    case 382: stack.push(arg13); // 21 13
 10.1924 -    case 384: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.1925 -    case 385: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
 10.1926 -    case 386: arg13++; // 132 13 1
 10.1927 -    case 389: gt = 364; continue; // 167 255 231
 10.1928 -    case 392: stack.push(arg4); // 21 4
 10.1929 -    case 394: stack.push(arg12); // 21 12
 10.1930 -    case 396: stack.push(arg10); // 21 10
 10.1931 -    case 398: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.1932 -    case 399: stack.push(stack.pop() + stack.pop()); // 96
 10.1933 -    case 400: arg4 = stack.pop() // 54 4
 10.1934 -    case 402: gt = 415; continue; // 167 0 13
 10.1935 -    case 405: stack.push(arg3); // 45
 10.1936 -    case 406: stack.push(arg11); // 21 11
 10.1937 -    case 408: stack.push(arg4); // 21 4
 10.1938 -    case 410: stack.push(stack.pop() + stack.pop()); // 96
 10.1939 -    case 411: stack.push(arg8); // 21 8
 10.1940 -    case 413: // number conversion  // 146
 10.1941 -    case 414: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
 10.1942 -    case 415: stack.push(arg11); // 21 11
 10.1943 -    case 417: stack.push(arg10); // 21 10
 10.1944 -    case 419: stack.push(stack.pop() + stack.pop()); // 96
 10.1945 -    case 420: arg11 = stack.pop() // 54 11
 10.1946 -    case 422: gt = 156; continue; // 167 254 246
 10.1947 -    case 425: stack.push(new java_lang_String); // 187 0 200
 10.1948 -    case 428: stack.push(stack[stack.length - 1]); // 89
 10.1949 -    case 429: stack.push(0); // 3
 10.1950 -    case 430: stack.push(arg0); // 42
 10.1951 -    case 431: stack.push(stack.pop().count); // 180 1 97
 10.1952 -    case 434: stack.push(arg4); // 21 4
 10.1953 -    case 436: stack.push(stack.pop() + stack.pop()); // 96
 10.1954 -    case 437: stack.push(arg3); // 45
 10.1955 -    case 438: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVIIAC(stack.pop(), v0, v1, v2); } // 183 1 137
 10.1956 -    case 441: return stack.pop(); // 176
 10.1957 -  }
 10.1958 -}
 10.1959 -function java_lang_String_toUpperCaseLjava_lang_String(arg0) {
 10.1960 -  var arg1;
 10.1961 -;
 10.1962 -  var stack = new Array(2);
 10.1963 -  var gt = 0;
 10.1964 -  for(;;) switch(gt) {
 10.1965 -    case 0: stack.push(arg0); // 42
 10.1966 -    case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179
 10.1967 -    case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toUpperCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 159
 10.1968 -    case 7: return stack.pop(); // 176
 10.1969 -  }
 10.1970 -}
 10.1971 -function java_lang_String_trimLjava_lang_String(arg0) {
 10.1972 -  var arg1;
 10.1973 -  var arg2;
 10.1974 -  var arg3;
 10.1975 -  var arg4;
 10.1976 -  var arg5;
 10.1977 -;
 10.1978 -  var stack = new Array(3);
 10.1979 -  var gt = 0;
 10.1980 -  for(;;) switch(gt) {
 10.1981 -    case 0: stack.push(arg0); // 42
 10.1982 -    case 1: stack.push(stack.pop().count); // 180 1 97
 10.1983 -    case 4: arg1 = stack.pop(); // 60
 10.1984 -    case 5: stack.push(0); // 3
 10.1985 -    case 6: arg2 = stack.pop(); // 61
 10.1986 -    case 7: stack.push(arg0); // 42
 10.1987 -    case 8: stack.push(stack.pop().offset); // 180 1 99
 10.1988 -    case 11: arg3 = stack.pop(); // 62
 10.1989 -    case 12: stack.push(arg0); // 42
 10.1990 -    case 13: stack.push(stack.pop().value); // 180 1 100
 10.1991 -    case 16: arg4 = stack.pop() // 58 4
 10.1992 -    case 18: stack.push(arg2); // 28
 10.1993 -    case 19: stack.push(arg1); // 27
 10.1994 -    case 20: if (stack.pop() <= stack.pop()) { gt = 40; continue; } // 162 0 20
 10.1995 -    case 23: stack.push(arg4); // 25 4
 10.1996 -    case 25: stack.push(arg3); // 29
 10.1997 -    case 26: stack.push(arg2); // 28
 10.1998 -    case 27: stack.push(stack.pop() + stack.pop()); // 96
 10.1999 -    case 28: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.2000 -    case 29: stack.push(32); // 16 32
 10.2001 -    case 31: if (stack.pop() < stack.pop()) { gt = 40; continue; } // 163 0 9
 10.2002 -    case 34: arg2++; // 132 2 1
 10.2003 -    case 37: gt = 18; continue; // 167 255 237
 10.2004 -    case 40: stack.push(arg2); // 28
 10.2005 -    case 41: stack.push(arg1); // 27
 10.2006 -    case 42: if (stack.pop() <= stack.pop()) { gt = 64; continue; } // 162 0 22
 10.2007 -    case 45: stack.push(arg4); // 25 4
 10.2008 -    case 47: stack.push(arg3); // 29
 10.2009 -    case 48: stack.push(arg1); // 27
 10.2010 -    case 49: stack.push(stack.pop() + stack.pop()); // 96
 10.2011 -    case 50: stack.push(1); // 4
 10.2012 -    case 51: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
 10.2013 -    case 52: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
 10.2014 -    case 53: stack.push(32); // 16 32
 10.2015 -    case 55: if (stack.pop() < stack.pop()) { gt = 64; continue; } // 163 0 9
 10.2016 -    case 58: arg1 += 255; // 132 1 255
 10.2017 -    case 61: gt = 40; continue; // 167 255 235
 10.2018 -    case 64: stack.push(arg2); // 28
 10.2019 -    case 65: if (stack.pop() > 0) { gt = 76; continue; } // 157 0 11
 10.2020 -    case 68: stack.push(arg1); // 27
 10.2021 -    case 69: stack.push(arg0); // 42
 10.2022 -    case 70: stack.push(stack.pop().count); // 180 1 97
 10.2023 -    case 73: if (stack.pop() <= stack.pop()) { gt = 85; continue; } // 162 0 12
 10.2024 -    case 76: stack.push(arg0); // 42
 10.2025 -    case 77: stack.push(arg2); // 28
 10.2026 -    case 78: stack.push(arg1); // 27
 10.2027 -    case 79: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.substringLjava_lang_StringII(self, v0, v1)); } // 182 1 147
 10.2028 -    case 82: gt = 86; continue; // 167 0 4
 10.2029 -    case 85: stack.push(arg0); // 42
 10.2030 -    case 86: return stack.pop(); // 176
 10.2031 -  }
 10.2032 -}
 10.2033 -*/
 10.2034 -function java_lang_String_toStringLjava_lang_String(arg0) {
 10.2035 -    return arg0.toString();
 10.2036 -}
 10.2037 -function java_lang_String_toCharArrayAC(arg0) {
 10.2038 -    return arg0.toString().split('');
 10.2039 -}
 10.2040 -/*
 10.2041 -function java_lang_String_formatLjava_lang_StringLjava_lang_StringLjava_lang_Object(arg0,arg1) {
 10.2042 -  var stack = new Array();
 10.2043 -  var gt = 0;
 10.2044 -  for(;;) switch(gt) {
 10.2045 -    case 0: stack.push(new java_util_Formatter); // 187 0 211
 10.2046 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2047 -    case 4: { java_util_Formatter_consV(stack.pop()); } // 183 1 174
 10.2048 -    case 7: stack.push(arg0); // 42
 10.2049 -    case 8: stack.push(arg1); // 43
 10.2050 -    case 9: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.formatALjava_util_FormatterLjava_lang_StringALjava_lang_Object(self, v0, v1)); } // 182 1 177
 10.2051 -    case 12: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175
 10.2052 -    case 15: return stack.pop(); // 176
 10.2053 -  }
 10.2054 -}
 10.2055 -function java_lang_String_formatLjava_lang_StringLjava_util_LocaleLjava_lang_StringLjava_lang_Object(arg0,arg1,arg2) {
 10.2056 -  var stack = new Array();
 10.2057 -  var gt = 0;
 10.2058 -  for(;;) switch(gt) {
 10.2059 -    case 0: stack.push(new java_util_Formatter); // 187 0 211
 10.2060 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2061 -    case 4: stack.push(arg0); // 42
 10.2062 -    case 5: { var v0 = stack.pop(); java_util_Formatter_consVLjava_util_Locale(stack.pop(), v0); } // 183 1 176
 10.2063 -    case 8: stack.push(arg1); // 43
 10.2064 -    case 9: stack.push(arg2); // 44
 10.2065 -    case 10: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.formatALjava_util_FormatterLjava_lang_StringALjava_lang_Object(self, v0, v1)); } // 182 1 177
 10.2066 -    case 13: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175
 10.2067 -    case 16: return stack.pop(); // 176
 10.2068 -  }
 10.2069 -}
 10.2070 -function java_lang_String_valueOfLjava_lang_StringLjava_lang_Object(arg0) {
 10.2071 -  var stack = new Array();
 10.2072 -  var gt = 0;
 10.2073 -  for(;;) switch(gt) {
 10.2074 -    case 0: stack.push(arg0); // 42
 10.2075 -    case 1: if (stack.pop()) { gt = 9; continue; } // 199 0 8
 10.2076 -    case 4: stack.push("null"); // 18 10
 10.2077 -    case 6: gt = 13; continue; // 167 0 7
 10.2078 -    case 9: stack.push(arg0); // 42
 10.2079 -    case 10: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
 10.2080 -    case 13: return stack.pop(); // 176
 10.2081 -  }
 10.2082 -}
 10.2083 -function java_lang_String_valueOfLjava_lang_StringAC(arg0) {
 10.2084 -  var stack = new Array();
 10.2085 -  var gt = 0;
 10.2086 -  for(;;) switch(gt) {
 10.2087 -    case 0: stack.push(new java_lang_String); // 187 0 200
 10.2088 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2089 -    case 4: stack.push(arg0); // 42
 10.2090 -    case 5: { var v0 = stack.pop(); java_lang_String_consVAC(stack.pop(), v0); } // 183 1 142
 10.2091 -    case 8: return stack.pop(); // 176
 10.2092 -  }
 10.2093 -}
 10.2094 -function java_lang_String_valueOfLjava_lang_StringACII(arg0,arg1,arg2) {
 10.2095 -  var stack = new Array();
 10.2096 -  var gt = 0;
 10.2097 -  for(;;) switch(gt) {
 10.2098 -    case 0: stack.push(new java_lang_String); // 187 0 200
 10.2099 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2100 -    case 4: stack.push(arg0); // 42
 10.2101 -    case 5: stack.push(arg1); // 27
 10.2102 -    case 6: stack.push(arg2); // 28
 10.2103 -    case 7: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVACAIAI(stack.pop(), v0, v1, v2); } // 183 1 143
 10.2104 -    case 10: return stack.pop(); // 176
 10.2105 -  }
 10.2106 -}
 10.2107 -function java_lang_String_copyValueOfLjava_lang_StringACII(arg0,arg1,arg2) {
 10.2108 -  var stack = new Array();
 10.2109 -  var gt = 0;
 10.2110 -  for(;;) switch(gt) {
 10.2111 -    case 0: stack.push(new java_lang_String); // 187 0 200
 10.2112 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2113 -    case 4: stack.push(arg0); // 42
 10.2114 -    case 5: stack.push(arg1); // 27
 10.2115 -    case 6: stack.push(arg2); // 28
 10.2116 -    case 7: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVACAIAI(stack.pop(), v0, v1, v2); } // 183 1 143
 10.2117 -    case 10: return stack.pop(); // 176
 10.2118 -  }
 10.2119 -}
 10.2120 -function java_lang_String_copyValueOfLjava_lang_StringAC(arg0) {
 10.2121 -  var stack = new Array();
 10.2122 -  var gt = 0;
 10.2123 -  for(;;) switch(gt) {
 10.2124 -    case 0: stack.push(arg0); // 42
 10.2125 -    case 1: stack.push(0); // 3
 10.2126 -    case 2: stack.push(arg0); // 42
 10.2127 -    case 3: stack.push(stack.pop().length); // 190
 10.2128 -    case 4: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_String_copyValueOfALjava_lang_StringACAIAI(v0, v1, v2)); } // 184 1 155
 10.2129 -    case 7: return stack.pop(); // 176
 10.2130 -  }
 10.2131 -}
 10.2132 -function java_lang_String_valueOfLjava_lang_StringZ(arg0) {
 10.2133 -  var stack = new Array();
 10.2134 -  var gt = 0;
 10.2135 -  for(;;) switch(gt) {
 10.2136 -    case 0: stack.push(arg0); // 26
 10.2137 -    case 1: if (stack.pop() == 0) { gt = 9; continue; } // 153 0 8
 10.2138 -    case 4: stack.push("true"); // 18 12
 10.2139 -    case 6: gt = 11; continue; // 167 0 5
 10.2140 -    case 9: stack.push("false"); // 18 8
 10.2141 -    case 11: return stack.pop(); // 176
 10.2142 -  }
 10.2143 -}
 10.2144 -function java_lang_String_valueOfLjava_lang_StringC(arg0) {
 10.2145 -  var arg1;
 10.2146 -  var stack = new Array();
 10.2147 -  var gt = 0;
 10.2148 -  for(;;) switch(gt) {
 10.2149 -    case 0: stack.push(1); // 4
 10.2150 -    case 1: stack.push(new Array(stack.pop())); // 188 5
 10.2151 -    case 3: stack.push(stack[stack.length - 1]); // 89
 10.2152 -    case 4: stack.push(0); // 3
 10.2153 -    case 5: stack.push(arg0); // 26
 10.2154 -    case 6: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
 10.2155 -    case 7: arg1 = stack.pop(); // 76
 10.2156 -    case 8: stack.push(new java_lang_String); // 187 0 200
 10.2157 -    case 11: stack.push(stack[stack.length - 1]); // 89
 10.2158 -    case 12: stack.push(0); // 3
 10.2159 -    case 13: stack.push(1); // 4
 10.2160 -    case 14: stack.push(arg1); // 43
 10.2161 -    case 15: { var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); java_lang_String_consVIIAC(stack.pop(), v0, v1, v2); } // 183 1 137
 10.2162 -    case 18: return stack.pop(); // 176
 10.2163 -  }
 10.2164 -}
 10.2165 -function java_lang_String_valueOfLjava_lang_StringJ(arg0) {
 10.2166 -  var arg1;
 10.2167 -  var stack = new Array();
 10.2168 -  var gt = 0;
 10.2169 -  for(;;) switch(gt) {
 10.2170 -    case 0: stack.push(arg0); // 30
 10.2171 -    case 1: stack.push(10); // 16 10
 10.2172 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Long_toStringLjava_lang_StringJI(v0, v1)); } // 184 1 126
 10.2173 -    case 6: return stack.pop(); // 176
 10.2174 -  }
 10.2175 -}
 10.2176 -function java_lang_String_valueOfLjava_lang_StringF(arg0) {
 10.2177 -  var stack = new Array();
 10.2178 -  var gt = 0;
 10.2179 -  for(;;) switch(gt) {
 10.2180 -    case 0: stack.push(arg0); // 34
 10.2181 -    case 1: { var v0 = stack.pop(); stack.push(java_lang_Float_toStringLjava_lang_StringF(v0)); } // 184 1 122
 10.2182 -    case 4: return stack.pop(); // 176
 10.2183 -  }
 10.2184 -}
 10.2185 -function java_lang_String_valueOfLjava_lang_StringD(arg0) {
 10.2186 -  var arg1;
 10.2187 -  var stack = new Array();
 10.2188 -  var gt = 0;
 10.2189 -  for(;;) switch(gt) {
 10.2190 -    case 0: stack.push(arg0); // 38
 10.2191 -    case 1: { var v0 = stack.pop(); stack.push(java_lang_Double_toStringLjava_lang_StringD(v0)); } // 184 1 121
 10.2192 -    case 4: return stack.pop(); // 176
 10.2193 -  }
 10.2194 -}
 10.2195 -function java_lang_String_internLjava_lang_String(arg0) {
 10.2196 -  // no code found for null 
 10.2197 -}
 10.2198 -function java_lang_String_compareToILjava_lang_Object(arg0,arg1) {
 10.2199 -  var arg2;
 10.2200 -;
 10.2201 -  var stack = new Array(2);
 10.2202 -  var gt = 0;
 10.2203 -  for(;;) switch(gt) {
 10.2204 -    case 0: stack.push(arg0); // 42
 10.2205 -    case 1: stack.push(arg1); // 43
 10.2206 -    case 2: if(stack[stack.length - 1].$instOf_java_lang_String != 1) throw {}; // 192 0 200
 10.2207 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.compareToILjava_lang_String(self, v0)); } // 182 1 148
 10.2208 -    case 8: return stack.pop(); // 172
 10.2209 -  }
 10.2210 -}
 10.2211 -function java_lang_String_classV() {
 10.2212 -  var stack = new Array();
 10.2213 -  var gt = 0;
 10.2214 -  for(;;) switch(gt) {
 10.2215 -    case 0: stack.push(0); // 3
 10.2216 -    case 1: stack.push(new Array(stack.pop())); // 189 0 183
 10.2217 -    case 4: java_lang_String_serialPersistentFields = stack.pop(); // 179 1 101
 10.2218 -    case 7: stack.push(new java_lang_String$CaseInsensitiveComparator); // 187 0 202
 10.2219 -    case 10: stack.push(stack[stack.length - 1]); // 89
 10.2220 -    case 11:  // 1
 10.2221 -    case 12: { var v0 = stack.pop(); java_lang_String$CaseInsensitiveComparator_consVLjava_lang_String$1(stack.pop(), v0); } // 183 1 160
 10.2222 -    case 15: java_lang_String_CASE_INSENSITIVE_ORDER = stack.pop(); // 179 1 102
 10.2223 -    case 18: return; // 177
 10.2224 -  }
 10.2225 -}
 10.2226 -*/
 10.2227 -var java_lang_String_serialVersionUID = 0;
 10.2228 -var java_lang_String_serialPersistentFields = 0;
 10.2229 -var java_lang_String_CASE_INSENSITIVE_ORDER = 0;
 10.2230 -function java_lang_String() {
 10.2231 -  /** the real value of this 'string' we delegate to */
 10.2232 -  this.r = '';
 10.2233 -}
 10.2234 -java_lang_String.prototype = new String;
 10.2235 -java_lang_String.prototype.toString = function() { return this.r; };;
 10.2236 -//java_lang_String_classV();
 10.2237 -
 10.2238 -/* new method for JavaScript String */
 10.2239 -String.prototype.consVAC = java_lang_String_consVAC;
 10.2240 -String.prototype.consVACII = java_lang_String_consVACII;
 10.2241 -String.prototype.charAtCI = java_lang_String_charAtCI;
 10.2242 -String.prototype.lengthI = java_lang_String_lengthI;
 10.2243 -String.prototype.isEmptyZ = java_lang_String_isEmptyZ;
 10.2244 -String.prototype.getCharsVIIACI = java_lang_String_getCharsVIIACAI;
 10.2245 -String.prototype.getCharsVACI = java_lang_String_getCharsVACI;
 10.2246 -String.prototype.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String;
 10.2247 -String.prototype.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI;
 10.2248 -String.prototype.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII;
 10.2249 -String.prototype.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC;
 10.2250 -String.prototype.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence;
 10.2251 -String.prototype.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object;
 10.2252 -String.prototype.hashCodeI = java_lang_String_hashCodeI;
 10.2253 -String.prototype.toCharArrayAC = java_lang_String_toCharArrayAC;
 10.2254 -String.prototype.valueOfLjava_lang_StringI=java_lang_String_valueOfLjava_lang_StringI;
 10.2255 -String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
 10.2256 -String.prototype.startsWithZLjava_lang_String=java_lang_String_startsWithZLjava_lang_String;
 10.2257 -String.prototype.endsWithZLjava_lang_String=java_lang_String_endsWithZLjava_lang_String;
 10.2258 -String.prototype.indexOfII=java_lang_String_indexOfII;
 10.2259 -String.prototype.indexOfIII=java_lang_String_indexOfIII;
 10.2260 -
 10.2261 -String.prototype.$instOf_java_lang_String = true;
 10.2262 -String.prototype.$instOf_java_io_Serializable = true;
 10.2263 -String.prototype.$instOf_java_lang_Comparable = true;
 10.2264 -String.prototype.$instOf_java_lang_CharSequence = true;
 10.2265 -
 10.2266 -/*
 10.2267 -  this.lengthI = java_lang_String_lengthI;
 10.2268 -  this.isEmptyZ = java_lang_String_isEmptyZ;
 10.2269 -  this.charAtCI = java_lang_String_charAtCI;
 10.2270 -  this.codePointAtII = java_lang_String_codePointAtII;
 10.2271 -  this.codePointBeforeII = java_lang_String_codePointBeforeII;
 10.2272 -  this.codePointCountIII = java_lang_String_codePointCountIII;
 10.2273 -  this.offsetByCodePointsIII = java_lang_String_offsetByCodePointsIII;
 10.2274 -  this.getCharsVACI = java_lang_String_getCharsVACI;
 10.2275 -  this.getCharsVIIACI = java_lang_String_getCharsVIIACI;
 10.2276 -  this.getBytesVIIABI = java_lang_String_getBytesVIIABI;
 10.2277 -  this.getBytesABLjava_lang_String = java_lang_String_getBytesABLjava_lang_String;
 10.2278 -  this.getBytesABLjava_nio_charset_Charset = java_lang_String_getBytesABLjava_nio_charset_Charset;
 10.2279 -  this.getBytesAB = java_lang_String_getBytesAB;
 10.2280 -  this.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object;
 10.2281 -  this.contentEqualsZLjava_lang_StringBuffer = java_lang_String_contentEqualsZLjava_lang_StringBuffer;
 10.2282 -  this.contentEqualsZLjava_lang_CharSequence = java_lang_String_contentEqualsZLjava_lang_CharSequence;
 10.2283 -  this.equalsIgnoreCaseZLjava_lang_String = java_lang_String_equalsIgnoreCaseZLjava_lang_String;
 10.2284 -  this.compareToILjava_lang_String = java_lang_String_compareToILjava_lang_String;
 10.2285 -  this.compareToIgnoreCaseILjava_lang_String = java_lang_String_compareToIgnoreCaseILjava_lang_String;
 10.2286 -  this.regionMatchesZILjava_lang_StringII = java_lang_String_regionMatchesZILjava_lang_StringII;
 10.2287 -  this.regionMatchesZZILjava_lang_StringII = java_lang_String_regionMatchesZZILjava_lang_StringII;
 10.2288 -  this.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
 10.2289 -  this.startsWithZLjava_lang_String = java_lang_String_startsWithZLjava_lang_String;
 10.2290 -  this.endsWithZLjava_lang_String = java_lang_String_endsWithZLjava_lang_String;
 10.2291 -  this.hashCodeI = java_lang_String_hashCodeI;
 10.2292 -  this.indexOfII = java_lang_String_indexOfII;
 10.2293 -  this.indexOfIII = java_lang_String_indexOfIII;
 10.2294 -  this.lastIndexOfII = java_lang_String_lastIndexOfII;
 10.2295 -  this.lastIndexOfIII = java_lang_String_lastIndexOfIII;
 10.2296 -  this.indexOfILjava_lang_String = java_lang_String_indexOfILjava_lang_String;
 10.2297 -  this.indexOfILjava_lang_StringI = java_lang_String_indexOfILjava_lang_StringI;
 10.2298 -  this.lastIndexOfILjava_lang_String = java_lang_String_lastIndexOfILjava_lang_String;
 10.2299 -  this.lastIndexOfILjava_lang_StringI = java_lang_String_lastIndexOfILjava_lang_StringI;
 10.2300 -  this.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI;
 10.2301 -  this.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII;
 10.2302 -  this.subSequenceLjava_lang_CharSequenceII = java_lang_String_subSequenceLjava_lang_CharSequenceII;
 10.2303 -  this.concatLjava_lang_StringLjava_lang_String = java_lang_String_concatLjava_lang_StringLjava_lang_String;
 10.2304 -  this.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC;
 10.2305 -  this.matchesZLjava_lang_String = java_lang_String_matchesZLjava_lang_String;
 10.2306 -  this.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence;
 10.2307 -  this.replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String;
 10.2308 -  this.replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String;
 10.2309 -  this.replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence = java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence;
 10.2310 -  this.splitALjava_lang_StringLjava_lang_StringI = java_lang_String_splitALjava_lang_StringLjava_lang_StringI;
 10.2311 -  this.splitALjava_lang_StringLjava_lang_String = java_lang_String_splitALjava_lang_StringLjava_lang_String;
 10.2312 -  this.toLowerCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale;
 10.2313 -  this.toLowerCaseLjava_lang_String = java_lang_String_toLowerCaseLjava_lang_String;
 10.2314 -  this.toUpperCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale;
 10.2315 -  this.toUpperCaseLjava_lang_String = java_lang_String_toUpperCaseLjava_lang_String;
 10.2316 -  this.trimLjava_lang_String = java_lang_String_trimLjava_lang_String;
 10.2317 -  this.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String;
 10.2318 -  this.internLjava_lang_String = java_lang_String_internLjava_lang_String;
 10.2319 -  this.compareToILjava_lang_Object = java_lang_String_compareToILjava_lang_Object;
 10.2320 - */
 10.2321 -
 10.2322 -
 10.2323 -
 10.2324 +// initialize methods on String constants
 10.2325 +java_lang_String(false)
    11.1 --- a/javap/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    11.2 +++ b/javap/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    11.3 @@ -5,11 +5,11 @@
    11.4    <parent>
    11.5      <groupId>org.apidesign</groupId>
    11.6      <artifactId>bck2brwsr</artifactId>
    11.7 -    <version>1.0-SNAPSHOT</version>
    11.8 +    <version>0.3-SNAPSHOT</version>
    11.9    </parent>
   11.10    <groupId>org.apidesign.bck2brwsr</groupId>
   11.11    <artifactId>javap</artifactId>
   11.12 -  <version>1.0-SNAPSHOT</version>
   11.13 +  <version>0.3-SNAPSHOT</version>
   11.14    <name>javap</name>
   11.15    <url>http://maven.apache.org</url>
   11.16    <properties>
   11.17 @@ -35,7 +35,7 @@
   11.18      <dependency>
   11.19        <groupId>org.apidesign.bck2brwsr</groupId>
   11.20        <artifactId>emul</artifactId>
   11.21 -      <version>1.0-SNAPSHOT</version>
   11.22 +      <version>0.3-SNAPSHOT</version>
   11.23      </dependency>
   11.24    </dependencies>
   11.25  </project>
    12.1 --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Thu Nov 29 20:19:00 2012 +0100
    12.2 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Mon Dec 03 14:44:49 2012 +0100
    12.3 @@ -71,6 +71,9 @@
    12.4              String attrName = cd.StringValue(dis.readUnsignedShort());
    12.5              readValue(dis, cd, typeName, attrName);
    12.6          }
    12.7 +        if (cnt == 0) {
    12.8 +            visitAttr(typeName, null, null);
    12.9 +        }
   12.10      }
   12.11  
   12.12      private void readValue(DataInputStream dis, ClassData cd, String typeName, String attrName) 
    13.1 --- a/javap/src/main/java/org/apidesign/javap/FieldData.java	Thu Nov 29 20:19:00 2012 +0100
    13.2 +++ b/javap/src/main/java/org/apidesign/javap/FieldData.java	Mon Dec 03 14:44:49 2012 +0100
    13.3 @@ -163,4 +163,13 @@
    13.4      public Vector getAttributes(){
    13.5          return attrs;
    13.6      }
    13.7 +
    13.8 +    public byte[] findAnnotationData(boolean classRetention) {
    13.9 +        String n = classRetention ?
   13.10 +            "RuntimeInvisibleAnnotations" : // NOI18N
   13.11 +            "RuntimeVisibleAnnotations"; // NOI18N
   13.12 +        AttrData[] arr = new AttrData[attrs.size()];
   13.13 +        attrs.copyInto(arr);
   13.14 +        return ClassData.findAttr(n, arr);
   13.15 +    }
   13.16  }
    14.1 --- a/javaquery/api/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    14.2 +++ b/javaquery/api/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    14.3 @@ -5,11 +5,11 @@
    14.4    <parent>
    14.5      <groupId>org.apidesign.bck2brwsr</groupId>
    14.6      <artifactId>javaquery</artifactId>
    14.7 -    <version>1.0-SNAPSHOT</version>
    14.8 +    <version>0.3-SNAPSHOT</version>
    14.9    </parent>
   14.10    <groupId>org.apidesign.bck2brwsr</groupId>
   14.11    <artifactId>javaquery.api</artifactId>
   14.12 -  <version>1.0-SNAPSHOT</version>
   14.13 +  <version>0.3-SNAPSHOT</version>
   14.14    <name>JavaQuery API</name>
   14.15    <url>http://maven.apache.org</url>
   14.16      <build>
   14.17 @@ -47,20 +47,20 @@
   14.18      <dependency>
   14.19        <groupId>org.apidesign.bck2brwsr</groupId>
   14.20        <artifactId>core</artifactId>
   14.21 -      <version>1.0-SNAPSHOT</version>
   14.22 +      <version>0.3-SNAPSHOT</version>
   14.23        <type>jar</type>
   14.24      </dependency>
   14.25      <dependency>
   14.26        <groupId>org.apidesign.bck2brwsr</groupId>
   14.27        <artifactId>emul</artifactId>
   14.28 -      <version>1.0-SNAPSHOT</version>
   14.29 +      <version>0.3-SNAPSHOT</version>
   14.30        <type>jar</type>
   14.31        <scope>runtime</scope>
   14.32      </dependency>
   14.33      <dependency>
   14.34        <groupId>org.apidesign.bck2brwsr</groupId>
   14.35        <artifactId>vm4brwsr</artifactId>
   14.36 -      <version>0.1-SNAPSHOT</version>
   14.37 +      <version>0.3-SNAPSHOT</version>
   14.38        <type>jar</type>
   14.39        <scope>test</scope>
   14.40      </dependency>
    15.1 --- a/javaquery/demo-calculator/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    15.2 +++ b/javaquery/demo-calculator/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    15.3 @@ -5,7 +5,7 @@
    15.4  
    15.5    <groupId>org.apidesign.bck2brwsr</groupId>
    15.6    <artifactId>demo.calculator</artifactId>
    15.7 -  <version>1.0-SNAPSHOT</version>
    15.8 +  <version>0.3-SNAPSHOT</version>
    15.9    <packaging>jar</packaging>
   15.10  
   15.11    <name>JavaQuery Demo - Calculator</name>
   15.12 @@ -19,7 +19,7 @@
   15.13            <plugin>
   15.14                <groupId>org.apidesign.bck2brwsr</groupId>
   15.15                <artifactId>mojo</artifactId>
   15.16 -              <version>1.0-SNAPSHOT</version>
   15.17 +              <version>0.3-SNAPSHOT</version>
   15.18                <executions>
   15.19                    <execution>
   15.20                        <goals>
   15.21 @@ -62,12 +62,12 @@
   15.22      <dependency>
   15.23        <groupId>org.apidesign.bck2brwsr</groupId>
   15.24        <artifactId>emul</artifactId>
   15.25 -      <version>1.0-SNAPSHOT</version>
   15.26 +      <version>0.3-SNAPSHOT</version>
   15.27      </dependency>
   15.28      <dependency>
   15.29        <groupId>org.apidesign.bck2brwsr</groupId>
   15.30        <artifactId>javaquery.api</artifactId>
   15.31 -      <version>1.0-SNAPSHOT</version>
   15.32 +      <version>0.3-SNAPSHOT</version>
   15.33      </dependency>
   15.34    </dependencies>
   15.35  </project>
    16.1 --- a/javaquery/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    16.2 +++ b/javaquery/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    16.3 @@ -4,11 +4,11 @@
    16.4    <parent>
    16.5      <artifactId>bck2brwsr</artifactId>
    16.6      <groupId>org.apidesign</groupId>
    16.7 -    <version>1.0-SNAPSHOT</version>
    16.8 +    <version>0.3-SNAPSHOT</version>
    16.9    </parent>
   16.10    <groupId>org.apidesign.bck2brwsr</groupId>
   16.11    <artifactId>javaquery</artifactId>
   16.12 -  <version>1.0-SNAPSHOT</version>
   16.13 +  <version>0.3-SNAPSHOT</version>
   16.14    <packaging>pom</packaging>
   16.15    <name>JavaQuery API and Demo</name>
   16.16      <modules>
    17.1 --- a/mojo/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    17.2 +++ b/mojo/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    17.3 @@ -5,11 +5,11 @@
    17.4    <parent>
    17.5      <groupId>org.apidesign</groupId>
    17.6      <artifactId>bck2brwsr</artifactId>
    17.7 -    <version>1.0-SNAPSHOT</version>
    17.8 +    <version>0.3-SNAPSHOT</version>
    17.9    </parent>
   17.10    <groupId>org.apidesign.bck2brwsr</groupId>
   17.11    <artifactId>mojo</artifactId>
   17.12 -  <version>1.0-SNAPSHOT</version>
   17.13 +  <version>0.3-SNAPSHOT</version>
   17.14    <packaging>maven-plugin</packaging>
   17.15    <name>Maven Mojo to Compile to JavaScript</name>
   17.16    <url>http://maven.apache.org</url>
   17.17 @@ -63,7 +63,7 @@
   17.18      <dependency>
   17.19        <groupId>${project.groupId}</groupId>
   17.20        <artifactId>vm4brwsr</artifactId>
   17.21 -      <version>0.1-SNAPSHOT</version>
   17.22 +      <version>0.3-SNAPSHOT</version>
   17.23        <exclusions>
   17.24          <exclusion>
   17.25            <artifactId>emul</artifactId>
    18.1 --- a/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    18.2 +++ b/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    18.3 @@ -3,7 +3,7 @@
    18.4    <modelVersion>4.0.0</modelVersion>
    18.5    <groupId>org.apidesign</groupId>
    18.6    <artifactId>bck2brwsr</artifactId>
    18.7 -  <version>1.0-SNAPSHOT</version>
    18.8 +  <version>0.3-SNAPSHOT</version>
    18.9    <packaging>pom</packaging>
   18.10    <name>Back 2 Browser</name>
   18.11    <modules>
    19.1 --- a/vm/nb-configuration.xml	Thu Nov 29 20:19:00 2012 +0100
    19.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.3 @@ -1,37 +0,0 @@
    19.4 -<?xml version="1.0" encoding="UTF-8"?>
    19.5 -<!--
    19.6 -
    19.7 -    Back 2 Browser Bytecode Translator
    19.8 -    Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    19.9 -
   19.10 -    This program is free software: you can redistribute it and/or modify
   19.11 -    it under the terms of the GNU General Public License as published by
   19.12 -    the Free Software Foundation, version 2 of the License.
   19.13 -
   19.14 -    This program is distributed in the hope that it will be useful,
   19.15 -    but WITHOUT ANY WARRANTY; without even the implied warranty of
   19.16 -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   19.17 -    GNU General Public License for more details.
   19.18 -
   19.19 -    You should have received a copy of the GNU General Public License
   19.20 -    along with this program. Look for COPYING file in the top folder.
   19.21 -    If not, see http://opensource.org/licenses/GPL-2.0.
   19.22 -
   19.23 --->
   19.24 -<project-shared-configuration>
   19.25 -    <!--
   19.26 -This file contains additional configuration written by modules in the NetBeans IDE.
   19.27 -The configuration is intended to be shared among all the users of project and
   19.28 -therefore it is assumed to be part of version control checkout.
   19.29 -Without this configuration present, some functionality in the IDE may be limited or fail altogether.
   19.30 --->
   19.31 -    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
   19.32 -        <!--
   19.33 -Properties that influence various parts of the IDE, especially code formatting and the like. 
   19.34 -You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
   19.35 -That way multiple projects can share the same settings (useful for formatting rules for example).
   19.36 -Any value defined here will override the pom.xml file value but is only applicable to the current project.
   19.37 --->
   19.38 -        <netbeans.compile.on.save>all</netbeans.compile.on.save>
   19.39 -    </properties>
   19.40 -</project-shared-configuration>
    20.1 --- a/vm/pom.xml	Thu Nov 29 20:19:00 2012 +0100
    20.2 +++ b/vm/pom.xml	Mon Dec 03 14:44:49 2012 +0100
    20.3 @@ -4,12 +4,12 @@
    20.4    <parent>
    20.5      <groupId>org.apidesign</groupId>
    20.6      <artifactId>bck2brwsr</artifactId>
    20.7 -    <version>1.0-SNAPSHOT</version>
    20.8 +    <version>0.3-SNAPSHOT</version>
    20.9    </parent>
   20.10  
   20.11    <groupId>org.apidesign.bck2brwsr</groupId>
   20.12    <artifactId>vm4brwsr</artifactId>
   20.13 -  <version>0.1-SNAPSHOT</version>
   20.14 +  <version>0.3-SNAPSHOT</version>
   20.15    <packaging>jar</packaging>
   20.16  
   20.17    <name>Java VM for Browser</name>
   20.18 @@ -83,21 +83,21 @@
   20.19        </exclusions>
   20.20      </dependency>
   20.21      <dependency>
   20.22 -      <groupId>org.apidesign.bck2brwsr</groupId>
   20.23 +      <groupId>${project.groupId}</groupId>
   20.24        <artifactId>core</artifactId>
   20.25 -      <version>1.0-SNAPSHOT</version>
   20.26 +      <version>0.3-SNAPSHOT</version>
   20.27        <type>jar</type>
   20.28      </dependency>
   20.29      <dependency>
   20.30 -      <groupId>org.apidesign.bck2brwsr</groupId>
   20.31 +      <groupId>${project.groupId}</groupId>
   20.32        <artifactId>emul</artifactId>
   20.33 -      <version>1.0-SNAPSHOT</version>
   20.34 +      <version>0.3-SNAPSHOT</version>
   20.35        <scope>test</scope>
   20.36      </dependency>
   20.37      <dependency>
   20.38        <groupId>${project.groupId}</groupId>
   20.39        <artifactId>javap</artifactId>
   20.40 -      <version>1.0-SNAPSHOT</version>
   20.41 +      <version>0.3-SNAPSHOT</version>
   20.42      </dependency>
   20.43    </dependencies>
   20.44  </project>
    21.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Nov 29 20:19:00 2012 +0100
    21.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Dec 03 14:44:49 2012 +0100
    21.3 @@ -19,7 +19,6 @@
    21.4  
    21.5  import java.io.IOException;
    21.6  import java.io.InputStream;
    21.7 -import org.apidesign.bck2brwsr.core.JavaScriptBody;
    21.8  import org.apidesign.javap.AnnotationParser;
    21.9  import org.apidesign.javap.ClassData;
   21.10  import org.apidesign.javap.FieldData;
   21.11 @@ -51,6 +50,16 @@
   21.12       * @param resourcePath name of resources to read
   21.13       */
   21.14      protected abstract void requireScript(String resourcePath);
   21.15 +    
   21.16 +    /** Allows subclasses to redefine what field a function representing a
   21.17 +     * class gets assigned. By default it returns the suggested name followed
   21.18 +     * by <code>" = "</code>;
   21.19 +     * 
   21.20 +     * @param className suggested name of the class
   21.21 +     */
   21.22 +    protected String assignClass(String className) {
   21.23 +        return className + " = ";
   21.24 +    }
   21.25  
   21.26      /**
   21.27       * Converts a given class file to a JavaScript version.
   21.28 @@ -74,71 +83,95 @@
   21.29                  return null;
   21.30              }
   21.31          }
   21.32 +        String[] proto = findAnnotation(arrData, jc, 
   21.33 +            "org.apidesign.bck2brwsr.core.JavaScriptPrototype", 
   21.34 +            "container", "prototype"
   21.35 +        );
   21.36          StringArray toInitilize = new StringArray();
   21.37 -        for (MethodData m : jc.getMethods()) {
   21.38 -            if (m.isStatic()) {
   21.39 -                generateStaticMethod(m, toInitilize);
   21.40 -            } else {
   21.41 -                generateInstanceMethod(m);
   21.42 +        final String className = className(jc);
   21.43 +        out.append("\n\n").append(assignClass(className));
   21.44 +        out.append("function CLS() {");
   21.45 +        out.append("\n  if (!CLS.prototype.$instOf_").append(className).append(") {");
   21.46 +        for (FieldData v : jc.getFields()) {
   21.47 +            if (v.isStatic()) {
   21.48 +                out.append("\n  CLS.").append(v.getName()).append(initField(v));
   21.49              }
   21.50          }
   21.51 -        final String className = className(jc);
   21.52 -        out.append("\nfunction ").append(className);
   21.53 -        out.append("() {");
   21.54 +        if (proto == null) {
   21.55 +            String sc = jc.getSuperClassName(); // with _
   21.56 +            out.append("\n    var p = CLS.prototype = ").
   21.57 +                append(sc.replace('/', '_')).append("(true);");
   21.58 +            out.append("\n    var c = p;");
   21.59 +        } else {
   21.60 +            out.append("\n    var p = CLS.prototype = ").append(proto[1]).append(";");
   21.61 +            out.append("\n    var c = ").append(proto[0]).append(";");
   21.62 +        }
   21.63 +        for (MethodData m : jc.getMethods()) {
   21.64 +            byte[] onlyArr = m.findAnnotationData(true);
   21.65 +            String[] only = findAnnotation(onlyArr, jc, 
   21.66 +                "org.apidesign.bck2brwsr.core.JavaScriptOnly", 
   21.67 +                "name", "value"
   21.68 +            );
   21.69 +            if (only != null) {
   21.70 +                if (only[0] != null && only[1] != null) {
   21.71 +                    out.append("\n    p.").append(only[0]).append(" = ")
   21.72 +                        .append(only[1]).append(";");
   21.73 +                }
   21.74 +                continue;
   21.75 +            }
   21.76 +            if (m.isStatic()) {
   21.77 +                generateStaticMethod("\n    c.", m, toInitilize);
   21.78 +            } else {
   21.79 +                generateInstanceMethod("\n    c.", m);
   21.80 +            }
   21.81 +        }
   21.82 +        out.append("\n    c.constructor = CLS;");
   21.83 +        out.append("\n    c.$instOf_").append(className).append(" = true;");
   21.84 +        for (String superInterface : jc.getSuperInterfaces()) {
   21.85 +            out.append("\n    c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
   21.86 +        }
   21.87 +        out.append("\n  }");
   21.88 +        out.append("\n  if (arguments.length === 0) {");
   21.89 +        out.append("\n    if (!(this instanceof CLS)) {");
   21.90 +        out.append("\n      return new CLS();");
   21.91 +        out.append("\n    }");
   21.92          for (FieldData v : jc.getFields()) {
   21.93 +            byte[] onlyArr = v.findAnnotationData(true);
   21.94 +            String[] only = findAnnotation(onlyArr, jc, 
   21.95 +                "org.apidesign.bck2brwsr.core.JavaScriptOnly", 
   21.96 +                "name", "value"
   21.97 +            );
   21.98 +            if (only != null) {
   21.99 +                if (only[0] != null && only[1] != null) {
  21.100 +                    out.append("\n    p.").append(only[0]).append(" = ")
  21.101 +                        .append(only[1]).append(";");
  21.102 +                }
  21.103 +                continue;
  21.104 +            }
  21.105              if (!v.isStatic()) {
  21.106 -                out.append("\n  this.fld_").
  21.107 +                out.append("\n    this.fld_").
  21.108                      append(v.getName()).append(initField(v));
  21.109              }
  21.110          }
  21.111 -        out.append("\n}\n\nfunction ").append(className).append("_proto() {");
  21.112 -        out.append("\n  if (").append(className).
  21.113 -            append(".prototype.$instOf_").append(className).append(") {");
  21.114 -        out.append("\n    return new ").append(className).append(";");
  21.115 +        out.append("\n    return this;");
  21.116          out.append("\n  }");
  21.117 -        for (FieldData v : jc.getFields()) {
  21.118 -            if (v.isStatic()) {
  21.119 -                generateStaticField(v);
  21.120 -            }
  21.121 -        }
  21.122 -        // ClassName sc = jc.getSuperClass();
  21.123 -        String sc = jc.getSuperClassName(); // with _
  21.124 -        if (sc != null) {
  21.125 -            out.append("\n  var p = ").append(className)
  21.126 -               .append(".prototype = ").
  21.127 -                append(sc.replace('/', '_')).append("_proto();");
  21.128 -        } else {
  21.129 -            out.append("\n  var p = ").append(className).append(".prototype;");
  21.130 -        }
  21.131 -        for (MethodData m : jc.getMethods()) {
  21.132 -            if (!m.getName().contains("<cinit>")) {
  21.133 -                generateMethodReference("\n  p.", m);
  21.134 -            }
  21.135 -        }
  21.136 -        out.append("\n  p.$instOf_").append(className).append(" = true;");
  21.137 -        for (String superInterface : jc.getSuperInterfaces()) {
  21.138 -            out.append("\n  p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
  21.139 -        }
  21.140 -        out.append("\n  return new ").append(className).append(";");
  21.141 +        out.append("\n  return arguments[0] ? new CLS() : CLS.prototype;");
  21.142          out.append("\n}");
  21.143 -        out.append("\n").append(className).append("_proto();");
  21.144          StringBuilder sb = new StringBuilder();
  21.145          for (String init : toInitilize.toArray()) {
  21.146              sb.append("\n").append(init).append("();");
  21.147          }
  21.148          return sb.toString();
  21.149      }
  21.150 -    private void generateStaticMethod(MethodData m, StringArray toInitilize) throws IOException {
  21.151 -        if (javaScriptBody(m, true)) {
  21.152 +    private void generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException {
  21.153 +        if (javaScriptBody(prefix, m, true)) {
  21.154              return;
  21.155          }
  21.156          StringBuilder argsCnt = new StringBuilder();
  21.157          final String mn = findMethodName(m, argsCnt);
  21.158 -        out.append("\nfunction ").append(
  21.159 -            className(jc)
  21.160 -        ).append('_').append(mn);
  21.161 +        out.append(prefix).append(mn).append(" = function");
  21.162          if (mn.equals("classV")) {
  21.163 -            toInitilize.add(className(jc) + '_' + mn);
  21.164 +            toInitilize.add(className(jc) + "(false)." + mn);
  21.165          }
  21.166          out.append('(');
  21.167          String space = "";
  21.168 @@ -162,26 +195,18 @@
  21.169              }
  21.170              produceCode(m);
  21.171          } else {
  21.172 -            out.append("  /* no code found for ").append(m.getInternalSig()).append(" */\n");
  21.173 +            out.append("  throw 'no code found for ").append(m.getInternalSig()).append("';\n");
  21.174          }
  21.175 -        out.append("}");
  21.176 +        out.append("};");
  21.177      }
  21.178      
  21.179 -    private void generateMethodReference(String prefix, MethodData m) throws IOException {
  21.180 -        final String name = findMethodName(m, new StringBuilder());
  21.181 -        out.append(prefix).append(name).append(" = ")
  21.182 -           .append(className(jc))
  21.183 -           .append('_').append(name).append(";");
  21.184 -    }
  21.185 -    
  21.186 -    private void generateInstanceMethod(MethodData m) throws IOException {
  21.187 -        if (javaScriptBody(m, false)) {
  21.188 +    private void generateInstanceMethod(String prefix, MethodData m) throws IOException {
  21.189 +        if (javaScriptBody(prefix, m, false)) {
  21.190              return;
  21.191          }
  21.192          StringBuilder argsCnt = new StringBuilder();
  21.193 -        out.append("\nfunction ").append(
  21.194 -            className(jc)
  21.195 -        ).append('_').append(findMethodName(m, argsCnt));
  21.196 +        final String mn = findMethodName(m, argsCnt);
  21.197 +        out.append(prefix).append(mn).append(" = function");
  21.198          out.append("(arg0");
  21.199          String space = ",";
  21.200          for (int index = 1, i = 0; i < argsCnt.length(); i++) {
  21.201 @@ -202,9 +227,9 @@
  21.202              }
  21.203              produceCode(m);
  21.204          } else {
  21.205 -            out.append("  /* no code found for ").append(m.getInternalSig()).append(" */\n");
  21.206 +            out.append("  throw 'no code found for ").append(m.getInternalSig()).append("';\n");
  21.207          }
  21.208 -        out.append("}");
  21.209 +        out.append("};");
  21.210      }
  21.211  
  21.212      private void produceCode(MethodData m) throws IOException {
  21.213 @@ -987,12 +1012,6 @@
  21.214          }
  21.215      }
  21.216  
  21.217 -    private void generateStaticField(FieldData v) throws IOException {
  21.218 -        out.append("\n  ")
  21.219 -           .append(className(jc))
  21.220 -           .append('.').append(v.getName()).append(initField(v));
  21.221 -    }
  21.222 -
  21.223      private String findMethodName(MethodData m, StringBuilder cnt) {
  21.224          StringBuilder name = new StringBuilder();
  21.225          if ("<init>".equals(m.getName())) { // NOI18N
  21.226 @@ -1038,7 +1057,7 @@
  21.227  
  21.228          final String in = mi[0];
  21.229          out.append(in.replace('/', '_'));
  21.230 -        out.append(".prototype.");
  21.231 +        out.append("(false).");
  21.232          out.append(mn);
  21.233          out.append('(');
  21.234          if (numArguments > 0) {
  21.235 @@ -1113,12 +1132,12 @@
  21.236          return d.replace('[', 'A');
  21.237      }
  21.238  
  21.239 -    private boolean javaScriptBody(MethodData m, boolean isStatic) throws IOException {
  21.240 +    private boolean javaScriptBody(String prefix, MethodData m, boolean isStatic) throws IOException {
  21.241          byte[] arr = m.findAnnotationData(true);
  21.242          if (arr == null) {
  21.243              return false;
  21.244          }
  21.245 -        final String jvmType = "L" + JavaScriptBody.class.getName().replace('.', '/') + ";";
  21.246 +        final String jvmType = "Lorg/apidesign/bck2brwsr/core/JavaScriptBody;";
  21.247          class P extends AnnotationParser {
  21.248              int cnt;
  21.249              String[] args = new String[30];
  21.250 @@ -1143,9 +1162,8 @@
  21.251              return false;
  21.252          }
  21.253          StringBuilder cnt = new StringBuilder();
  21.254 -        out.append("\nfunction ").append(className(jc)).append('_').
  21.255 -            append(findMethodName(m, cnt));
  21.256 -        out.append("(");
  21.257 +        out.append(prefix).append(findMethodName(m, cnt));
  21.258 +        out.append(" = function(");
  21.259          String space;
  21.260          int index;
  21.261          if (!isStatic) {                
    22.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java	Thu Nov 29 20:19:00 2012 +0100
    22.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java	Mon Dec 03 14:44:49 2012 +0100
    22.3 @@ -101,6 +101,7 @@
    22.4                      }
    22.5                      readResource(emul, out);
    22.6                  }
    22.7 +                js.scripts = new StringArray();
    22.8              }
    22.9  
   22.10              StringArray toInit = StringArray.asList(js.references.toArray());
    23.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Thu Nov 29 20:19:00 2012 +0100
    23.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Mon Dec 03 14:44:49 2012 +0100
    23.3 @@ -29,7 +29,7 @@
    23.4   */
    23.5  public class ArrayTest {
    23.6      @Test public void verifySimpleIntOperation() throws Exception {
    23.7 -            assertExec("CheckTheSum", "org_apidesign_vm4brwsr_Array_simpleI", 
    23.8 +            assertExec("CheckTheSum", Array.class, "simpleI", 
    23.9              Double.valueOf(15)
   23.10          );
   23.11      }
   23.12 @@ -39,13 +39,13 @@
   23.13      }
   23.14      
   23.15      @Test public void verifyOperationsOnArrays() throws Exception {
   23.16 -        assertExec("The sum is 105", "org_apidesign_vm4brwsr_Array_sumD", 
   23.17 +        assertExec("The sum is 105", Array.class, "sumD", 
   23.18              Double.valueOf(105)
   23.19          );
   23.20      }
   23.21      
   23.22      @Test public void doesCopyArrayWork() throws Exception {
   23.23 -        assertExec("Returns 'a'", "org_apidesign_vm4brwsr_Array_copyArrayC", Double.valueOf('a'));
   23.24 +        assertExec("Returns 'a'", Array.class, "copyArrayC", Double.valueOf('a'));
   23.25      }
   23.26      
   23.27      private static CharSequence codeSeq;
   23.28 @@ -59,21 +59,7 @@
   23.29          );
   23.30          codeSeq = sb;
   23.31      }
   23.32 -    private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
   23.33 -        Object ret = null;
   23.34 -        try {
   23.35 -            ret = code.invokeFunction(methodName, args);
   23.36 -        } catch (ScriptException ex) {
   23.37 -            fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
   23.38 -        } catch (NoSuchMethodException ex) {
   23.39 -            fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
   23.40 -        }
   23.41 -        if (ret == null && expRes == null) {
   23.42 -            return;
   23.43 -        }
   23.44 -        if (expRes.equals(ret)) {
   23.45 -            return;
   23.46 -        }
   23.47 -        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq);
   23.48 +    private static void assertExec(String msg, Class clazz, String method, Object expRes, Object... args) throws Exception {
   23.49 +        StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
   23.50      }
   23.51  }
    24.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Thu Nov 29 20:19:00 2012 +0100
    24.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Mon Dec 03 14:44:49 2012 +0100
    24.3 @@ -17,6 +17,8 @@
    24.4   */
    24.5  package org.apidesign.vm4brwsr;
    24.6  
    24.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    24.8 +
    24.9  /**
   24.10   *
   24.11   * @author Jaroslav Tulach <jtulach@netbeans.org>
   24.12 @@ -89,4 +91,38 @@
   24.13      private static boolean isNull() {
   24.14          return createInstance(true) == null;
   24.15      }
   24.16 +    
   24.17 +    @JavaScriptBody(args = "obj", body = "return obj.constructor;")
   24.18 +    static Object constructor(Object obj) {
   24.19 +        return obj;
   24.20 +    }
   24.21 +    
   24.22 +    public static boolean sharedConstructor() {
   24.23 +        class X {
   24.24 +        }
   24.25 +        
   24.26 +        X x1 = new X();
   24.27 +        X x2 = new X();
   24.28 +        
   24.29 +        return constructor(x1) == constructor(x2);
   24.30 +    }
   24.31 +    public static boolean differentConstructor() {
   24.32 +        class X {
   24.33 +        }
   24.34 +        class Y {
   24.35 +        }
   24.36 +        
   24.37 +        X x = new X();
   24.38 +        Y y = new Y();
   24.39 +        
   24.40 +        return constructor(x) == constructor(y);
   24.41 +    }
   24.42 +    @JavaScriptBody(args = {}, body = "return {};")
   24.43 +    private static Object jsObj() {
   24.44 +        return null;
   24.45 +    }
   24.46 +    
   24.47 +    public static boolean iofObject() {
   24.48 +        return jsObj() instanceof Object;
   24.49 +    }
   24.50  }
    25.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Thu Nov 29 20:19:00 2012 +0100
    25.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Mon Dec 03 14:44:49 2012 +0100
    25.3 @@ -18,9 +18,7 @@
    25.4  package org.apidesign.vm4brwsr;
    25.5  
    25.6  import javax.script.Invocable;
    25.7 -import javax.script.ScriptException;
    25.8  import org.testng.annotations.Test;
    25.9 -import static org.testng.Assert.*;
   25.10  import org.testng.annotations.BeforeClass;
   25.11  
   25.12  /**
   25.13 @@ -31,42 +29,42 @@
   25.14      @Test public void verifyDefaultDoubleValue() throws Exception {
   25.15          assertExec(
   25.16              "Will be zero",
   25.17 -            "org_apidesign_vm4brwsr_Instance_defaultDblValueD",
   25.18 +            Instance.class, "defaultDblValueD",
   25.19              Double.valueOf(0)
   25.20          );
   25.21      }
   25.22      @Test public void verifyStaticMethodCall() throws Exception {
   25.23          assertExec(
   25.24              "Will be zero",
   25.25 -            "org_apidesign_vm4brwsr_InstanceSub_recallDblD",
   25.26 +            InstanceSub.class, "recallDblD",
   25.27              Double.valueOf(0)
   25.28          );
   25.29      }
   25.30      @Test public void verifyAssignedByteValue() throws Exception {
   25.31          assertExec(
   25.32              "Will one thirty one",
   25.33 -            "org_apidesign_vm4brwsr_Instance_assignedByteValueB",
   25.34 +            Instance.class, "assignedByteValueB",
   25.35              Double.valueOf(31)
   25.36          );
   25.37      }
   25.38      @Test public void verifyMagicOne() throws Exception {
   25.39          assertExec(
   25.40              "Should be three and something",
   25.41 -            "org_apidesign_vm4brwsr_Instance_magicOneD",
   25.42 +            Instance.class, "magicOneD",
   25.43              Double.valueOf(3.3)
   25.44          );
   25.45      }
   25.46      @Test public void verifyInstanceMethods() throws Exception {
   25.47          assertExec(
   25.48              "Should be eleven as we invoke overwritten method, plus 44",
   25.49 -            "org_apidesign_vm4brwsr_Instance_virtualBytesI",
   25.50 +            Instance.class, "virtualBytesI",
   25.51              Double.valueOf(55)
   25.52          );
   25.53      }
   25.54      @Test public void verifyInterfaceMethods() throws Exception {
   25.55          assertExec(
   25.56              "Retruns default value",
   25.57 -            "org_apidesign_vm4brwsr_Instance_interfaceBytesF",
   25.58 +            Instance.class, "interfaceBytesF",
   25.59              Double.valueOf(31)
   25.60          );
   25.61      }
   25.62 @@ -74,7 +72,7 @@
   25.63      @Test public void isNull() throws Exception {
   25.64          assertExec(
   25.65              "Yes, we are instance",
   25.66 -            "org_apidesign_vm4brwsr_Instance_isNullZ",
   25.67 +            Instance.class, "isNullZ",
   25.68              Double.valueOf(0.0)
   25.69          );
   25.70      }
   25.71 @@ -82,7 +80,7 @@
   25.72      @Test public void isInstanceOf() throws Exception {
   25.73          assertExec(
   25.74              "Yes, we are instance",
   25.75 -            "org_apidesign_vm4brwsr_Instance_instanceOfZZ",
   25.76 +            Instance.class, "instanceOfZZ",
   25.77              Double.valueOf(1.0), true
   25.78          );
   25.79      }
   25.80 @@ -90,7 +88,7 @@
   25.81      @Test public void notInstanceOf() throws Exception {
   25.82          assertExec(
   25.83              "No, we are not an instance",
   25.84 -            "org_apidesign_vm4brwsr_Instance_instanceOfZZ",
   25.85 +            Instance.class, "instanceOfZZ",
   25.86              Double.valueOf(0.0), false
   25.87          );
   25.88      }
   25.89 @@ -98,18 +96,42 @@
   25.90      @Test public void verifyCastToClass() throws Exception {
   25.91          assertExec(
   25.92              "Five signals all is good",
   25.93 -            "org_apidesign_vm4brwsr_Instance_castsWorkIZ",
   25.94 +            Instance.class, "castsWorkIZ",
   25.95              Double.valueOf(5.0), false
   25.96          );
   25.97      }
   25.98      @Test public void verifyCastToInterface() throws Exception {
   25.99          assertExec(
  25.100              "Five signals all is good",
  25.101 -            "org_apidesign_vm4brwsr_Instance_castsWorkIZ",
  25.102 +            Instance.class, "castsWorkIZ",
  25.103              Double.valueOf(5.0), true
  25.104          );
  25.105      }
  25.106      
  25.107 +    @Test public void sharedConstructor() throws Exception {
  25.108 +        assertExec(
  25.109 +            "Constructor of first and 2nd instance should be the same",
  25.110 +            Instance.class, "sharedConstructorZ",
  25.111 +            Double.valueOf(1.0)
  25.112 +        );
  25.113 +    }
  25.114 +
  25.115 +    @Test public void differentConstructor() throws Exception {
  25.116 +        assertExec(
  25.117 +            "Constructor of X and Y should be the different",
  25.118 +            Instance.class, "differentConstructorZ",
  25.119 +            Double.valueOf(0)
  25.120 +        );
  25.121 +    }
  25.122 +
  25.123 +    @Test public void jsObjectIsLikeJavaObject() throws Exception {
  25.124 +        assertExec(
  25.125 +            "JavaScript object is instance of Java Object",
  25.126 +            Instance.class, "iofObjectZ",
  25.127 +            Double.valueOf(1)
  25.128 +        );
  25.129 +    }
  25.130 +    
  25.131      protected String startCompilationWith() {
  25.132          return "org/apidesign/vm4brwsr/Instance";
  25.133      }
  25.134 @@ -127,25 +149,9 @@
  25.135      }
  25.136      
  25.137      private void assertExec(
  25.138 -        String msg, String methodName, Object expRes, Object... args
  25.139 +        String msg, Class clazz, String method, Object expRes, Object... args
  25.140      ) throws Exception {
  25.141 -
  25.142 -        Object ret = null;
  25.143 -        try {
  25.144 -            ret = code.invokeFunction(methodName, args);
  25.145 -        } catch (ScriptException ex) {
  25.146 -            fail("Execution failed in\n" + codeSeq, ex);
  25.147 -        } catch (NoSuchMethodException ex) {
  25.148 -            fail("Cannot find method in\n" + codeSeq, ex);
  25.149 -        }
  25.150 -        if (ret == null && expRes == null) {
  25.151 -            return;
  25.152 -        }
  25.153 -        if (expRes.equals(ret)) {
  25.154 -            return;
  25.155 -        }
  25.156 -        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq);
  25.157 -        
  25.158 +        StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
  25.159      }
  25.160      
  25.161  }
    26.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Thu Nov 29 20:19:00 2012 +0100
    26.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Mon Dec 03 14:44:49 2012 +0100
    26.3 @@ -17,11 +17,6 @@
    26.4   */
    26.5  package org.apidesign.vm4brwsr;
    26.6  
    26.7 -import java.io.ByteArrayInputStream;
    26.8 -import java.io.ByteArrayOutputStream;
    26.9 -import java.io.DataInputStream;
   26.10 -import java.io.DataOutputStream;
   26.11 -import java.io.IOException;
   26.12  import javax.script.Invocable;
   26.13  import javax.script.ScriptException;
   26.14  import static org.testng.Assert.*;
   26.15 @@ -34,19 +29,19 @@
   26.16   */
   26.17  public class NumberTest {
   26.18      @Test public void integerFromString() throws Exception {
   26.19 -        assertExec("Can convert string to integer", "java_lang_Integer_parseIntILjava_lang_String",
   26.20 +        assertExec("Can convert string to integer", Integer.class, "parseIntILjava_lang_String",
   26.21              Double.valueOf(333), "333"
   26.22          );
   26.23      }
   26.24  
   26.25      @Test public void doubleFromString() throws Exception {
   26.26 -        assertExec("Can convert string to double", "java_lang_Double_parseDoubleDLjava_lang_String",
   26.27 +        assertExec("Can convert string to double", Double.class, "parseDoubleDLjava_lang_String",
   26.28              Double.valueOf(33.3), "33.3"
   26.29          );
   26.30      }
   26.31  
   26.32      @Test public void autoboxDouble() throws Exception {
   26.33 -        assertExec("Autoboxing of doubles is OK", "org_apidesign_vm4brwsr_Numbers_autoboxDblToStringLjava_lang_String",
   26.34 +        assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToStringLjava_lang_String",
   26.35              "3.3"
   26.36          );
   26.37      }
   26.38 @@ -56,7 +51,7 @@
   26.39      }
   26.40  
   26.41      @Test public void jslog1000() throws Exception {
   26.42 -        assertExec("log_10(1000) == 3", "java_lang_Math_log10DD", 
   26.43 +        assertExec("log_10(1000) == 3", Math.class, "log10DD", 
   26.44              Double.valueOf(3.0), 1000.0
   26.45          );
   26.46      }
   26.47 @@ -65,20 +60,20 @@
   26.48          assertEquals(3, Numbers.rem(303, 10));
   26.49      }
   26.50      @Test public void jsRem() throws Exception {
   26.51 -        assertExec("Should be three", "org_apidesign_vm4brwsr_Numbers_remIII", 
   26.52 +        assertExec("Should be three", Numbers.class, "remIII", 
   26.53              Double.valueOf(3.0), 303, 10
   26.54          );
   26.55      }
   26.56      
   26.57      @Test public void deserializeInt() throws Exception {
   26.58          int exp = Numbers.deserInt();
   26.59 -        assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserIntI", 
   26.60 +        assertExec("Should be the same", Numbers.class, "deserIntI", 
   26.61              Double.valueOf(exp)
   26.62          );
   26.63      }
   26.64  
   26.65      @Test public void deserializeSimpleLong() throws Exception {
   26.66 -        assertExec("Should be 3454", "org_apidesign_vm4brwsr_Numbers_deserLongJAB", 
   26.67 +        assertExec("Should be 3454", Numbers.class, "deserLongJAB", 
   26.68              Double.valueOf(3454), 
   26.69              new byte[] { (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)13, (byte)126 }
   26.70          );
   26.71 @@ -102,7 +97,7 @@
   26.72      
   26.73      @Test public void deserializeFloatInJS() throws Exception {
   26.74          float f = 54324.32423f;
   26.75 -        assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserFloatF", 
   26.76 +        assertExec("Should be the same", Numbers.class, "deserFloatF", 
   26.77              Double.valueOf(f)
   26.78          );
   26.79      }
   26.80 @@ -115,7 +110,7 @@
   26.81      
   26.82      @Test public void deserializeDoubleInJS() throws Exception {
   26.83          double f = 3.0;
   26.84 -        assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserDoubleD", f);
   26.85 +        assertExec("Should be the same", Numbers.class, "deserDoubleD", f);
   26.86      }
   26.87      /*
   26.88      @Test public void serDouble() throws IOException {
   26.89 @@ -136,7 +131,7 @@
   26.90      @Test public void fiveInStringJS() throws Exception {
   26.91          String s = Numbers.intToString();
   26.92          assertExec("Should be the same: " + s, 
   26.93 -            "org_apidesign_vm4brwsr_Numbers_intToStringLjava_lang_String", 
   26.94 +            Numbers.class, "intToStringLjava_lang_String", 
   26.95              s
   26.96          );
   26.97      }
   26.98 @@ -144,7 +139,7 @@
   26.99      @Test public void sevenInStringJS() throws Exception {
  26.100          String s = Numbers.floatToString();
  26.101          assertExec("Should be the same: " + s, 
  26.102 -            "org_apidesign_vm4brwsr_Numbers_floatToStringLjava_lang_String", 
  26.103 +            Numbers.class, "floatToStringLjava_lang_String", 
  26.104              s
  26.105          );
  26.106      }
  26.107 @@ -162,15 +157,16 @@
  26.108      }
  26.109  
  26.110      private static void assertExec(
  26.111 -        String msg, String methodName, Object expRes, Object... args) throws Exception {
  26.112 +        String msg, Class<?> clazz, String method, Object expRes, Object... args) throws Exception {
  26.113  
  26.114          Object ret = null;
  26.115          try {
  26.116 -            ret = code.invokeFunction(methodName, args);
  26.117 +            ret = code.invokeFunction(clazz.getName().replace('.', '_'), true);
  26.118 +            ret = code.invokeMethod(ret, method, args);
  26.119          } catch (ScriptException ex) {
  26.120 -            fail("Execution failed in\n" + codeSeq, ex);
  26.121 +            fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
  26.122          } catch (NoSuchMethodException ex) {
  26.123 -            fail("Cannot find method in\n" + codeSeq, ex);
  26.124 +            fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
  26.125          }
  26.126          if (ret == null && expRes == null) {
  26.127              return;
  26.128 @@ -181,10 +177,10 @@
  26.129          if (expRes instanceof Double && ret instanceof Double) {
  26.130              double expD = ((Double)expRes).doubleValue();
  26.131              double retD = ((Double)ret).doubleValue();
  26.132 -            assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + codeSeq);
  26.133 +            assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq));
  26.134              return;
  26.135          }
  26.136 -        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq);
  26.137 +        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq));
  26.138      }
  26.139      
  26.140  }
    27.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Thu Nov 29 20:19:00 2012 +0100
    27.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Mon Dec 03 14:44:49 2012 +0100
    27.3 @@ -36,7 +36,7 @@
    27.4      @Test public void threePlusFour() throws Exception {
    27.5          assertExec(
    27.6              "Should be seven", 
    27.7 -            "org_apidesign_vm4brwsr_StaticMethod_sumIII", 
    27.8 +            StaticMethod.class, "sumIII", 
    27.9              Double.valueOf(7), 
   27.10              3, 4
   27.11          );
   27.12 @@ -45,7 +45,7 @@
   27.13      @Test public void checkReallyInitializedValues() throws Exception {
   27.14          assertExec(
   27.15              "Return true", 
   27.16 -            "org_apidesign_vm4brwsr_StaticMethod_isNullZ", 
   27.17 +            StaticMethod.class, "isNullZ", 
   27.18              Double.valueOf(1)
   27.19          );
   27.20      }
   27.21 @@ -53,7 +53,7 @@
   27.22      @Test public void powerOfThree() throws Exception {
   27.23          assertExec(
   27.24              "Should be nine", 
   27.25 -            "org_apidesign_vm4brwsr_StaticMethod_powerFF", 
   27.26 +            StaticMethod.class, "powerFF", 
   27.27              Double.valueOf(9),
   27.28              3.0f
   27.29          );
   27.30 @@ -62,7 +62,7 @@
   27.31      @Test public void minusOne() throws Exception {
   27.32          assertExec(
   27.33              "Should be minus one", 
   27.34 -            "org_apidesign_vm4brwsr_StaticMethod_minusOneI", 
   27.35 +            StaticMethod.class, "minusOneI", 
   27.36              Double.valueOf(-1)
   27.37          );
   27.38      }
   27.39 @@ -70,7 +70,7 @@
   27.40      @Test public void doubleWithoutLong() throws Exception {
   27.41          assertExec(
   27.42              "Should be two",
   27.43 -            "org_apidesign_vm4brwsr_StaticMethod_minusDDJ", 
   27.44 +            StaticMethod.class, "minusDDJ", 
   27.45              Double.valueOf(2),
   27.46              3.0d, 1l
   27.47          );
   27.48 @@ -79,7 +79,7 @@
   27.49      @Test public void divAndRound() throws Exception {
   27.50          assertExec(
   27.51              "Should be rounded to one",
   27.52 -            "org_apidesign_vm4brwsr_StaticMethod_divIBD", 
   27.53 +            StaticMethod.class, "divIBD", 
   27.54              Double.valueOf(1),
   27.55              3, 3.75
   27.56          );
   27.57 @@ -87,7 +87,7 @@
   27.58      @Test public void mixedMethodFourParams() throws Exception {
   27.59          assertExec(
   27.60              "Should be two",
   27.61 -            "org_apidesign_vm4brwsr_StaticMethod_mixIIJBD", 
   27.62 +            StaticMethod.class, "mixIIJBD", 
   27.63              Double.valueOf(20),
   27.64              2, 10l, 5, 2.0
   27.65          );
   27.66 @@ -95,7 +95,7 @@
   27.67      @Test public void factRec() throws Exception {
   27.68          assertExec(
   27.69              "Factorial of 5 is 120",
   27.70 -            "org_apidesign_vm4brwsr_StaticMethod_factRecJI", 
   27.71 +            StaticMethod.class, "factRecJI", 
   27.72              Double.valueOf(120),
   27.73              5
   27.74          );
   27.75 @@ -103,7 +103,7 @@
   27.76      @Test public void factIter() throws Exception {
   27.77          assertExec(
   27.78              "Factorial of 5 is 120",
   27.79 -            "org_apidesign_vm4brwsr_StaticMethod_factIterJI", 
   27.80 +            StaticMethod.class, "factIterJI", 
   27.81              Double.valueOf(120),
   27.82              5
   27.83          );
   27.84 @@ -112,7 +112,7 @@
   27.85      @Test public void xor() throws Exception {
   27.86          assertExec(
   27.87              "Xor is 4",
   27.88 -            "org_apidesign_vm4brwsr_StaticMethod_xorJIJ",
   27.89 +            StaticMethod.class, "xorJIJ",
   27.90              Double.valueOf(4),
   27.91              7,
   27.92              3
   27.93 @@ -122,7 +122,7 @@
   27.94      @Test public void or() throws Exception {
   27.95          assertExec(
   27.96              "Or will be 7",
   27.97 -            "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII",
   27.98 +            StaticMethod.class, "orOrAndJZII",
   27.99              Double.valueOf(7),
  27.100              true,
  27.101              4,
  27.102 @@ -132,14 +132,14 @@
  27.103      @Test public void nullCheck() throws Exception {
  27.104          assertExec(
  27.105              "Returns nothing",
  27.106 -            "org_apidesign_vm4brwsr_StaticMethod_noneLjava_lang_ObjectII",
  27.107 +            StaticMethod.class, "noneLjava_lang_ObjectII",
  27.108              null, 1, 3
  27.109          );
  27.110      }
  27.111      @Test public void and() throws Exception {
  27.112          assertExec(
  27.113              "And will be 3",
  27.114 -            "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII",
  27.115 +            StaticMethod.class, "orOrAndJZII",
  27.116              Double.valueOf(3),
  27.117              false,
  27.118              7,
  27.119 @@ -149,7 +149,7 @@
  27.120      @Test public void inc4() throws Exception {
  27.121          assertExec(
  27.122              "It will be 4",
  27.123 -            "org_apidesign_vm4brwsr_StaticMethod_inc4I",
  27.124 +            StaticMethod.class, "inc4I",
  27.125              Double.valueOf(4)
  27.126          );
  27.127      }
  27.128 @@ -162,7 +162,7 @@
  27.129      @Test public void shiftLeftInJS() throws Exception {
  27.130          assertExec(
  27.131              "Setting 9th bit",
  27.132 -            "org_apidesign_vm4brwsr_StaticMethod_shiftLeftIII",
  27.133 +            StaticMethod.class, "shiftLeftIII",
  27.134              Double.valueOf(256),
  27.135              1, 8
  27.136          );
  27.137 @@ -176,7 +176,7 @@
  27.138      @Test public void shiftRightInJS() throws Exception {
  27.139          assertExec(
  27.140              "Get -1",
  27.141 -            "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ",
  27.142 +            StaticMethod.class, "shiftArithmRightIIIZ",
  27.143              Double.valueOf(-1),
  27.144              -8, 3, true
  27.145          );
  27.146 @@ -189,7 +189,7 @@
  27.147      @Test public void unsignedShiftRightInJS() throws Exception {
  27.148          assertExec(
  27.149              "Get -1",
  27.150 -            "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ",
  27.151 +            StaticMethod.class, "shiftArithmRightIIIZ",
  27.152              Double.valueOf(1),
  27.153              8, 3, false
  27.154          );
  27.155 @@ -198,7 +198,7 @@
  27.156      @Test public void javaScriptBody() throws Exception {
  27.157          assertExec(
  27.158              "JavaScript string",
  27.159 -            "org_apidesign_vm4brwsr_StaticMethod_i2sLjava_lang_StringII",
  27.160 +            StaticMethod.class, "i2sLjava_lang_StringII",
  27.161              "333",
  27.162              330, 3
  27.163          );
  27.164 @@ -207,7 +207,7 @@
  27.165      @Test public void switchJarda() throws Exception {
  27.166          assertExec(
  27.167              "The expected value",
  27.168 -            "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI",
  27.169 +            StaticMethod.class, "swtchLjava_lang_StringI",
  27.170              "Jarda",
  27.171              0
  27.172          );
  27.173 @@ -216,7 +216,7 @@
  27.174      @Test public void switchDarda() throws Exception {
  27.175          assertExec(
  27.176              "The expected value",
  27.177 -            "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI",
  27.178 +            StaticMethod.class, "swtchLjava_lang_StringI",
  27.179              "Darda",
  27.180              1
  27.181          );
  27.182 @@ -224,7 +224,7 @@
  27.183      @Test public void switchParda() throws Exception {
  27.184          assertExec(
  27.185              "The expected value",
  27.186 -            "org_apidesign_vm4brwsr_StaticMethod_swtch2Ljava_lang_StringI",
  27.187 +            StaticMethod.class, "swtch2Ljava_lang_StringI",
  27.188              "Parda",
  27.189              22
  27.190          );
  27.191 @@ -232,7 +232,7 @@
  27.192      @Test public void switchMarda() throws Exception {
  27.193          assertExec(
  27.194              "The expected value",
  27.195 -            "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI",
  27.196 +            StaticMethod.class, "swtchLjava_lang_StringI",
  27.197              "Marda",
  27.198              -433
  27.199          );
  27.200 @@ -249,16 +249,25 @@
  27.201      }
  27.202      
  27.203      
  27.204 -    private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
  27.205 -        StringBuilder sb = new StringBuilder();
  27.206 -        
  27.207 +    private static void assertExec(
  27.208 +        String msg, Class clazz, String method, 
  27.209 +        Object expRes, Object... args
  27.210 +    ) throws Exception {
  27.211 +        assertExec(code, codeSeq, msg, clazz, method, expRes, args);
  27.212 +    }
  27.213 +    static void assertExec(
  27.214 +        Invocable toRun, CharSequence theCode,
  27.215 +        String msg, Class clazz, String method, 
  27.216 +        Object expRes, Object... args
  27.217 +    ) throws Exception {
  27.218          Object ret = null;
  27.219          try {
  27.220 -            ret = code.invokeFunction(methodName, args);
  27.221 +            ret = toRun.invokeFunction(clazz.getName().replace('.', '_'), true);
  27.222 +            ret = toRun.invokeMethod(ret, method, args);
  27.223          } catch (ScriptException ex) {
  27.224 -            fail("Execution failed in\n" + codeSeq, ex);
  27.225 +            fail("Execution failed in\n" + dumpJS(theCode), ex);
  27.226          } catch (NoSuchMethodException ex) {
  27.227 -            fail("Cannot find method in\n" + codeSeq, ex);
  27.228 +            fail("Cannot find method in\n" + dumpJS(theCode), ex);
  27.229          }
  27.230          if (ret == null && expRes == null) {
  27.231              return;
  27.232 @@ -266,17 +275,25 @@
  27.233          if (expRes != null && expRes.equals(ret)) {
  27.234              return;
  27.235          }
  27.236 -        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq);
  27.237 +        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + dumpJS(theCode));
  27.238          
  27.239      }
  27.240  
  27.241      static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException {
  27.242 +        return compileClass(sb, null, names);
  27.243 +    }
  27.244 +    static Invocable compileClass(
  27.245 +        StringBuilder sb, ScriptEngine[] eng, String... names
  27.246 +    ) throws ScriptException, IOException {
  27.247          if (sb == null) {
  27.248              sb = new StringBuilder();
  27.249          }
  27.250          GenJS.compile(sb, names);
  27.251          ScriptEngineManager sem = new ScriptEngineManager();
  27.252          ScriptEngine js = sem.getEngineByExtension("js");
  27.253 +        if (eng != null) {
  27.254 +            eng[0] = js;
  27.255 +        }
  27.256          try {
  27.257              Object res = js.eval(sb.toString());
  27.258              assertTrue(js instanceof Invocable, "It is invocable object: " + res);
  27.259 @@ -285,7 +302,7 @@
  27.260              if (sb.length() > 2000) {
  27.261                  sb = dumpJS(sb);
  27.262              }
  27.263 -            fail("Could not compile:\n" + sb, ex);
  27.264 +            fail("Could not evaluate:\n" + sb, ex);
  27.265              return null;
  27.266          }
  27.267      }
    28.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Thu Nov 29 20:19:00 2012 +0100
    28.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java	Mon Dec 03 14:44:49 2012 +0100
    28.3 @@ -64,6 +64,10 @@
    28.4          return h.hashCode();
    28.5      }
    28.6      
    28.7 +    public static boolean isStringInstance() {
    28.8 +        return chars('a', (char)30, 'b') instanceof String;
    28.9 +    }
   28.10 +    
   28.11      public static String insertBuffer() {
   28.12          StringBuilder sb = new StringBuilder();
   28.13          sb.append("Jardo!");
    29.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Thu Nov 29 20:19:00 2012 +0100
    29.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Mon Dec 03 14:44:49 2012 +0100
    29.3 @@ -31,7 +31,7 @@
    29.4      @Test public void firstChar() throws Exception {
    29.5          assertExec(
    29.6              "First char in Hello is H",
    29.7 -            "org_apidesign_vm4brwsr_StringSample_sayHelloCI",
    29.8 +            StringSample.class, "sayHelloCI",
    29.9              72, 0
   29.10          );
   29.11      }
   29.12 @@ -39,7 +39,7 @@
   29.13      @Test public void fromChars() throws Exception {
   29.14          assertExec(
   29.15              "First char in Hello is ABC",
   29.16 -            "org_apidesign_vm4brwsr_StringSample_fromCharsLjava_lang_StringCCC",
   29.17 +            StringSample.class, "fromCharsLjava_lang_StringCCC",
   29.18              "ABC", 'A', 'B', 'C'
   29.19          );
   29.20      }
   29.21 @@ -47,7 +47,7 @@
   29.22      @Test public void concatChars() throws Exception {
   29.23          assertExec(
   29.24              "Composing yields ABC",
   29.25 -            "org_apidesign_vm4brwsr_StringSample_charsLjava_lang_StringCCC",
   29.26 +            StringSample.class, "charsLjava_lang_StringCCC",
   29.27              "ABC", 'A', 'B', 'C'
   29.28          );
   29.29      }
   29.30 @@ -55,7 +55,7 @@
   29.31      @Test public void concatCharsFromInts() throws Exception {
   29.32          assertExec(
   29.33              "Composing yields ABC",
   29.34 -            "org_apidesign_vm4brwsr_StringSample_charsFromNumbersLjava_lang_String",
   29.35 +            StringSample.class, "charsFromNumbersLjava_lang_String",
   29.36              "ABC"
   29.37          );
   29.38      }
   29.39 @@ -63,15 +63,23 @@
   29.40      @Test public void concatCharsFromChars() throws Exception {
   29.41          assertExec(
   29.42              "Composing yields ABC",
   29.43 -            "org_apidesign_vm4brwsr_StringSample_charsFromCharsLjava_lang_String",
   29.44 +            StringSample.class, "charsFromCharsLjava_lang_String",
   29.45              "ABC"
   29.46          );
   29.47      }
   29.48  
   29.49 +    @Test public void instanceOfWorks() throws Exception {
   29.50 +        assertExec(
   29.51 +            "It is string",
   29.52 +            StringSample.class, "isStringInstanceZ",
   29.53 +            Double.valueOf(1.0)
   29.54 +        );
   29.55 +    }
   29.56 +
   29.57      @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
   29.58          assertExec(
   29.59              "Five executions should generate 5Hello World!",
   29.60 -            "org_apidesign_vm4brwsr_StringSample_toStringTestLjava_lang_StringI",
   29.61 +            StringSample.class, "toStringTestLjava_lang_StringI",
   29.62              "Hello World!5", 5
   29.63          );
   29.64      }
   29.65 @@ -82,7 +90,7 @@
   29.66      @Test(timeOut=10000) public void stringStringConcat() throws Exception {
   29.67          assertExec(
   29.68              "Composes strings OK",
   29.69 -            "org_apidesign_vm4brwsr_StringSample_concatStringsLjava_lang_String",
   29.70 +            StringSample.class, "concatStringsLjava_lang_String",
   29.71              "Hello World!1" + "\\\n\r\t"
   29.72          );
   29.73      }
   29.74 @@ -90,21 +98,21 @@
   29.75      @Test public void equalsAndSubstring() throws Exception {
   29.76          assertExec(
   29.77              "Composes are OK",
   29.78 -            "org_apidesign_vm4brwsr_StringSample_equalToHelloZII",
   29.79 +            StringSample.class, "equalToHelloZII",
   29.80              true, 0, 5
   29.81          );
   29.82      }
   29.83      @Test public void replaceChars() throws Exception {
   29.84          assertExec(
   29.85              "Can replace slashes by underscores",
   29.86 -            "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC",
   29.87 +            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   29.88              "x_y_z", "x/y/z", '/', '_'
   29.89          );
   29.90      }
   29.91      @Test public void replaceIntChars() throws Exception {
   29.92          assertExec(
   29.93              "Can replace slashes by underscores",
   29.94 -            "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC",
   29.95 +            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   29.96              "x_y_z", "x/y/z", (int)'/', (int)'_'
   29.97          );
   29.98      }
   29.99 @@ -112,7 +120,7 @@
  29.100      @Test public void insertBuilder() throws Exception {
  29.101          assertExec(
  29.102              "Can insert something into a buffer?",
  29.103 -            "org_apidesign_vm4brwsr_StringSample_insertBufferLjava_lang_String",
  29.104 +            StringSample.class, "insertBufferLjava_lang_String",
  29.105              "Ahojdo!"
  29.106          );
  29.107      }
  29.108 @@ -122,7 +130,7 @@
  29.109          int jh = StringSample.hashCode(j);
  29.110          assertExec(
  29.111              "Hashcode is the same " +jh,
  29.112 -            "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String",
  29.113 +            StringSample.class, "hashCodeILjava_lang_String",
  29.114              Double.valueOf(jh), j
  29.115          );
  29.116      }
  29.117 @@ -131,28 +139,28 @@
  29.118          int jh = StringSample.hashCode(j);
  29.119          assertExec(
  29.120              "Hashcode is the same " + jh,
  29.121 -            "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String",
  29.122 +            StringSample.class, "hashCodeILjava_lang_String",
  29.123              Double.valueOf(jh), j
  29.124          );
  29.125      }
  29.126      @Test public void stringSwitch1() throws Exception {
  29.127          assertExec(
  29.128              "Get one",
  29.129 -            "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String",
  29.130 +            StringSample.class, "stringSwitchILjava_lang_String",
  29.131              Double.valueOf(1), "jedna"
  29.132          );
  29.133      }
  29.134      @Test public void stringSwitch2() throws Exception {
  29.135          assertExec(
  29.136              "Get two",
  29.137 -            "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String",
  29.138 +            StringSample.class, "stringSwitchILjava_lang_String",
  29.139              Double.valueOf(2), "dve"
  29.140          );
  29.141      }
  29.142      @Test public void stringSwitchDefault() throws Exception {
  29.143          assertExec(
  29.144              "Get -1",
  29.145 -            "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String",
  29.146 +            StringSample.class, "stringSwitchILjava_lang_String",
  29.147              Double.valueOf(-1), "none"
  29.148          );
  29.149      }
  29.150 @@ -161,7 +169,7 @@
  29.151          assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
  29.152          assertExec(
  29.153              "One A and one B adds to 3",
  29.154 -            "org_apidesign_vm4brwsr_StringSample_countABILjava_lang_String",
  29.155 +            StringSample.class, "countABILjava_lang_String",
  29.156              Double.valueOf(3), "Ahoj Bedo!"
  29.157          );
  29.158          
  29.159 @@ -180,23 +188,10 @@
  29.160          codeSeq = sb;
  29.161      }
  29.162      
  29.163 -    private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
  29.164 -        Object ret = null;
  29.165 -        try {
  29.166 -            ret = code.invokeFunction(methodName, args);
  29.167 -        } catch (ScriptException ex) {
  29.168 -            fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
  29.169 -        } catch (NoSuchMethodException ex) {
  29.170 -            fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
  29.171 -        }
  29.172 -        if (ret == null && expRes == null) {
  29.173 -            return;
  29.174 -        }
  29.175 -        if (expRes.equals(ret)) {
  29.176 -            return;
  29.177 -        }
  29.178 -        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq));
  29.179 -        
  29.180 +    private static void assertExec(String msg, 
  29.181 +        Class<?> clazz, String method, Object expRes, Object... args
  29.182 +    ) throws Exception {
  29.183 +        StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args);
  29.184      }
  29.185      
  29.186  }
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java	Mon Dec 03 14:44:49 2012 +0100
    30.3 @@ -0,0 +1,68 @@
    30.4 +/**
    30.5 + * Back 2 Browser Bytecode Translator
    30.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    30.7 + *
    30.8 + * This program is free software: you can redistribute it and/or modify
    30.9 + * it under the terms of the GNU General Public License as published by
   30.10 + * the Free Software Foundation, version 2 of the License.
   30.11 + *
   30.12 + * This program is distributed in the hope that it will be useful,
   30.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   30.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   30.15 + * GNU General Public License for more details.
   30.16 + *
   30.17 + * You should have received a copy of the GNU General Public License
   30.18 + * along with this program. Look for COPYING file in the top folder.
   30.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
   30.20 + */
   30.21 +package org.apidesign.vm4brwsr;
   30.22 +
   30.23 +import java.io.ByteArrayInputStream;
   30.24 +import java.io.IOException;
   30.25 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
   30.26 +
   30.27 +/**
   30.28 + *
   30.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   30.30 + */
   30.31 +class VMLazy extends ByteCodeToJavaScript {
   30.32 +    private final Object vm;
   30.33 +    private final Object global;
   30.34 +    
   30.35 +    private VMLazy(Object global, Object vm, Appendable out) {
   30.36 +        super(out);
   30.37 +        this.vm = vm;
   30.38 +        this.global = global;
   30.39 +    }
   30.40 +    
   30.41 +    static String toJavaScript(Object global, Object vm, byte[] is) throws IOException {
   30.42 +        StringBuilder sb = new StringBuilder();
   30.43 +        new VMLazy(global, vm, sb).compile(new ByteArrayInputStream(is));
   30.44 +        return sb.toString().toString();
   30.45 +    }
   30.46 +
   30.47 +    @JavaScriptBody(args = { "self", "n" }, 
   30.48 +        body=
   30.49 +          "var cls = n.replaceLjava_lang_StringCC(n,'/','_').toString();"
   30.50 +        + "var glb = self.fld_global;"
   30.51 +        + "var vm = self.fld_vm;"
   30.52 +        + "if (glb[cls]) return false;"
   30.53 +        + "glb[cls] = function() {"
   30.54 +        + "  return vm.loadClass(n,cls);"
   30.55 +        + "};"
   30.56 +        + "return true;"
   30.57 +    )
   30.58 +    @Override
   30.59 +    protected boolean requireReference(String internalClassName) {
   30.60 +        throw new UnsupportedOperationException();
   30.61 +    }
   30.62 +
   30.63 +    @Override
   30.64 +    protected void requireScript(String resourcePath) {
   30.65 +    }
   30.66 +
   30.67 +    @Override
   30.68 +    protected String assignClass(String className) {
   30.69 +        return "arguments[0][arguments[1]]=";
   30.70 +    }
   30.71 +}
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java	Mon Dec 03 14:44:49 2012 +0100
    31.3 @@ -0,0 +1,132 @@
    31.4 +/**
    31.5 + * Back 2 Browser Bytecode Translator
    31.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    31.7 + *
    31.8 + * This program is free software: you can redistribute it and/or modify
    31.9 + * it under the terms of the GNU General Public License as published by
   31.10 + * the Free Software Foundation, version 2 of the License.
   31.11 + *
   31.12 + * This program is distributed in the hope that it will be useful,
   31.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   31.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   31.15 + * GNU General Public License for more details.
   31.16 + *
   31.17 + * You should have received a copy of the GNU General Public License
   31.18 + * along with this program. Look for COPYING file in the top folder.
   31.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
   31.20 + */
   31.21 +package org.apidesign.vm4brwsr;
   31.22 +
   31.23 +import java.io.IOException;
   31.24 +import java.io.InputStream;
   31.25 +import javax.script.Invocable;
   31.26 +import javax.script.ScriptContext;
   31.27 +import javax.script.ScriptEngine;
   31.28 +import javax.script.ScriptException;
   31.29 +import org.testng.annotations.BeforeClass;
   31.30 +import static org.testng.Assert.*;
   31.31 +import org.testng.annotations.Test;
   31.32 +
   31.33 +/** Implements loading class by class.
   31.34 + *
   31.35 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   31.36 + */
   31.37 +public class VMLazyTest {
   31.38 +
   31.39 +    
   31.40 +    private static CharSequence codeSeq;
   31.41 +    private static Invocable code;
   31.42 +
   31.43 +    @BeforeClass
   31.44 +    public void compileTheCode() throws Exception {
   31.45 +        StringBuilder sb = new StringBuilder();
   31.46 +        
   31.47 +        sb.append("\nfunction test(clazz, as, method) {");
   31.48 +        sb.append("\n  var l = new lazyVM(this);");
   31.49 +        sb.append("\n  var c = l.loadClass(clazz, as);");
   31.50 +        sb.append("\n  return c[method]();");
   31.51 +        sb.append("\n}");
   31.52 +        
   31.53 +        
   31.54 +        sb.append("\nfunction lazyVM(global) {");
   31.55 +        sb.append("\n  var self = this;");
   31.56 +        sb.append("\n  var glb = global;");
   31.57 +        sb.append("\n  lazyVM.prototype.loadClass = function(res, name) {");
   31.58 +        sb.append("\n    var script = org_apidesign_vm4brwsr_VMLazy(true)."
   31.59 +            + "toJavaScriptLjava_lang_StringLjava_lang_ObjectLjava_lang_ObjectAB("
   31.60 +            + "  glb, self,"
   31.61 +            + "  loader.get(res + '.class')"
   31.62 +            + ");");
   31.63 +        sb.append("\n    try {");
   31.64 +        sb.append("\n      new Function(script)(glb, name);");
   31.65 +        sb.append("\n    } catch (ex) {");
   31.66 +        sb.append("\n      throw 'Cannot compile ' + res + ' error: ' + ex + ' script:\\n' + script;");
   31.67 +        sb.append("\n    };");
   31.68 +        sb.append("\n    return glb[name](true);");
   31.69 +        sb.append("\n  };");
   31.70 +        sb.append("\n");
   31.71 +        sb.append("\n}\n");
   31.72 +        
   31.73 +        ScriptEngine[] arr = { null };
   31.74 +        code = StaticMethodTest.compileClass(sb, arr,
   31.75 +            "org/apidesign/vm4brwsr/VMLazy"
   31.76 +        );
   31.77 +        arr[0].getContext().setAttribute("loader", new FindBytes(), ScriptContext.ENGINE_SCOPE);
   31.78 +        codeSeq = sb;
   31.79 +    }
   31.80 +    
   31.81 +    @Test public void invokeStaticMethod() throws Exception {
   31.82 +        assertExec("Trying to get -1", "test", Double.valueOf(-1),
   31.83 +            "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI"
   31.84 +        );
   31.85 +    }
   31.86 +
   31.87 +    @Test public void loadDependantClass() throws Exception {
   31.88 +        assertExec("Trying to get zero", "test", Double.valueOf(0),
   31.89 +            "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDblD"
   31.90 +        );
   31.91 +    }
   31.92 +
   31.93 +    private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
   31.94 +        Object ret = null;
   31.95 +        try {
   31.96 +            ret = code.invokeFunction(methodName, args);
   31.97 +        } catch (ScriptException ex) {
   31.98 +            fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
   31.99 +        } catch (NoSuchMethodException ex) {
  31.100 +            fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex);
  31.101 +        }
  31.102 +        if (ret == null && expRes == null) {
  31.103 +            return;
  31.104 +        }
  31.105 +        if (expRes.equals(ret)) {
  31.106 +            return;
  31.107 +        }
  31.108 +        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq));
  31.109 +    }
  31.110 +
  31.111 +    public static final class FindBytes {
  31.112 +        public byte[] get(String name) throws IOException {
  31.113 +            InputStream is = VMLazyTest.class.getClassLoader().getResourceAsStream(name);
  31.114 +            if (is == null) {
  31.115 +                throw new IOException("Can't find " + name);
  31.116 +            }
  31.117 +            byte[] arr = new byte[is.available()];
  31.118 +            int len = is.read(arr);
  31.119 +            if (len != arr.length) {
  31.120 +                throw new IOException("Read only " + len + " wanting " + arr.length);
  31.121 +            }
  31.122 +            /*
  31.123 +            System.err.print("loader['" + name + "'] = [");
  31.124 +            for (int i = 0; i < arr.length; i++) {
  31.125 +                if (i > 0) {
  31.126 +                    System.err.print(", ");
  31.127 +                }
  31.128 +                System.err.print(arr[i]);
  31.129 +            }
  31.130 +            System.err.println("]");
  31.131 +            */
  31.132 +            return arr;
  31.133 +        }
  31.134 +    }
  31.135 +}
    32.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Thu Nov 29 20:19:00 2012 +0100
    32.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Mon Dec 03 14:44:49 2012 +0100
    32.3 @@ -41,10 +41,8 @@
    32.4          
    32.5          Object ret;
    32.6          try {
    32.7 -            ret = code.invokeFunction(
    32.8 -                "org_apidesign_vm4brwsr_VMinVM_toJavaScriptLjava_lang_StringAB",
    32.9 -                arr
   32.10 -            );
   32.11 +            ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_'), true);
   32.12 +            ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr);
   32.13          } catch (Exception ex) {
   32.14              File f = File.createTempFile("execution", ".js");
   32.15              FileWriter w = new FileWriter(f);