Merging in JNI-like naming scheme from default branch reflection
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 04 Dec 2012 11:21:10 +0100
branchreflection
changeset 249001389026dbf
parent 247 380f7ba7ef70
parent 248 0bfcb6585290
child 250 42c2ceb1e160
Merging in JNI-like naming scheme from default branch
core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java
emul/src/main/java/java/lang/Object.java
emul/src/main/java/java/lang/String.java
emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js
javap/src/main/java/org/apidesign/javap/AnnotationParser.java
javap/src/main/java/org/apidesign/javap/FieldData.java
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptOnly.java	Tue Dec 04 11:21:10 2012 +0100
     1.3 @@ -0,0 +1,37 @@
     1.4 +/**
     1.5 + * Back 2 Browser Bytecode Translator
     1.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     1.7 + *
     1.8 + * This program is free software: you can redistribute it and/or modify
     1.9 + * it under the terms of the GNU General Public License as published by
    1.10 + * the Free Software Foundation, version 2 of the License.
    1.11 + *
    1.12 + * This program is distributed in the hope that it will be useful,
    1.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.15 + * GNU General Public License for more details.
    1.16 + *
    1.17 + * You should have received a copy of the GNU General Public License
    1.18 + * along with this program. Look for COPYING file in the top folder.
    1.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    1.20 + */
    1.21 +package org.apidesign.bck2brwsr.core;
    1.22 +
    1.23 +import java.lang.annotation.ElementType;
    1.24 +import java.lang.annotation.Retention;
    1.25 +import java.lang.annotation.RetentionPolicy;
    1.26 +import java.lang.annotation.Target;
    1.27 +
    1.28 +/** Don't include given field or method in generated JavaScript. Rather
    1.29 + * generate completely independent JavaScript code.
    1.30 + *
    1.31 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    1.32 + */
    1.33 +@Retention(RetentionPolicy.CLASS)
    1.34 +@Target({ ElementType.METHOD, ElementType.FIELD })
    1.35 +public @interface JavaScriptOnly {
    1.36 +    /** name of the variable to assign given value to */
    1.37 +    String name() default "";
    1.38 +    /** value to assign to given field */
    1.39 +    String value() default "";
    1.40 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptPrototype.java	Tue Dec 04 11:21:10 2012 +0100
     2.3 @@ -0,0 +1,41 @@
     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 +/** Controls how JavaScript inheritance should be handled.
    2.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    2.30 + */
    2.31 +@Retention(RetentionPolicy.CLASS)
    2.32 +@Target({ ElementType.TYPE })
    2.33 +public @interface JavaScriptPrototype {
    2.34 +    /** Expression that identifies the function where all methods
    2.35 +     * should be added into.
    2.36 +     * @return name of function to contain methods found in given class
    2.37 +     */
    2.38 +    String container();
    2.39 +    /** Expression that defines the way to construct prototype for this
    2.40 +     * class.
    2.41 +     * @return expression to construct prototype
    2.42 +     */
    2.43 +    String prototype();
    2.44 +}
     3.1 --- a/core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java	Mon Dec 03 22:13:50 2012 +0100
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,33 +0,0 @@
     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 -/** Don't include given field or method in generated JavaScript.
    3.29 - *
    3.30 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.31 - */
    3.32 -@Retention(RetentionPolicy.CLASS)
    3.33 -@Target({ ElementType.METHOD, ElementType.FIELD })
    3.34 -public @interface NoJavaScript {
    3.35 -    
    3.36 -}
     4.1 --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java	Mon Dec 03 22:13:50 2012 +0100
     4.2 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java	Tue Dec 04 11:21:10 2012 +0100
     4.3 @@ -25,8 +25,6 @@
     4.4  
     4.5  package java.lang;
     4.6  
     4.7 -import org.apidesign.bck2brwsr.core.JavaScriptBody;
     4.8 -
     4.9  /**
    4.10   * A mutable sequence of characters.
    4.11   * <p>
    4.12 @@ -600,22 +598,8 @@
    4.13       * @param   i   an {@code int}.
    4.14       * @return  a reference to this object.
    4.15       */
    4.16 -    @JavaScriptBody(
    4.17 -        args={ "self", "i" },
    4.18 -        body="return java_lang_AbstractStringBuilder(true).appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());"
    4.19 -    )
    4.20      public AbstractStringBuilder append(int i) {
    4.21 -        if (i == Integer.MIN_VALUE) {
    4.22 -            append("-2147483648");
    4.23 -            return this;
    4.24 -        }
    4.25 -        int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
    4.26 -                                     : Integer.stringSize(i);
    4.27 -        int spaceNeeded = count + appendedLength;
    4.28 -        ensureCapacityInternal(spaceNeeded);
    4.29 -        Integer.getChars(i, spaceNeeded, value);
    4.30 -        count = spaceNeeded;
    4.31 -        return this;
    4.32 +        return append(Integer.toString(i));
    4.33      }
    4.34  
    4.35      /**
     5.1 --- a/emul/src/main/java/java/lang/Object.java	Mon Dec 03 22:13:50 2012 +0100
     5.2 +++ b/emul/src/main/java/java/lang/Object.java	Tue Dec 04 11:21:10 2012 +0100
     5.3 @@ -26,6 +26,7 @@
     5.4  package java.lang;
     5.5  
     5.6  import org.apidesign.bck2brwsr.core.JavaScriptBody;
     5.7 +import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
     5.8  
     5.9  /**
    5.10   * Class {@code Object} is the root of the class hierarchy.
    5.11 @@ -36,6 +37,7 @@
    5.12   * @see     java.lang.Class
    5.13   * @since   JDK1.0
    5.14   */
    5.15 +@JavaScriptPrototype(container = "Object.prototype", prototype = "new Object")
    5.16  public class Object {
    5.17  
    5.18      @JavaScriptBody(args = {}, body = "")
     6.1 --- a/emul/src/main/java/java/lang/String.java	Mon Dec 03 22:13:50 2012 +0100
     6.2 +++ b/emul/src/main/java/java/lang/String.java	Tue Dec 04 11:21:10 2012 +0100
     6.3 @@ -25,8 +25,11 @@
     6.4  
     6.5  package java.lang;
     6.6  
     6.7 +import java.util.Comparator;
     6.8  import org.apidesign.bck2brwsr.core.ExtraJavaScript;
     6.9 -import java.util.Comparator;
    6.10 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    6.11 +import org.apidesign.bck2brwsr.core.JavaScriptOnly;
    6.12 +import org.apidesign.bck2brwsr.core.JavaScriptPrototype;
    6.13  
    6.14  /**
    6.15   * The <code>String</code> class represents character strings. All
    6.16 @@ -99,25 +102,29 @@
    6.17  
    6.18  @ExtraJavaScript(
    6.19      resource="/org/apidesign/vm4brwsr/emul/java_lang_String.js",
    6.20 -    processByteCode=false
    6.21 +    processByteCode=true
    6.22  )
    6.23 +@JavaScriptPrototype(container = "String.prototype", prototype = "new String")
    6.24  public final class String
    6.25      implements java.io.Serializable, Comparable<String>, CharSequence
    6.26  {
    6.27 -    /** The value is used for character storage. */
    6.28 -    private final char value[];
    6.29 -
    6.30 -    /** The offset is the first index of the storage that is used. */
    6.31 -    private final int offset;
    6.32 -
    6.33 -    /** The count is the number of characters in the String. */
    6.34 -    private final int count;
    6.35 -
    6.36 +    @JavaScriptOnly
    6.37      /** Cache the hash code for the string */
    6.38      private int hash; // Default to 0
    6.39 +    
    6.40 +    /** real string to delegate to */
    6.41 +    private Object r;
    6.42  
    6.43      /** use serialVersionUID from JDK 1.0.2 for interoperability */
    6.44      private static final long serialVersionUID = -6849794470754667710L;
    6.45 +    
    6.46 +    @JavaScriptOnly(name="toString", value="function() { return this.fld_r; }")
    6.47 +    private static void jsToString() {
    6.48 +    }
    6.49 +    
    6.50 +    @JavaScriptOnly(name="valueOf", value="function() { return this.toString().valueOf(); }")
    6.51 +    private static void jsValudOf() {
    6.52 +    }
    6.53  
    6.54      /**
    6.55       * Class String is special cased within the Serialization Stream Protocol.
    6.56 @@ -140,9 +147,7 @@
    6.57       * unnecessary since Strings are immutable.
    6.58       */
    6.59      public String() {
    6.60 -        this.offset = 0;
    6.61 -        this.count = 0;
    6.62 -        this.value = new char[0];
    6.63 +        this.r = "";
    6.64      }
    6.65  
    6.66      /**
    6.67 @@ -156,23 +161,7 @@
    6.68       *         A {@code String}
    6.69       */
    6.70      public String(String original) {
    6.71 -        int size = original.count;
    6.72 -        char[] originalValue = original.value;
    6.73 -        char[] v;
    6.74 -        if (originalValue.length > size) {
    6.75 -            // The array representing the String is bigger than the new
    6.76 -            // String itself.  Perhaps this constructor is being called
    6.77 -            // in order to trim the baggage, so make a copy of the array.
    6.78 -            int off = original.offset;
    6.79 -            v = AbstractStringBuilder.copyOfRange(originalValue, off, off+size);
    6.80 -        } else {
    6.81 -            // The array representing the String is the same
    6.82 -            // size as the String, so no point in making a copy.
    6.83 -            v = originalValue;
    6.84 -        }
    6.85 -        this.offset = 0;
    6.86 -        this.count = size;
    6.87 -        this.value = v;
    6.88 +        this.r = original.toString();
    6.89      }
    6.90  
    6.91      /**
    6.92 @@ -184,11 +173,13 @@
    6.93       * @param  value
    6.94       *         The initial value of the string
    6.95       */
    6.96 +    @JavaScriptBody(args = { "self", "charArr" }, body=
    6.97 +        "for (var i = 0; i < charArr.length; i++) {\n"
    6.98 +      + "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n"
    6.99 +      + "}\n"
   6.100 +      + "self.fld_r = charArr.join('');\n"
   6.101 +    )
   6.102      public String(char value[]) {
   6.103 -        int size = value.length;
   6.104 -        this.offset = 0;
   6.105 -        this.count = size;
   6.106 -        this.value = AbstractStringBuilder.copyOf(value, size);
   6.107      }
   6.108  
   6.109      /**
   6.110 @@ -212,20 +203,14 @@
   6.111       *          If the {@code offset} and {@code count} arguments index
   6.112       *          characters outside the bounds of the {@code value} array
   6.113       */
   6.114 +    @JavaScriptBody(args = { "self", "charArr", "off", "cnt" }, body =
   6.115 +        "var up = off + cnt;\n" +
   6.116 +        "for (var i = off; i < up; i++) {\n" +
   6.117 +        "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" +
   6.118 +        "}\n" +
   6.119 +        "self.fld_r = charArr.slice(off, up).join(\"\");\n"
   6.120 +    )
   6.121      public String(char value[], int offset, int count) {
   6.122 -        if (offset < 0) {
   6.123 -            throw new StringIndexOutOfBoundsException(offset);
   6.124 -        }
   6.125 -        if (count < 0) {
   6.126 -            throw new StringIndexOutOfBoundsException(count);
   6.127 -        }
   6.128 -        // Note: offset or count might be near -1>>>1.
   6.129 -        if (offset > value.length - count) {
   6.130 -            throw new StringIndexOutOfBoundsException(offset + count);
   6.131 -        }
   6.132 -        this.offset = 0;
   6.133 -        this.count = count;
   6.134 -        this.value = AbstractStringBuilder.copyOfRange(value, offset, offset+count);
   6.135      }
   6.136  
   6.137      /**
   6.138 @@ -292,9 +277,7 @@
   6.139                  Character.toSurrogates(c, v, j++);
   6.140          }
   6.141  
   6.142 -        this.value  = v;
   6.143 -        this.count  = n;
   6.144 -        this.offset = 0;
   6.145 +        this.r = new String(v, 0, n);
   6.146      }
   6.147  
   6.148      /**
   6.149 @@ -351,9 +334,7 @@
   6.150                  value[i] = (char) (hibyte | (ascii[i + offset] & 0xff));
   6.151              }
   6.152          }
   6.153 -        this.offset = 0;
   6.154 -        this.count = count;
   6.155 -        this.value = value;
   6.156 +        this.r = new String(value, 0, count);
   6.157      }
   6.158  
   6.159      /**
   6.160 @@ -578,9 +559,7 @@
   6.161          for (int i = 0; i < length; i++) {
   6.162              v[i] = (char)bytes[offset++];
   6.163          }
   6.164 -        this.offset = 0;
   6.165 -        this.count = v.length;
   6.166 -        this.value = v;
   6.167 +        this.r = new String(v, 0, v.length);
   6.168      }
   6.169  
   6.170      /**
   6.171 @@ -613,10 +592,7 @@
   6.172       *         A {@code StringBuffer}
   6.173       */
   6.174      public String(StringBuffer buffer) {
   6.175 -        String result = buffer.toString();
   6.176 -        this.value = result.value;
   6.177 -        this.count = result.count;
   6.178 -        this.offset = result.offset;
   6.179 +        this.r = buffer.toString();
   6.180      }
   6.181  
   6.182      /**
   6.183 @@ -635,10 +611,7 @@
   6.184       * @since  1.5
   6.185       */
   6.186      public String(StringBuilder builder) {
   6.187 -        String result = builder.toString();
   6.188 -        this.value = result.value;
   6.189 -        this.count = result.count;
   6.190 -        this.offset = result.offset;
   6.191 +        this.r = builder.toString();
   6.192      }
   6.193  
   6.194      /**
   6.195 @@ -649,8 +622,9 @@
   6.196       * @return  the length of the sequence of characters represented by this
   6.197       *          object.
   6.198       */
   6.199 +    @JavaScriptBody(args = "self", body = "return self.toString().length;")
   6.200      public int length() {
   6.201 -        return count;
   6.202 +        throw new UnsupportedOperationException();
   6.203      }
   6.204  
   6.205      /**
   6.206 @@ -661,8 +635,9 @@
   6.207       *
   6.208       * @since 1.6
   6.209       */
   6.210 +    @JavaScriptBody(args = "self", body="return self.toString().length === 0;")
   6.211      public boolean isEmpty() {
   6.212 -        return count == 0;
   6.213 +        return length() == 0;
   6.214      }
   6.215  
   6.216      /**
   6.217 @@ -683,11 +658,11 @@
   6.218       *             argument is negative or not less than the length of this
   6.219       *             string.
   6.220       */
   6.221 +    @JavaScriptBody(args = { "self", "index" }, 
   6.222 +        body = "return self.toString().charCodeAt(index);"
   6.223 +    )
   6.224      public char charAt(int index) {
   6.225 -        if ((index < 0) || (index >= count)) {
   6.226 -            throw new StringIndexOutOfBoundsException(index);
   6.227 -        }
   6.228 -        return value[index + offset];
   6.229 +        throw new UnsupportedOperationException();
   6.230      }
   6.231  
   6.232      /**
   6.233 @@ -713,10 +688,10 @@
   6.234       * @since      1.5
   6.235       */
   6.236      public int codePointAt(int index) {
   6.237 -        if ((index < 0) || (index >= count)) {
   6.238 +        if ((index < 0) || (index >= length())) {
   6.239              throw new StringIndexOutOfBoundsException(index);
   6.240          }
   6.241 -        return Character.codePointAtImpl(value, offset + index, offset + count);
   6.242 +        return Character.codePointAtImpl(toCharArray(), offset() + index, offset() + length());
   6.243      }
   6.244  
   6.245      /**
   6.246 @@ -743,10 +718,10 @@
   6.247       */
   6.248      public int codePointBefore(int index) {
   6.249          int i = index - 1;
   6.250 -        if ((i < 0) || (i >= count)) {
   6.251 +        if ((i < 0) || (i >= length())) {
   6.252              throw new StringIndexOutOfBoundsException(index);
   6.253          }
   6.254 -        return Character.codePointBeforeImpl(value, offset + index, offset);
   6.255 +        return Character.codePointBeforeImpl(toCharArray(), offset() + index, offset());
   6.256      }
   6.257  
   6.258      /**
   6.259 @@ -771,10 +746,10 @@
   6.260       * @since  1.5
   6.261       */
   6.262      public int codePointCount(int beginIndex, int endIndex) {
   6.263 -        if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) {
   6.264 +        if (beginIndex < 0 || endIndex > length() || beginIndex > endIndex) {
   6.265              throw new IndexOutOfBoundsException();
   6.266          }
   6.267 -        return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex);
   6.268 +        return Character.codePointCountImpl(toCharArray(), offset()+beginIndex, endIndex-beginIndex);
   6.269      }
   6.270  
   6.271      /**
   6.272 @@ -798,19 +773,25 @@
   6.273       * @since 1.5
   6.274       */
   6.275      public int offsetByCodePoints(int index, int codePointOffset) {
   6.276 -        if (index < 0 || index > count) {
   6.277 +        if (index < 0 || index > length()) {
   6.278              throw new IndexOutOfBoundsException();
   6.279          }
   6.280 -        return Character.offsetByCodePointsImpl(value, offset, count,
   6.281 -                                                offset+index, codePointOffset) - offset;
   6.282 +        return Character.offsetByCodePointsImpl(toCharArray(), offset(), length(),
   6.283 +                                                offset()+index, codePointOffset) - offset();
   6.284      }
   6.285  
   6.286      /**
   6.287       * Copy characters from this string into dst starting at dstBegin.
   6.288       * This method doesn't perform any range checking.
   6.289       */
   6.290 +    @JavaScriptBody(args = { "self", "arr", "to" }, body = 
   6.291 +        "var s = self.toString();\n" +
   6.292 +        "for (var i = 0; i < s.length; i++) {\n" +
   6.293 +        "   arr[to++] = s[i];\n" +
   6.294 +        "}"
   6.295 +    )
   6.296      void getChars(char dst[], int dstBegin) {
   6.297 -        AbstractStringBuilder.arraycopy(value, offset, dst, dstBegin, count);
   6.298 +        AbstractStringBuilder.arraycopy(toCharArray(), offset(), dst, dstBegin, length());
   6.299      }
   6.300  
   6.301      /**
   6.302 @@ -843,17 +824,23 @@
   6.303       *            <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
   6.304       *                <code>dst.length</code></ul>
   6.305       */
   6.306 +    @JavaScriptBody(args = { "self", "beg", "end", "arr", "dst" }, body=
   6.307 +        "var s = self.toString();\n" +
   6.308 +        "while (beg < end) {\n" +
   6.309 +        "  arr[dst++] = s[beg++];\n" +
   6.310 +        "}\n"
   6.311 +    )
   6.312      public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
   6.313          if (srcBegin < 0) {
   6.314              throw new StringIndexOutOfBoundsException(srcBegin);
   6.315          }
   6.316 -        if (srcEnd > count) {
   6.317 +        if (srcEnd > length()) {
   6.318              throw new StringIndexOutOfBoundsException(srcEnd);
   6.319          }
   6.320          if (srcBegin > srcEnd) {
   6.321              throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
   6.322          }
   6.323 -        AbstractStringBuilder.arraycopy(value, offset + srcBegin, dst, dstBegin,
   6.324 +        AbstractStringBuilder.arraycopy(toCharArray(), offset() + srcBegin, dst, dstBegin,
   6.325               srcEnd - srcBegin);
   6.326      }
   6.327  
   6.328 @@ -905,16 +892,16 @@
   6.329          if (srcBegin < 0) {
   6.330              throw new StringIndexOutOfBoundsException(srcBegin);
   6.331          }
   6.332 -        if (srcEnd > count) {
   6.333 +        if (srcEnd > length()) {
   6.334              throw new StringIndexOutOfBoundsException(srcEnd);
   6.335          }
   6.336          if (srcBegin > srcEnd) {
   6.337              throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
   6.338          }
   6.339          int j = dstBegin;
   6.340 -        int n = offset + srcEnd;
   6.341 -        int i = offset + srcBegin;
   6.342 -        char[] val = value;   /* avoid getfield opcode */
   6.343 +        int n = offset() + srcEnd;
   6.344 +        int i = offset() + srcBegin;
   6.345 +        char[] val = toCharArray();   /* avoid getfield opcode */
   6.346  
   6.347          while (i < n) {
   6.348              dst[j++] = (byte)val[i++];
   6.349 @@ -1010,18 +997,22 @@
   6.350       * @see  #compareTo(String)
   6.351       * @see  #equalsIgnoreCase(String)
   6.352       */
   6.353 +    @JavaScriptBody(args = { "self", "obj" }, body = 
   6.354 +        "return obj.$instOf_java_lang_String && "
   6.355 +        + "self.toString() === obj.toString();"
   6.356 +    )
   6.357      public boolean equals(Object anObject) {
   6.358          if (this == anObject) {
   6.359              return true;
   6.360          }
   6.361          if (anObject instanceof String) {
   6.362              String anotherString = (String)anObject;
   6.363 -            int n = count;
   6.364 -            if (n == anotherString.count) {
   6.365 -                char v1[] = value;
   6.366 -                char v2[] = anotherString.value;
   6.367 -                int i = offset;
   6.368 -                int j = anotherString.offset;
   6.369 +            int n = length();
   6.370 +            if (n == anotherString.length()) {
   6.371 +                char v1[] = toCharArray();
   6.372 +                char v2[] = anotherString.toCharArray();
   6.373 +                int i = offset();
   6.374 +                int j = anotherString.offset();
   6.375                  while (n-- != 0) {
   6.376                      if (v1[i++] != v2[j++])
   6.377                          return false;
   6.378 @@ -1067,15 +1058,15 @@
   6.379       * @since  1.5
   6.380       */
   6.381      public boolean contentEquals(CharSequence cs) {
   6.382 -        if (count != cs.length())
   6.383 +        if (length() != cs.length())
   6.384              return false;
   6.385          // Argument is a StringBuffer, StringBuilder
   6.386          if (cs instanceof AbstractStringBuilder) {
   6.387 -            char v1[] = value;
   6.388 +            char v1[] = toCharArray();
   6.389              char v2[] = ((AbstractStringBuilder)cs).getValue();
   6.390 -            int i = offset;
   6.391 +            int i = offset();
   6.392              int j = 0;
   6.393 -            int n = count;
   6.394 +            int n = length();
   6.395              while (n-- != 0) {
   6.396                  if (v1[i++] != v2[j++])
   6.397                      return false;
   6.398 @@ -1086,10 +1077,10 @@
   6.399          if (cs.equals(this))
   6.400              return true;
   6.401          // Argument is a generic CharSequence
   6.402 -        char v1[] = value;
   6.403 -        int i = offset;
   6.404 +        char v1[] = toCharArray();
   6.405 +        int i = offset();
   6.406          int j = 0;
   6.407 -        int n = count;
   6.408 +        int n = length();
   6.409          while (n-- != 0) {
   6.410              if (v1[i++] != cs.charAt(j++))
   6.411                  return false;
   6.412 @@ -1127,8 +1118,8 @@
   6.413       */
   6.414      public boolean equalsIgnoreCase(String anotherString) {
   6.415          return (this == anotherString) ? true :
   6.416 -               (anotherString != null) && (anotherString.count == count) &&
   6.417 -               regionMatches(true, 0, anotherString, 0, count);
   6.418 +               (anotherString != null) && (anotherString.length() == length()) &&
   6.419 +               regionMatches(true, 0, anotherString, 0, length());
   6.420      }
   6.421  
   6.422      /**
   6.423 @@ -1173,13 +1164,13 @@
   6.424       *          lexicographically greater than the string argument.
   6.425       */
   6.426      public int compareTo(String anotherString) {
   6.427 -        int len1 = count;
   6.428 -        int len2 = anotherString.count;
   6.429 +        int len1 = length();
   6.430 +        int len2 = anotherString.length();
   6.431          int n = Math.min(len1, len2);
   6.432 -        char v1[] = value;
   6.433 -        char v2[] = anotherString.value;
   6.434 -        int i = offset;
   6.435 -        int j = anotherString.offset;
   6.436 +        char v1[] = toCharArray();
   6.437 +        char v2[] = anotherString.toCharArray();
   6.438 +        int i = offset();
   6.439 +        int j = anotherString.offset();
   6.440  
   6.441          if (i == j) {
   6.442              int k = i;
   6.443 @@ -1218,6 +1209,11 @@
   6.444       */
   6.445      public static final Comparator<String> CASE_INSENSITIVE_ORDER
   6.446                                           = new CaseInsensitiveComparator();
   6.447 +
   6.448 +    private static int offset() {
   6.449 +        return 0;
   6.450 +    }
   6.451 +    
   6.452      private static class CaseInsensitiveComparator
   6.453                           implements Comparator<String>, java.io.Serializable {
   6.454          // use serialVersionUID from JDK 1.2.2 for interoperability
   6.455 @@ -1304,13 +1300,13 @@
   6.456       */
   6.457      public boolean regionMatches(int toffset, String other, int ooffset,
   6.458                                   int len) {
   6.459 -        char ta[] = value;
   6.460 -        int to = offset + toffset;
   6.461 -        char pa[] = other.value;
   6.462 -        int po = other.offset + ooffset;
   6.463 +        char ta[] = toCharArray();
   6.464 +        int to = offset() + toffset;
   6.465 +        char pa[] = other.toCharArray();
   6.466 +        int po = other.offset() + ooffset;
   6.467          // Note: toffset, ooffset, or len might be near -1>>>1.
   6.468 -        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len)
   6.469 -            || (ooffset > (long)other.count - len)) {
   6.470 +        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len)
   6.471 +            || (ooffset > (long)other.length() - len)) {
   6.472              return false;
   6.473          }
   6.474          while (len-- > 0) {
   6.475 @@ -1373,13 +1369,13 @@
   6.476       */
   6.477      public boolean regionMatches(boolean ignoreCase, int toffset,
   6.478                             String other, int ooffset, int len) {
   6.479 -        char ta[] = value;
   6.480 -        int to = offset + toffset;
   6.481 -        char pa[] = other.value;
   6.482 -        int po = other.offset + ooffset;
   6.483 +        char ta[] = toCharArray();
   6.484 +        int to = offset() + toffset;
   6.485 +        char pa[] = other.toCharArray();
   6.486 +        int po = other.offset() + ooffset;
   6.487          // Note: toffset, ooffset, or len might be near -1>>>1.
   6.488 -        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) ||
   6.489 -                (ooffset > (long)other.count - len)) {
   6.490 +        if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len) ||
   6.491 +                (ooffset > (long)other.length() - len)) {
   6.492              return false;
   6.493          }
   6.494          while (len-- > 0) {
   6.495 @@ -1428,14 +1424,18 @@
   6.496       *          this.substring(toffset).startsWith(prefix)
   6.497       *          </pre>
   6.498       */
   6.499 +    @JavaScriptBody(args = { "self", "find", "from" }, body=
   6.500 +        "find = find.toString();\n" +
   6.501 +        "return self.toString().substring(from, find.length) === find;\n"
   6.502 +    )
   6.503      public boolean startsWith(String prefix, int toffset) {
   6.504 -        char ta[] = value;
   6.505 -        int to = offset + toffset;
   6.506 -        char pa[] = prefix.value;
   6.507 -        int po = prefix.offset;
   6.508 -        int pc = prefix.count;
   6.509 +        char ta[] = toCharArray();
   6.510 +        int to = offset() + toffset;
   6.511 +        char pa[] = prefix.toCharArray();
   6.512 +        int po = prefix.offset();
   6.513 +        int pc = prefix.length();
   6.514          // Note: toffset might be near -1>>>1.
   6.515 -        if ((toffset < 0) || (toffset > count - pc)) {
   6.516 +        if ((toffset < 0) || (toffset > length() - pc)) {
   6.517              return false;
   6.518          }
   6.519          while (--pc >= 0) {
   6.520 @@ -1475,7 +1475,7 @@
   6.521       *          as determined by the {@link #equals(Object)} method.
   6.522       */
   6.523      public boolean endsWith(String suffix) {
   6.524 -        return startsWith(suffix, count - suffix.count);
   6.525 +        return startsWith(suffix, length() - suffix.length());
   6.526      }
   6.527  
   6.528      /**
   6.529 @@ -1491,12 +1491,21 @@
   6.530       *
   6.531       * @return  a hash code value for this object.
   6.532       */
   6.533 +    @JavaScriptBody(args = "self", body = 
   6.534 +        "var h = 0;\n" +
   6.535 +        "var s = self.toString();\n" +
   6.536 +        "for (var i = 0; i < s.length; i++) {\n" +
   6.537 +        "  var high = (h >> 16) & 0xffff, low = h & 0xffff;\n" +
   6.538 +        "  h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff;\n" +
   6.539 +        "}\n" +
   6.540 +        "return h;\n"
   6.541 +    )
   6.542      public int hashCode() {
   6.543          int h = hash;
   6.544 -        if (h == 0 && count > 0) {
   6.545 -            int off = offset;
   6.546 -            char val[] = value;
   6.547 -            int len = count;
   6.548 +        if (h == 0 && length() > 0) {
   6.549 +            int off = offset();
   6.550 +            char val[] = toCharArray();
   6.551 +            int len = length();
   6.552  
   6.553              for (int i = 0; i < len; i++) {
   6.554                  h = 31*h + val[off++];
   6.555 @@ -1573,10 +1582,14 @@
   6.556       *          than or equal to <code>fromIndex</code>, or <code>-1</code>
   6.557       *          if the character does not occur.
   6.558       */
   6.559 +    @JavaScriptBody(args = { "self", "ch", "from" }, body = 
   6.560 +        "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" +
   6.561 +        "return self.toString().indexOf(ch, from);\n"
   6.562 +    )
   6.563      public int indexOf(int ch, int fromIndex) {
   6.564          if (fromIndex < 0) {
   6.565              fromIndex = 0;
   6.566 -        } else if (fromIndex >= count) {
   6.567 +        } else if (fromIndex >= length()) {
   6.568              // Note: fromIndex might be near -1>>>1.
   6.569              return -1;
   6.570          }
   6.571 @@ -1584,9 +1597,9 @@
   6.572          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
   6.573              // handle most cases here (ch is a BMP code point or a
   6.574              // negative value (invalid code point))
   6.575 -            final char[] value = this.value;
   6.576 -            final int offset = this.offset;
   6.577 -            final int max = offset + count;
   6.578 +            final char[] value = this.toCharArray();
   6.579 +            final int offset = this.offset();
   6.580 +            final int max = offset + length();
   6.581              for (int i = offset + fromIndex; i < max ; i++) {
   6.582                  if (value[i] == ch) {
   6.583                      return i - offset;
   6.584 @@ -1603,11 +1616,11 @@
   6.585       */
   6.586      private int indexOfSupplementary(int ch, int fromIndex) {
   6.587          if (Character.isValidCodePoint(ch)) {
   6.588 -            final char[] value = this.value;
   6.589 -            final int offset = this.offset;
   6.590 +            final char[] value = this.toCharArray();
   6.591 +            final int offset = this.offset();
   6.592              final char hi = Character.highSurrogate(ch);
   6.593              final char lo = Character.lowSurrogate(ch);
   6.594 -            final int max = offset + count - 1;
   6.595 +            final int max = offset + length() - 1;
   6.596              for (int i = offset + fromIndex; i < max; i++) {
   6.597                  if (value[i] == hi && value[i+1] == lo) {
   6.598                      return i - offset;
   6.599 @@ -1641,7 +1654,7 @@
   6.600       *          <code>-1</code> if the character does not occur.
   6.601       */
   6.602      public int lastIndexOf(int ch) {
   6.603 -        return lastIndexOf(ch, count - 1);
   6.604 +        return lastIndexOf(ch, length() - 1);
   6.605      }
   6.606  
   6.607      /**
   6.608 @@ -1678,13 +1691,17 @@
   6.609       *          than or equal to <code>fromIndex</code>, or <code>-1</code>
   6.610       *          if the character does not occur before that point.
   6.611       */
   6.612 +    @JavaScriptBody(args = { "self", "ch", "from" }, body = 
   6.613 +        "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" +
   6.614 +        "return self.toString().lastIndexOf(ch, from);"
   6.615 +    )
   6.616      public int lastIndexOf(int ch, int fromIndex) {
   6.617          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
   6.618              // handle most cases here (ch is a BMP code point or a
   6.619              // negative value (invalid code point))
   6.620 -            final char[] value = this.value;
   6.621 -            final int offset = this.offset;
   6.622 -            int i = offset + Math.min(fromIndex, count - 1);
   6.623 +            final char[] value = this.toCharArray();
   6.624 +            final int offset = this.offset();
   6.625 +            int i = offset + Math.min(fromIndex, length() - 1);
   6.626              for (; i >= offset ; i--) {
   6.627                  if (value[i] == ch) {
   6.628                      return i - offset;
   6.629 @@ -1701,11 +1718,11 @@
   6.630       */
   6.631      private int lastIndexOfSupplementary(int ch, int fromIndex) {
   6.632          if (Character.isValidCodePoint(ch)) {
   6.633 -            final char[] value = this.value;
   6.634 -            final int offset = this.offset;
   6.635 +            final char[] value = this.toCharArray();
   6.636 +            final int offset = this.offset();
   6.637              char hi = Character.highSurrogate(ch);
   6.638              char lo = Character.lowSurrogate(ch);
   6.639 -            int i = offset + Math.min(fromIndex, count - 2);
   6.640 +            int i = offset + Math.min(fromIndex, length() - 2);
   6.641              for (; i >= offset; i--) {
   6.642                  if (value[i] == hi && value[i+1] == lo) {
   6.643                      return i - offset;
   6.644 @@ -1749,9 +1766,11 @@
   6.645       *          starting at the specified index,
   6.646       *          or {@code -1} if there is no such occurrence.
   6.647       */
   6.648 +    @JavaScriptBody(args = { "self", "str", "fromIndex" }, body =
   6.649 +        "return self.toString().indexOf(str.toString(), fromIndex) >= 0;"
   6.650 +    )
   6.651      public int indexOf(String str, int fromIndex) {
   6.652 -        return indexOf(value, offset, count,
   6.653 -                       str.value, str.offset, str.count, fromIndex);
   6.654 +        return indexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex);
   6.655      }
   6.656  
   6.657      /**
   6.658 @@ -1821,7 +1840,7 @@
   6.659       *          or {@code -1} if there is no such occurrence.
   6.660       */
   6.661      public int lastIndexOf(String str) {
   6.662 -        return lastIndexOf(str, count);
   6.663 +        return lastIndexOf(str, length());
   6.664      }
   6.665  
   6.666      /**
   6.667 @@ -1840,9 +1859,11 @@
   6.668       *          searching backward from the specified index,
   6.669       *          or {@code -1} if there is no such occurrence.
   6.670       */
   6.671 +    @JavaScriptBody(args = { "self", "s", "from" }, body = 
   6.672 +        "return self.toString().lastIndexOf(s.toString(), from);"
   6.673 +    )
   6.674      public int lastIndexOf(String str, int fromIndex) {
   6.675 -        return lastIndexOf(value, offset, count,
   6.676 -                           str.value, str.offset, str.count, fromIndex);
   6.677 +        return lastIndexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex);
   6.678      }
   6.679  
   6.680      /**
   6.681 @@ -1922,7 +1943,7 @@
   6.682       *             length of this <code>String</code> object.
   6.683       */
   6.684      public String substring(int beginIndex) {
   6.685 -        return substring(beginIndex, count);
   6.686 +        return substring(beginIndex, length());
   6.687      }
   6.688  
   6.689      /**
   6.690 @@ -1947,18 +1968,21 @@
   6.691       *             <code>beginIndex</code> is larger than
   6.692       *             <code>endIndex</code>.
   6.693       */
   6.694 +    @JavaScriptBody(args = { "self", "beginIndex", "endIndex" }, body = 
   6.695 +        "return self.toString().substring(beginIndex, endIndex);"
   6.696 +    )
   6.697      public String substring(int beginIndex, int endIndex) {
   6.698          if (beginIndex < 0) {
   6.699              throw new StringIndexOutOfBoundsException(beginIndex);
   6.700          }
   6.701 -        if (endIndex > count) {
   6.702 +        if (endIndex > length()) {
   6.703              throw new StringIndexOutOfBoundsException(endIndex);
   6.704          }
   6.705          if (beginIndex > endIndex) {
   6.706              throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
   6.707          }
   6.708 -        return ((beginIndex == 0) && (endIndex == count)) ? this :
   6.709 -            new String(value, offset + beginIndex, endIndex - beginIndex);
   6.710 +        return ((beginIndex == 0) && (endIndex == length())) ? this :
   6.711 +            new String(toCharArray(), offset() + beginIndex, endIndex - beginIndex);
   6.712      }
   6.713  
   6.714      /**
   6.715 @@ -2018,10 +2042,10 @@
   6.716          if (otherLen == 0) {
   6.717              return this;
   6.718          }
   6.719 -        char buf[] = new char[count + otherLen];
   6.720 -        getChars(0, count, buf, 0);
   6.721 -        str.getChars(0, otherLen, buf, count);
   6.722 -        return new String(buf, 0, count + otherLen);
   6.723 +        char buf[] = new char[length() + otherLen];
   6.724 +        getChars(0, length(), buf, 0);
   6.725 +        str.getChars(0, otherLen, buf, length());
   6.726 +        return new String(buf, 0, length() + otherLen);
   6.727      }
   6.728  
   6.729      /**
   6.730 @@ -2053,12 +2077,24 @@
   6.731       * @return  a string derived from this string by replacing every
   6.732       *          occurrence of <code>oldChar</code> with <code>newChar</code>.
   6.733       */
   6.734 +    @JavaScriptBody(args = { "self", "arg1", "arg2" }, body =
   6.735 +        "if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);\n" +
   6.736 +        "if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);\n" +
   6.737 +        "var s = self.toString();\n" +
   6.738 +        "for (;;) {\n" +
   6.739 +        "  var ret = s.replace(arg1, arg2);\n" +
   6.740 +        "  if (ret === s) {\n" +
   6.741 +        "    return ret;\n" +
   6.742 +        "  }\n" +
   6.743 +        "  s = ret;\n" +
   6.744 +        "}"
   6.745 +    )
   6.746      public String replace(char oldChar, char newChar) {
   6.747          if (oldChar != newChar) {
   6.748 -            int len = count;
   6.749 +            int len = length();
   6.750              int i = -1;
   6.751 -            char[] val = value; /* avoid getfield opcode */
   6.752 -            int off = offset;   /* avoid getfield opcode */
   6.753 +            char[] val = toCharArray(); /* avoid getfield opcode */
   6.754 +            int off = offset();   /* avoid getfield opcode */
   6.755  
   6.756              while (++i < len) {
   6.757                  if (val[off + i] == oldChar) {
   6.758 @@ -2720,10 +2756,10 @@
   6.759       *          trailing white space.
   6.760       */
   6.761      public String trim() {
   6.762 -        int len = count;
   6.763 +        int len = length();
   6.764          int st = 0;
   6.765 -        int off = offset;      /* avoid getfield opcode */
   6.766 -        char[] val = value;    /* avoid getfield opcode */
   6.767 +        int off = offset();      /* avoid getfield opcode */
   6.768 +        char[] val = toCharArray();    /* avoid getfield opcode */
   6.769  
   6.770          while ((st < len) && (val[off + st] <= ' ')) {
   6.771              st++;
   6.772 @@ -2731,7 +2767,7 @@
   6.773          while ((st < len) && (val[off + len - 1] <= ' ')) {
   6.774              len--;
   6.775          }
   6.776 -        return ((st > 0) || (len < count)) ? substring(st, len) : this;
   6.777 +        return ((st > 0) || (len < length())) ? substring(st, len) : this;
   6.778      }
   6.779  
   6.780      /**
   6.781 @@ -2739,6 +2775,7 @@
   6.782       *
   6.783       * @return  the string itself.
   6.784       */
   6.785 +    @JavaScriptBody(args = "self", body = "return self.toString();")
   6.786      public String toString() {
   6.787          return this;
   6.788      }
   6.789 @@ -2750,9 +2787,10 @@
   6.790       *          of this string and whose contents are initialized to contain
   6.791       *          the character sequence represented by this string.
   6.792       */
   6.793 +    @JavaScriptBody(args = "self", body = "return self.toString().split('');")
   6.794      public char[] toCharArray() {
   6.795 -        char result[] = new char[count];
   6.796 -        getChars(0, count, result, 0);
   6.797 +        char result[] = new char[length()];
   6.798 +        getChars(0, length(), result, 0);
   6.799          return result;
   6.800      }
   6.801  
     7.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js	Mon Dec 03 22:13:50 2012 +0100
     7.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js	Tue Dec 04 11:21:10 2012 +0100
     7.3 @@ -1,2213 +1,2 @@
     7.4 -/**
     7.5 - * Back 2 Browser Bytecode Translator
     7.6 - * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     7.7 - *
     7.8 - * This program is free software: you can redistribute it and/or modify
     7.9 - * it under the terms of the GNU General Public License as published by
    7.10 - * the Free Software Foundation, version 2 of the License.
    7.11 - *
    7.12 - * This program is distributed in the hope that it will be useful,
    7.13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    7.14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    7.15 - * GNU General Public License for more details.
    7.16 - *
    7.17 - * You should have received a copy of the GNU General Public License
    7.18 - * along with this program. Look for COPYING file in the top folder.
    7.19 - * If not, see http://opensource.org/licenses/GPL-2.0.
    7.20 - */
    7.21 -
    7.22 -
    7.23 -function java_lang_String_consVAC(self,charArr) {
    7.24 -    for (var i = 0; i < charArr.length; i++) {
    7.25 -        if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);
    7.26 -    }
    7.27 -    self.r = charArr.join("");
    7.28 -}
    7.29 -
    7.30 -function java_lang_String_consVACII(self, charArr, off, cnt) {
    7.31 -    var up = off + cnt;
    7.32 -    for (var i = off; i < up; i++) {
    7.33 -        if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);
    7.34 -    }
    7.35 -    self.r = charArr.slice(off, up).join("");
    7.36 -}
    7.37 -
    7.38 -function java_lang_String_charAtCI(arg0,arg1) {
    7.39 -    return arg0.toString().charCodeAt(arg1);
    7.40 -}
    7.41 -function java_lang_String_lengthI(arg0) {
    7.42 -    return arg0.toString().length;
    7.43 -}
    7.44 -function java_lang_String_isEmptyZ(arg0) {
    7.45 -    return arg0.toString().length === 0;
    7.46 -}
    7.47 -function java_lang_String_valueOfLjava_lang_StringI(n) {
    7.48 -    return n.toString();
    7.49 -}
    7.50 -
    7.51 -function java_lang_String_startsWithZLjava_lang_StringI(self,find,from) {
    7.52 -    find = find.toString();
    7.53 -    return self.toString().substring(from, find.length) === find;
    7.54 -}
    7.55 -function java_lang_String_startsWithZLjava_lang_String(self,find) {
    7.56 -    find = find.toString();
    7.57 -    return self.toString().substring(0, find.length) === find;
    7.58 -}
    7.59 -function java_lang_String_endsWithZLjava_lang_String(self,find) {
    7.60 -    self = self.toString();
    7.61 -    find = find.toString();
    7.62 -    if (find.length > self.length) {
    7.63 -        return false;
    7.64 -    }
    7.65 -    return self.substring(self.length - find.length) === find;
    7.66 -}
    7.67 -
    7.68 -function java_lang_String_indexOfII(arg0,ch) {
    7.69 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    7.70 -    return arg0.toString().indexOf(ch);
    7.71 -}
    7.72 -function java_lang_String_indexOfIII(arg0,ch,from) {
    7.73 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    7.74 -    return arg0.toString().indexOf(ch, from);
    7.75 -}
    7.76 -
    7.77 -function java_lang_String_lastIndexOfII(arg0,ch) {
    7.78 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    7.79 -    return arg0.toString().lastIndexOf(ch);
    7.80 -}
    7.81 -function java_lang_String_lastIndexOfIII(arg0,ch,from) {
    7.82 -    if (typeof ch === 'number') ch = String.fromCharCode(ch);
    7.83 -    return arg0.toString().lastIndexOf(ch, from);
    7.84 -}
    7.85 -function java_lang_String_lastIndexOfILjava_lang_String(arg0,s) {
    7.86 -    return arg0.toString().lastIndexOf(s.toString());
    7.87 -}
    7.88 -function java_lang_String_lastIndexOfILjava_lang_StringI(arg0,s,from) {
    7.89 -    return arg0.toString().lastIndexOf(s.toString(), from);
    7.90 -}
    7.91 -
    7.92 -
    7.93 -function java_lang_String_getCharsVACI(self, arr, to) {
    7.94 -    var s = self.toString();
    7.95 -    for (var i = 0; i < s.length; i++) {
    7.96 -        arr[to++] = s[i];
    7.97 -    }
    7.98 -}
    7.99 -
   7.100 -/*
   7.101 -function java_lang_String_codePointAtII(arg0,arg1) {
   7.102 -  var arg2;
   7.103 -;
   7.104 -  var stack = new Array(4);
   7.105 -  var gt = 0;
   7.106 -  for(;;) switch(gt) {
   7.107 -    case 0: stack.push(arg1); // 27
   7.108 -    case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11
   7.109 -    case 4: stack.push(arg1); // 27
   7.110 -    case 5: stack.push(arg0); // 42
   7.111 -    case 6: stack.push(stack.pop().count); // 180 1 97
   7.112 -    case 9: if (stack.pop() > stack.pop()) { gt = 21; continue; } // 161 0 12
   7.113 -    case 12: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   7.114 -    case 15: stack.push(stack[stack.length - 1]); // 89
   7.115 -    case 16: stack.push(arg1); // 27
   7.116 -    case 17: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   7.117 -    case 20:  // 191
   7.118 -    case 21: stack.push(arg0); // 42
   7.119 -    case 22: stack.push(stack.pop().value); // 180 1 100
   7.120 -    case 25: stack.push(arg0); // 42
   7.121 -    case 26: stack.push(stack.pop().offset); // 180 1 99
   7.122 -    case 29: stack.push(arg1); // 27
   7.123 -    case 30: stack.push(stack.pop() + stack.pop()); // 96
   7.124 -    case 31: stack.push(arg0); // 42
   7.125 -    case 32: stack.push(stack.pop().offset); // 180 1 99
   7.126 -    case 35: stack.push(arg0); // 42
   7.127 -    case 36: stack.push(stack.pop().count); // 180 1 97
   7.128 -    case 39: stack.push(stack.pop() + stack.pop()); // 96
   7.129 -    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
   7.130 -    case 43: return stack.pop(); // 172
   7.131 -  }
   7.132 -}
   7.133 -function java_lang_String_codePointBeforeII(arg0,arg1) {
   7.134 -  var arg2;
   7.135 -  var arg3;
   7.136 -;
   7.137 -  var stack = new Array(3);
   7.138 -  var gt = 0;
   7.139 -  for(;;) switch(gt) {
   7.140 -    case 0: stack.push(arg1); // 27
   7.141 -    case 1: stack.push(1); // 4
   7.142 -    case 2: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.143 -    case 3: arg2 = stack.pop(); // 61
   7.144 -    case 4: stack.push(arg2); // 28
   7.145 -    case 5: if (stack.pop() < 0) { gt = 16; continue; } // 155 0 11
   7.146 -    case 8: stack.push(arg2); // 28
   7.147 -    case 9: stack.push(arg0); // 42
   7.148 -    case 10: stack.push(stack.pop().count); // 180 1 97
   7.149 -    case 13: if (stack.pop() > stack.pop()) { gt = 25; continue; } // 161 0 12
   7.150 -    case 16: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   7.151 -    case 19: stack.push(stack[stack.length - 1]); // 89
   7.152 -    case 20: stack.push(arg1); // 27
   7.153 -    case 21: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   7.154 -    case 24:  // 191
   7.155 -    case 25: stack.push(arg0); // 42
   7.156 -    case 26: stack.push(stack.pop().value); // 180 1 100
   7.157 -    case 29: stack.push(arg0); // 42
   7.158 -    case 30: stack.push(stack.pop().offset); // 180 1 99
   7.159 -    case 33: stack.push(arg1); // 27
   7.160 -    case 34: stack.push(stack.pop() + stack.pop()); // 96
   7.161 -    case 35: stack.push(arg0); // 42
   7.162 -    case 36: stack.push(stack.pop().offset); // 180 1 99
   7.163 -    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
   7.164 -    case 42: return stack.pop(); // 172
   7.165 -  }
   7.166 -}
   7.167 -function java_lang_String_codePointCountIII(arg0,arg1,arg2) {
   7.168 -  var arg3;
   7.169 -;
   7.170 -  var stack = new Array(4);
   7.171 -  var gt = 0;
   7.172 -  for(;;) switch(gt) {
   7.173 -    case 0: stack.push(arg1); // 27
   7.174 -    case 1: if (stack.pop() < 0) { gt = 17; continue; } // 155 0 16
   7.175 -    case 4: stack.push(arg2); // 28
   7.176 -    case 5: stack.push(arg0); // 42
   7.177 -    case 6: stack.push(stack.pop().count); // 180 1 97
   7.178 -    case 9: if (stack.pop() < stack.pop()) { gt = 17; continue; } // 163 0 8
   7.179 -    case 12: stack.push(arg1); // 27
   7.180 -    case 13: stack.push(arg2); // 28
   7.181 -    case 14: if (stack.pop() >= stack.pop()) { gt = 25; continue; } // 164 0 11
   7.182 -    case 17: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194
   7.183 -    case 20: stack.push(stack[stack.length - 1]); // 89
   7.184 -    case 21: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124
   7.185 -    case 24:  // 191
   7.186 -    case 25: stack.push(arg0); // 42
   7.187 -    case 26: stack.push(stack.pop().value); // 180 1 100
   7.188 -    case 29: stack.push(arg0); // 42
   7.189 -    case 30: stack.push(stack.pop().offset); // 180 1 99
   7.190 -    case 33: stack.push(arg1); // 27
   7.191 -    case 34: stack.push(stack.pop() + stack.pop()); // 96
   7.192 -    case 35: stack.push(arg2); // 28
   7.193 -    case 36: stack.push(arg1); // 27
   7.194 -    case 37: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.195 -    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
   7.196 -    case 41: return stack.pop(); // 172
   7.197 -  }
   7.198 -}
   7.199 -function java_lang_String_offsetByCodePointsIII(arg0,arg1,arg2) {
   7.200 -  var arg3;
   7.201 -;
   7.202 -  var stack = new Array(5);
   7.203 -  var gt = 0;
   7.204 -  for(;;) switch(gt) {
   7.205 -    case 0: stack.push(arg1); // 27
   7.206 -    case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11
   7.207 -    case 4: stack.push(arg1); // 27
   7.208 -    case 5: stack.push(arg0); // 42
   7.209 -    case 6: stack.push(stack.pop().count); // 180 1 97
   7.210 -    case 9: if (stack.pop() >= stack.pop()) { gt = 20; continue; } // 164 0 11
   7.211 -    case 12: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194
   7.212 -    case 15: stack.push(stack[stack.length - 1]); // 89
   7.213 -    case 16: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124
   7.214 -    case 19:  // 191
   7.215 -    case 20: stack.push(arg0); // 42
   7.216 -    case 21: stack.push(stack.pop().value); // 180 1 100
   7.217 -    case 24: stack.push(arg0); // 42
   7.218 -    case 25: stack.push(stack.pop().offset); // 180 1 99
   7.219 -    case 28: stack.push(arg0); // 42
   7.220 -    case 29: stack.push(stack.pop().count); // 180 1 97
   7.221 -    case 32: stack.push(arg0); // 42
   7.222 -    case 33: stack.push(stack.pop().offset); // 180 1 99
   7.223 -    case 36: stack.push(arg1); // 27
   7.224 -    case 37: stack.push(stack.pop() + stack.pop()); // 96
   7.225 -    case 38: stack.push(arg2); // 28
   7.226 -    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
   7.227 -    case 42: stack.push(arg0); // 42
   7.228 -    case 43: stack.push(stack.pop().offset); // 180 1 99
   7.229 -    case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.230 -    case 47: return stack.pop(); // 172
   7.231 -  }
   7.232 -}
   7.233 -*/
   7.234 -
   7.235 -// public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
   7.236 -function java_lang_String_getCharsVIIACAI(arg0,arg1,arg2,arg3,arg4) {
   7.237 -    var s = arg0.toString();
   7.238 -    while (arg1 < arg2) {
   7.239 -        arg3[arg4++] = s[arg1++];
   7.240 -    }
   7.241 -}
   7.242 -
   7.243 -/*
   7.244 -function java_lang_String_getBytesVIIABI(arg0,arg1,arg2,arg3,arg4) {
   7.245 -  var arg5;
   7.246 -  var arg6;
   7.247 -  var arg7;
   7.248 -  var arg8;
   7.249 -  var arg9;
   7.250 -;
   7.251 -  var stack = new Array(4);
   7.252 -  var gt = 0;
   7.253 -  for(;;) switch(gt) {
   7.254 -    case 0: stack.push(arg1); // 27
   7.255 -    case 1: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 12
   7.256 -    case 4: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   7.257 -    case 7: stack.push(stack[stack.length - 1]); // 89
   7.258 -    case 8: stack.push(arg1); // 27
   7.259 -    case 9: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   7.260 -    case 12:  // 191
   7.261 -    case 13: stack.push(arg2); // 28
   7.262 -    case 14: stack.push(arg0); // 42
   7.263 -    case 15: stack.push(stack.pop().count); // 180 1 97
   7.264 -    case 18: if (stack.pop() >= stack.pop()) { gt = 30; continue; } // 164 0 12
   7.265 -    case 21: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   7.266 -    case 24: stack.push(stack[stack.length - 1]); // 89
   7.267 -    case 25: stack.push(arg2); // 28
   7.268 -    case 26: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   7.269 -    case 29:  // 191
   7.270 -    case 30: stack.push(arg1); // 27
   7.271 -    case 31: stack.push(arg2); // 28
   7.272 -    case 32: if (stack.pop() >= stack.pop()) { gt = 46; continue; } // 164 0 14
   7.273 -    case 35: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206
   7.274 -    case 38: stack.push(stack[stack.length - 1]); // 89
   7.275 -    case 39: stack.push(arg2); // 28
   7.276 -    case 40: stack.push(arg1); // 27
   7.277 -    case 41: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.278 -    case 42: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169
   7.279 -    case 45:  // 191
   7.280 -    case 46: stack.push(arg4); // 21 4
   7.281 -    case 48: arg5 = stack.pop() // 54 5
   7.282 -    case 50: stack.push(arg0); // 42
   7.283 -    case 51: stack.push(stack.pop().offset); // 180 1 99
   7.284 -    case 54: stack.push(arg2); // 28
   7.285 -    case 55: stack.push(stack.pop() + stack.pop()); // 96
   7.286 -    case 56: arg6 = stack.pop() // 54 6
   7.287 -    case 58: stack.push(arg0); // 42
   7.288 -    case 59: stack.push(stack.pop().offset); // 180 1 99
   7.289 -    case 62: stack.push(arg1); // 27
   7.290 -    case 63: stack.push(stack.pop() + stack.pop()); // 96
   7.291 -    case 64: arg7 = stack.pop() // 54 7
   7.292 -    case 66: stack.push(arg0); // 42
   7.293 -    case 67: stack.push(stack.pop().value); // 180 1 100
   7.294 -    case 70: arg8 = stack.pop() // 58 8
   7.295 -    case 72: stack.push(arg7); // 21 7
   7.296 -    case 74: stack.push(arg6); // 21 6
   7.297 -    case 76: if (stack.pop() <= stack.pop()) { gt = 98; continue; } // 162 0 22
   7.298 -    case 79: stack.push(arg3); // 45
   7.299 -    case 80: stack.push(arg5); // 21 5
   7.300 -    case 82: arg5++; // 132 5 1
   7.301 -    case 85: stack.push(arg8); // 25 8
   7.302 -    case 87: stack.push(arg7); // 21 7
   7.303 -    case 89: arg7++; // 132 7 1
   7.304 -    case 92: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   7.305 -    case 93: // number conversion  // 145
   7.306 -    case 94: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 84
   7.307 -    case 95: gt = 72; continue; // 167 255 233
   7.308 -    case 98: return; // 177
   7.309 -  }
   7.310 -}
   7.311 -function java_lang_String_getBytesABLjava_lang_String(arg0,arg1) {
   7.312 -  var arg2;
   7.313 -;
   7.314 -  var stack = new Array(4);
   7.315 -  var gt = 0;
   7.316 -  for(;;) switch(gt) {
   7.317 -    case 0: stack.push(arg1); // 43
   7.318 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
   7.319 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
   7.320 -    case 7: stack.push(stack[stack.length - 1]); // 89
   7.321 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
   7.322 -    case 11:  // 191
   7.323 -    case 12: stack.push(arg1); // 43
   7.324 -    case 13: stack.push(arg0); // 42
   7.325 -    case 14: stack.push(stack.pop().value); // 180 1 100
   7.326 -    case 17: stack.push(arg0); // 42
   7.327 -    case 18: stack.push(stack.pop().offset); // 180 1 99
   7.328 -    case 21: stack.push(arg0); // 42
   7.329 -    case 22: stack.push(stack.pop().count); // 180 1 97
   7.330 -    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
   7.331 -    case 28: return stack.pop(); // 176
   7.332 -  }
   7.333 -}
   7.334 -function java_lang_String_getBytesABLjava_nio_charset_Charset(arg0,arg1) {
   7.335 -  var arg2;
   7.336 -;
   7.337 -  var stack = new Array(4);
   7.338 -  var gt = 0;
   7.339 -  for(;;) switch(gt) {
   7.340 -    case 0: stack.push(arg1); // 43
   7.341 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
   7.342 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
   7.343 -    case 7: stack.push(stack[stack.length - 1]); // 89
   7.344 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
   7.345 -    case 11:  // 191
   7.346 -    case 12: stack.push(arg1); // 43
   7.347 -    case 13: stack.push(arg0); // 42
   7.348 -    case 14: stack.push(stack.pop().value); // 180 1 100
   7.349 -    case 17: stack.push(arg0); // 42
   7.350 -    case 18: stack.push(stack.pop().offset); // 180 1 99
   7.351 -    case 21: stack.push(arg0); // 42
   7.352 -    case 22: stack.push(stack.pop().count); // 180 1 97
   7.353 -    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
   7.354 -    case 28: return stack.pop(); // 176
   7.355 -  }
   7.356 -}
   7.357 -function java_lang_String_getBytesAB(arg0) {
   7.358 -  var arg1;
   7.359 -;
   7.360 -  var stack = new Array(3);
   7.361 -  var gt = 0;
   7.362 -  for(;;) switch(gt) {
   7.363 -    case 0: stack.push(arg0); // 42
   7.364 -    case 1: stack.push(stack.pop().value); // 180 1 100
   7.365 -    case 4: stack.push(arg0); // 42
   7.366 -    case 5: stack.push(stack.pop().offset); // 180 1 99
   7.367 -    case 8: stack.push(arg0); // 42
   7.368 -    case 9: stack.push(stack.pop().count); // 180 1 97
   7.369 -    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
   7.370 -    case 15: return stack.pop(); // 176
   7.371 -  }
   7.372 -}
   7.373 -*/
   7.374 -function java_lang_String_equalsZLjava_lang_Object(arg0,arg1) {
   7.375 -    return arg0.toString() === arg1.toString();
   7.376 -}
   7.377 -
   7.378 -function java_lang_String_hashCodeI(self) {
   7.379 -    var h = 0;
   7.380 -    var s = self.toString();
   7.381 -    for (var i = 0; i < s.length; i++) {
   7.382 -        var high = (h >> 16) & 0xffff, low = h & 0xffff;
   7.383 -        h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff;
   7.384 -    }
   7.385 -    return h;
   7.386 -}
   7.387 -
   7.388 -function java_lang_String_substringLjava_lang_StringI(arg0,arg1) {
   7.389 -    return arg0.toString().substring(arg1);
   7.390 -}
   7.391 -function java_lang_String_substringLjava_lang_StringII(arg0,arg1,arg2) {
   7.392 -    return arg0.toString().substring(arg1, arg2);
   7.393 -}
   7.394 -
   7.395 -function java_lang_String_replaceLjava_lang_StringCC(arg0,arg1,arg2) {
   7.396 -    if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);
   7.397 -    if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);
   7.398 -    var s = arg0.toString();
   7.399 -    for (;;) {
   7.400 -        var ret = s.replace(arg1, arg2);
   7.401 -        if (ret === s) {
   7.402 -            return ret;
   7.403 -        }
   7.404 -        s = ret;
   7.405 -    }
   7.406 -}
   7.407 -function java_lang_String_containsZLjava_lang_CharSequence(arg0,arg1) {
   7.408 -    return arg0.toString().indexOf(arg1.toString()) >= 0;
   7.409 -}
   7.410 -
   7.411 -function java_lang_String_toStringLjava_lang_String(arg0) {
   7.412 -    return arg0.toString();
   7.413 -}
   7.414 -function java_lang_String_toCharArrayAC(arg0) {
   7.415 -    return arg0.toString().split('');
   7.416 -}
   7.417 -var java_lang_String_serialVersionUID = 0;
   7.418 -var java_lang_String_serialPersistentFields = 0;
   7.419 -var java_lang_String_CASE_INSENSITIVE_ORDER = 0;
   7.420 -function java_lang_String() {
   7.421 -    if (arguments.length === 0) {
   7.422 -        /** the real value of this 'string' we delegate to */
   7.423 -        this.r = '';
   7.424 -        return this;
   7.425 -    } else {
   7.426 -        return new java_lang_String;
   7.427 -    }
   7.428 -}
   7.429 -java_lang_String.prototype = new String;
   7.430 -java_lang_String.prototype.toString = function() { return this.r; };;
   7.431 -java_lang_String.prototype.valueOf = function() { return this.toString().valueOf(); };;
   7.432 -//java_lang_String_classV();
   7.433 -
   7.434 -/* new method for JavaScript String */
   7.435 -String.prototype.consVAC = java_lang_String_consVAC;
   7.436 -String.prototype.consVACII = java_lang_String_consVACII;
   7.437 -String.prototype.charAtCI = java_lang_String_charAtCI;
   7.438 -String.prototype.lengthI = java_lang_String_lengthI;
   7.439 -String.prototype.isEmptyZ = java_lang_String_isEmptyZ;
   7.440 -String.prototype.getCharsVIIACI = java_lang_String_getCharsVIIACAI;
   7.441 -String.prototype.getCharsVACI = java_lang_String_getCharsVACI;
   7.442 -String.prototype.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String;
   7.443 -String.prototype.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI;
   7.444 -String.prototype.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII;
   7.445 -String.prototype.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC;
   7.446 -String.prototype.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence;
   7.447 -String.prototype.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object;
   7.448 -String.prototype.hashCodeI = java_lang_String_hashCodeI;
   7.449 -String.prototype.toCharArrayAC = java_lang_String_toCharArrayAC;
   7.450 -String.prototype.valueOfLjava_lang_StringI=java_lang_String_valueOfLjava_lang_StringI;
   7.451 -String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
   7.452 -String.prototype.startsWithZLjava_lang_String=java_lang_String_startsWithZLjava_lang_String;
   7.453 -String.prototype.endsWithZLjava_lang_String=java_lang_String_endsWithZLjava_lang_String;
   7.454 -String.prototype.indexOfII=java_lang_String_indexOfII;
   7.455 -String.prototype.indexOfIII=java_lang_String_indexOfIII;
   7.456 -String.prototype.lastIndexOfII=java_lang_String_lastIndexOfII;
   7.457 -String.prototype.lastIndexOfIII=java_lang_String_lastIndexOfIII;
   7.458 -String.prototype.lastIndexOfILjava_lang_String=java_lang_String_lastIndexOfILjava_lang_String;
   7.459 -String.prototype.lastIndexOfILjava_lang_StringI=java_lang_String_lastIndexOfILjava_lang_StringI;
   7.460 -
   7.461 -String.prototype.$instOf_java_lang_String = true;
   7.462 -String.prototype.$instOf_java_io_Serializable = true;
   7.463 -String.prototype.$instOf_java_lang_Comparable = true;
   7.464 -String.prototype.$instOf_java_lang_CharSequence = true;
   7.465 -
   7.466 -/*
   7.467 -function java_lang_String_subSequenceLjava_lang_CharSequenceII(arg0,arg1,arg2) {
   7.468 -  var arg3;
   7.469 -;
   7.470 -  var stack = new Array(3);
   7.471 -  var gt = 0;
   7.472 -  for(;;) switch(gt) {
   7.473 -    case 0: stack.push(arg0); // 42
   7.474 -    case 1: stack.push(arg1); // 27
   7.475 -    case 2: stack.push(arg2); // 28
   7.476 -    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
   7.477 -    case 6: return stack.pop(); // 176
   7.478 -  }
   7.479 -}
   7.480 -function java_lang_String_concatLjava_lang_StringLjava_lang_String(arg0,arg1) {
   7.481 -  var arg2;
   7.482 -  var arg3;
   7.483 -  var arg4;
   7.484 -;
   7.485 -  var stack = new Array(5);
   7.486 -  var gt = 0;
   7.487 -  for(;;) switch(gt) {
   7.488 -    case 0: stack.push(arg1); // 43
   7.489 -    case 1: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 182 1 133
   7.490 -    case 4: arg2 = stack.pop(); // 61
   7.491 -    case 5: stack.push(arg2); // 28
   7.492 -    case 6: if (stack.pop() != 0) { gt = 11; continue; } // 154 0 5
   7.493 -    case 9: stack.push(arg0); // 42
   7.494 -    case 10: return stack.pop(); // 176
   7.495 -    case 11: stack.push(arg0); // 42
   7.496 -    case 12: stack.push(stack.pop().count); // 180 1 97
   7.497 -    case 15: stack.push(arg2); // 28
   7.498 -    case 16: stack.push(stack.pop() + stack.pop()); // 96
   7.499 -    case 17: stack.push(new Array(stack.pop())); // 188 5
   7.500 -    case 19: arg3 = stack.pop(); // 78
   7.501 -    case 20: stack.push(arg0); // 42
   7.502 -    case 21: stack.push(0); // 3
   7.503 -    case 22: stack.push(arg0); // 42
   7.504 -    case 23: stack.push(stack.pop().count); // 180 1 97
   7.505 -    case 26: stack.push(arg3); // 45
   7.506 -    case 27: stack.push(0); // 3
   7.507 -    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
   7.508 -    case 31: stack.push(arg1); // 43
   7.509 -    case 32: stack.push(0); // 3
   7.510 -    case 33: stack.push(arg2); // 28
   7.511 -    case 34: stack.push(arg3); // 45
   7.512 -    case 35: stack.push(arg0); // 42
   7.513 -    case 36: stack.push(stack.pop().count); // 180 1 97
   7.514 -    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
   7.515 -    case 42: stack.push(new java_lang_String); // 187 0 200
   7.516 -    case 45: stack.push(stack[stack.length - 1]); // 89
   7.517 -    case 46: stack.push(0); // 3
   7.518 -    case 47: stack.push(arg0); // 42
   7.519 -    case 48: stack.push(stack.pop().count); // 180 1 97
   7.520 -    case 51: stack.push(arg2); // 28
   7.521 -    case 52: stack.push(stack.pop() + stack.pop()); // 96
   7.522 -    case 53: stack.push(arg3); // 45
   7.523 -    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
   7.524 -    case 57: return stack.pop(); // 176
   7.525 -  }
   7.526 -}
   7.527 -function java_lang_String_matchesZLjava_lang_String(arg0,arg1) {
   7.528 -  var arg2;
   7.529 -;
   7.530 -  var stack = new Array(2);
   7.531 -  var gt = 0;
   7.532 -  for(;;) switch(gt) {
   7.533 -    case 0: stack.push(arg1); // 43
   7.534 -    case 1: stack.push(arg0); // 42
   7.535 -    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
   7.536 -    case 5: return stack.pop(); // 172
   7.537 -  }
   7.538 -}
   7.539 -function java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) {
   7.540 -  var arg3;
   7.541 -;
   7.542 -  var stack = new Array(2);
   7.543 -  var gt = 0;
   7.544 -  for(;;) switch(gt) {
   7.545 -    case 0: stack.push(arg1); // 43
   7.546 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
   7.547 -    case 4: stack.push(arg0); // 42
   7.548 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
   7.549 -    case 8: stack.push(arg2); // 44
   7.550 -    case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceFirstLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 182
   7.551 -    case 12: return stack.pop(); // 176
   7.552 -  }
   7.553 -}
   7.554 -function java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) {
   7.555 -  var arg3;
   7.556 -;
   7.557 -  var stack = new Array(2);
   7.558 -  var gt = 0;
   7.559 -  for(;;) switch(gt) {
   7.560 -    case 0: stack.push(arg1); // 43
   7.561 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
   7.562 -    case 4: stack.push(arg0); // 42
   7.563 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
   7.564 -    case 8: stack.push(arg2); // 44
   7.565 -    case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181
   7.566 -    case 12: return stack.pop(); // 176
   7.567 -  }
   7.568 -}
   7.569 -function java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence(arg0,arg1,arg2) {
   7.570 -  var arg3;
   7.571 -;
   7.572 -  var stack = new Array(2);
   7.573 -  var gt = 0;
   7.574 -  for(;;) switch(gt) {
   7.575 -    case 0: stack.push(arg1); // 43
   7.576 -    case 1: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
   7.577 -    case 4: stack.push(16); // 16 16
   7.578 -    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
   7.579 -    case 9: stack.push(arg0); // 42
   7.580 -    case 10: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185
   7.581 -    case 13: stack.push(arg2); // 44
   7.582 -    case 14: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
   7.583 -    case 17: { var v0 = stack.pop(); stack.push(java_util_regex_Matcher_quoteReplacementLjava_lang_StringLjava_lang_String(v0)); } // 184 1 180
   7.584 -    case 20: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181
   7.585 -    case 23: return stack.pop(); // 176
   7.586 -  }
   7.587 -}
   7.588 -function java_lang_String_splitALjava_lang_StringLjava_lang_StringI(arg0,arg1,arg2) {
   7.589 -  var arg3;
   7.590 -;
   7.591 -  var stack = new Array(3);
   7.592 -  var gt = 0;
   7.593 -  for(;;) switch(gt) {
   7.594 -    case 0: stack.push(arg1); // 43
   7.595 -    case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186
   7.596 -    case 4: stack.push(arg0); // 42
   7.597 -    case 5: stack.push(arg2); // 28
   7.598 -    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
   7.599 -    case 9: return stack.pop(); // 176
   7.600 -  }
   7.601 -}
   7.602 -function java_lang_String_splitALjava_lang_StringLjava_lang_String(arg0,arg1) {
   7.603 -  var arg2;
   7.604 -;
   7.605 -  var stack = new Array(3);
   7.606 -  var gt = 0;
   7.607 -  for(;;) switch(gt) {
   7.608 -    case 0: stack.push(arg0); // 42
   7.609 -    case 1: stack.push(arg1); // 43
   7.610 -    case 2: stack.push(0); // 3
   7.611 -    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
   7.612 -    case 6: return stack.pop(); // 176
   7.613 -  }
   7.614 -}
   7.615 -function java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) {
   7.616 -  var arg2;
   7.617 -  var arg3;
   7.618 -  var arg4;
   7.619 -  var arg5;
   7.620 -  var arg6;
   7.621 -  var arg7;
   7.622 -  var arg8;
   7.623 -  var arg9;
   7.624 -  var arg10;
   7.625 -  var arg11;
   7.626 -  var arg12;
   7.627 -  var arg13;
   7.628 -  var arg14;
   7.629 -;
   7.630 -  var stack = new Array(6);
   7.631 -  var gt = 0;
   7.632 -  for(;;) switch(gt) {
   7.633 -    case 0: stack.push(arg1); // 43
   7.634 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
   7.635 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
   7.636 -    case 7: stack.push(stack[stack.length - 1]); // 89
   7.637 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
   7.638 -    case 11:  // 191
   7.639 -    case 12: stack.push(0); // 3
   7.640 -    case 13: arg2 = stack.pop(); // 61
   7.641 -    case 14: stack.push(arg2); // 28
   7.642 -    case 15: stack.push(arg0); // 42
   7.643 -    case 16: stack.push(stack.pop().count); // 180 1 97
   7.644 -    case 19: if (stack.pop() <= stack.pop()) { gt = 94; continue; } // 162 0 75
   7.645 -    case 22: stack.push(arg0); // 42
   7.646 -    case 23: stack.push(stack.pop().value); // 180 1 100
   7.647 -    case 26: stack.push(arg0); // 42
   7.648 -    case 27: stack.push(stack.pop().offset); // 180 1 99
   7.649 -    case 30: stack.push(arg2); // 28
   7.650 -    case 31: stack.push(stack.pop() + stack.pop()); // 96
   7.651 -    case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   7.652 -    case 33: arg3 = stack.pop(); // 62
   7.653 -    case 34: stack.push(arg3); // 29
   7.654 -    case 35: stack.push(55296); // 18 1
   7.655 -    case 37: if (stack.pop() > stack.pop()) { gt = 77; continue; } // 161 0 40
   7.656 -    case 40: stack.push(arg3); // 29
   7.657 -    case 41: stack.push(56319); // 18 2
   7.658 -    case 43: if (stack.pop() < stack.pop()) { gt = 77; continue; } // 163 0 34
   7.659 -    case 46: stack.push(arg0); // 42
   7.660 -    case 47: stack.push(arg2); // 28
   7.661 -    case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
   7.662 -    case 51: arg4 = stack.pop() // 54 4
   7.663 -    case 53: stack.push(arg4); // 21 4
   7.664 -    case 55: stack.push(arg4); // 21 4
   7.665 -    case 57: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107
   7.666 -    case 60: if (stack.pop() == stack.pop()) { gt = 66; continue; } // 159 0 6
   7.667 -    case 63: gt = 96; continue; // 167 0 33
   7.668 -    case 66: stack.push(arg2); // 28
   7.669 -    case 67: stack.push(arg4); // 21 4
   7.670 -    case 69: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
   7.671 -    case 72: stack.push(stack.pop() + stack.pop()); // 96
   7.672 -    case 73: arg2 = stack.pop(); // 61
   7.673 -    case 74: gt = 91; continue; // 167 0 17
   7.674 -    case 77: stack.push(arg3); // 29
   7.675 -    case 78: stack.push(arg3); // 29
   7.676 -    case 79: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
   7.677 -    case 82: if (stack.pop() == stack.pop()) { gt = 88; continue; } // 159 0 6
   7.678 -    case 85: gt = 96; continue; // 167 0 11
   7.679 -    case 88: arg2++; // 132 2 1
   7.680 -    case 91: gt = 14; continue; // 167 255 179
   7.681 -    case 94: stack.push(arg0); // 42
   7.682 -    case 95: return stack.pop(); // 176
   7.683 -    case 96: stack.push(arg0); // 42
   7.684 -    case 97: stack.push(stack.pop().count); // 180 1 97
   7.685 -    case 100: stack.push(new Array(stack.pop())); // 188 5
   7.686 -    case 102: arg3 = stack.pop(); // 78
   7.687 -    case 103: stack.push(0); // 3
   7.688 -    case 104: arg4 = stack.pop() // 54 4
   7.689 -    case 106: stack.push(arg0); // 42
   7.690 -    case 107: stack.push(stack.pop().value); // 180 1 100
   7.691 -    case 110: stack.push(arg0); // 42
   7.692 -    case 111: stack.push(stack.pop().offset); // 180 1 99
   7.693 -    case 114: stack.push(arg3); // 45
   7.694 -    case 115: stack.push(0); // 3
   7.695 -    case 116: stack.push(arg2); // 28
   7.696 -    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
   7.697 -    case 120: stack.push(arg1); // 43
   7.698 -    case 121: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178
   7.699 -    case 124: arg5 = stack.pop() // 58 5
   7.700 -    case 126: stack.push(arg5); // 25 5
   7.701 -    case 128: stack.push("tr"); // 18 11
   7.702 -    case 130:  // 165
   7.703 -    case 131:  // 0
   7.704 -    case 132: stack.push(6405); // 17 25 5
   7.705 -    case 135: stack.push("az"); // 18 5
   7.706 -    case 137:  // 165
   7.707 -    case 138:  // 0
   7.708 -    case 139: stack.push(1); // 10
   7.709 -    case 140: stack.push(arg5); // 25 5
   7.710 -    case 142: stack.push("lt"); // 18 9
   7.711 -    case 144:  // 166
   7.712 -    case 145:  // 0
   7.713 -    case 146: stack.push(4); // 7
   7.714 -    case 147: stack.push(1); // 4
   7.715 -    case 148: gt = 152; continue; // 167 0 4
   7.716 -    case 151: stack.push(0); // 3
   7.717 -    case 152: arg6 = stack.pop() // 54 6
   7.718 -    case 154: stack.push(arg2); // 28
   7.719 -    case 155: arg11 = stack.pop() // 54 11
   7.720 -    case 157: stack.push(arg11); // 21 11
   7.721 -    case 159: stack.push(arg0); // 42
   7.722 -    case 160: stack.push(stack.pop().count); // 180 1 97
   7.723 -    case 163: if (stack.pop() <= stack.pop()) { gt = 419; continue; } // 162 1 0
   7.724 -    case 166: stack.push(arg0); // 42
   7.725 -    case 167: stack.push(stack.pop().value); // 180 1 100
   7.726 -    case 170: stack.push(arg0); // 42
   7.727 -    case 171: stack.push(stack.pop().offset); // 180 1 99
   7.728 -    case 174: stack.push(arg11); // 21 11
   7.729 -    case 176: stack.push(stack.pop() + stack.pop()); // 96
   7.730 -    case 177: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   7.731 -    case 178: arg9 = stack.pop() // 54 9
   7.732 -    case 180: stack.push(arg9); // 21 9
   7.733 -    case 182: // number conversion  // 146
   7.734 -    case 183: stack.push(55296); // 18 1
   7.735 -    case 185: if (stack.pop() > stack.pop()) { gt = 214; continue; } // 161 0 29
   7.736 -    case 188: stack.push(arg9); // 21 9
   7.737 -    case 190: // number conversion  // 146
   7.738 -    case 191: stack.push(56319); // 18 2
   7.739 -    case 193: if (stack.pop() < stack.pop()) { gt = 214; continue; } // 163 0 21
   7.740 -    case 196: stack.push(arg0); // 42
   7.741 -    case 197: stack.push(arg11); // 21 11
   7.742 -    case 199: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
   7.743 -    case 202: arg9 = stack.pop() // 54 9
   7.744 -    case 204: stack.push(arg9); // 21 9
   7.745 -    case 206: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
   7.746 -    case 209: arg10 = stack.pop() // 54 10
   7.747 -    case 211: gt = 217; continue; // 167 0 6
   7.748 -    case 214: stack.push(1); // 4
   7.749 -    case 215: arg10 = stack.pop() // 54 10
   7.750 -    case 217: stack.push(arg6); // 21 6
   7.751 -    case 219: if (stack.pop() != 0) { gt = 230; continue; } // 154 0 11
   7.752 -    case 222: stack.push(arg9); // 21 9
   7.753 -    case 224: stack.push(931); // 17 3 163
   7.754 -    case 227: if (stack.pop() != stack.pop()) { gt = 242; continue; } // 160 0 15
   7.755 -    case 230: stack.push(arg0); // 42
   7.756 -    case 231: stack.push(arg11); // 21 11
   7.757 -    case 233: stack.push(arg1); // 43
   7.758 -    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
   7.759 -    case 237: arg8 = stack.pop() // 54 8
   7.760 -    case 239: gt = 249; continue; // 167 0 10
   7.761 -    case 242: stack.push(arg9); // 21 9
   7.762 -    case 244: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107
   7.763 -    case 247: arg8 = stack.pop() // 54 8
   7.764 -    case 249: stack.push(arg8); // 21 8
   7.765 -    case 251:  // 2
   7.766 -    case 252: if (stack.pop() == stack.pop()) { gt = 262; continue; } // 159 0 10
   7.767 -    case 255: stack.push(arg8); // 21 8
   7.768 -    case 257: stack.push(65536); // 18 3
   7.769 -    case 259: if (stack.pop() > stack.pop()) { gt = 399; continue; } // 161 0 140
   7.770 -    case 262: stack.push(arg8); // 21 8
   7.771 -    case 264:  // 2
   7.772 -    case 265: if (stack.pop() != stack.pop()) { gt = 280; continue; } // 160 0 15
   7.773 -    case 268: stack.push(arg0); // 42
   7.774 -    case 269: stack.push(arg11); // 21 11
   7.775 -    case 271: stack.push(arg1); // 43
   7.776 -    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
   7.777 -    case 275: arg7 = stack.pop() // 58 7
   7.778 -    case 277: gt = 315; continue; // 167 0 38
   7.779 -    case 280: stack.push(arg10); // 21 10
   7.780 -    case 282: stack.push(2); // 5
   7.781 -    case 283: if (stack.pop() != stack.pop()) { gt = 308; continue; } // 160 0 25
   7.782 -    case 286: stack.push(arg4); // 21 4
   7.783 -    case 288: stack.push(arg8); // 21 8
   7.784 -    case 290: stack.push(arg3); // 45
   7.785 -    case 291: stack.push(arg11); // 21 11
   7.786 -    case 293: stack.push(arg4); // 21 4
   7.787 -    case 295: stack.push(stack.pop() + stack.pop()); // 96
   7.788 -    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
   7.789 -    case 299: stack.push(arg10); // 21 10
   7.790 -    case 301: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.791 -    case 302: stack.push(stack.pop() + stack.pop()); // 96
   7.792 -    case 303: arg4 = stack.pop() // 54 4
   7.793 -    case 305: gt = 409; continue; // 167 0 104
   7.794 -    case 308: stack.push(arg8); // 21 8
   7.795 -    case 310: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
   7.796 -    case 313: arg7 = stack.pop() // 58 7
   7.797 -    case 315: stack.push(arg7); // 25 7
   7.798 -    case 317: stack.push(stack.pop().length); // 190
   7.799 -    case 318: arg12 = stack.pop() // 54 12
   7.800 -    case 320: stack.push(arg12); // 21 12
   7.801 -    case 322: stack.push(arg10); // 21 10
   7.802 -    case 324: if (stack.pop() >= stack.pop()) { gt = 355; continue; } // 164 0 31
   7.803 -    case 327: stack.push(arg3); // 45
   7.804 -    case 328: stack.push(stack.pop().length); // 190
   7.805 -    case 329: stack.push(arg12); // 21 12
   7.806 -    case 331: stack.push(stack.pop() + stack.pop()); // 96
   7.807 -    case 332: stack.push(arg10); // 21 10
   7.808 -    case 334: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.809 -    case 335: stack.push(new Array(stack.pop())); // 188 5
   7.810 -    case 337: arg13 = stack.pop() // 58 13
   7.811 -    case 339: stack.push(arg3); // 45
   7.812 -    case 340: stack.push(0); // 3
   7.813 -    case 341: stack.push(arg13); // 25 13
   7.814 -    case 343: stack.push(0); // 3
   7.815 -    case 344: stack.push(arg11); // 21 11
   7.816 -    case 346: stack.push(arg4); // 21 4
   7.817 -    case 348: stack.push(stack.pop() + stack.pop()); // 96
   7.818 -    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
   7.819 -    case 352: stack.push(arg13); // 25 13
   7.820 -    case 354: arg3 = stack.pop(); // 78
   7.821 -    case 355: stack.push(0); // 3
   7.822 -    case 356: arg13 = stack.pop() // 54 13
   7.823 -    case 358: stack.push(arg13); // 21 13
   7.824 -    case 360: stack.push(arg12); // 21 12
   7.825 -    case 362: if (stack.pop() <= stack.pop()) { gt = 386; continue; } // 162 0 24
   7.826 -    case 365: stack.push(arg3); // 45
   7.827 -    case 366: stack.push(arg11); // 21 11
   7.828 -    case 368: stack.push(arg4); // 21 4
   7.829 -    case 370: stack.push(stack.pop() + stack.pop()); // 96
   7.830 -    case 371: stack.push(arg13); // 21 13
   7.831 -    case 373: stack.push(stack.pop() + stack.pop()); // 96
   7.832 -    case 374: stack.push(arg7); // 25 7
   7.833 -    case 376: stack.push(arg13); // 21 13
   7.834 -    case 378: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   7.835 -    case 379: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
   7.836 -    case 380: arg13++; // 132 13 1
   7.837 -    case 383: gt = 358; continue; // 167 255 231
   7.838 -    case 386: stack.push(arg4); // 21 4
   7.839 -    case 388: stack.push(arg12); // 21 12
   7.840 -    case 390: stack.push(arg10); // 21 10
   7.841 -    case 392: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
   7.842 -    case 393: stack.push(stack.pop() + stack.pop()); // 96
   7.843 -    case 394: arg4 = stack.pop() // 54 4
   7.844 -    case 396: gt = 409; continue; // 167 0 13
   7.845 -    case 399: stack.push(arg3); // 45
   7.846 -    case 400: stack.push(arg11); // 21 11
   7.847 -    case 402: stack.push(arg4); // 21 4
   7.848 -    case 404: stack.push(stack.pop() + stack.pop()); // 96
   7.849 -    case 405: stack.push(arg8); // 21 8
   7.850 -    case 407: // number conversion  // 146
   7.851 -    case 408: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
   7.852 -    case 409: stack.push(arg11); // 21 11
   7.853 -    case 411: stack.push(arg10); // 21 10
   7.854 -    case 413: stack.push(stack.pop() + stack.pop()); // 96
   7.855 -    case 414: arg11 = stack.pop() // 54 11
   7.856 -    case 416: gt = 157; continue; // 167 254 253
   7.857 -    case 419: stack.push(new java_lang_String); // 187 0 200
   7.858 -    case 422: stack.push(stack[stack.length - 1]); // 89
   7.859 -    case 423: stack.push(0); // 3
   7.860 -    case 424: stack.push(arg0); // 42
   7.861 -    case 425: stack.push(stack.pop().count); // 180 1 97
   7.862 -    case 428: stack.push(arg4); // 21 4
   7.863 -    case 430: stack.push(stack.pop() + stack.pop()); // 96
   7.864 -    case 431: stack.push(arg3); // 45
   7.865 -    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
   7.866 -    case 435: return stack.pop(); // 176
   7.867 -  }
   7.868 -}
   7.869 -function java_lang_String_toLowerCaseLjava_lang_String(arg0) {
   7.870 -  var arg1;
   7.871 -;
   7.872 -  var stack = new Array(2);
   7.873 -  var gt = 0;
   7.874 -  for(;;) switch(gt) {
   7.875 -    case 0: stack.push(arg0); // 42
   7.876 -    case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179
   7.877 -    case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toLowerCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 158
   7.878 -    case 7: return stack.pop(); // 176
   7.879 -  }
   7.880 -}
   7.881 -function java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) {
   7.882 -  var arg2;
   7.883 -  var arg3;
   7.884 -  var arg4;
   7.885 -  var arg5;
   7.886 -  var arg6;
   7.887 -  var arg7;
   7.888 -  var arg8;
   7.889 -  var arg9;
   7.890 -  var arg10;
   7.891 -  var arg11;
   7.892 -  var arg12;
   7.893 -  var arg13;
   7.894 -  var arg14;
   7.895 -;
   7.896 -  var stack = new Array(6);
   7.897 -  var gt = 0;
   7.898 -  for(;;) switch(gt) {
   7.899 -    case 0: stack.push(arg1); // 43
   7.900 -    case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11
   7.901 -    case 4: stack.push(new java_lang_NullPointerException); // 187 0 198
   7.902 -    case 7: stack.push(stack[stack.length - 1]); // 89
   7.903 -    case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128
   7.904 -    case 11:  // 191
   7.905 -    case 12: stack.push(0); // 3
   7.906 -    case 13: arg2 = stack.pop(); // 61
   7.907 -    case 14: stack.push(arg2); // 28
   7.908 -    case 15: stack.push(arg0); // 42
   7.909 -    case 16: stack.push(stack.pop().count); // 180 1 97
   7.910 -    case 19: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 74
   7.911 -    case 22: stack.push(arg0); // 42
   7.912 -    case 23: stack.push(stack.pop().value); // 180 1 100
   7.913 -    case 26: stack.push(arg0); // 42
   7.914 -    case 27: stack.push(stack.pop().offset); // 180 1 99
   7.915 -    case 30: stack.push(arg2); // 28
   7.916 -    case 31: stack.push(stack.pop() + stack.pop()); // 96
   7.917 -    case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
   7.918 -    case 33: arg3 = stack.pop(); // 62
   7.919 -    case 34: stack.push(arg3); // 29
   7.920 -    case 35: stack.push(55296); // 18 1
   7.921 -    case 37: if (stack.pop() > stack.pop()) { gt = 61; continue; } // 161 0 24
   7.922 -    case 40: stack.push(arg3); // 29
   7.923 -    case 41: stack.push(56319); // 18 2
   7.924 -    case 43: if (stack.pop() < stack.pop()) { gt = 61; continue; } // 163 0 18
   7.925 -    case 46: stack.push(arg0); // 42
   7.926 -    case 47: stack.push(arg2); // 28
   7.927 -    case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
   7.928 -    case 51: arg3 = stack.pop(); // 62
   7.929 -    case 52: stack.push(arg3); // 29
   7.930 -    case 53: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
   7.931 -    case 56: arg4 = stack.pop() // 54 4
   7.932 -    case 58: gt = 64; continue; // 167 0 6
   7.933 -    case 61: stack.push(1); // 4
   7.934 -    case 62: arg4 = stack.pop() // 54 4
   7.935 -    case 64: stack.push(arg3); // 29
   7.936 -    case 65: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108
   7.937 -    case 68: arg5 = stack.pop() // 54 5
   7.938 -    case 70: stack.push(arg5); // 21 5
   7.939 -    case 72:  // 2
   7.940 -    case 73: if (stack.pop() == stack.pop()) { gt = 95; continue; } // 159 0 22
   7.941 -    case 76: stack.push(arg3); // 29
   7.942 -    case 77: stack.push(arg5); // 21 5
   7.943 -    case 79: if (stack.pop() == stack.pop()) { gt = 85; continue; } // 159 0 6
   7.944 -    case 82: gt = 95; continue; // 167 0 13
   7.945 -    case 85: stack.push(arg2); // 28
   7.946 -    case 86: stack.push(arg4); // 21 4
   7.947 -    case 88: stack.push(stack.pop() + stack.pop()); // 96
   7.948 -    case 89: arg2 = stack.pop(); // 61
   7.949 -    case 90: gt = 14; continue; // 167 255 180
   7.950 -    case 93: stack.push(arg0); // 42
   7.951 -    case 94: return stack.pop(); // 176
   7.952 -    case 95: stack.push(arg0); // 42
   7.953 -    case 96: stack.push(stack.pop().count); // 180 1 97
   7.954 -    case 99: stack.push(new Array(stack.pop())); // 188 5
   7.955 -    case 101: arg3 = stack.pop(); // 78
   7.956 -    case 102: stack.push(0); // 3
   7.957 -    case 103: arg4 = stack.pop() // 54 4
   7.958 -    case 105: stack.push(arg0); // 42
   7.959 -    case 106: stack.push(stack.pop().value); // 180 1 100
   7.960 -    case 109: stack.push(arg0); // 42
   7.961 -    case 110: stack.push(stack.pop().offset); // 180 1 99
   7.962 -    case 113: stack.push(arg3); // 45
   7.963 -    case 114: stack.push(0); // 3
   7.964 -    case 115: stack.push(arg2); // 28
   7.965 -    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
   7.966 -    case 119: stack.push(arg1); // 43
   7.967 -    case 120: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178
   7.968 -    case 123: arg5 = stack.pop() // 58 5
   7.969 -    case 125: stack.push(arg5); // 25 5
   7.970 -    case 127: stack.push("tr"); // 18 11
   7.971 -    case 129:  // 165
   7.972 -    case 130:  // 0
   7.973 -    case 131: stack.push(6405); // 17 25 5
   7.974 -    case 134: stack.push("az"); // 18 5
   7.975 -    case 136:  // 165
   7.976 -    case 137:  // 0
   7.977 -    case 138: stack.push(1); // 10
   7.978 -    case 139: stack.push(arg5); // 25 5
   7.979 -    case 141: stack.push("lt"); // 18 9
   7.980 -    case 143:  // 166
   7.981 -    case 144:  // 0
   7.982 -    case 145: stack.push(4); // 7
   7.983 -    case 146: stack.push(1); // 4
   7.984 -    case 147: gt = 151; continue; // 167 0 4
   7.985 -    case 150: stack.push(0); // 3
   7.986 -    case 151: arg6 = stack.pop() // 54 6
   7.987 -    case 153: stack.push(arg2); // 28
   7.988 -    case 154: arg11 = stack.pop() // 54 11
   7.989 -    case 156: stack.push(arg11); // 21 11
   7.990 -    case 158: stack.push(arg0); // 42
   7.991 -    case 159: stack.push(stack.pop().count); // 180 1 97
   7.992 -    case 162: if (stack.pop() <= stack.pop()) { gt = 425; continue; } // 162 1 7
   7.993 -    case 165: stack.push(arg0); // 42
   7.994 -    case 166: stack.push(stack.pop().value); // 180 1 100
   7.995 -    case 169: stack.push(arg0); // 42
   7.996 -    case 170: stack.push(stack.pop().offset); // 180 1 99
   7.997 -    case 173: stack.push(arg11); // 21 11
   7.998 -    case 175: stack.push(stack.pop() + stack.pop()); // 96
   7.999 -    case 176: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1000 -    case 177: arg9 = stack.pop() // 54 9
  7.1001 -    case 179: stack.push(arg9); // 21 9
  7.1002 -    case 181: // number conversion  // 146
  7.1003 -    case 182: stack.push(55296); // 18 1
  7.1004 -    case 184: if (stack.pop() > stack.pop()) { gt = 213; continue; } // 161 0 29
  7.1005 -    case 187: stack.push(arg9); // 21 9
  7.1006 -    case 189: // number conversion  // 146
  7.1007 -    case 190: stack.push(56319); // 18 2
  7.1008 -    case 192: if (stack.pop() < stack.pop()) { gt = 213; continue; } // 163 0 21
  7.1009 -    case 195: stack.push(arg0); // 42
  7.1010 -    case 196: stack.push(arg11); // 21 11
  7.1011 -    case 198: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134
  7.1012 -    case 201: arg9 = stack.pop() // 54 9
  7.1013 -    case 203: stack.push(arg9); // 21 9
  7.1014 -    case 205: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106
  7.1015 -    case 208: arg10 = stack.pop() // 54 10
  7.1016 -    case 210: gt = 216; continue; // 167 0 6
  7.1017 -    case 213: stack.push(1); // 4
  7.1018 -    case 214: arg10 = stack.pop() // 54 10
  7.1019 -    case 216: stack.push(arg6); // 21 6
  7.1020 -    case 218: if (stack.pop() == 0) { gt = 233; continue; } // 153 0 15
  7.1021 -    case 221: stack.push(arg0); // 42
  7.1022 -    case 222: stack.push(arg11); // 21 11
  7.1023 -    case 224: stack.push(arg1); // 43
  7.1024 -    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
  7.1025 -    case 228: arg8 = stack.pop() // 54 8
  7.1026 -    case 230: gt = 240; continue; // 167 0 10
  7.1027 -    case 233: stack.push(arg9); // 21 9
  7.1028 -    case 235: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108
  7.1029 -    case 238: arg8 = stack.pop() // 54 8
  7.1030 -    case 240: stack.push(arg8); // 21 8
  7.1031 -    case 242:  // 2
  7.1032 -    case 243: if (stack.pop() == stack.pop()) { gt = 253; continue; } // 159 0 10
  7.1033 -    case 246: stack.push(arg8); // 21 8
  7.1034 -    case 248: stack.push(65536); // 18 3
  7.1035 -    case 250: if (stack.pop() > stack.pop()) { gt = 405; continue; } // 161 0 155
  7.1036 -    case 253: stack.push(arg8); // 21 8
  7.1037 -    case 255:  // 2
  7.1038 -    case 256: if (stack.pop() != stack.pop()) { gt = 286; continue; } // 160 0 30
  7.1039 -    case 259: stack.push(arg6); // 21 6
  7.1040 -    case 261: if (stack.pop() == 0) { gt = 276; continue; } // 153 0 15
  7.1041 -    case 264: stack.push(arg0); // 42
  7.1042 -    case 265: stack.push(arg11); // 21 11
  7.1043 -    case 267: stack.push(arg1); // 43
  7.1044 -    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
  7.1045 -    case 271: arg7 = stack.pop() // 58 7
  7.1046 -    case 273: gt = 321; continue; // 167 0 48
  7.1047 -    case 276: stack.push(arg9); // 21 9
  7.1048 -    case 278: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCharArrayACI(v0)); } // 184 1 110
  7.1049 -    case 281: arg7 = stack.pop() // 58 7
  7.1050 -    case 283: gt = 321; continue; // 167 0 38
  7.1051 -    case 286: stack.push(arg10); // 21 10
  7.1052 -    case 288: stack.push(2); // 5
  7.1053 -    case 289: if (stack.pop() != stack.pop()) { gt = 314; continue; } // 160 0 25
  7.1054 -    case 292: stack.push(arg4); // 21 4
  7.1055 -    case 294: stack.push(arg8); // 21 8
  7.1056 -    case 296: stack.push(arg3); // 45
  7.1057 -    case 297: stack.push(arg11); // 21 11
  7.1058 -    case 299: stack.push(arg4); // 21 4
  7.1059 -    case 301: stack.push(stack.pop() + stack.pop()); // 96
  7.1060 -    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
  7.1061 -    case 305: stack.push(arg10); // 21 10
  7.1062 -    case 307: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1063 -    case 308: stack.push(stack.pop() + stack.pop()); // 96
  7.1064 -    case 309: arg4 = stack.pop() // 54 4
  7.1065 -    case 311: gt = 415; continue; // 167 0 104
  7.1066 -    case 314: stack.push(arg8); // 21 8
  7.1067 -    case 316: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109
  7.1068 -    case 319: arg7 = stack.pop() // 58 7
  7.1069 -    case 321: stack.push(arg7); // 25 7
  7.1070 -    case 323: stack.push(stack.pop().length); // 190
  7.1071 -    case 324: arg12 = stack.pop() // 54 12
  7.1072 -    case 326: stack.push(arg12); // 21 12
  7.1073 -    case 328: stack.push(arg10); // 21 10
  7.1074 -    case 330: if (stack.pop() >= stack.pop()) { gt = 361; continue; } // 164 0 31
  7.1075 -    case 333: stack.push(arg3); // 45
  7.1076 -    case 334: stack.push(stack.pop().length); // 190
  7.1077 -    case 335: stack.push(arg12); // 21 12
  7.1078 -    case 337: stack.push(stack.pop() + stack.pop()); // 96
  7.1079 -    case 338: stack.push(arg10); // 21 10
  7.1080 -    case 340: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1081 -    case 341: stack.push(new Array(stack.pop())); // 188 5
  7.1082 -    case 343: arg13 = stack.pop() // 58 13
  7.1083 -    case 345: stack.push(arg3); // 45
  7.1084 -    case 346: stack.push(0); // 3
  7.1085 -    case 347: stack.push(arg13); // 25 13
  7.1086 -    case 349: stack.push(0); // 3
  7.1087 -    case 350: stack.push(arg11); // 21 11
  7.1088 -    case 352: stack.push(arg4); // 21 4
  7.1089 -    case 354: stack.push(stack.pop() + stack.pop()); // 96
  7.1090 -    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
  7.1091 -    case 358: stack.push(arg13); // 25 13
  7.1092 -    case 360: arg3 = stack.pop(); // 78
  7.1093 -    case 361: stack.push(0); // 3
  7.1094 -    case 362: arg13 = stack.pop() // 54 13
  7.1095 -    case 364: stack.push(arg13); // 21 13
  7.1096 -    case 366: stack.push(arg12); // 21 12
  7.1097 -    case 368: if (stack.pop() <= stack.pop()) { gt = 392; continue; } // 162 0 24
  7.1098 -    case 371: stack.push(arg3); // 45
  7.1099 -    case 372: stack.push(arg11); // 21 11
  7.1100 -    case 374: stack.push(arg4); // 21 4
  7.1101 -    case 376: stack.push(stack.pop() + stack.pop()); // 96
  7.1102 -    case 377: stack.push(arg13); // 21 13
  7.1103 -    case 379: stack.push(stack.pop() + stack.pop()); // 96
  7.1104 -    case 380: stack.push(arg7); // 25 7
  7.1105 -    case 382: stack.push(arg13); // 21 13
  7.1106 -    case 384: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1107 -    case 385: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
  7.1108 -    case 386: arg13++; // 132 13 1
  7.1109 -    case 389: gt = 364; continue; // 167 255 231
  7.1110 -    case 392: stack.push(arg4); // 21 4
  7.1111 -    case 394: stack.push(arg12); // 21 12
  7.1112 -    case 396: stack.push(arg10); // 21 10
  7.1113 -    case 398: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1114 -    case 399: stack.push(stack.pop() + stack.pop()); // 96
  7.1115 -    case 400: arg4 = stack.pop() // 54 4
  7.1116 -    case 402: gt = 415; continue; // 167 0 13
  7.1117 -    case 405: stack.push(arg3); // 45
  7.1118 -    case 406: stack.push(arg11); // 21 11
  7.1119 -    case 408: stack.push(arg4); // 21 4
  7.1120 -    case 410: stack.push(stack.pop() + stack.pop()); // 96
  7.1121 -    case 411: stack.push(arg8); // 21 8
  7.1122 -    case 413: // number conversion  // 146
  7.1123 -    case 414: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
  7.1124 -    case 415: stack.push(arg11); // 21 11
  7.1125 -    case 417: stack.push(arg10); // 21 10
  7.1126 -    case 419: stack.push(stack.pop() + stack.pop()); // 96
  7.1127 -    case 420: arg11 = stack.pop() // 54 11
  7.1128 -    case 422: gt = 156; continue; // 167 254 246
  7.1129 -    case 425: stack.push(new java_lang_String); // 187 0 200
  7.1130 -    case 428: stack.push(stack[stack.length - 1]); // 89
  7.1131 -    case 429: stack.push(0); // 3
  7.1132 -    case 430: stack.push(arg0); // 42
  7.1133 -    case 431: stack.push(stack.pop().count); // 180 1 97
  7.1134 -    case 434: stack.push(arg4); // 21 4
  7.1135 -    case 436: stack.push(stack.pop() + stack.pop()); // 96
  7.1136 -    case 437: stack.push(arg3); // 45
  7.1137 -    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
  7.1138 -    case 441: return stack.pop(); // 176
  7.1139 -  }
  7.1140 -}
  7.1141 -function java_lang_String_toUpperCaseLjava_lang_String(arg0) {
  7.1142 -  var arg1;
  7.1143 -;
  7.1144 -  var stack = new Array(2);
  7.1145 -  var gt = 0;
  7.1146 -  for(;;) switch(gt) {
  7.1147 -    case 0: stack.push(arg0); // 42
  7.1148 -    case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179
  7.1149 -    case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toUpperCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 159
  7.1150 -    case 7: return stack.pop(); // 176
  7.1151 -  }
  7.1152 -}
  7.1153 -function java_lang_String_trimLjava_lang_String(arg0) {
  7.1154 -  var arg1;
  7.1155 -  var arg2;
  7.1156 -  var arg3;
  7.1157 -  var arg4;
  7.1158 -  var arg5;
  7.1159 -;
  7.1160 -  var stack = new Array(3);
  7.1161 -  var gt = 0;
  7.1162 -  for(;;) switch(gt) {
  7.1163 -    case 0: stack.push(arg0); // 42
  7.1164 -    case 1: stack.push(stack.pop().count); // 180 1 97
  7.1165 -    case 4: arg1 = stack.pop(); // 60
  7.1166 -    case 5: stack.push(0); // 3
  7.1167 -    case 6: arg2 = stack.pop(); // 61
  7.1168 -    case 7: stack.push(arg0); // 42
  7.1169 -    case 8: stack.push(stack.pop().offset); // 180 1 99
  7.1170 -    case 11: arg3 = stack.pop(); // 62
  7.1171 -    case 12: stack.push(arg0); // 42
  7.1172 -    case 13: stack.push(stack.pop().value); // 180 1 100
  7.1173 -    case 16: arg4 = stack.pop() // 58 4
  7.1174 -    case 18: stack.push(arg2); // 28
  7.1175 -    case 19: stack.push(arg1); // 27
  7.1176 -    case 20: if (stack.pop() <= stack.pop()) { gt = 40; continue; } // 162 0 20
  7.1177 -    case 23: stack.push(arg4); // 25 4
  7.1178 -    case 25: stack.push(arg3); // 29
  7.1179 -    case 26: stack.push(arg2); // 28
  7.1180 -    case 27: stack.push(stack.pop() + stack.pop()); // 96
  7.1181 -    case 28: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1182 -    case 29: stack.push(32); // 16 32
  7.1183 -    case 31: if (stack.pop() < stack.pop()) { gt = 40; continue; } // 163 0 9
  7.1184 -    case 34: arg2++; // 132 2 1
  7.1185 -    case 37: gt = 18; continue; // 167 255 237
  7.1186 -    case 40: stack.push(arg2); // 28
  7.1187 -    case 41: stack.push(arg1); // 27
  7.1188 -    case 42: if (stack.pop() <= stack.pop()) { gt = 64; continue; } // 162 0 22
  7.1189 -    case 45: stack.push(arg4); // 25 4
  7.1190 -    case 47: stack.push(arg3); // 29
  7.1191 -    case 48: stack.push(arg1); // 27
  7.1192 -    case 49: stack.push(stack.pop() + stack.pop()); // 96
  7.1193 -    case 50: stack.push(1); // 4
  7.1194 -    case 51: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1195 -    case 52: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1196 -    case 53: stack.push(32); // 16 32
  7.1197 -    case 55: if (stack.pop() < stack.pop()) { gt = 64; continue; } // 163 0 9
  7.1198 -    case 58: arg1 += 255; // 132 1 255
  7.1199 -    case 61: gt = 40; continue; // 167 255 235
  7.1200 -    case 64: stack.push(arg2); // 28
  7.1201 -    case 65: if (stack.pop() > 0) { gt = 76; continue; } // 157 0 11
  7.1202 -    case 68: stack.push(arg1); // 27
  7.1203 -    case 69: stack.push(arg0); // 42
  7.1204 -    case 70: stack.push(stack.pop().count); // 180 1 97
  7.1205 -    case 73: if (stack.pop() <= stack.pop()) { gt = 85; continue; } // 162 0 12
  7.1206 -    case 76: stack.push(arg0); // 42
  7.1207 -    case 77: stack.push(arg2); // 28
  7.1208 -    case 78: stack.push(arg1); // 27
  7.1209 -    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
  7.1210 -    case 82: gt = 86; continue; // 167 0 4
  7.1211 -    case 85: stack.push(arg0); // 42
  7.1212 -    case 86: return stack.pop(); // 176
  7.1213 -  }
  7.1214 -}
  7.1215 -*/
  7.1216 -
  7.1217 -/*
  7.1218 -function java_lang_String_formatLjava_lang_StringLjava_lang_StringLjava_lang_Object(arg0,arg1) {
  7.1219 -  var stack = new Array();
  7.1220 -  var gt = 0;
  7.1221 -  for(;;) switch(gt) {
  7.1222 -    case 0: stack.push(new java_util_Formatter); // 187 0 211
  7.1223 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1224 -    case 4: { java_util_Formatter_consV(stack.pop()); } // 183 1 174
  7.1225 -    case 7: stack.push(arg0); // 42
  7.1226 -    case 8: stack.push(arg1); // 43
  7.1227 -    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
  7.1228 -    case 12: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175
  7.1229 -    case 15: return stack.pop(); // 176
  7.1230 -  }
  7.1231 -}
  7.1232 -function java_lang_String_formatLjava_lang_StringLjava_util_LocaleLjava_lang_StringLjava_lang_Object(arg0,arg1,arg2) {
  7.1233 -  var stack = new Array();
  7.1234 -  var gt = 0;
  7.1235 -  for(;;) switch(gt) {
  7.1236 -    case 0: stack.push(new java_util_Formatter); // 187 0 211
  7.1237 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1238 -    case 4: stack.push(arg0); // 42
  7.1239 -    case 5: { var v0 = stack.pop(); java_util_Formatter_consVLjava_util_Locale(stack.pop(), v0); } // 183 1 176
  7.1240 -    case 8: stack.push(arg1); // 43
  7.1241 -    case 9: stack.push(arg2); // 44
  7.1242 -    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
  7.1243 -    case 13: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175
  7.1244 -    case 16: return stack.pop(); // 176
  7.1245 -  }
  7.1246 -}
  7.1247 -function java_lang_String_valueOfLjava_lang_StringLjava_lang_Object(arg0) {
  7.1248 -  var stack = new Array();
  7.1249 -  var gt = 0;
  7.1250 -  for(;;) switch(gt) {
  7.1251 -    case 0: stack.push(arg0); // 42
  7.1252 -    case 1: if (stack.pop()) { gt = 9; continue; } // 199 0 8
  7.1253 -    case 4: stack.push("null"); // 18 10
  7.1254 -    case 6: gt = 13; continue; // 167 0 7
  7.1255 -    case 9: stack.push(arg0); // 42
  7.1256 -    case 10: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132
  7.1257 -    case 13: return stack.pop(); // 176
  7.1258 -  }
  7.1259 -}
  7.1260 -function java_lang_String_valueOfLjava_lang_StringAC(arg0) {
  7.1261 -  var stack = new Array();
  7.1262 -  var gt = 0;
  7.1263 -  for(;;) switch(gt) {
  7.1264 -    case 0: stack.push(new java_lang_String); // 187 0 200
  7.1265 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1266 -    case 4: stack.push(arg0); // 42
  7.1267 -    case 5: { var v0 = stack.pop(); java_lang_String_consVAC(stack.pop(), v0); } // 183 1 142
  7.1268 -    case 8: return stack.pop(); // 176
  7.1269 -  }
  7.1270 -}
  7.1271 -function java_lang_String_valueOfLjava_lang_StringACII(arg0,arg1,arg2) {
  7.1272 -  var stack = new Array();
  7.1273 -  var gt = 0;
  7.1274 -  for(;;) switch(gt) {
  7.1275 -    case 0: stack.push(new java_lang_String); // 187 0 200
  7.1276 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1277 -    case 4: stack.push(arg0); // 42
  7.1278 -    case 5: stack.push(arg1); // 27
  7.1279 -    case 6: stack.push(arg2); // 28
  7.1280 -    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
  7.1281 -    case 10: return stack.pop(); // 176
  7.1282 -  }
  7.1283 -}
  7.1284 -function java_lang_String_copyValueOfLjava_lang_StringACII(arg0,arg1,arg2) {
  7.1285 -  var stack = new Array();
  7.1286 -  var gt = 0;
  7.1287 -  for(;;) switch(gt) {
  7.1288 -    case 0: stack.push(new java_lang_String); // 187 0 200
  7.1289 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1290 -    case 4: stack.push(arg0); // 42
  7.1291 -    case 5: stack.push(arg1); // 27
  7.1292 -    case 6: stack.push(arg2); // 28
  7.1293 -    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
  7.1294 -    case 10: return stack.pop(); // 176
  7.1295 -  }
  7.1296 -}
  7.1297 -function java_lang_String_copyValueOfLjava_lang_StringAC(arg0) {
  7.1298 -  var stack = new Array();
  7.1299 -  var gt = 0;
  7.1300 -  for(;;) switch(gt) {
  7.1301 -    case 0: stack.push(arg0); // 42
  7.1302 -    case 1: stack.push(0); // 3
  7.1303 -    case 2: stack.push(arg0); // 42
  7.1304 -    case 3: stack.push(stack.pop().length); // 190
  7.1305 -    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
  7.1306 -    case 7: return stack.pop(); // 176
  7.1307 -  }
  7.1308 -}
  7.1309 -function java_lang_String_valueOfLjava_lang_StringZ(arg0) {
  7.1310 -  var stack = new Array();
  7.1311 -  var gt = 0;
  7.1312 -  for(;;) switch(gt) {
  7.1313 -    case 0: stack.push(arg0); // 26
  7.1314 -    case 1: if (stack.pop() == 0) { gt = 9; continue; } // 153 0 8
  7.1315 -    case 4: stack.push("true"); // 18 12
  7.1316 -    case 6: gt = 11; continue; // 167 0 5
  7.1317 -    case 9: stack.push("false"); // 18 8
  7.1318 -    case 11: return stack.pop(); // 176
  7.1319 -  }
  7.1320 -}
  7.1321 -function java_lang_String_valueOfLjava_lang_StringC(arg0) {
  7.1322 -  var arg1;
  7.1323 -  var stack = new Array();
  7.1324 -  var gt = 0;
  7.1325 -  for(;;) switch(gt) {
  7.1326 -    case 0: stack.push(1); // 4
  7.1327 -    case 1: stack.push(new Array(stack.pop())); // 188 5
  7.1328 -    case 3: stack.push(stack[stack.length - 1]); // 89
  7.1329 -    case 4: stack.push(0); // 3
  7.1330 -    case 5: stack.push(arg0); // 26
  7.1331 -    case 6: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85
  7.1332 -    case 7: arg1 = stack.pop(); // 76
  7.1333 -    case 8: stack.push(new java_lang_String); // 187 0 200
  7.1334 -    case 11: stack.push(stack[stack.length - 1]); // 89
  7.1335 -    case 12: stack.push(0); // 3
  7.1336 -    case 13: stack.push(1); // 4
  7.1337 -    case 14: stack.push(arg1); // 43
  7.1338 -    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
  7.1339 -    case 18: return stack.pop(); // 176
  7.1340 -  }
  7.1341 -}
  7.1342 -function java_lang_String_valueOfLjava_lang_StringJ(arg0) {
  7.1343 -  var arg1;
  7.1344 -  var stack = new Array();
  7.1345 -  var gt = 0;
  7.1346 -  for(;;) switch(gt) {
  7.1347 -    case 0: stack.push(arg0); // 30
  7.1348 -    case 1: stack.push(10); // 16 10
  7.1349 -    case 3: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Long_toStringLjava_lang_StringJI(v0, v1)); } // 184 1 126
  7.1350 -    case 6: return stack.pop(); // 176
  7.1351 -  }
  7.1352 -}
  7.1353 -function java_lang_String_valueOfLjava_lang_StringF(arg0) {
  7.1354 -  var stack = new Array();
  7.1355 -  var gt = 0;
  7.1356 -  for(;;) switch(gt) {
  7.1357 -    case 0: stack.push(arg0); // 34
  7.1358 -    case 1: { var v0 = stack.pop(); stack.push(java_lang_Float_toStringLjava_lang_StringF(v0)); } // 184 1 122
  7.1359 -    case 4: return stack.pop(); // 176
  7.1360 -  }
  7.1361 -}
  7.1362 -function java_lang_String_valueOfLjava_lang_StringD(arg0) {
  7.1363 -  var arg1;
  7.1364 -  var stack = new Array();
  7.1365 -  var gt = 0;
  7.1366 -  for(;;) switch(gt) {
  7.1367 -    case 0: stack.push(arg0); // 38
  7.1368 -    case 1: { var v0 = stack.pop(); stack.push(java_lang_Double_toStringLjava_lang_StringD(v0)); } // 184 1 121
  7.1369 -    case 4: return stack.pop(); // 176
  7.1370 -  }
  7.1371 -}
  7.1372 -function java_lang_String_internLjava_lang_String(arg0) {
  7.1373 -  // no code found for null 
  7.1374 -}
  7.1375 -function java_lang_String_compareToILjava_lang_Object(arg0,arg1) {
  7.1376 -  var arg2;
  7.1377 -;
  7.1378 -  var stack = new Array(2);
  7.1379 -  var gt = 0;
  7.1380 -  for(;;) switch(gt) {
  7.1381 -    case 0: stack.push(arg0); // 42
  7.1382 -    case 1: stack.push(arg1); // 43
  7.1383 -    case 2: if(stack[stack.length - 1].$instOf_java_lang_String != 1) throw {}; // 192 0 200
  7.1384 -    case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.compareToILjava_lang_String(self, v0)); } // 182 1 148
  7.1385 -    case 8: return stack.pop(); // 172
  7.1386 -  }
  7.1387 -}
  7.1388 -function java_lang_String_classV() {
  7.1389 -  var stack = new Array();
  7.1390 -  var gt = 0;
  7.1391 -  for(;;) switch(gt) {
  7.1392 -    case 0: stack.push(0); // 3
  7.1393 -    case 1: stack.push(new Array(stack.pop())); // 189 0 183
  7.1394 -    case 4: java_lang_String_serialPersistentFields = stack.pop(); // 179 1 101
  7.1395 -    case 7: stack.push(new java_lang_String$CaseInsensitiveComparator); // 187 0 202
  7.1396 -    case 10: stack.push(stack[stack.length - 1]); // 89
  7.1397 -    case 11:  // 1
  7.1398 -    case 12: { var v0 = stack.pop(); java_lang_String$CaseInsensitiveComparator_consVLjava_lang_String$1(stack.pop(), v0); } // 183 1 160
  7.1399 -    case 15: java_lang_String_CASE_INSENSITIVE_ORDER = stack.pop(); // 179 1 102
  7.1400 -    case 18: return; // 177
  7.1401 -  }
  7.1402 -}
  7.1403 -*/
  7.1404 -
  7.1405 -/*
  7.1406 -function java_lang_String_contentEqualsZLjava_lang_StringBuffer(arg0,arg1) {
  7.1407 -  var arg2;
  7.1408 -  var arg3;
  7.1409 -  var arg4;
  7.1410 -;
  7.1411 -  var stack = new Array(2);
  7.1412 -  var gt = 0;
  7.1413 -  for(;;) switch(gt) {
  7.1414 -    case 0: stack.push(arg1); // 43
  7.1415 -    case 1: stack.push(stack[stack.length - 1]); // 89
  7.1416 -    case 2: arg2 = stack.pop(); // 77
  7.1417 -    case 3:  // 194
  7.1418 -    case 4: stack.push(arg0); // 42
  7.1419 -    case 5: stack.push(arg1); // 43
  7.1420 -    case 6: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.contentEqualsZLjava_lang_CharSequence(self, v0)); } // 182 1 146
  7.1421 -    case 9: stack.push(arg2); // 44
  7.1422 -    case 10:  // 195
  7.1423 -    case 11: return stack.pop(); // 172
  7.1424 -    case 12: arg3 = stack.pop(); // 78
  7.1425 -    case 13: stack.push(arg2); // 44
  7.1426 -    case 14:  // 195
  7.1427 -    case 15: stack.push(arg3); // 45
  7.1428 -    case 16:  // 191
  7.1429 -  }
  7.1430 -}
  7.1431 -function java_lang_String_contentEqualsZLjava_lang_CharSequence(arg0,arg1) {
  7.1432 -  var arg2;
  7.1433 -  var arg3;
  7.1434 -  var arg4;
  7.1435 -  var arg5;
  7.1436 -  var arg6;
  7.1437 -  var arg7;
  7.1438 -;
  7.1439 -  var stack = new Array(3);
  7.1440 -  var gt = 0;
  7.1441 -  for(;;) switch(gt) {
  7.1442 -    case 0: stack.push(arg0); // 42
  7.1443 -    case 1: stack.push(stack.pop().count); // 180 1 97
  7.1444 -    case 4: stack.push(arg1); // 43
  7.1445 -    case 5: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 185 1 188
  7.1446 -    case 8:  // 1
  7.1447 -    case 9:  // 0
  7.1448 -    case 10: if (stack.pop() == stack.pop()) { gt = 15; continue; } // 159 0 5
  7.1449 -    case 13: stack.push(0); // 3
  7.1450 -    case 14: return stack.pop(); // 172
  7.1451 -    case 15: stack.push(arg1); // 43
  7.1452 -    case 16: stack.push(stack.pop().$instOf_java_lang_AbstractStringBuilder ? 1 : 0); // 193 0 186
  7.1453 -    case 19: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 58
  7.1454 -    case 22: stack.push(arg0); // 42
  7.1455 -    case 23: stack.push(stack.pop().value); // 180 1 100
  7.1456 -    case 26: arg2 = stack.pop(); // 77
  7.1457 -    case 27: stack.push(arg1); // 43
  7.1458 -    case 28: if(stack[stack.length - 1].$instOf_java_lang_AbstractStringBuilder != 1) throw {}; // 192 0 186
  7.1459 -    case 31: { var self = stack.pop(); stack.push(self.getValueAC(self)); } // 182 1 103
  7.1460 -    case 34: arg3 = stack.pop(); // 78
  7.1461 -    case 35: stack.push(arg0); // 42
  7.1462 -    case 36: stack.push(stack.pop().offset); // 180 1 99
  7.1463 -    case 39: arg4 = stack.pop() // 54 4
  7.1464 -    case 41: stack.push(0); // 3
  7.1465 -    case 42: arg5 = stack.pop() // 54 5
  7.1466 -    case 44: stack.push(arg0); // 42
  7.1467 -    case 45: stack.push(stack.pop().count); // 180 1 97
  7.1468 -    case 48: arg6 = stack.pop() // 54 6
  7.1469 -    case 50: stack.push(arg6); // 21 6
  7.1470 -    case 52: arg6 += 255; // 132 6 255
  7.1471 -    case 55: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 22
  7.1472 -    case 58: stack.push(arg2); // 44
  7.1473 -    case 59: stack.push(arg4); // 21 4
  7.1474 -    case 61: arg4++; // 132 4 1
  7.1475 -    case 64: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1476 -    case 65: stack.push(arg3); // 45
  7.1477 -    case 66: stack.push(arg5); // 21 5
  7.1478 -    case 68: arg5++; // 132 5 1
  7.1479 -    case 71: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1480 -    case 72: if (stack.pop() == stack.pop()) { gt = 50; continue; } // 159 255 234
  7.1481 -    case 75: stack.push(0); // 3
  7.1482 -    case 76: return stack.pop(); // 172
  7.1483 -    case 77: stack.push(arg1); // 43
  7.1484 -    case 78: stack.push(arg0); // 42
  7.1485 -    case 79: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.equalsZLjava_lang_Object(self, v0)); } // 182 1 131
  7.1486 -    case 82: if (stack.pop() == 0) { gt = 87; continue; } // 153 0 5
  7.1487 -    case 85: stack.push(1); // 4
  7.1488 -    case 86: return stack.pop(); // 172
  7.1489 -    case 87: stack.push(arg0); // 42
  7.1490 -    case 88: stack.push(stack.pop().value); // 180 1 100
  7.1491 -    case 91: arg2 = stack.pop(); // 77
  7.1492 -    case 92: stack.push(arg0); // 42
  7.1493 -    case 93: stack.push(stack.pop().offset); // 180 1 99
  7.1494 -    case 96: arg3 = stack.pop(); // 62
  7.1495 -    case 97: stack.push(0); // 3
  7.1496 -    case 98: arg4 = stack.pop() // 54 4
  7.1497 -    case 100: stack.push(arg0); // 42
  7.1498 -    case 101: stack.push(stack.pop().count); // 180 1 97
  7.1499 -    case 104: arg5 = stack.pop() // 54 5
  7.1500 -    case 106: stack.push(arg5); // 21 5
  7.1501 -    case 108: arg5 += 255; // 132 5 255
  7.1502 -    case 111: if (stack.pop() == 0) { gt = 136; continue; } // 153 0 25
  7.1503 -    case 114: stack.push(arg2); // 44
  7.1504 -    case 115: stack.push(arg3); // 29
  7.1505 -    case 116: arg3++; // 132 3 1
  7.1506 -    case 119: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1507 -    case 120: stack.push(arg1); // 43
  7.1508 -    case 121: stack.push(arg4); // 21 4
  7.1509 -    case 123: arg4++; // 132 4 1
  7.1510 -    case 126: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.charAtCI(self, v0)); } // 185 1 189
  7.1511 -    case 129:  // 2
  7.1512 -    case 130:  // 0
  7.1513 -    case 131: if (stack.pop() == stack.pop()) { gt = 106; continue; } // 159 255 231
  7.1514 -    case 134: stack.push(0); // 3
  7.1515 -    case 135: return stack.pop(); // 172
  7.1516 -    case 136: stack.push(1); // 4
  7.1517 -    case 137: return stack.pop(); // 172
  7.1518 -  }
  7.1519 -}
  7.1520 -function java_lang_String_equalsIgnoreCaseZLjava_lang_String(arg0,arg1) {
  7.1521 -  var arg2;
  7.1522 -;
  7.1523 -  var stack = new Array(6);
  7.1524 -  var gt = 0;
  7.1525 -  for(;;) switch(gt) {
  7.1526 -    case 0: stack.push(arg0); // 42
  7.1527 -    case 1: stack.push(arg1); // 43
  7.1528 -    case 2:  // 166
  7.1529 -    case 3:  // 0
  7.1530 -    case 4: stack.push(4); // 7
  7.1531 -    case 5: stack.push(1); // 4
  7.1532 -    case 6: gt = 44; continue; // 167 0 38
  7.1533 -    case 9: stack.push(arg1); // 43
  7.1534 -    case 10: if (!stack.pop()) { gt = 43; continue; } // 198 0 33
  7.1535 -    case 13: stack.push(arg1); // 43
  7.1536 -    case 14: stack.push(stack.pop().count); // 180 1 97
  7.1537 -    case 17: stack.push(arg0); // 42
  7.1538 -    case 18: stack.push(stack.pop().count); // 180 1 97
  7.1539 -    case 21: if (stack.pop() != stack.pop()) { gt = 43; continue; } // 160 0 22
  7.1540 -    case 24: stack.push(arg0); // 42
  7.1541 -    case 25: stack.push(1); // 4
  7.1542 -    case 26: stack.push(0); // 3
  7.1543 -    case 27: stack.push(arg1); // 43
  7.1544 -    case 28: stack.push(0); // 3
  7.1545 -    case 29: stack.push(arg0); // 42
  7.1546 -    case 30: stack.push(stack.pop().count); // 180 1 97
  7.1547 -    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
  7.1548 -    case 36: if (stack.pop() == 0) { gt = 43; continue; } // 153 0 7
  7.1549 -    case 39: stack.push(1); // 4
  7.1550 -    case 40: gt = 44; continue; // 167 0 4
  7.1551 -    case 43: stack.push(0); // 3
  7.1552 -    case 44: return stack.pop(); // 172
  7.1553 -  }
  7.1554 -}
  7.1555 -function java_lang_String_compareToILjava_lang_String(arg0,arg1) {
  7.1556 -  var arg2;
  7.1557 -  var arg3;
  7.1558 -  var arg4;
  7.1559 -  var arg5;
  7.1560 -  var arg6;
  7.1561 -  var arg7;
  7.1562 -  var arg8;
  7.1563 -  var arg9;
  7.1564 -  var arg10;
  7.1565 -  var arg11;
  7.1566 -  var arg12;
  7.1567 -  var arg13;
  7.1568 -;
  7.1569 -  var stack = new Array(2);
  7.1570 -  var gt = 0;
  7.1571 -  for(;;) switch(gt) {
  7.1572 -    case 0: stack.push(arg0); // 42
  7.1573 -    case 1: stack.push(stack.pop().count); // 180 1 97
  7.1574 -    case 4: arg2 = stack.pop(); // 61
  7.1575 -    case 5: stack.push(arg1); // 43
  7.1576 -    case 6: stack.push(stack.pop().count); // 180 1 97
  7.1577 -    case 9: arg3 = stack.pop(); // 62
  7.1578 -    case 10: stack.push(arg2); // 28
  7.1579 -    case 11: stack.push(arg3); // 29
  7.1580 -    case 12: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Math_minIII(v0, v1)); } // 184 1 127
  7.1581 -    case 15: arg4 = stack.pop() // 54 4
  7.1582 -    case 17: stack.push(arg0); // 42
  7.1583 -    case 18: stack.push(stack.pop().value); // 180 1 100
  7.1584 -    case 21: arg5 = stack.pop() // 58 5
  7.1585 -    case 23: stack.push(arg1); // 43
  7.1586 -    case 24: stack.push(stack.pop().value); // 180 1 100
  7.1587 -    case 27: arg6 = stack.pop() // 58 6
  7.1588 -    case 29: stack.push(arg0); // 42
  7.1589 -    case 30: stack.push(stack.pop().offset); // 180 1 99
  7.1590 -    case 33: arg7 = stack.pop() // 54 7
  7.1591 -    case 35: stack.push(arg1); // 43
  7.1592 -    case 36: stack.push(stack.pop().offset); // 180 1 99
  7.1593 -    case 39: arg8 = stack.pop() // 54 8
  7.1594 -    case 41: stack.push(arg7); // 21 7
  7.1595 -    case 43: stack.push(arg8); // 21 8
  7.1596 -    case 45: if (stack.pop() != stack.pop()) { gt = 102; continue; } // 160 0 57
  7.1597 -    case 48: stack.push(arg7); // 21 7
  7.1598 -    case 50: arg9 = stack.pop() // 54 9
  7.1599 -    case 52: stack.push(arg4); // 21 4
  7.1600 -    case 54: stack.push(arg7); // 21 7
  7.1601 -    case 56: stack.push(stack.pop() + stack.pop()); // 96
  7.1602 -    case 57: arg10 = stack.pop() // 54 10
  7.1603 -    case 59: stack.push(arg9); // 21 9
  7.1604 -    case 61: stack.push(arg10); // 21 10
  7.1605 -    case 63: if (stack.pop() <= stack.pop()) { gt = 99; continue; } // 162 0 36
  7.1606 -    case 66: stack.push(arg5); // 25 5
  7.1607 -    case 68: stack.push(arg9); // 21 9
  7.1608 -    case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1609 -    case 71: arg11 = stack.pop() // 54 11
  7.1610 -    case 73: stack.push(arg6); // 25 6
  7.1611 -    case 75: stack.push(arg9); // 21 9
  7.1612 -    case 77: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1613 -    case 78: arg12 = stack.pop() // 54 12
  7.1614 -    case 80: stack.push(arg11); // 21 11
  7.1615 -    case 82: stack.push(arg12); // 21 12
  7.1616 -    case 84: if (stack.pop() == stack.pop()) { gt = 93; continue; } // 159 0 9
  7.1617 -    case 87: stack.push(arg11); // 21 11
  7.1618 -    case 89: stack.push(arg12); // 21 12
  7.1619 -    case 91: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1620 -    case 92: return stack.pop(); // 172
  7.1621 -    case 93: arg9++; // 132 9 1
  7.1622 -    case 96: gt = 59; continue; // 167 255 219
  7.1623 -    case 99: gt = 146; continue; // 167 0 47
  7.1624 -    case 102: stack.push(arg4); // 21 4
  7.1625 -    case 104: arg4 += 255; // 132 4 255
  7.1626 -    case 107: if (stack.pop() == 0) { gt = 146; continue; } // 153 0 39
  7.1627 -    case 110: stack.push(arg5); // 25 5
  7.1628 -    case 112: stack.push(arg7); // 21 7
  7.1629 -    case 114: arg7++; // 132 7 1
  7.1630 -    case 117: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1631 -    case 118: arg9 = stack.pop() // 54 9
  7.1632 -    case 120: stack.push(arg6); // 25 6
  7.1633 -    case 122: stack.push(arg8); // 21 8
  7.1634 -    case 124: arg8++; // 132 8 1
  7.1635 -    case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1636 -    case 128: arg10 = stack.pop() // 54 10
  7.1637 -    case 130: stack.push(arg9); // 21 9
  7.1638 -    case 132: stack.push(arg10); // 21 10
  7.1639 -    case 134: if (stack.pop() == stack.pop()) { gt = 143; continue; } // 159 0 9
  7.1640 -    case 137: stack.push(arg9); // 21 9
  7.1641 -    case 139: stack.push(arg10); // 21 10
  7.1642 -    case 141: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1643 -    case 142: return stack.pop(); // 172
  7.1644 -    case 143: gt = 102; continue; // 167 255 215
  7.1645 -    case 146: stack.push(arg2); // 28
  7.1646 -    case 147: stack.push(arg3); // 29
  7.1647 -    case 148: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1648 -    case 149: return stack.pop(); // 172
  7.1649 -  }
  7.1650 -}
  7.1651 -function java_lang_String_compareToIgnoreCaseILjava_lang_String(arg0,arg1) {
  7.1652 -  var arg2;
  7.1653 -;
  7.1654 -  var stack = new Array(3);
  7.1655 -  var gt = 0;
  7.1656 -  for(;;) switch(gt) {
  7.1657 -    case 0: stack.push(java_lang_String_CASE_INSENSITIVE_ORDER); // 178 1 102
  7.1658 -    case 3: stack.push(arg0); // 42
  7.1659 -    case 4: stack.push(arg1); // 43
  7.1660 -    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
  7.1661 -    case 8: stack.push(0); // 3
  7.1662 -    case 9:  // 0
  7.1663 -    case 10: return stack.pop(); // 172
  7.1664 -  }
  7.1665 -}
  7.1666 -function java_lang_String_regionMatchesZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4) {
  7.1667 -  var arg5;
  7.1668 -  var arg6;
  7.1669 -  var arg7;
  7.1670 -  var arg8;
  7.1671 -  var arg9;
  7.1672 -;
  7.1673 -  var stack = new Array(6);
  7.1674 -  var gt = 0;
  7.1675 -  for(;;) switch(gt) {
  7.1676 -    case 0: stack.push(arg0); // 42
  7.1677 -    case 1: stack.push(stack.pop().value); // 180 1 100
  7.1678 -    case 4: arg5 = stack.pop() // 58 5
  7.1679 -    case 6: stack.push(arg0); // 42
  7.1680 -    case 7: stack.push(stack.pop().offset); // 180 1 99
  7.1681 -    case 10: stack.push(arg1); // 27
  7.1682 -    case 11: stack.push(stack.pop() + stack.pop()); // 96
  7.1683 -    case 12: arg6 = stack.pop() // 54 6
  7.1684 -    case 14: stack.push(arg2); // 44
  7.1685 -    case 15: stack.push(stack.pop().value); // 180 1 100
  7.1686 -    case 18: arg7 = stack.pop() // 58 7
  7.1687 -    case 20: stack.push(arg2); // 44
  7.1688 -    case 21: stack.push(stack.pop().offset); // 180 1 99
  7.1689 -    case 24: stack.push(arg3); // 29
  7.1690 -    case 25: stack.push(stack.pop() + stack.pop()); // 96
  7.1691 -    case 26: arg8 = stack.pop() // 54 8
  7.1692 -    case 28: stack.push(arg3); // 29
  7.1693 -    case 29: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 37
  7.1694 -    case 32: stack.push(arg1); // 27
  7.1695 -    case 33: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 33
  7.1696 -    case 36: stack.push(arg1); // 27
  7.1697 -    case 37: // number conversion  // 133
  7.1698 -    case 38: stack.push(arg0); // 42
  7.1699 -    case 39: stack.push(stack.pop().count); // 180 1 97
  7.1700 -    case 42: // number conversion  // 133
  7.1701 -    case 43: stack.push(arg4); // 21 4
  7.1702 -    case 45: // number conversion  // 133
  7.1703 -    case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  7.1704 -    case 47: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  7.1705 -    case 48: if (stack.pop() > 0) { gt = 66; continue; } // 157 0 18
  7.1706 -    case 51: stack.push(arg3); // 29
  7.1707 -    case 52: // number conversion  // 133
  7.1708 -    case 53: stack.push(arg2); // 44
  7.1709 -    case 54: stack.push(stack.pop().count); // 180 1 97
  7.1710 -    case 57: // number conversion  // 133
  7.1711 -    case 58: stack.push(arg4); // 21 4
  7.1712 -    case 60: // number conversion  // 133
  7.1713 -    case 61: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  7.1714 -    case 62: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  7.1715 -    case 63: if (stack.pop() <= 0) { gt = 68; continue; } // 158 0 5
  7.1716 -    case 66: stack.push(0); // 3
  7.1717 -    case 67: return stack.pop(); // 172
  7.1718 -    case 68: stack.push(arg4); // 21 4
  7.1719 -    case 70: arg4 += 255; // 132 4 255
  7.1720 -    case 73: if (stack.pop() <= 0) { gt = 97; continue; } // 158 0 24
  7.1721 -    case 76: stack.push(arg5); // 25 5
  7.1722 -    case 78: stack.push(arg6); // 21 6
  7.1723 -    case 80: arg6++; // 132 6 1
  7.1724 -    case 83: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1725 -    case 84: stack.push(arg7); // 25 7
  7.1726 -    case 86: stack.push(arg8); // 21 8
  7.1727 -    case 88: arg8++; // 132 8 1
  7.1728 -    case 91: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1729 -    case 92: if (stack.pop() == stack.pop()) { gt = 68; continue; } // 159 255 232
  7.1730 -    case 95: stack.push(0); // 3
  7.1731 -    case 96: return stack.pop(); // 172
  7.1732 -    case 97: stack.push(1); // 4
  7.1733 -    case 98: return stack.pop(); // 172
  7.1734 -  }
  7.1735 -}
  7.1736 -function java_lang_String_regionMatchesZZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4,arg5) {
  7.1737 -  var arg6;
  7.1738 -  var arg7;
  7.1739 -  var arg8;
  7.1740 -  var arg9;
  7.1741 -  var arg10;
  7.1742 -  var arg11;
  7.1743 -  var arg12;
  7.1744 -  var arg13;
  7.1745 -  var arg14;
  7.1746 -;
  7.1747 -  var stack = new Array(6);
  7.1748 -  var gt = 0;
  7.1749 -  for(;;) switch(gt) {
  7.1750 -    case 0: stack.push(arg0); // 42
  7.1751 -    case 1: stack.push(stack.pop().value); // 180 1 100
  7.1752 -    case 4: arg6 = stack.pop() // 58 6
  7.1753 -    case 6: stack.push(arg0); // 42
  7.1754 -    case 7: stack.push(stack.pop().offset); // 180 1 99
  7.1755 -    case 10: stack.push(arg2); // 28
  7.1756 -    case 11: stack.push(stack.pop() + stack.pop()); // 96
  7.1757 -    case 12: arg7 = stack.pop() // 54 7
  7.1758 -    case 14: stack.push(arg3); // 45
  7.1759 -    case 15: stack.push(stack.pop().value); // 180 1 100
  7.1760 -    case 18: arg8 = stack.pop() // 58 8
  7.1761 -    case 20: stack.push(arg3); // 45
  7.1762 -    case 21: stack.push(stack.pop().offset); // 180 1 99
  7.1763 -    case 24: stack.push(arg4); // 21 4
  7.1764 -    case 26: stack.push(stack.pop() + stack.pop()); // 96
  7.1765 -    case 27: arg9 = stack.pop() // 54 9
  7.1766 -    case 29: stack.push(arg4); // 21 4
  7.1767 -    case 31: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 38
  7.1768 -    case 34: stack.push(arg2); // 28
  7.1769 -    case 35: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 34
  7.1770 -    case 38: stack.push(arg2); // 28
  7.1771 -    case 39: // number conversion  // 133
  7.1772 -    case 40: stack.push(arg0); // 42
  7.1773 -    case 41: stack.push(stack.pop().count); // 180 1 97
  7.1774 -    case 44: // number conversion  // 133
  7.1775 -    case 45: stack.push(arg5); // 21 5
  7.1776 -    case 47: // number conversion  // 133
  7.1777 -    case 48: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  7.1778 -    case 49: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  7.1779 -    case 50: if (stack.pop() > 0) { gt = 69; continue; } // 157 0 19
  7.1780 -    case 53: stack.push(arg4); // 21 4
  7.1781 -    case 55: // number conversion  // 133
  7.1782 -    case 56: stack.push(arg3); // 45
  7.1783 -    case 57: stack.push(stack.pop().count); // 180 1 97
  7.1784 -    case 60: // number conversion  // 133
  7.1785 -    case 61: stack.push(arg5); // 21 5
  7.1786 -    case 63: // number conversion  // 133
  7.1787 -    case 64: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101
  7.1788 -    case 65: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148
  7.1789 -    case 66: if (stack.pop() <= 0) { gt = 71; continue; } // 158 0 5
  7.1790 -    case 69: stack.push(0); // 3
  7.1791 -    case 70: return stack.pop(); // 172
  7.1792 -    case 71: stack.push(arg5); // 21 5
  7.1793 -    case 73: arg5 += 255; // 132 5 255
  7.1794 -    case 76: if (stack.pop() <= 0) { gt = 155; continue; } // 158 0 79
  7.1795 -    case 79: stack.push(arg6); // 25 6
  7.1796 -    case 81: stack.push(arg7); // 21 7
  7.1797 -    case 83: arg7++; // 132 7 1
  7.1798 -    case 86: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1799 -    case 87: arg10 = stack.pop() // 54 10
  7.1800 -    case 89: stack.push(arg8); // 25 8
  7.1801 -    case 91: stack.push(arg9); // 21 9
  7.1802 -    case 93: arg9++; // 132 9 1
  7.1803 -    case 96: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1804 -    case 97: arg11 = stack.pop() // 54 11
  7.1805 -    case 99: stack.push(arg10); // 21 10
  7.1806 -    case 101: stack.push(arg11); // 21 11
  7.1807 -    case 103: if (stack.pop() != stack.pop()) { gt = 109; continue; } // 160 0 6
  7.1808 -    case 106: gt = 71; continue; // 167 255 221
  7.1809 -    case 109: stack.push(arg1); // 27
  7.1810 -    case 110: if (stack.pop() == 0) { gt = 153; continue; } // 153 0 43
  7.1811 -    case 113: stack.push(arg10); // 21 10
  7.1812 -    case 115: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105
  7.1813 -    case 118: arg12 = stack.pop() // 54 12
  7.1814 -    case 120: stack.push(arg11); // 21 11
  7.1815 -    case 122: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105
  7.1816 -    case 125: arg13 = stack.pop() // 54 13
  7.1817 -    case 127: stack.push(arg12); // 21 12
  7.1818 -    case 129: stack.push(arg13); // 21 13
  7.1819 -    case 131: if (stack.pop() != stack.pop()) { gt = 137; continue; } // 160 0 6
  7.1820 -    case 134: gt = 71; continue; // 167 255 193
  7.1821 -    case 137: stack.push(arg12); // 21 12
  7.1822 -    case 139: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
  7.1823 -    case 142: stack.push(arg13); // 21 13
  7.1824 -    case 144: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104
  7.1825 -    case 147: if (stack.pop() != stack.pop()) { gt = 153; continue; } // 160 0 6
  7.1826 -    case 150: gt = 71; continue; // 167 255 177
  7.1827 -    case 153: stack.push(0); // 3
  7.1828 -    case 154: return stack.pop(); // 172
  7.1829 -    case 155: stack.push(1); // 4
  7.1830 -    case 156: return stack.pop(); // 172
  7.1831 -  }
  7.1832 -}
  7.1833 -function java_lang_String_startsWithZLjava_lang_StringI(arg0,arg1,arg2) {
  7.1834 -  var arg3;
  7.1835 -  var arg4;
  7.1836 -  var arg5;
  7.1837 -  var arg6;
  7.1838 -  var arg7;
  7.1839 -  var arg8;
  7.1840 -;
  7.1841 -  var stack = new Array(3);
  7.1842 -  var gt = 0;
  7.1843 -  for(;;) switch(gt) {
  7.1844 -    case 0: stack.push(arg0); // 42
  7.1845 -    case 1: stack.push(stack.pop().value); // 180 1 100
  7.1846 -    case 4: arg3 = stack.pop(); // 78
  7.1847 -    case 5: stack.push(arg0); // 42
  7.1848 -    case 6: stack.push(stack.pop().offset); // 180 1 99
  7.1849 -    case 9: stack.push(arg2); // 28
  7.1850 -    case 10: stack.push(stack.pop() + stack.pop()); // 96
  7.1851 -    case 11: arg4 = stack.pop() // 54 4
  7.1852 -    case 13: stack.push(arg1); // 43
  7.1853 -    case 14: stack.push(stack.pop().value); // 180 1 100
  7.1854 -    case 17: arg5 = stack.pop() // 58 5
  7.1855 -    case 19: stack.push(arg1); // 43
  7.1856 -    case 20: stack.push(stack.pop().offset); // 180 1 99
  7.1857 -    case 23: arg6 = stack.pop() // 54 6
  7.1858 -    case 25: stack.push(arg1); // 43
  7.1859 -    case 26: stack.push(stack.pop().count); // 180 1 97
  7.1860 -    case 29: arg7 = stack.pop() // 54 7
  7.1861 -    case 31: stack.push(arg2); // 28
  7.1862 -    case 32: if (stack.pop() < 0) { gt = 46; continue; } // 155 0 14
  7.1863 -    case 35: stack.push(arg2); // 28
  7.1864 -    case 36: stack.push(arg0); // 42
  7.1865 -    case 37: stack.push(stack.pop().count); // 180 1 97
  7.1866 -    case 40: stack.push(arg7); // 21 7
  7.1867 -    case 42: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1868 -    case 43: if (stack.pop() >= stack.pop()) { gt = 48; continue; } // 164 0 5
  7.1869 -    case 46: stack.push(0); // 3
  7.1870 -    case 47: return stack.pop(); // 172
  7.1871 -    case 48: arg7 += 255; // 132 7 255
  7.1872 -    case 51: stack.push(arg7); // 21 7
  7.1873 -    case 53: if (stack.pop() < 0) { gt = 76; continue; } // 155 0 23
  7.1874 -    case 56: stack.push(arg3); // 45
  7.1875 -    case 57: stack.push(arg4); // 21 4
  7.1876 -    case 59: arg4++; // 132 4 1
  7.1877 -    case 62: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1878 -    case 63: stack.push(arg5); // 25 5
  7.1879 -    case 65: stack.push(arg6); // 21 6
  7.1880 -    case 67: arg6++; // 132 6 1
  7.1881 -    case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1882 -    case 71: if (stack.pop() == stack.pop()) { gt = 48; continue; } // 159 255 233
  7.1883 -    case 74: stack.push(0); // 3
  7.1884 -    case 75: return stack.pop(); // 172
  7.1885 -    case 76: stack.push(1); // 4
  7.1886 -    case 77: return stack.pop(); // 172
  7.1887 -  }
  7.1888 -}
  7.1889 -function java_lang_String_startsWithZLjava_lang_String(arg0,arg1) {
  7.1890 -  var arg2;
  7.1891 -;
  7.1892 -  var stack = new Array(3);
  7.1893 -  var gt = 0;
  7.1894 -  for(;;) switch(gt) {
  7.1895 -    case 0: stack.push(arg0); // 42
  7.1896 -    case 1: stack.push(arg1); // 43
  7.1897 -    case 2: stack.push(0); // 3
  7.1898 -    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
  7.1899 -    case 6: return stack.pop(); // 172
  7.1900 -  }
  7.1901 -}
  7.1902 -function java_lang_String_endsWithZLjava_lang_String(arg0,arg1) {
  7.1903 -  var arg2;
  7.1904 -;
  7.1905 -  var stack = new Array(4);
  7.1906 -  var gt = 0;
  7.1907 -  for(;;) switch(gt) {
  7.1908 -    case 0: stack.push(arg0); // 42
  7.1909 -    case 1: stack.push(arg1); // 43
  7.1910 -    case 2: stack.push(arg0); // 42
  7.1911 -    case 3: stack.push(stack.pop().count); // 180 1 97
  7.1912 -    case 6: stack.push(arg1); // 43
  7.1913 -    case 7: stack.push(stack.pop().count); // 180 1 97
  7.1914 -    case 10: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1915 -    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
  7.1916 -    case 14: return stack.pop(); // 172
  7.1917 -  }
  7.1918 -}
  7.1919 -function java_lang_String_indexOfILjava_lang_String(arg0,arg1) {
  7.1920 -  var arg2;
  7.1921 -;
  7.1922 -  var stack = new Array(3);
  7.1923 -  var gt = 0;
  7.1924 -  for(;;) switch(gt) {
  7.1925 -    case 0: stack.push(arg0); // 42
  7.1926 -    case 1: stack.push(arg1); // 43
  7.1927 -    case 2: stack.push(0); // 3
  7.1928 -    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
  7.1929 -    case 6: return stack.pop(); // 172
  7.1930 -  }
  7.1931 -}
  7.1932 -function java_lang_String_indexOfILjava_lang_StringI(arg0,arg1,arg2) {
  7.1933 -  var arg3;
  7.1934 -;
  7.1935 -  var stack = new Array(7);
  7.1936 -  var gt = 0;
  7.1937 -  for(;;) switch(gt) {
  7.1938 -    case 0: stack.push(arg0); // 42
  7.1939 -    case 1: stack.push(stack.pop().value); // 180 1 100
  7.1940 -    case 4: stack.push(arg0); // 42
  7.1941 -    case 5: stack.push(stack.pop().offset); // 180 1 99
  7.1942 -    case 8: stack.push(arg0); // 42
  7.1943 -    case 9: stack.push(stack.pop().count); // 180 1 97
  7.1944 -    case 12: stack.push(arg1); // 43
  7.1945 -    case 13: stack.push(stack.pop().value); // 180 1 100
  7.1946 -    case 16: stack.push(arg1); // 43
  7.1947 -    case 17: stack.push(stack.pop().offset); // 180 1 99
  7.1948 -    case 20: stack.push(arg1); // 43
  7.1949 -    case 21: stack.push(stack.pop().count); // 180 1 97
  7.1950 -    case 24: stack.push(arg2); // 28
  7.1951 -    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
  7.1952 -    case 28: return stack.pop(); // 172
  7.1953 -  }
  7.1954 -}
  7.1955 -function java_lang_String_indexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {
  7.1956 -  var arg7;
  7.1957 -  var arg8;
  7.1958 -  var arg9;
  7.1959 -  var arg10;
  7.1960 -  var arg11;
  7.1961 -  var arg12;
  7.1962 -  var stack = new Array();
  7.1963 -  var gt = 0;
  7.1964 -  for(;;) switch(gt) {
  7.1965 -    case 0: stack.push(arg6); // 21 6
  7.1966 -    case 2: stack.push(arg2); // 28
  7.1967 -    case 3: if (stack.pop() > stack.pop()) { gt = 17; continue; } // 161 0 14
  7.1968 -    case 6: stack.push(arg5); // 21 5
  7.1969 -    case 8: if (stack.pop() != 0) { gt = 15; continue; } // 154 0 7
  7.1970 -    case 11: stack.push(arg2); // 28
  7.1971 -    case 12: gt = 16; continue; // 167 0 4
  7.1972 -    case 15:  // 2
  7.1973 -    case 16: return stack.pop(); // 172
  7.1974 -    case 17: stack.push(arg6); // 21 6
  7.1975 -    case 19: if (stack.pop() >= 0) { gt = 25; continue; } // 156 0 6
  7.1976 -    case 22: stack.push(0); // 3
  7.1977 -    case 23: arg6 = stack.pop() // 54 6
  7.1978 -    case 25: stack.push(arg5); // 21 5
  7.1979 -    case 27: if (stack.pop() != 0) { gt = 33; continue; } // 154 0 6
  7.1980 -    case 30: stack.push(arg6); // 21 6
  7.1981 -    case 32: return stack.pop(); // 172
  7.1982 -    case 33: stack.push(arg3); // 45
  7.1983 -    case 34: stack.push(arg4); // 21 4
  7.1984 -    case 36: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.1985 -    case 37: arg7 = stack.pop() // 54 7
  7.1986 -    case 39: stack.push(arg1); // 27
  7.1987 -    case 40: stack.push(arg2); // 28
  7.1988 -    case 41: stack.push(arg5); // 21 5
  7.1989 -    case 43: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.1990 -    case 44: stack.push(stack.pop() + stack.pop()); // 96
  7.1991 -    case 45: arg8 = stack.pop() // 54 8
  7.1992 -    case 47: stack.push(arg1); // 27
  7.1993 -    case 48: stack.push(arg6); // 21 6
  7.1994 -    case 50: stack.push(stack.pop() + stack.pop()); // 96
  7.1995 -    case 51: arg9 = stack.pop() // 54 9
  7.1996 -    case 53: stack.push(arg9); // 21 9
  7.1997 -    case 55: stack.push(arg8); // 21 8
  7.1998 -    case 57: if (stack.pop() < stack.pop()) { gt = 164; continue; } // 163 0 107
  7.1999 -    case 60: stack.push(arg0); // 42
  7.2000 -    case 61: stack.push(arg9); // 21 9
  7.2001 -    case 63: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2002 -    case 64: stack.push(arg7); // 21 7
  7.2003 -    case 66: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 25
  7.2004 -    case 69: arg9++; // 132 9 1
  7.2005 -    case 72: stack.push(arg9); // 21 9
  7.2006 -    case 74: stack.push(arg8); // 21 8
  7.2007 -    case 76: if (stack.pop() < stack.pop()) { gt = 91; continue; } // 163 0 15
  7.2008 -    case 79: stack.push(arg0); // 42
  7.2009 -    case 80: stack.push(arg9); // 21 9
  7.2010 -    case 82: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2011 -    case 83: stack.push(arg7); // 21 7
  7.2012 -    case 85: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 6
  7.2013 -    case 88: gt = 69; continue; // 167 255 237
  7.2014 -    case 91: stack.push(arg9); // 21 9
  7.2015 -    case 93: stack.push(arg8); // 21 8
  7.2016 -    case 95: if (stack.pop() < stack.pop()) { gt = 158; continue; } // 163 0 63
  7.2017 -    case 98: stack.push(arg9); // 21 9
  7.2018 -    case 100: stack.push(1); // 4
  7.2019 -    case 101: stack.push(stack.pop() + stack.pop()); // 96
  7.2020 -    case 102: arg10 = stack.pop() // 54 10
  7.2021 -    case 104: stack.push(arg10); // 21 10
  7.2022 -    case 106: stack.push(arg5); // 21 5
  7.2023 -    case 108: stack.push(stack.pop() + stack.pop()); // 96
  7.2024 -    case 109: stack.push(1); // 4
  7.2025 -    case 110: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2026 -    case 111: arg11 = stack.pop() // 54 11
  7.2027 -    case 113: stack.push(arg4); // 21 4
  7.2028 -    case 115: stack.push(1); // 4
  7.2029 -    case 116: stack.push(stack.pop() + stack.pop()); // 96
  7.2030 -    case 117: arg12 = stack.pop() // 54 12
  7.2031 -    case 119: stack.push(arg10); // 21 10
  7.2032 -    case 121: stack.push(arg11); // 21 11
  7.2033 -    case 123: if (stack.pop() <= stack.pop()) { gt = 146; continue; } // 162 0 23
  7.2034 -    case 126: stack.push(arg0); // 42
  7.2035 -    case 127: stack.push(arg10); // 21 10
  7.2036 -    case 129: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2037 -    case 130: stack.push(arg3); // 45
  7.2038 -    case 131: stack.push(arg12); // 21 12
  7.2039 -    case 133: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2040 -    case 134: if (stack.pop() != stack.pop()) { gt = 146; continue; } // 160 0 12
  7.2041 -    case 137: arg10++; // 132 10 1
  7.2042 -    case 140: arg12++; // 132 12 1
  7.2043 -    case 143: gt = 119; continue; // 167 255 232
  7.2044 -    case 146: stack.push(arg10); // 21 10
  7.2045 -    case 148: stack.push(arg11); // 21 11
  7.2046 -    case 150: if (stack.pop() != stack.pop()) { gt = 158; continue; } // 160 0 8
  7.2047 -    case 153: stack.push(arg9); // 21 9
  7.2048 -    case 155: stack.push(arg1); // 27
  7.2049 -    case 156: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2050 -    case 157: return stack.pop(); // 172
  7.2051 -    case 158: arg9++; // 132 9 1
  7.2052 -    case 161: gt = 53; continue; // 167 255 148
  7.2053 -    case 164:  // 2
  7.2054 -    case 165: return stack.pop(); // 172
  7.2055 -  }
  7.2056 -}
  7.2057 -function java_lang_String_lastIndexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {
  7.2058 -  var arg7;
  7.2059 -  var arg8;
  7.2060 -  var arg9;
  7.2061 -  var arg10;
  7.2062 -  var arg11;
  7.2063 -  var arg12;
  7.2064 -  var arg13;
  7.2065 -  var arg14;
  7.2066 -  var stack = new Array();
  7.2067 -  var gt = 0;
  7.2068 -  for(;;) switch(gt) {
  7.2069 -    case 0: stack.push(arg2); // 28
  7.2070 -    case 1: stack.push(arg5); // 21 5
  7.2071 -    case 3: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2072 -    case 4: arg7 = stack.pop() // 54 7
  7.2073 -    case 6: stack.push(arg6); // 21 6
  7.2074 -    case 8: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 5
  7.2075 -    case 11:  // 2
  7.2076 -    case 12: return stack.pop(); // 172
  7.2077 -    case 13: stack.push(arg6); // 21 6
  7.2078 -    case 15: stack.push(arg7); // 21 7
  7.2079 -    case 17: if (stack.pop() >= stack.pop()) { gt = 24; continue; } // 164 0 7
  7.2080 -    case 20: stack.push(arg7); // 21 7
  7.2081 -    case 22: arg6 = stack.pop() // 54 6
  7.2082 -    case 24: stack.push(arg5); // 21 5
  7.2083 -    case 26: if (stack.pop() != 0) { gt = 32; continue; } // 154 0 6
  7.2084 -    case 29: stack.push(arg6); // 21 6
  7.2085 -    case 31: return stack.pop(); // 172
  7.2086 -    case 32: stack.push(arg4); // 21 4
  7.2087 -    case 34: stack.push(arg5); // 21 5
  7.2088 -    case 36: stack.push(stack.pop() + stack.pop()); // 96
  7.2089 -    case 37: stack.push(1); // 4
  7.2090 -    case 38: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2091 -    case 39: arg8 = stack.pop() // 54 8
  7.2092 -    case 41: stack.push(arg3); // 45
  7.2093 -    case 42: stack.push(arg8); // 21 8
  7.2094 -    case 44: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2095 -    case 45: arg9 = stack.pop() // 54 9
  7.2096 -    case 47: stack.push(arg1); // 27
  7.2097 -    case 48: stack.push(arg5); // 21 5
  7.2098 -    case 50: stack.push(stack.pop() + stack.pop()); // 96
  7.2099 -    case 51: stack.push(1); // 4
  7.2100 -    case 52: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2101 -    case 53: arg10 = stack.pop() // 54 10
  7.2102 -    case 55: stack.push(arg10); // 21 10
  7.2103 -    case 57: stack.push(arg6); // 21 6
  7.2104 -    case 59: stack.push(stack.pop() + stack.pop()); // 96
  7.2105 -    case 60: arg11 = stack.pop() // 54 11
  7.2106 -    case 62: stack.push(arg11); // 21 11
  7.2107 -    case 64: stack.push(arg10); // 21 10
  7.2108 -    case 66: if (stack.pop() > stack.pop()) { gt = 84; continue; } // 161 0 18
  7.2109 -    case 69: stack.push(arg0); // 42
  7.2110 -    case 70: stack.push(arg11); // 21 11
  7.2111 -    case 72: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2112 -    case 73: stack.push(arg9); // 21 9
  7.2113 -    case 75: if (stack.pop() == stack.pop()) { gt = 84; continue; } // 159 0 9
  7.2114 -    case 78: arg11 += 255; // 132 11 255
  7.2115 -    case 81: gt = 62; continue; // 167 255 237
  7.2116 -    case 84: stack.push(arg11); // 21 11
  7.2117 -    case 86: stack.push(arg10); // 21 10
  7.2118 -    case 88: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 5
  7.2119 -    case 91:  // 2
  7.2120 -    case 92: return stack.pop(); // 172
  7.2121 -    case 93: stack.push(arg11); // 21 11
  7.2122 -    case 95: stack.push(1); // 4
  7.2123 -    case 96: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2124 -    case 97: arg12 = stack.pop() // 54 12
  7.2125 -    case 99: stack.push(arg12); // 21 12
  7.2126 -    case 101: stack.push(arg5); // 21 5
  7.2127 -    case 103: stack.push(1); // 4
  7.2128 -    case 104: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2129 -    case 105: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2130 -    case 106: arg13 = stack.pop() // 54 13
  7.2131 -    case 108: stack.push(arg8); // 21 8
  7.2132 -    case 110: stack.push(1); // 4
  7.2133 -    case 111: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2134 -    case 112: arg14 = stack.pop() // 54 14
  7.2135 -    case 114: stack.push(arg12); // 21 12
  7.2136 -    case 116: stack.push(arg13); // 21 13
  7.2137 -    case 118: if (stack.pop() >= stack.pop()) { gt = 144; continue; } // 164 0 26
  7.2138 -    case 121: stack.push(arg0); // 42
  7.2139 -    case 122: stack.push(arg12); // 21 12
  7.2140 -    case 124: arg12 += 255; // 132 12 255
  7.2141 -    case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2142 -    case 128: stack.push(arg3); // 45
  7.2143 -    case 129: stack.push(arg14); // 21 14
  7.2144 -    case 131: arg14 += 255; // 132 14 255
  7.2145 -    case 134: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52
  7.2146 -    case 135: if (stack.pop() == stack.pop()) { gt = 114; continue; } // 159 255 235
  7.2147 -    case 138: arg11 += 255; // 132 11 255
  7.2148 -    case 141: gt = 62; continue; // 167 255 177
  7.2149 -    case 144: stack.push(arg13); // 21 13
  7.2150 -    case 146: stack.push(arg1); // 27
  7.2151 -    case 147: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100
  7.2152 -    case 148: stack.push(1); // 4
  7.2153 -    case 149: stack.push(stack.pop() + stack.pop()); // 96
  7.2154 -    case 150: return stack.pop(); // 172
  7.2155 -  }
  7.2156 -}
  7.2157 -*/
  7.2158 -
  7.2159 -/*
  7.2160 -  this.lengthI = java_lang_String_lengthI;
  7.2161 -  this.isEmptyZ = java_lang_String_isEmptyZ;
  7.2162 -  this.charAtCI = java_lang_String_charAtCI;
  7.2163 -  this.codePointAtII = java_lang_String_codePointAtII;
  7.2164 -  this.codePointBeforeII = java_lang_String_codePointBeforeII;
  7.2165 -  this.codePointCountIII = java_lang_String_codePointCountIII;
  7.2166 -  this.offsetByCodePointsIII = java_lang_String_offsetByCodePointsIII;
  7.2167 -  this.getCharsVACI = java_lang_String_getCharsVACI;
  7.2168 -  this.getCharsVIIACI = java_lang_String_getCharsVIIACI;
  7.2169 -  this.getBytesVIIABI = java_lang_String_getBytesVIIABI;
  7.2170 -  this.getBytesABLjava_lang_String = java_lang_String_getBytesABLjava_lang_String;
  7.2171 -  this.getBytesABLjava_nio_charset_Charset = java_lang_String_getBytesABLjava_nio_charset_Charset;
  7.2172 -  this.getBytesAB = java_lang_String_getBytesAB;
  7.2173 -  this.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object;
  7.2174 -  this.contentEqualsZLjava_lang_StringBuffer = java_lang_String_contentEqualsZLjava_lang_StringBuffer;
  7.2175 -  this.contentEqualsZLjava_lang_CharSequence = java_lang_String_contentEqualsZLjava_lang_CharSequence;
  7.2176 -  this.equalsIgnoreCaseZLjava_lang_String = java_lang_String_equalsIgnoreCaseZLjava_lang_String;
  7.2177 -  this.compareToILjava_lang_String = java_lang_String_compareToILjava_lang_String;
  7.2178 -  this.compareToIgnoreCaseILjava_lang_String = java_lang_String_compareToIgnoreCaseILjava_lang_String;
  7.2179 -  this.regionMatchesZILjava_lang_StringII = java_lang_String_regionMatchesZILjava_lang_StringII;
  7.2180 -  this.regionMatchesZZILjava_lang_StringII = java_lang_String_regionMatchesZZILjava_lang_StringII;
  7.2181 -  this.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI;
  7.2182 -  this.startsWithZLjava_lang_String = java_lang_String_startsWithZLjava_lang_String;
  7.2183 -  this.endsWithZLjava_lang_String = java_lang_String_endsWithZLjava_lang_String;
  7.2184 -  this.hashCodeI = java_lang_String_hashCodeI;
  7.2185 -  this.indexOfII = java_lang_String_indexOfII;
  7.2186 -  this.indexOfIII = java_lang_String_indexOfIII;
  7.2187 -  this.lastIndexOfII = java_lang_String_lastIndexOfII;
  7.2188 -  this.lastIndexOfIII = java_lang_String_lastIndexOfIII;
  7.2189 -  this.indexOfILjava_lang_String = java_lang_String_indexOfILjava_lang_String;
  7.2190 -  this.indexOfILjava_lang_StringI = java_lang_String_indexOfILjava_lang_StringI;
  7.2191 -  this.lastIndexOfILjava_lang_String = java_lang_String_lastIndexOfILjava_lang_String;
  7.2192 -  this.lastIndexOfILjava_lang_StringI = java_lang_String_lastIndexOfILjava_lang_StringI;
  7.2193 -  this.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI;
  7.2194 -  this.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII;
  7.2195 -  this.subSequenceLjava_lang_CharSequenceII = java_lang_String_subSequenceLjava_lang_CharSequenceII;
  7.2196 -  this.concatLjava_lang_StringLjava_lang_String = java_lang_String_concatLjava_lang_StringLjava_lang_String;
  7.2197 -  this.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC;
  7.2198 -  this.matchesZLjava_lang_String = java_lang_String_matchesZLjava_lang_String;
  7.2199 -  this.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence;
  7.2200 -  this.replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String;
  7.2201 -  this.replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String;
  7.2202 -  this.replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence = java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence;
  7.2203 -  this.splitALjava_lang_StringLjava_lang_StringI = java_lang_String_splitALjava_lang_StringLjava_lang_StringI;
  7.2204 -  this.splitALjava_lang_StringLjava_lang_String = java_lang_String_splitALjava_lang_StringLjava_lang_String;
  7.2205 -  this.toLowerCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale;
  7.2206 -  this.toLowerCaseLjava_lang_String = java_lang_String_toLowerCaseLjava_lang_String;
  7.2207 -  this.toUpperCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale;
  7.2208 -  this.toUpperCaseLjava_lang_String = java_lang_String_toUpperCaseLjava_lang_String;
  7.2209 -  this.trimLjava_lang_String = java_lang_String_trimLjava_lang_String;
  7.2210 -  this.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String;
  7.2211 -  this.internLjava_lang_String = java_lang_String_internLjava_lang_String;
  7.2212 -  this.compareToILjava_lang_Object = java_lang_String_compareToILjava_lang_Object;
  7.2213 - */
  7.2214 -
  7.2215 -
  7.2216 -
  7.2217 +// initialize methods on String constants
  7.2218 +java_lang_Object(false);
     8.1 --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Mon Dec 03 22:13:50 2012 +0100
     8.2 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Tue Dec 04 11:21:10 2012 +0100
     8.3 @@ -84,6 +84,9 @@
     8.4              readValue(dis, cd, typeName, attrName);
     8.5          }
     8.6          visitAnnotationEnd(typeName);
     8.7 +        if (cnt == 0) {
     8.8 +            visitAttr(typeName, null, null, null);
     8.9 +        }
    8.10      }
    8.11  
    8.12      private void readValue(DataInputStream dis, ClassData cd, String typeName, String attrName) 
     9.1 --- a/javap/src/main/java/org/apidesign/javap/FieldData.java	Mon Dec 03 22:13:50 2012 +0100
     9.2 +++ b/javap/src/main/java/org/apidesign/javap/FieldData.java	Tue Dec 04 11:21:10 2012 +0100
     9.3 @@ -156,4 +156,13 @@
     9.4      public Vector getAttributes(){
     9.5          return attrs;
     9.6      }
     9.7 +
     9.8 +    public byte[] findAnnotationData(boolean classRetention) {
     9.9 +        String n = classRetention ?
    9.10 +            "RuntimeInvisibleAnnotations" : // NOI18N
    9.11 +            "RuntimeVisibleAnnotations"; // NOI18N
    9.12 +        AttrData[] arr = new AttrData[attrs.size()];
    9.13 +        attrs.copyInto(arr);
    9.14 +        return ClassData.findAttr(n, arr);
    9.15 +    }
    9.16  }
    10.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java	Mon Dec 03 22:13:50 2012 +0100
    10.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java	Tue Dec 04 11:21:10 2012 +0100
    10.3 @@ -57,7 +57,7 @@
    10.4      @JavaScriptBody(
    10.5          args={"el", "r"},
    10.6          body="var e = window.document.getElementById(el.fld_id);\n"
    10.7 -           + "e.onclick = function() { r.runV(); };\n"
    10.8 +           + "e.onclick = function() { r.run__V(); };\n"
    10.9      )
   10.10      public final void addOnClick(Runnable r) {
   10.11          throw new UnsupportedOperationException("Needs JavaScript!");
    11.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Dec 03 22:13:50 2012 +0100
    11.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Dec 04 11:21:10 2012 +0100
    11.3 @@ -82,6 +82,10 @@
    11.4                  return null;
    11.5              }
    11.6          }
    11.7 +        String[] proto = findAnnotation(arrData, jc, 
    11.8 +            "org.apidesign.bck2brwsr.core.JavaScriptPrototype", 
    11.9 +            "container", "prototype"
   11.10 +        );
   11.11          StringArray toInitilize = new StringArray();
   11.12          final String className = className(jc);
   11.13          out.append("\n\n").append(assignClass(className));
   11.14 @@ -92,28 +96,41 @@
   11.15                  out.append("\n  CLS.").append(v.getName()).append(initField(v));
   11.16              }
   11.17          }
   11.18 -        // ClassName sc = jc.getSuperClass();
   11.19 -        String sc = jc.getSuperClassName(); // with _
   11.20 -        if (sc != null) {
   11.21 +        if (proto == null) {
   11.22 +            String sc = jc.getSuperClassName(); // with _
   11.23              out.append("\n    var pp = ").
   11.24                  append(sc.replace('/', '_')).append("(true);");
   11.25              out.append("\n    var p = CLS.prototype = pp;");
   11.26 +            out.append("\n    var c = p;");
   11.27              out.append("\n    var sprcls = pp.constructor.$class;");
   11.28          } else {
   11.29 -            out.append("\n    var p = CLS.prototype;");
   11.30 +            out.append("\n    var p = CLS.prototype = ").append(proto[1]).append(";");
   11.31 +            out.append("\n    var c = ").append(proto[0]).append(";");
   11.32              out.append("\n    var sprcls = null;");
   11.33          }
   11.34          for (MethodData m : jc.getMethods()) {
   11.35 +            byte[] onlyArr = m.findAnnotationData(true);
   11.36 +            String[] only = findAnnotation(onlyArr, jc, 
   11.37 +                "org.apidesign.bck2brwsr.core.JavaScriptOnly", 
   11.38 +                "name", "value"
   11.39 +            );
   11.40 +            if (only != null) {
   11.41 +                if (only[0] != null && only[1] != null) {
   11.42 +                    out.append("\n    p.").append(only[0]).append(" = ")
   11.43 +                        .append(only[1]).append(";");
   11.44 +                }
   11.45 +                continue;
   11.46 +            }
   11.47              if (m.isStatic()) {
   11.48 -                generateStaticMethod("\n    p.", m, toInitilize);
   11.49 +                generateStaticMethod("\n    c.", m, toInitilize);
   11.50              } else {
   11.51 -                generateInstanceMethod("\n    p.", m);
   11.52 +                generateInstanceMethod("\n    c.", m);
   11.53              }
   11.54          }
   11.55 -        out.append("\n    p.constructor = CLS;");
   11.56 -        out.append("\n    p.$instOf_").append(className).append(" = true;");
   11.57 +        out.append("\n    c.constructor = CLS;");
   11.58 +        out.append("\n    c.$instOf_").append(className).append(" = true;");
   11.59          for (String superInterface : jc.getSuperInterfaces()) {
   11.60 -            out.append("\n    p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
   11.61 +            out.append("\n    c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;");
   11.62          }
   11.63          out.append("\n    CLS.$class = java_lang_Class(true);");
   11.64          out.append("\n    CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
   11.65 @@ -131,6 +148,18 @@
   11.66          out.append("\n      return new CLS();");
   11.67          out.append("\n    }");
   11.68          for (FieldData v : jc.getFields()) {
   11.69 +            byte[] onlyArr = v.findAnnotationData(true);
   11.70 +            String[] only = findAnnotation(onlyArr, jc, 
   11.71 +                "org.apidesign.bck2brwsr.core.JavaScriptOnly", 
   11.72 +                "name", "value"
   11.73 +            );
   11.74 +            if (only != null) {
   11.75 +                if (only[0] != null && only[1] != null) {
   11.76 +                    out.append("\n    p.").append(only[0]).append(" = ")
   11.77 +                        .append(only[1]).append(";");
   11.78 +                }
   11.79 +                continue;
   11.80 +            }
   11.81              if (!v.isStatic()) {
   11.82                  out.append("\n    this.fld_").
   11.83                      append(v.getName()).append(initField(v));
   11.84 @@ -153,7 +182,7 @@
   11.85          StringBuilder argsCnt = new StringBuilder();
   11.86          final String mn = findMethodName(m, argsCnt);
   11.87          out.append(prefix).append(mn).append(" = function");
   11.88 -        if (mn.equals("classV")) {
   11.89 +        if (mn.equals("class__V")) {
   11.90              toInitilize.add(className(jc) + "(false)." + mn);
   11.91          }
   11.92          out.append('(');
   11.93 @@ -782,6 +811,7 @@
   11.94          int i = 0;
   11.95          Boolean count = null;
   11.96          boolean array = false;
   11.97 +        sig.append("__");
   11.98          int firstPos = sig.length();
   11.99          while (i < descriptor.length()) {
  11.100              char ch = descriptor.charAt(i++);
  11.101 @@ -792,9 +822,6 @@
  11.102                  case ')':
  11.103                      count = false;
  11.104                      continue;
  11.105 -                case 'A':
  11.106 -                    array = true;
  11.107 -                    break;
  11.108                  case 'B': 
  11.109                  case 'C': 
  11.110                  case 'D': 
  11.111 @@ -805,7 +832,7 @@
  11.112                  case 'Z': 
  11.113                      if (count) {
  11.114                          if (array) {
  11.115 -                            sig.append('A');
  11.116 +                            sig.append("_3");
  11.117                          }
  11.118                          sig.append(ch);
  11.119                          if (ch == 'J' || ch == 'D') {
  11.120 @@ -817,7 +844,7 @@
  11.121                          hasReturnType[0] = true;
  11.122                          sig.insert(firstPos, ch);
  11.123                          if (array) {
  11.124 -                            sig.insert(firstPos, 'A');
  11.125 +                            sig.insert(firstPos, "_3");
  11.126                          }
  11.127                      }
  11.128                      array = false;
  11.129 @@ -829,33 +856,47 @@
  11.130                      continue;
  11.131                  case 'L':
  11.132                      int next = descriptor.indexOf(';', i);
  11.133 +                    String realSig = mangleSig(descriptor, i - 1, next + 1);
  11.134                      if (count) {
  11.135                          if (array) {
  11.136 -                            sig.append('A');
  11.137 +                            sig.append("_3");
  11.138                          }
  11.139 -                        sig.append(ch);
  11.140 -                        sig.append(descriptor.substring(i, next).replace('/', '_'));
  11.141 +                        sig.append(realSig);
  11.142                          cnt.append('0');
  11.143                      } else {
  11.144 -                        sig.insert(firstPos, descriptor.substring(i, next).replace('/', '_'));
  11.145 -                        sig.insert(firstPos, ch);
  11.146 +                        sig.insert(firstPos, realSig);
  11.147                          if (array) {
  11.148 -                            sig.insert(firstPos, 'A');
  11.149 +                            sig.insert(firstPos, "_3");
  11.150                          }
  11.151                          hasReturnType[0] = true;
  11.152                      }
  11.153                      i = next + 1;
  11.154                      continue;
  11.155                  case '[':
  11.156 -                    //arrays++;
  11.157 +                    array = true;
  11.158                      continue;
  11.159                  default:
  11.160 -                    break; // invalid character
  11.161 +                    throw new IllegalStateException("Invalid char: " + ch);
  11.162              }
  11.163          }
  11.164      }
  11.165 +    
  11.166 +    private static String mangleSig(String txt, int first, int last) {
  11.167 +        StringBuilder sb = new StringBuilder();
  11.168 +        for (int i = first; i < last; i++) {
  11.169 +            final char ch = txt.charAt(i);
  11.170 +            switch (ch) {
  11.171 +                case '/': sb.append('_'); break;
  11.172 +                case '_': sb.append("_1"); break;
  11.173 +                case ';': sb.append("_2"); break;
  11.174 +                case '[': sb.append("_3"); break;
  11.175 +                default: sb.append(ch); break;
  11.176 +            }
  11.177 +        }
  11.178 +        return sb.toString();
  11.179 +    }
  11.180  
  11.181 -    private String findMethodName(MethodData m, StringBuilder cnt) {
  11.182 +    private static String findMethodName(MethodData m, StringBuilder cnt) {
  11.183          StringBuilder name = new StringBuilder();
  11.184          if ("<init>".equals(m.getName())) { // NOI18N
  11.185              name.append("cons"); // NOI18N
  11.186 @@ -866,11 +907,11 @@
  11.187          } 
  11.188          
  11.189          boolean hasReturn[] = { false };
  11.190 -        countArgs(findDescriptor(m.getInternalSig()), hasReturn, name, cnt);
  11.191 +        countArgs(m.getInternalSig(), hasReturn, name, cnt);
  11.192          return name.toString();
  11.193      }
  11.194  
  11.195 -    private String findMethodName(String[] mi, StringBuilder cnt, boolean[] hasReturn) {
  11.196 +    static String findMethodName(String[] mi, StringBuilder cnt, boolean[] hasReturn) {
  11.197          StringBuilder name = new StringBuilder();
  11.198          String descr = mi[2];//mi.getDescriptor();
  11.199          String nm= mi[1];
  11.200 @@ -879,7 +920,7 @@
  11.201          } else {
  11.202              name.append(nm);
  11.203          }
  11.204 -        countArgs(findDescriptor(descr), hasReturn, name, cnt);
  11.205 +        countArgs(descr, hasReturn, name, cnt);
  11.206          return name.toString();
  11.207      }
  11.208  
  11.209 @@ -983,10 +1024,6 @@
  11.210          return s;
  11.211      }
  11.212  
  11.213 -    private String findDescriptor(String d) {
  11.214 -        return d.replace('[', 'A');
  11.215 -    }
  11.216 -
  11.217      private boolean javaScriptBody(String prefix, MethodData m, boolean isStatic) throws IOException {
  11.218          byte[] arr = m.findAnnotationData(true);
  11.219          if (arr == null) {
    12.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java	Mon Dec 03 22:13:50 2012 +0100
    12.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java	Tue Dec 04 11:21:10 2012 +0100
    12.3 @@ -73,16 +73,16 @@
    12.4      }
    12.5  
    12.6      void delete(int indx) {
    12.7 -        if (arr == null) {
    12.8 +        if (arr == null || indx < 0 || indx >= arr.length) {
    12.9              return;
   12.10          }
   12.11          String[] tmp = new String[arr.length - 1];
   12.12          for (int i = 0, j = 0; i < arr.length; i++) {
   12.13 -            tmp[j] = arr[i];
   12.14 -            if (j == indx) {
   12.15 -                continue;
   12.16 +            if (i != indx) {
   12.17 +                tmp[j++] = arr[i];
   12.18              }
   12.19          }
   12.20 +        arr = tmp;
   12.21      }
   12.22  
   12.23      int indexOf(String ic) {
    13.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Mon Dec 03 22:13:50 2012 +0100
    13.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java	Tue Dec 04 11:21:10 2012 +0100
    13.3 @@ -29,7 +29,7 @@
    13.4   */
    13.5  public class ArrayTest {
    13.6      @Test public void verifySimpleIntOperation() throws Exception {
    13.7 -            assertExec("CheckTheSum", Array.class, "simpleI", 
    13.8 +            assertExec("CheckTheSum", Array.class, "simple__I", 
    13.9              Double.valueOf(15)
   13.10          );
   13.11      }
   13.12 @@ -39,13 +39,13 @@
   13.13      }
   13.14      
   13.15      @Test public void verifyOperationsOnArrays() throws Exception {
   13.16 -        assertExec("The sum is 105", Array.class, "sumD", 
   13.17 +        assertExec("The sum is 105", Array.class, "sum__D", 
   13.18              Double.valueOf(105)
   13.19          );
   13.20      }
   13.21      
   13.22      @Test public void doesCopyArrayWork() throws Exception {
   13.23 -        assertExec("Returns 'a'", Array.class, "copyArrayC", Double.valueOf('a'));
   13.24 +        assertExec("Returns 'a'", Array.class, "copyArray__C", Double.valueOf('a'));
   13.25      }
   13.26      
   13.27      private static CharSequence codeSeq;
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ByteCodeToJavaScriptTest.java	Tue Dec 04 11:21:10 2012 +0100
    14.3 @@ -0,0 +1,55 @@
    14.4 +/**
    14.5 + * Back 2 Browser Bytecode Translator
    14.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    14.7 + *
    14.8 + * This program is free software: you can redistribute it and/or modify
    14.9 + * it under the terms of the GNU General Public License as published by
   14.10 + * the Free Software Foundation, version 2 of the License.
   14.11 + *
   14.12 + * This program is distributed in the hope that it will be useful,
   14.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14.15 + * GNU General Public License for more details.
   14.16 + *
   14.17 + * You should have received a copy of the GNU General Public License
   14.18 + * along with this program. Look for COPYING file in the top folder.
   14.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
   14.20 + */
   14.21 +package org.apidesign.vm4brwsr;
   14.22 +
   14.23 +import static org.testng.Assert.*;
   14.24 +import org.testng.annotations.Test;
   14.25 +
   14.26 +/**
   14.27 + *
   14.28 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   14.29 + */
   14.30 +public class ByteCodeToJavaScriptTest {
   14.31 +    
   14.32 +    public ByteCodeToJavaScriptTest() {
   14.33 +    }
   14.34 +
   14.35 +    @Test
   14.36 +    public void findMethodNameManglesObjectsCorrectly() {
   14.37 +        StringBuilder cnt = new StringBuilder();
   14.38 +        boolean[] hasReturn = { false };
   14.39 +        String ret = ByteCodeToJavaScript.findMethodName(new String[] { 
   14.40 +            "StringTest", "replace", "(Ljava/lang/String;CC)Ljava/lang/String;"
   14.41 +        }, cnt, hasReturn);
   14.42 +        assertEquals(cnt.toString(), "000", "No doubles or longs");
   14.43 +        assertTrue(hasReturn[0], "Returns string");
   14.44 +        assertEquals(ret, "replace__Ljava_lang_String_2Ljava_lang_String_2CC");
   14.45 +    }
   14.46 +
   14.47 +    @Test
   14.48 +    public void manglingArrays() {
   14.49 +        StringBuilder cnt = new StringBuilder();
   14.50 +        boolean[] hasReturn = { false };
   14.51 +        String ret = ByteCodeToJavaScript.findMethodName(new String[] { 
   14.52 +            "VMinVM", "toJavaScript", "([B)Ljava/lang/String;"
   14.53 +        }, cnt, hasReturn);
   14.54 +        assertEquals(cnt.toString(), "0", "No doubles or longs");
   14.55 +        assertTrue(hasReturn[0], "Returns string");
   14.56 +        assertEquals(ret, "toJavaScript__Ljava_lang_String_2_3B");
   14.57 +    }
   14.58 +}
    15.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Mon Dec 03 22:13:50 2012 +0100
    15.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Tue Dec 04 11:21:10 2012 +0100
    15.3 @@ -117,4 +117,12 @@
    15.4          
    15.5          return constructor(x) == constructor(y);
    15.6      }
    15.7 +    @JavaScriptBody(args = {}, body = "return {};")
    15.8 +    private static Object jsObj() {
    15.9 +        return null;
   15.10 +    }
   15.11 +    
   15.12 +    public static boolean iofObject() {
   15.13 +        return jsObj() instanceof Object;
   15.14 +    }
   15.15  }
    16.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Mon Dec 03 22:13:50 2012 +0100
    16.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Tue Dec 04 11:21:10 2012 +0100
    16.3 @@ -29,42 +29,42 @@
    16.4      @Test public void verifyDefaultDoubleValue() throws Exception {
    16.5          assertExec(
    16.6              "Will be zero",
    16.7 -            Instance.class, "defaultDblValueD",
    16.8 +            Instance.class, "defaultDblValue__D",
    16.9              Double.valueOf(0)
   16.10          );
   16.11      }
   16.12      @Test public void verifyStaticMethodCall() throws Exception {
   16.13          assertExec(
   16.14              "Will be zero",
   16.15 -            InstanceSub.class, "recallDblD",
   16.16 +            InstanceSub.class, "recallDbl__D",
   16.17              Double.valueOf(0)
   16.18          );
   16.19      }
   16.20      @Test public void verifyAssignedByteValue() throws Exception {
   16.21          assertExec(
   16.22              "Will one thirty one",
   16.23 -            Instance.class, "assignedByteValueB",
   16.24 +            Instance.class, "assignedByteValue__B",
   16.25              Double.valueOf(31)
   16.26          );
   16.27      }
   16.28      @Test public void verifyMagicOne() throws Exception {
   16.29          assertExec(
   16.30              "Should be three and something",
   16.31 -            Instance.class, "magicOneD",
   16.32 +            Instance.class, "magicOne__D",
   16.33              Double.valueOf(3.3)
   16.34          );
   16.35      }
   16.36      @Test public void verifyInstanceMethods() throws Exception {
   16.37          assertExec(
   16.38              "Should be eleven as we invoke overwritten method, plus 44",
   16.39 -            Instance.class, "virtualBytesI",
   16.40 +            Instance.class, "virtualBytes__I",
   16.41              Double.valueOf(55)
   16.42          );
   16.43      }
   16.44      @Test public void verifyInterfaceMethods() throws Exception {
   16.45          assertExec(
   16.46              "Retruns default value",
   16.47 -            Instance.class, "interfaceBytesF",
   16.48 +            Instance.class, "interfaceBytes__F",
   16.49              Double.valueOf(31)
   16.50          );
   16.51      }
   16.52 @@ -72,7 +72,7 @@
   16.53      @Test public void isNull() throws Exception {
   16.54          assertExec(
   16.55              "Yes, we are instance",
   16.56 -            Instance.class, "isNullZ",
   16.57 +            Instance.class, "isNull__Z",
   16.58              Double.valueOf(0.0)
   16.59          );
   16.60      }
   16.61 @@ -80,7 +80,7 @@
   16.62      @Test public void isInstanceOf() throws Exception {
   16.63          assertExec(
   16.64              "Yes, we are instance",
   16.65 -            Instance.class, "instanceOfZZ",
   16.66 +            Instance.class, "instanceOf__ZZ",
   16.67              Double.valueOf(1.0), true
   16.68          );
   16.69      }
   16.70 @@ -88,7 +88,7 @@
   16.71      @Test public void notInstanceOf() throws Exception {
   16.72          assertExec(
   16.73              "No, we are not an instance",
   16.74 -            Instance.class, "instanceOfZZ",
   16.75 +            Instance.class, "instanceOf__ZZ",
   16.76              Double.valueOf(0.0), false
   16.77          );
   16.78      }
   16.79 @@ -96,14 +96,14 @@
   16.80      @Test public void verifyCastToClass() throws Exception {
   16.81          assertExec(
   16.82              "Five signals all is good",
   16.83 -            Instance.class, "castsWorkIZ",
   16.84 +            Instance.class, "castsWork__IZ",
   16.85              Double.valueOf(5.0), false
   16.86          );
   16.87      }
   16.88      @Test public void verifyCastToInterface() throws Exception {
   16.89          assertExec(
   16.90              "Five signals all is good",
   16.91 -            Instance.class, "castsWorkIZ",
   16.92 +            Instance.class, "castsWork__IZ",
   16.93              Double.valueOf(5.0), true
   16.94          );
   16.95      }
   16.96 @@ -111,7 +111,7 @@
   16.97      @Test public void sharedConstructor() throws Exception {
   16.98          assertExec(
   16.99              "Constructor of first and 2nd instance should be the same",
  16.100 -            Instance.class, "sharedConstructorZ",
  16.101 +            Instance.class, "sharedConstructor__Z",
  16.102              Double.valueOf(1.0)
  16.103          );
  16.104      }
  16.105 @@ -119,10 +119,18 @@
  16.106      @Test public void differentConstructor() throws Exception {
  16.107          assertExec(
  16.108              "Constructor of X and Y should be the different",
  16.109 -            Instance.class, "differentConstructorZ",
  16.110 +            Instance.class, "differentConstructor__Z",
  16.111              Double.valueOf(0)
  16.112          );
  16.113      }
  16.114 +
  16.115 +    @Test public void jsObjectIsLikeJavaObject() throws Exception {
  16.116 +        assertExec(
  16.117 +            "JavaScript object is instance of Java Object",
  16.118 +            Instance.class, "iofObject__Z",
  16.119 +            Double.valueOf(1)
  16.120 +        );
  16.121 +    }
  16.122      
  16.123      protected String startCompilationWith() {
  16.124          return "org/apidesign/vm4brwsr/Instance";
    17.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Mon Dec 03 22:13:50 2012 +0100
    17.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Tue Dec 04 11:21:10 2012 +0100
    17.3 @@ -29,19 +29,19 @@
    17.4   */
    17.5  public class NumberTest {
    17.6      @Test public void integerFromString() throws Exception {
    17.7 -        assertExec("Can convert string to integer", Integer.class, "parseIntILjava_lang_String",
    17.8 +        assertExec("Can convert string to integer", Integer.class, "parseInt__ILjava_lang_String_2",
    17.9              Double.valueOf(333), "333"
   17.10          );
   17.11      }
   17.12  
   17.13      @Test public void doubleFromString() throws Exception {
   17.14 -        assertExec("Can convert string to double", Double.class, "parseDoubleDLjava_lang_String",
   17.15 +        assertExec("Can convert string to double", Double.class, "parseDouble__DLjava_lang_String_2",
   17.16              Double.valueOf(33.3), "33.3"
   17.17          );
   17.18      }
   17.19  
   17.20      @Test public void autoboxDouble() throws Exception {
   17.21 -        assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToStringLjava_lang_String",
   17.22 +        assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToString__Ljava_lang_String_2",
   17.23              "3.3"
   17.24          );
   17.25      }
   17.26 @@ -51,7 +51,7 @@
   17.27      }
   17.28  
   17.29      @Test public void jslog1000() throws Exception {
   17.30 -        assertExec("log_10(1000) == 3", Math.class, "log10DD", 
   17.31 +        assertExec("log_10(1000) == 3", Math.class, "log10__DD", 
   17.32              Double.valueOf(3.0), 1000.0
   17.33          );
   17.34      }
   17.35 @@ -60,20 +60,20 @@
   17.36          assertEquals(3, Numbers.rem(303, 10));
   17.37      }
   17.38      @Test public void jsRem() throws Exception {
   17.39 -        assertExec("Should be three", Numbers.class, "remIII", 
   17.40 +        assertExec("Should be three", Numbers.class, "rem__III", 
   17.41              Double.valueOf(3.0), 303, 10
   17.42          );
   17.43      }
   17.44      
   17.45      @Test public void deserializeInt() throws Exception {
   17.46          int exp = Numbers.deserInt();
   17.47 -        assertExec("Should be the same", Numbers.class, "deserIntI", 
   17.48 +        assertExec("Should be the same", Numbers.class, "deserInt__I", 
   17.49              Double.valueOf(exp)
   17.50          );
   17.51      }
   17.52  
   17.53      @Test public void deserializeSimpleLong() throws Exception {
   17.54 -        assertExec("Should be 3454", Numbers.class, "deserLongJAB", 
   17.55 +        assertExec("Should be 3454", Numbers.class, "deserLong__J_3B", 
   17.56              Double.valueOf(3454), 
   17.57              new byte[] { (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)13, (byte)126 }
   17.58          );
   17.59 @@ -84,7 +84,7 @@
   17.60              (byte)64, (byte)8, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0
   17.61          };
   17.62          long exp = Numbers.deserLong(arr);
   17.63 -        assertExec("Should be " + exp, "org_apidesign_vm4brwsr_Numbers_deserLongJAB", 
   17.64 +        assertExec("Should be " + exp, "org_apidesign_vm4brwsr_Numbers_deserLong__JAB", 
   17.65              Double.valueOf(exp), arr);
   17.66      }
   17.67      */
   17.68 @@ -97,7 +97,7 @@
   17.69      
   17.70      @Test public void deserializeFloatInJS() throws Exception {
   17.71          float f = 54324.32423f;
   17.72 -        assertExec("Should be the same", Numbers.class, "deserFloatF", 
   17.73 +        assertExec("Should be the same", Numbers.class, "deserFloat__F", 
   17.74              Double.valueOf(f)
   17.75          );
   17.76      }
   17.77 @@ -110,7 +110,7 @@
   17.78      
   17.79      @Test public void deserializeDoubleInJS() throws Exception {
   17.80          double f = 3.0;
   17.81 -        assertExec("Should be the same", Numbers.class, "deserDoubleD", f);
   17.82 +        assertExec("Should be the same", Numbers.class, "deserDouble__D", f);
   17.83      }
   17.84      /*
   17.85      @Test public void serDouble() throws IOException {
   17.86 @@ -131,7 +131,7 @@
   17.87      @Test public void fiveInStringJS() throws Exception {
   17.88          String s = Numbers.intToString();
   17.89          assertExec("Should be the same: " + s, 
   17.90 -            Numbers.class, "intToStringLjava_lang_String", 
   17.91 +            Numbers.class, "intToString__Ljava_lang_String_2", 
   17.92              s
   17.93          );
   17.94      }
   17.95 @@ -139,7 +139,7 @@
   17.96      @Test public void sevenInStringJS() throws Exception {
   17.97          String s = Numbers.floatToString();
   17.98          assertExec("Should be the same: " + s, 
   17.99 -            Numbers.class, "floatToStringLjava_lang_String", 
  17.100 +            Numbers.class, "floatToString__Ljava_lang_String_2", 
  17.101              s
  17.102          );
  17.103      }
    18.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Mon Dec 03 22:13:50 2012 +0100
    18.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Tue Dec 04 11:21:10 2012 +0100
    18.3 @@ -36,7 +36,7 @@
    18.4      @Test public void threePlusFour() throws Exception {
    18.5          assertExec(
    18.6              "Should be seven", 
    18.7 -            StaticMethod.class, "sumIII", 
    18.8 +            StaticMethod.class, "sum__III", 
    18.9              Double.valueOf(7), 
   18.10              3, 4
   18.11          );
   18.12 @@ -45,7 +45,7 @@
   18.13      @Test public void checkReallyInitializedValues() throws Exception {
   18.14          assertExec(
   18.15              "Return true", 
   18.16 -            StaticMethod.class, "isNullZ", 
   18.17 +            StaticMethod.class, "isNull__Z", 
   18.18              Double.valueOf(1)
   18.19          );
   18.20      }
   18.21 @@ -53,7 +53,7 @@
   18.22      @Test public void powerOfThree() throws Exception {
   18.23          assertExec(
   18.24              "Should be nine", 
   18.25 -            StaticMethod.class, "powerFF", 
   18.26 +            StaticMethod.class, "power__FF", 
   18.27              Double.valueOf(9),
   18.28              3.0f
   18.29          );
   18.30 @@ -62,7 +62,7 @@
   18.31      @Test public void minusOne() throws Exception {
   18.32          assertExec(
   18.33              "Should be minus one", 
   18.34 -            StaticMethod.class, "minusOneI", 
   18.35 +            StaticMethod.class, "minusOne__I", 
   18.36              Double.valueOf(-1)
   18.37          );
   18.38      }
   18.39 @@ -70,7 +70,7 @@
   18.40      @Test public void doubleWithoutLong() throws Exception {
   18.41          assertExec(
   18.42              "Should be two",
   18.43 -            StaticMethod.class, "minusDDJ", 
   18.44 +            StaticMethod.class, "minus__DDJ", 
   18.45              Double.valueOf(2),
   18.46              3.0d, 1l
   18.47          );
   18.48 @@ -79,7 +79,7 @@
   18.49      @Test public void divAndRound() throws Exception {
   18.50          assertExec(
   18.51              "Should be rounded to one",
   18.52 -            StaticMethod.class, "divIBD", 
   18.53 +            StaticMethod.class, "div__IBD", 
   18.54              Double.valueOf(1),
   18.55              3, 3.75
   18.56          );
   18.57 @@ -87,7 +87,7 @@
   18.58      @Test public void mixedMethodFourParams() throws Exception {
   18.59          assertExec(
   18.60              "Should be two",
   18.61 -            StaticMethod.class, "mixIIJBD", 
   18.62 +            StaticMethod.class, "mix__IIJBD", 
   18.63              Double.valueOf(20),
   18.64              2, 10l, 5, 2.0
   18.65          );
   18.66 @@ -95,7 +95,7 @@
   18.67      @Test public void factRec() throws Exception {
   18.68          assertExec(
   18.69              "Factorial of 5 is 120",
   18.70 -            StaticMethod.class, "factRecJI", 
   18.71 +            StaticMethod.class, "factRec__JI", 
   18.72              Double.valueOf(120),
   18.73              5
   18.74          );
   18.75 @@ -103,7 +103,7 @@
   18.76      @Test public void factIter() throws Exception {
   18.77          assertExec(
   18.78              "Factorial of 5 is 120",
   18.79 -            StaticMethod.class, "factIterJI", 
   18.80 +            StaticMethod.class, "factIter__JI", 
   18.81              Double.valueOf(120),
   18.82              5
   18.83          );
   18.84 @@ -112,7 +112,7 @@
   18.85      @Test public void xor() throws Exception {
   18.86          assertExec(
   18.87              "Xor is 4",
   18.88 -            StaticMethod.class, "xorJIJ",
   18.89 +            StaticMethod.class, "xor__JIJ",
   18.90              Double.valueOf(4),
   18.91              7,
   18.92              3
   18.93 @@ -122,7 +122,7 @@
   18.94      @Test public void or() throws Exception {
   18.95          assertExec(
   18.96              "Or will be 7",
   18.97 -            StaticMethod.class, "orOrAndJZII",
   18.98 +            StaticMethod.class, "orOrAnd__JZII",
   18.99              Double.valueOf(7),
  18.100              true,
  18.101              4,
  18.102 @@ -132,14 +132,14 @@
  18.103      @Test public void nullCheck() throws Exception {
  18.104          assertExec(
  18.105              "Returns nothing",
  18.106 -            StaticMethod.class, "noneLjava_lang_ObjectII",
  18.107 +            StaticMethod.class, "none__Ljava_lang_Object_2II",
  18.108              null, 1, 3
  18.109          );
  18.110      }
  18.111      @Test public void and() throws Exception {
  18.112          assertExec(
  18.113              "And will be 3",
  18.114 -            StaticMethod.class, "orOrAndJZII",
  18.115 +            StaticMethod.class, "orOrAnd__JZII",
  18.116              Double.valueOf(3),
  18.117              false,
  18.118              7,
  18.119 @@ -149,7 +149,7 @@
  18.120      @Test public void inc4() throws Exception {
  18.121          assertExec(
  18.122              "It will be 4",
  18.123 -            StaticMethod.class, "inc4I",
  18.124 +            StaticMethod.class, "inc4__I",
  18.125              Double.valueOf(4)
  18.126          );
  18.127      }
  18.128 @@ -162,7 +162,7 @@
  18.129      @Test public void shiftLeftInJS() throws Exception {
  18.130          assertExec(
  18.131              "Setting 9th bit",
  18.132 -            StaticMethod.class, "shiftLeftIII",
  18.133 +            StaticMethod.class, "shiftLeft__III",
  18.134              Double.valueOf(256),
  18.135              1, 8
  18.136          );
  18.137 @@ -176,7 +176,7 @@
  18.138      @Test public void shiftRightInJS() throws Exception {
  18.139          assertExec(
  18.140              "Get -1",
  18.141 -            StaticMethod.class, "shiftArithmRightIIIZ",
  18.142 +            StaticMethod.class, "shiftArithmRight__IIIZ",
  18.143              Double.valueOf(-1),
  18.144              -8, 3, true
  18.145          );
  18.146 @@ -189,7 +189,7 @@
  18.147      @Test public void unsignedShiftRightInJS() throws Exception {
  18.148          assertExec(
  18.149              "Get -1",
  18.150 -            StaticMethod.class, "shiftArithmRightIIIZ",
  18.151 +            StaticMethod.class, "shiftArithmRight__IIIZ",
  18.152              Double.valueOf(1),
  18.153              8, 3, false
  18.154          );
  18.155 @@ -198,7 +198,7 @@
  18.156      @Test public void javaScriptBody() throws Exception {
  18.157          assertExec(
  18.158              "JavaScript string",
  18.159 -            StaticMethod.class, "i2sLjava_lang_StringII",
  18.160 +            StaticMethod.class, "i2s__Ljava_lang_String_2II",
  18.161              "333",
  18.162              330, 3
  18.163          );
  18.164 @@ -207,7 +207,7 @@
  18.165      @Test public void switchJarda() throws Exception {
  18.166          assertExec(
  18.167              "The expected value",
  18.168 -            StaticMethod.class, "swtchLjava_lang_StringI",
  18.169 +            StaticMethod.class, "swtch__Ljava_lang_String_2I",
  18.170              "Jarda",
  18.171              0
  18.172          );
  18.173 @@ -216,7 +216,7 @@
  18.174      @Test public void switchDarda() throws Exception {
  18.175          assertExec(
  18.176              "The expected value",
  18.177 -            StaticMethod.class, "swtchLjava_lang_StringI",
  18.178 +            StaticMethod.class, "swtch__Ljava_lang_String_2I",
  18.179              "Darda",
  18.180              1
  18.181          );
  18.182 @@ -224,7 +224,7 @@
  18.183      @Test public void switchParda() throws Exception {
  18.184          assertExec(
  18.185              "The expected value",
  18.186 -            StaticMethod.class, "swtch2Ljava_lang_StringI",
  18.187 +            StaticMethod.class, "swtch2__Ljava_lang_String_2I",
  18.188              "Parda",
  18.189              22
  18.190          );
  18.191 @@ -232,7 +232,7 @@
  18.192      @Test public void switchMarda() throws Exception {
  18.193          assertExec(
  18.194              "The expected value",
  18.195 -            StaticMethod.class, "swtchLjava_lang_StringI",
  18.196 +            StaticMethod.class, "swtch__Ljava_lang_String_2I",
  18.197              "Marda",
  18.198              -433
  18.199          );
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringArrayTest.java	Tue Dec 04 11:21:10 2012 +0100
    19.3 @@ -0,0 +1,50 @@
    19.4 +/**
    19.5 + * Back 2 Browser Bytecode Translator
    19.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    19.7 + *
    19.8 + * This program is free software: you can redistribute it and/or modify
    19.9 + * it under the terms of the GNU General Public License as published by
   19.10 + * the Free Software Foundation, version 2 of the License.
   19.11 + *
   19.12 + * This program is distributed in the hope that it will be useful,
   19.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   19.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   19.15 + * GNU General Public License for more details.
   19.16 + *
   19.17 + * You should have received a copy of the GNU General Public License
   19.18 + * along with this program. Look for COPYING file in the top folder.
   19.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
   19.20 + */
   19.21 +package org.apidesign.vm4brwsr;
   19.22 +
   19.23 +import org.testng.annotations.Test;
   19.24 +import static org.testng.Assert.*;
   19.25 +
   19.26 +public class StringArrayTest {
   19.27 +    @Test public void deleteMinusIndex() throws Exception {
   19.28 +        String[] arr = { "Ahoj", "Kluci" };
   19.29 +        StringArray list = StringArray.asList(arr);
   19.30 +        list.delete(-1);
   19.31 +        assertEquals(list.toArray().length, 2, "No element removed");
   19.32 +    }
   19.33 +    @Test public void deleteTooHighIndex() throws Exception {
   19.34 +        String[] arr = { "Ahoj", "Kluci" };
   19.35 +        StringArray list = StringArray.asList(arr);
   19.36 +        list.delete(5);
   19.37 +        assertEquals(list.toArray().length, 2, "No element removed");
   19.38 +    }
   19.39 +    @Test public void deleteFirst() throws Exception {
   19.40 +        String[] arr = { "Ahoj", "Kluci" };
   19.41 +        StringArray list = StringArray.asList(arr);
   19.42 +        list.delete(0);
   19.43 +        assertEquals(list.toArray().length, 1, "First element removed");
   19.44 +        assertEquals(list.toArray()[0], "Kluci");
   19.45 +    }
   19.46 +    @Test public void deleteSecond() throws Exception {
   19.47 +        String[] arr = { "Ahoj", "Kluci" };
   19.48 +        StringArray list = StringArray.asList(arr);
   19.49 +        list.delete(1);
   19.50 +        assertEquals(list.toArray().length, 1, "Second element removed");
   19.51 +        assertEquals(list.toArray()[0], "Ahoj");
   19.52 +    }
   19.53 +}
    20.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Mon Dec 03 22:13:50 2012 +0100
    20.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java	Tue Dec 04 11:21:10 2012 +0100
    20.3 @@ -18,7 +18,6 @@
    20.4  package org.apidesign.vm4brwsr;
    20.5  
    20.6  import javax.script.Invocable;
    20.7 -import javax.script.ScriptException;
    20.8  import org.testng.annotations.Test;
    20.9  import static org.testng.Assert.*;
   20.10  import org.testng.annotations.BeforeClass;
   20.11 @@ -31,7 +30,7 @@
   20.12      @Test public void firstChar() throws Exception {
   20.13          assertExec(
   20.14              "First char in Hello is H",
   20.15 -            StringSample.class, "sayHelloCI",
   20.16 +            StringSample.class, "sayHello__CI",
   20.17              72, 0
   20.18          );
   20.19      }
   20.20 @@ -39,7 +38,7 @@
   20.21      @Test public void fromChars() throws Exception {
   20.22          assertExec(
   20.23              "First char in Hello is ABC",
   20.24 -            StringSample.class, "fromCharsLjava_lang_StringCCC",
   20.25 +            StringSample.class, "fromChars__Ljava_lang_String_2CCC",
   20.26              "ABC", 'A', 'B', 'C'
   20.27          );
   20.28      }
   20.29 @@ -47,7 +46,7 @@
   20.30      @Test public void concatChars() throws Exception {
   20.31          assertExec(
   20.32              "Composing yields ABC",
   20.33 -            StringSample.class, "charsLjava_lang_StringCCC",
   20.34 +            StringSample.class, "chars__Ljava_lang_String_2CCC",
   20.35              "ABC", 'A', 'B', 'C'
   20.36          );
   20.37      }
   20.38 @@ -55,7 +54,7 @@
   20.39      @Test public void concatCharsFromInts() throws Exception {
   20.40          assertExec(
   20.41              "Composing yields ABC",
   20.42 -            StringSample.class, "charsFromNumbersLjava_lang_String",
   20.43 +            StringSample.class, "charsFromNumbers__Ljava_lang_String_2",
   20.44              "ABC"
   20.45          );
   20.46      }
   20.47 @@ -63,7 +62,7 @@
   20.48      @Test public void concatCharsFromChars() throws Exception {
   20.49          assertExec(
   20.50              "Composing yields ABC",
   20.51 -            StringSample.class, "charsFromCharsLjava_lang_String",
   20.52 +            StringSample.class, "charsFromChars__Ljava_lang_String_2",
   20.53              "ABC"
   20.54          );
   20.55      }
   20.56 @@ -71,7 +70,7 @@
   20.57      @Test public void instanceOfWorks() throws Exception {
   20.58          assertExec(
   20.59              "It is string",
   20.60 -            StringSample.class, "isStringInstanceZ",
   20.61 +            StringSample.class, "isStringInstance__Z",
   20.62              Double.valueOf(1.0)
   20.63          );
   20.64      }
   20.65 @@ -79,7 +78,7 @@
   20.66      @Test(timeOut=10000) public void toStringConcatenation() throws Exception {
   20.67          assertExec(
   20.68              "Five executions should generate 5Hello World!",
   20.69 -            StringSample.class, "toStringTestLjava_lang_StringI",
   20.70 +            StringSample.class, "toStringTest__Ljava_lang_String_2I",
   20.71              "Hello World!5", 5
   20.72          );
   20.73      }
   20.74 @@ -90,7 +89,7 @@
   20.75      @Test(timeOut=10000) public void stringStringConcat() throws Exception {
   20.76          assertExec(
   20.77              "Composes strings OK",
   20.78 -            StringSample.class, "concatStringsLjava_lang_String",
   20.79 +            StringSample.class, "concatStrings__Ljava_lang_String_2",
   20.80              "Hello World!1" + "\\\n\r\t"
   20.81          );
   20.82      }
   20.83 @@ -98,21 +97,21 @@
   20.84      @Test public void equalsAndSubstring() throws Exception {
   20.85          assertExec(
   20.86              "Composes are OK",
   20.87 -            StringSample.class, "equalToHelloZII",
   20.88 +            StringSample.class, "equalToHello__ZII",
   20.89              true, 0, 5
   20.90          );
   20.91      }
   20.92      @Test public void replaceChars() throws Exception {
   20.93          assertExec(
   20.94              "Can replace slashes by underscores",
   20.95 -            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
   20.96 +            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
   20.97              "x_y_z", "x/y/z", '/', '_'
   20.98          );
   20.99      }
  20.100      @Test public void replaceIntChars() throws Exception {
  20.101          assertExec(
  20.102              "Can replace slashes by underscores",
  20.103 -            StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC",
  20.104 +            StringSample.class, "replace__Ljava_lang_String_2Ljava_lang_String_2CC",
  20.105              "x_y_z", "x/y/z", (int)'/', (int)'_'
  20.106          );
  20.107      }
  20.108 @@ -120,7 +119,7 @@
  20.109      @Test public void insertBuilder() throws Exception {
  20.110          assertExec(
  20.111              "Can insert something into a buffer?",
  20.112 -            StringSample.class, "insertBufferLjava_lang_String",
  20.113 +            StringSample.class, "insertBuffer__Ljava_lang_String_2",
  20.114              "Ahojdo!"
  20.115          );
  20.116      }
  20.117 @@ -130,7 +129,7 @@
  20.118          int jh = StringSample.hashCode(j);
  20.119          assertExec(
  20.120              "Hashcode is the same " +jh,
  20.121 -            StringSample.class, "hashCodeILjava_lang_String",
  20.122 +            StringSample.class, "hashCode__ILjava_lang_String_2",
  20.123              Double.valueOf(jh), j
  20.124          );
  20.125      }
  20.126 @@ -139,28 +138,28 @@
  20.127          int jh = StringSample.hashCode(j);
  20.128          assertExec(
  20.129              "Hashcode is the same " + jh,
  20.130 -            StringSample.class, "hashCodeILjava_lang_String",
  20.131 +            StringSample.class, "hashCode__ILjava_lang_String_2",
  20.132              Double.valueOf(jh), j
  20.133          );
  20.134      }
  20.135      @Test public void stringSwitch1() throws Exception {
  20.136          assertExec(
  20.137              "Get one",
  20.138 -            StringSample.class, "stringSwitchILjava_lang_String",
  20.139 +            StringSample.class, "stringSwitch__ILjava_lang_String_2",
  20.140              Double.valueOf(1), "jedna"
  20.141          );
  20.142      }
  20.143      @Test public void stringSwitch2() throws Exception {
  20.144          assertExec(
  20.145              "Get two",
  20.146 -            StringSample.class, "stringSwitchILjava_lang_String",
  20.147 +            StringSample.class, "stringSwitch__ILjava_lang_String_2",
  20.148              Double.valueOf(2), "dve"
  20.149          );
  20.150      }
  20.151      @Test public void stringSwitchDefault() throws Exception {
  20.152          assertExec(
  20.153              "Get -1",
  20.154 -            StringSample.class, "stringSwitchILjava_lang_String",
  20.155 +            StringSample.class, "stringSwitch__ILjava_lang_String_2",
  20.156              Double.valueOf(-1), "none"
  20.157          );
  20.158      }
  20.159 @@ -169,7 +168,7 @@
  20.160          assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane");
  20.161          assertExec(
  20.162              "One A and one B adds to 3",
  20.163 -            StringSample.class, "countABILjava_lang_String",
  20.164 +            StringSample.class, "countAB__ILjava_lang_String_2",
  20.165              Double.valueOf(3), "Ahoj Bedo!"
  20.166          );
  20.167          
    21.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java	Mon Dec 03 22:13:50 2012 +0100
    21.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java	Tue Dec 04 11:21:10 2012 +0100
    21.3 @@ -43,7 +43,7 @@
    21.4  
    21.5      @JavaScriptBody(args = { "self", "n" }, 
    21.6          body=
    21.7 -          "var cls = n.replaceLjava_lang_StringCC(n,'/','_').toString();"
    21.8 +          "var cls = n.replace__Ljava_lang_String_2CC(n,'/','_').toString();"
    21.9          + "var glb = self.fld_global;"
   21.10          + "var vm = self.fld_vm;"
   21.11          + "if (glb[cls]) return false;"
    22.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java	Mon Dec 03 22:13:50 2012 +0100
    22.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java	Tue Dec 04 11:21:10 2012 +0100
    22.3 @@ -53,7 +53,7 @@
    22.4          sb.append("\n  var glb = global;");
    22.5          sb.append("\n  lazyVM.prototype.loadClass = function(res, name) {");
    22.6          sb.append("\n    var script = org_apidesign_vm4brwsr_VMLazy(true)."
    22.7 -            + "toJavaScriptLjava_lang_StringLjava_lang_ObjectLjava_lang_ObjectAB("
    22.8 +            + "toJavaScript__Ljava_lang_String_2Ljava_lang_Object_2Ljava_lang_Object_2_3B("
    22.9              + "  glb, self,"
   22.10              + "  loader.get(res + '.class')"
   22.11              + ");");
   22.12 @@ -77,13 +77,13 @@
   22.13      
   22.14      @Test public void invokeStaticMethod() throws Exception {
   22.15          assertExec("Trying to get -1", "test", Double.valueOf(-1),
   22.16 -            "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI"
   22.17 +            "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOne__I"
   22.18          );
   22.19      }
   22.20  
   22.21      @Test public void loadDependantClass() throws Exception {
   22.22          assertExec("Trying to get zero", "test", Double.valueOf(0),
   22.23 -            "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDblD"
   22.24 +            "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDbl__D"
   22.25          );
   22.26      }
   22.27  
    23.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Mon Dec 03 22:13:50 2012 +0100
    23.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Tue Dec 04 11:21:10 2012 +0100
    23.3 @@ -42,7 +42,7 @@
    23.4          Object ret;
    23.5          try {
    23.6              ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_'), true);
    23.7 -            ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr);
    23.8 +            ret = code.invokeMethod(ret, "toJavaScript__Ljava_lang_String_2_3B", arr);
    23.9          } catch (Exception ex) {
   23.10              File f = File.createTempFile("execution", ".js");
   23.11              FileWriter w = new FileWriter(f);