# HG changeset patch # User Lubomir Nerad # Date 1354542289 -3600 # Node ID 8bd4adaf6590706525297c7013289856cfa10afd # Parent 3ee23267706c70d6f0b141ee6029fd83c533d578# Parent 2177242dff06697883dda28ee0840e154f685899 Merge with trunk diff -r 3ee23267706c -r 8bd4adaf6590 core/pom.xml --- a/core/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/core/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,12 +5,12 @@ org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr core - 1.0-SNAPSHOT - core + 0.3-SNAPSHOT + Core JS Annotations http://maven.apache.org @@ -36,4 +36,6 @@ test + Contains esential annotations for associating JavaScript code with +methods and classes. diff -r 3ee23267706c -r 8bd4adaf6590 core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptOnly.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptOnly.java Mon Dec 03 14:44:49 2012 +0100 @@ -0,0 +1,37 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.bck2brwsr.core; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** Don't include given field or method in generated JavaScript. Rather + * generate completely independent JavaScript code. + * + * @author Jaroslav Tulach + */ +@Retention(RetentionPolicy.CLASS) +@Target({ ElementType.METHOD, ElementType.FIELD }) +public @interface JavaScriptOnly { + /** name of the variable to assign given value to */ + String name() default ""; + /** value to assign to given field */ + String value() default ""; +} diff -r 3ee23267706c -r 8bd4adaf6590 core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptPrototype.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/JavaScriptPrototype.java Mon Dec 03 14:44:49 2012 +0100 @@ -0,0 +1,41 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.bck2brwsr.core; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** Controls how JavaScript inheritance should be handled. + * @author Jaroslav Tulach + */ +@Retention(RetentionPolicy.CLASS) +@Target({ ElementType.TYPE }) +public @interface JavaScriptPrototype { + /** Expression that identifies the function where all methods + * should be added into. + * @return name of function to contain methods found in given class + */ + String container(); + /** Expression that defines the way to construct prototype for this + * class. + * @return expression to construct prototype + */ + String prototype(); +} diff -r 3ee23267706c -r 8bd4adaf6590 core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java --- a/core/src/main/java/org/apidesign/bck2brwsr/core/NoJavaScript.java Thu Nov 29 20:19:00 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/** - * Back 2 Browser Bytecode Translator - * Copyright (C) 2012 Jaroslav Tulach - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. Look for COPYING file in the top folder. - * If not, see http://opensource.org/licenses/GPL-2.0. - */ -package org.apidesign.bck2brwsr.core; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** Don't include given field or method in generated JavaScript. - * - * @author Jaroslav Tulach - */ -@Retention(RetentionPolicy.CLASS) -@Target({ ElementType.METHOD, ElementType.FIELD }) -public @interface NoJavaScript { - -} diff -r 3ee23267706c -r 8bd4adaf6590 emul/pom.xml --- a/emul/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,11 +5,11 @@ org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr emul - 1.0-SNAPSHOT + 0.3-SNAPSHOT Java API Emulation http://maven.apache.org @@ -19,7 +19,7 @@ org.apidesign.bck2brwsr core - 1.0-SNAPSHOT + 0.3-SNAPSHOT jar diff -r 3ee23267706c -r 8bd4adaf6590 emul/src/main/java/java/lang/AbstractStringBuilder.java --- a/emul/src/main/java/java/lang/AbstractStringBuilder.java Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/src/main/java/java/lang/AbstractStringBuilder.java Mon Dec 03 14:44:49 2012 +0100 @@ -602,7 +602,7 @@ */ @JavaScriptBody( args={ "self", "i" }, - body="return java_lang_AbstractStringBuilder_appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" + body="return java_lang_AbstractStringBuilder(true).appendLjava_lang_AbstractStringBuilderLjava_lang_String(self,i.toString());" ) public AbstractStringBuilder append(int i) { if (i == Integer.MIN_VALUE) { diff -r 3ee23267706c -r 8bd4adaf6590 emul/src/main/java/java/lang/ClassLoader.java --- a/emul/src/main/java/java/lang/ClassLoader.java Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/src/main/java/java/lang/ClassLoader.java Mon Dec 03 14:44:49 2012 +0100 @@ -29,6 +29,7 @@ import java.net.URL; import java.util.Enumeration; import java.util.NoSuchElementException; +import org.apidesign.bck2brwsr.core.JavaScriptBody; /** * A class loader is an object that is responsible for loading classes. The @@ -147,6 +148,7 @@ */ public abstract class ClassLoader { + @JavaScriptBody(args = {}, body = "") private static native void registerNatives(); static { registerNatives(); diff -r 3ee23267706c -r 8bd4adaf6590 emul/src/main/java/java/lang/Object.java --- a/emul/src/main/java/java/lang/Object.java Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/src/main/java/java/lang/Object.java Mon Dec 03 14:44:49 2012 +0100 @@ -25,6 +25,9 @@ package java.lang; +import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.core.JavaScriptPrototype; + /** * Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, @@ -34,8 +37,10 @@ * @see java.lang.Class * @since JDK1.0 */ +@JavaScriptPrototype(container = "Object.prototype", prototype = "new Object") public class Object { + @JavaScriptBody(args = {}, body = "") private static native void registerNatives(); static { registerNatives(); diff -r 3ee23267706c -r 8bd4adaf6590 emul/src/main/java/java/lang/String.java --- a/emul/src/main/java/java/lang/String.java Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/src/main/java/java/lang/String.java Mon Dec 03 14:44:49 2012 +0100 @@ -25,8 +25,11 @@ package java.lang; +import java.util.Comparator; import org.apidesign.bck2brwsr.core.ExtraJavaScript; -import java.util.Comparator; +import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.core.JavaScriptOnly; +import org.apidesign.bck2brwsr.core.JavaScriptPrototype; /** * The String class represents character strings. All @@ -99,25 +102,29 @@ @ExtraJavaScript( resource="/org/apidesign/vm4brwsr/emul/java_lang_String.js", - processByteCode=false + processByteCode=true ) +@JavaScriptPrototype(container = "String.prototype", prototype = "new String") public final class String implements java.io.Serializable, Comparable, CharSequence { - /** The value is used for character storage. */ - private final char value[]; - - /** The offset is the first index of the storage that is used. */ - private final int offset; - - /** The count is the number of characters in the String. */ - private final int count; - + @JavaScriptOnly /** Cache the hash code for the string */ private int hash; // Default to 0 + + /** real string to delegate to */ + private Object r; /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L; + + @JavaScriptOnly(name="toString", value="function() { return this.fld_r; }") + private static void jsToString() { + } + + @JavaScriptOnly(name="valueOf", value="function() { return this.toString().valueOf(); }") + private static void jsValudOf() { + } /** * Class String is special cased within the Serialization Stream Protocol. @@ -140,9 +147,7 @@ * unnecessary since Strings are immutable. */ public String() { - this.offset = 0; - this.count = 0; - this.value = new char[0]; + this.r = ""; } /** @@ -156,23 +161,7 @@ * A {@code String} */ public String(String original) { - int size = original.count; - char[] originalValue = original.value; - char[] v; - if (originalValue.length > size) { - // The array representing the String is bigger than the new - // String itself. Perhaps this constructor is being called - // in order to trim the baggage, so make a copy of the array. - int off = original.offset; - v = AbstractStringBuilder.copyOfRange(originalValue, off, off+size); - } else { - // The array representing the String is the same - // size as the String, so no point in making a copy. - v = originalValue; - } - this.offset = 0; - this.count = size; - this.value = v; + this.r = original.toString(); } /** @@ -184,11 +173,13 @@ * @param value * The initial value of the string */ + @JavaScriptBody(args = { "self", "charArr" }, body= + "for (var i = 0; i < charArr.length; i++) {\n" + + " if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" + + "}\n" + + "self.fld_r = charArr.join('');\n" + ) public String(char value[]) { - int size = value.length; - this.offset = 0; - this.count = size; - this.value = AbstractStringBuilder.copyOf(value, size); } /** @@ -212,20 +203,14 @@ * If the {@code offset} and {@code count} arguments index * characters outside the bounds of the {@code value} array */ + @JavaScriptBody(args = { "self", "charArr", "off", "cnt" }, body = + "var up = off + cnt;\n" + + "for (var i = off; i < up; i++) {\n" + + " if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" + + "}\n" + + "self.fld_r = charArr.slice(off, up).join(\"\");\n" + ) public String(char value[], int offset, int count) { - if (offset < 0) { - throw new StringIndexOutOfBoundsException(offset); - } - if (count < 0) { - throw new StringIndexOutOfBoundsException(count); - } - // Note: offset or count might be near -1>>>1. - if (offset > value.length - count) { - throw new StringIndexOutOfBoundsException(offset + count); - } - this.offset = 0; - this.count = count; - this.value = AbstractStringBuilder.copyOfRange(value, offset, offset+count); } /** @@ -292,9 +277,7 @@ Character.toSurrogates(c, v, j++); } - this.value = v; - this.count = n; - this.offset = 0; + this.r = new String(v, 0, n); } /** @@ -351,9 +334,7 @@ value[i] = (char) (hibyte | (ascii[i + offset] & 0xff)); } } - this.offset = 0; - this.count = count; - this.value = value; + this.r = new String(value, 0, count); } /** @@ -578,9 +559,7 @@ for (int i = 0; i < length; i++) { v[i] = (char)bytes[offset++]; } - this.offset = 0; - this.count = v.length; - this.value = v; + this.r = new String(v, 0, v.length); } /** @@ -613,10 +592,7 @@ * A {@code StringBuffer} */ public String(StringBuffer buffer) { - String result = buffer.toString(); - this.value = result.value; - this.count = result.count; - this.offset = result.offset; + this.r = buffer.toString(); } /** @@ -635,10 +611,7 @@ * @since 1.5 */ public String(StringBuilder builder) { - String result = builder.toString(); - this.value = result.value; - this.count = result.count; - this.offset = result.offset; + this.r = builder.toString(); } /** @@ -649,8 +622,9 @@ * @return the length of the sequence of characters represented by this * object. */ + @JavaScriptBody(args = "self", body = "return self.toString().length;") public int length() { - return count; + throw new UnsupportedOperationException(); } /** @@ -661,8 +635,9 @@ * * @since 1.6 */ + @JavaScriptBody(args = "self", body="return self.toString().length === 0;") public boolean isEmpty() { - return count == 0; + return length() == 0; } /** @@ -683,11 +658,11 @@ * argument is negative or not less than the length of this * string. */ + @JavaScriptBody(args = { "self", "index" }, + body = "return self.toString().charCodeAt(index);" + ) public char charAt(int index) { - if ((index < 0) || (index >= count)) { - throw new StringIndexOutOfBoundsException(index); - } - return value[index + offset]; + throw new UnsupportedOperationException(); } /** @@ -713,10 +688,10 @@ * @since 1.5 */ public int codePointAt(int index) { - if ((index < 0) || (index >= count)) { + if ((index < 0) || (index >= length())) { throw new StringIndexOutOfBoundsException(index); } - return Character.codePointAtImpl(value, offset + index, offset + count); + return Character.codePointAtImpl(toCharArray(), offset() + index, offset() + length()); } /** @@ -743,10 +718,10 @@ */ public int codePointBefore(int index) { int i = index - 1; - if ((i < 0) || (i >= count)) { + if ((i < 0) || (i >= length())) { throw new StringIndexOutOfBoundsException(index); } - return Character.codePointBeforeImpl(value, offset + index, offset); + return Character.codePointBeforeImpl(toCharArray(), offset() + index, offset()); } /** @@ -771,10 +746,10 @@ * @since 1.5 */ public int codePointCount(int beginIndex, int endIndex) { - if (beginIndex < 0 || endIndex > count || beginIndex > endIndex) { + if (beginIndex < 0 || endIndex > length() || beginIndex > endIndex) { throw new IndexOutOfBoundsException(); } - return Character.codePointCountImpl(value, offset+beginIndex, endIndex-beginIndex); + return Character.codePointCountImpl(toCharArray(), offset()+beginIndex, endIndex-beginIndex); } /** @@ -798,19 +773,25 @@ * @since 1.5 */ public int offsetByCodePoints(int index, int codePointOffset) { - if (index < 0 || index > count) { + if (index < 0 || index > length()) { throw new IndexOutOfBoundsException(); } - return Character.offsetByCodePointsImpl(value, offset, count, - offset+index, codePointOffset) - offset; + return Character.offsetByCodePointsImpl(toCharArray(), offset(), length(), + offset()+index, codePointOffset) - offset(); } /** * Copy characters from this string into dst starting at dstBegin. * This method doesn't perform any range checking. */ + @JavaScriptBody(args = { "self", "arr", "to" }, body = + "var s = self.toString();\n" + + "for (var i = 0; i < s.length; i++) {\n" + + " arr[to++] = s[i];\n" + + "}" + ) void getChars(char dst[], int dstBegin) { - AbstractStringBuilder.arraycopy(value, offset, dst, dstBegin, count); + AbstractStringBuilder.arraycopy(toCharArray(), offset(), dst, dstBegin, length()); } /** @@ -843,17 +824,23 @@ *
  • dstBegin+(srcEnd-srcBegin) is larger than * dst.length */ + @JavaScriptBody(args = { "self", "beg", "end", "arr", "dst" }, body= + "var s = self.toString();\n" + + "while (beg < end) {\n" + + " arr[dst++] = s[beg++];\n" + + "}\n" + ) public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) { if (srcBegin < 0) { throw new StringIndexOutOfBoundsException(srcBegin); } - if (srcEnd > count) { + if (srcEnd > length()) { throw new StringIndexOutOfBoundsException(srcEnd); } if (srcBegin > srcEnd) { throw new StringIndexOutOfBoundsException(srcEnd - srcBegin); } - AbstractStringBuilder.arraycopy(value, offset + srcBegin, dst, dstBegin, + AbstractStringBuilder.arraycopy(toCharArray(), offset() + srcBegin, dst, dstBegin, srcEnd - srcBegin); } @@ -905,16 +892,16 @@ if (srcBegin < 0) { throw new StringIndexOutOfBoundsException(srcBegin); } - if (srcEnd > count) { + if (srcEnd > length()) { throw new StringIndexOutOfBoundsException(srcEnd); } if (srcBegin > srcEnd) { throw new StringIndexOutOfBoundsException(srcEnd - srcBegin); } int j = dstBegin; - int n = offset + srcEnd; - int i = offset + srcBegin; - char[] val = value; /* avoid getfield opcode */ + int n = offset() + srcEnd; + int i = offset() + srcBegin; + char[] val = toCharArray(); /* avoid getfield opcode */ while (i < n) { dst[j++] = (byte)val[i++]; @@ -1010,18 +997,22 @@ * @see #compareTo(String) * @see #equalsIgnoreCase(String) */ + @JavaScriptBody(args = { "self", "obj" }, body = + "return obj.$instOf_java_lang_String && " + + "self.toString() === obj.toString();" + ) public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; - int n = count; - if (n == anotherString.count) { - char v1[] = value; - char v2[] = anotherString.value; - int i = offset; - int j = anotherString.offset; + int n = length(); + if (n == anotherString.length()) { + char v1[] = toCharArray(); + char v2[] = anotherString.toCharArray(); + int i = offset(); + int j = anotherString.offset(); while (n-- != 0) { if (v1[i++] != v2[j++]) return false; @@ -1067,15 +1058,15 @@ * @since 1.5 */ public boolean contentEquals(CharSequence cs) { - if (count != cs.length()) + if (length() != cs.length()) return false; // Argument is a StringBuffer, StringBuilder if (cs instanceof AbstractStringBuilder) { - char v1[] = value; + char v1[] = toCharArray(); char v2[] = ((AbstractStringBuilder)cs).getValue(); - int i = offset; + int i = offset(); int j = 0; - int n = count; + int n = length(); while (n-- != 0) { if (v1[i++] != v2[j++]) return false; @@ -1086,10 +1077,10 @@ if (cs.equals(this)) return true; // Argument is a generic CharSequence - char v1[] = value; - int i = offset; + char v1[] = toCharArray(); + int i = offset(); int j = 0; - int n = count; + int n = length(); while (n-- != 0) { if (v1[i++] != cs.charAt(j++)) return false; @@ -1127,8 +1118,8 @@ */ public boolean equalsIgnoreCase(String anotherString) { return (this == anotherString) ? true : - (anotherString != null) && (anotherString.count == count) && - regionMatches(true, 0, anotherString, 0, count); + (anotherString != null) && (anotherString.length() == length()) && + regionMatches(true, 0, anotherString, 0, length()); } /** @@ -1173,13 +1164,13 @@ * lexicographically greater than the string argument. */ public int compareTo(String anotherString) { - int len1 = count; - int len2 = anotherString.count; + int len1 = length(); + int len2 = anotherString.length(); int n = Math.min(len1, len2); - char v1[] = value; - char v2[] = anotherString.value; - int i = offset; - int j = anotherString.offset; + char v1[] = toCharArray(); + char v2[] = anotherString.toCharArray(); + int i = offset(); + int j = anotherString.offset(); if (i == j) { int k = i; @@ -1218,6 +1209,11 @@ */ public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator(); + + private static int offset() { + return 0; + } + private static class CaseInsensitiveComparator implements Comparator, java.io.Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability @@ -1304,13 +1300,13 @@ */ public boolean regionMatches(int toffset, String other, int ooffset, int len) { - char ta[] = value; - int to = offset + toffset; - char pa[] = other.value; - int po = other.offset + ooffset; + char ta[] = toCharArray(); + int to = offset() + toffset; + char pa[] = other.toCharArray(); + int po = other.offset() + ooffset; // Note: toffset, ooffset, or len might be near -1>>>1. - if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) - || (ooffset > (long)other.count - len)) { + if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len) + || (ooffset > (long)other.length() - len)) { return false; } while (len-- > 0) { @@ -1373,13 +1369,13 @@ */ public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) { - char ta[] = value; - int to = offset + toffset; - char pa[] = other.value; - int po = other.offset + ooffset; + char ta[] = toCharArray(); + int to = offset() + toffset; + char pa[] = other.toCharArray(); + int po = other.offset() + ooffset; // Note: toffset, ooffset, or len might be near -1>>>1. - if ((ooffset < 0) || (toffset < 0) || (toffset > (long)count - len) || - (ooffset > (long)other.count - len)) { + if ((ooffset < 0) || (toffset < 0) || (toffset > (long)length() - len) || + (ooffset > (long)other.length() - len)) { return false; } while (len-- > 0) { @@ -1428,14 +1424,18 @@ * this.substring(toffset).startsWith(prefix) * */ + @JavaScriptBody(args = { "self", "find", "from" }, body= + "find = find.toString();\n" + + "return self.toString().substring(from, find.length) === find;\n" + ) public boolean startsWith(String prefix, int toffset) { - char ta[] = value; - int to = offset + toffset; - char pa[] = prefix.value; - int po = prefix.offset; - int pc = prefix.count; + char ta[] = toCharArray(); + int to = offset() + toffset; + char pa[] = prefix.toCharArray(); + int po = prefix.offset(); + int pc = prefix.length(); // Note: toffset might be near -1>>>1. - if ((toffset < 0) || (toffset > count - pc)) { + if ((toffset < 0) || (toffset > length() - pc)) { return false; } while (--pc >= 0) { @@ -1475,7 +1475,7 @@ * as determined by the {@link #equals(Object)} method. */ public boolean endsWith(String suffix) { - return startsWith(suffix, count - suffix.count); + return startsWith(suffix, length() - suffix.length()); } /** @@ -1491,12 +1491,21 @@ * * @return a hash code value for this object. */ + @JavaScriptBody(args = "self", body = + "var h = 0;\n" + + "var s = self.toString();\n" + + "for (var i = 0; i < s.length; i++) {\n" + + " var high = (h >> 16) & 0xffff, low = h & 0xffff;\n" + + " h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff;\n" + + "}\n" + + "return h;\n" + ) public int hashCode() { int h = hash; - if (h == 0 && count > 0) { - int off = offset; - char val[] = value; - int len = count; + if (h == 0 && length() > 0) { + int off = offset(); + char val[] = toCharArray(); + int len = length(); for (int i = 0; i < len; i++) { h = 31*h + val[off++]; @@ -1573,10 +1582,14 @@ * than or equal to fromIndex, or -1 * if the character does not occur. */ + @JavaScriptBody(args = { "self", "ch", "from" }, body = + "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" + + "return self.toString().indexOf(ch, from);\n" + ) public int indexOf(int ch, int fromIndex) { if (fromIndex < 0) { fromIndex = 0; - } else if (fromIndex >= count) { + } else if (fromIndex >= length()) { // Note: fromIndex might be near -1>>>1. return -1; } @@ -1584,9 +1597,9 @@ if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) { // handle most cases here (ch is a BMP code point or a // negative value (invalid code point)) - final char[] value = this.value; - final int offset = this.offset; - final int max = offset + count; + final char[] value = this.toCharArray(); + final int offset = this.offset(); + final int max = offset + length(); for (int i = offset + fromIndex; i < max ; i++) { if (value[i] == ch) { return i - offset; @@ -1603,11 +1616,11 @@ */ private int indexOfSupplementary(int ch, int fromIndex) { if (Character.isValidCodePoint(ch)) { - final char[] value = this.value; - final int offset = this.offset; + final char[] value = this.toCharArray(); + final int offset = this.offset(); final char hi = Character.highSurrogate(ch); final char lo = Character.lowSurrogate(ch); - final int max = offset + count - 1; + final int max = offset + length() - 1; for (int i = offset + fromIndex; i < max; i++) { if (value[i] == hi && value[i+1] == lo) { return i - offset; @@ -1641,7 +1654,7 @@ * -1 if the character does not occur. */ public int lastIndexOf(int ch) { - return lastIndexOf(ch, count - 1); + return lastIndexOf(ch, length() - 1); } /** @@ -1682,9 +1695,9 @@ if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) { // handle most cases here (ch is a BMP code point or a // negative value (invalid code point)) - final char[] value = this.value; - final int offset = this.offset; - int i = offset + Math.min(fromIndex, count - 1); + final char[] value = this.toCharArray(); + final int offset = this.offset(); + int i = offset + Math.min(fromIndex, length() - 1); for (; i >= offset ; i--) { if (value[i] == ch) { return i - offset; @@ -1701,11 +1714,11 @@ */ private int lastIndexOfSupplementary(int ch, int fromIndex) { if (Character.isValidCodePoint(ch)) { - final char[] value = this.value; - final int offset = this.offset; + final char[] value = this.toCharArray(); + final int offset = this.offset(); char hi = Character.highSurrogate(ch); char lo = Character.lowSurrogate(ch); - int i = offset + Math.min(fromIndex, count - 2); + int i = offset + Math.min(fromIndex, length() - 2); for (; i >= offset; i--) { if (value[i] == hi && value[i+1] == lo) { return i - offset; @@ -1749,9 +1762,11 @@ * starting at the specified index, * or {@code -1} if there is no such occurrence. */ + @JavaScriptBody(args = { "self", "str", "fromIndex" }, body = + "return self.toString().indexOf(str.toString(), fromIndex) >= 0;" + ) public int indexOf(String str, int fromIndex) { - return indexOf(value, offset, count, - str.value, str.offset, str.count, fromIndex); + return indexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex); } /** @@ -1821,7 +1836,7 @@ * or {@code -1} if there is no such occurrence. */ public int lastIndexOf(String str) { - return lastIndexOf(str, count); + return lastIndexOf(str, length()); } /** @@ -1841,8 +1856,7 @@ * or {@code -1} if there is no such occurrence. */ public int lastIndexOf(String str, int fromIndex) { - return lastIndexOf(value, offset, count, - str.value, str.offset, str.count, fromIndex); + return lastIndexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex); } /** @@ -1922,7 +1936,7 @@ * length of this String object. */ public String substring(int beginIndex) { - return substring(beginIndex, count); + return substring(beginIndex, length()); } /** @@ -1947,18 +1961,21 @@ * beginIndex is larger than * endIndex. */ + @JavaScriptBody(args = { "self", "beginIndex", "endIndex" }, body = + "return self.toString().substring(beginIndex, endIndex);" + ) public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } - if (endIndex > count) { + if (endIndex > length()) { throw new StringIndexOutOfBoundsException(endIndex); } if (beginIndex > endIndex) { throw new StringIndexOutOfBoundsException(endIndex - beginIndex); } - return ((beginIndex == 0) && (endIndex == count)) ? this : - new String(value, offset + beginIndex, endIndex - beginIndex); + return ((beginIndex == 0) && (endIndex == length())) ? this : + new String(toCharArray(), offset() + beginIndex, endIndex - beginIndex); } /** @@ -2018,10 +2035,10 @@ if (otherLen == 0) { return this; } - char buf[] = new char[count + otherLen]; - getChars(0, count, buf, 0); - str.getChars(0, otherLen, buf, count); - return new String(buf, 0, count + otherLen); + char buf[] = new char[length() + otherLen]; + getChars(0, length(), buf, 0); + str.getChars(0, otherLen, buf, length()); + return new String(buf, 0, length() + otherLen); } /** @@ -2053,12 +2070,24 @@ * @return a string derived from this string by replacing every * occurrence of oldChar with newChar. */ + @JavaScriptBody(args = { "self", "arg1", "arg2" }, body = + "if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);\n" + + "if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);\n" + + "var s = self.toString();\n" + + "for (;;) {\n" + + " var ret = s.replace(arg1, arg2);\n" + + " if (ret === s) {\n" + + " return ret;\n" + + " }\n" + + " s = ret;\n" + + "}" + ) public String replace(char oldChar, char newChar) { if (oldChar != newChar) { - int len = count; + int len = length(); int i = -1; - char[] val = value; /* avoid getfield opcode */ - int off = offset; /* avoid getfield opcode */ + char[] val = toCharArray(); /* avoid getfield opcode */ + int off = offset(); /* avoid getfield opcode */ while (++i < len) { if (val[off + i] == oldChar) { @@ -2720,10 +2749,10 @@ * trailing white space. */ public String trim() { - int len = count; + int len = length(); int st = 0; - int off = offset; /* avoid getfield opcode */ - char[] val = value; /* avoid getfield opcode */ + int off = offset(); /* avoid getfield opcode */ + char[] val = toCharArray(); /* avoid getfield opcode */ while ((st < len) && (val[off + st] <= ' ')) { st++; @@ -2731,7 +2760,7 @@ while ((st < len) && (val[off + len - 1] <= ' ')) { len--; } - return ((st > 0) || (len < count)) ? substring(st, len) : this; + return ((st > 0) || (len < length())) ? substring(st, len) : this; } /** @@ -2739,6 +2768,7 @@ * * @return the string itself. */ + @JavaScriptBody(args = "self", body = "return self.toString();") public String toString() { return this; } @@ -2750,9 +2780,10 @@ * of this string and whose contents are initialized to contain * the character sequence represented by this string. */ + @JavaScriptBody(args = "self", body = "return self.toString().split('');") public char[] toCharArray() { - char result[] = new char[count]; - getChars(0, count, result, 0); + char result[] = new char[length()]; + getChars(0, length(), result, 0); return result; } diff -r 3ee23267706c -r 8bd4adaf6590 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Thu Nov 29 20:19:00 2012 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Mon Dec 03 14:44:49 2012 +0100 @@ -1,2320 +1,2 @@ -/* */ - - -function java_lang_String_consVAC(self,charArr) { - for (var i = 0; i < charArr.length; i++) { - if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]); - } - self.r = charArr.join(""); -} - -function java_lang_String_consVACII(self, charArr, off, cnt) { - var up = off + cnt; - for (var i = off; i < up; i++) { - if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]); - } - self.r = charArr.slice(off, up).join(""); -} - -function java_lang_String_charAtCI(arg0,arg1) { - return arg0.toString().charCodeAt(arg1); -} -function java_lang_String_lengthI(arg0) { - return arg0.toString().length; -} -function java_lang_String_isEmptyZ(arg0) { - return arg0.toString().length === 0; -} -function java_lang_String_valueOfLjava_lang_StringI(n) { - return n.toString(); -} - -function java_lang_String_startsWithZLjava_lang_StringI(self,find,from) { - find = find.toString(); - return self.toString().substring(from, find.length) === find; -} -function java_lang_String_startsWithZLjava_lang_String(self,find) { - find = find.toString(); - return self.toString().substring(0, find.length) === find; -} -function java_lang_String_endsWithZLjava_lang_String(self,find) { - self = self.toString(); - find = find.toString(); - if (find.length > self.length) { - return false; - } - return self.substring(self.length - find.length) === find; -} - -function java_lang_String_indexOfII(arg0,ch) { - if (typeof ch === 'number') ch = String.fromCharCode(ch); - return arg0.toString().indexOf(ch); -} -function java_lang_String_indexOfIII(arg0,ch,from) { - if (typeof ch === 'number') ch = String.fromCharCode(ch); - return arg0.toString().indexOf(ch, from); -} - -function java_lang_String_getCharsVACI(self, arr, to) { - var s = self.toString(); - for (var i = 0; i < s.length; i++) { - arr[to++] = s[i]; - } -} - -/* -function java_lang_String_codePointAtII(arg0,arg1) { - var arg2; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 27 - case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11 - case 4: stack.push(arg1); // 27 - case 5: stack.push(arg0); // 42 - case 6: stack.push(stack.pop().count); // 180 1 97 - case 9: if (stack.pop() > stack.pop()) { gt = 21; continue; } // 161 0 12 - case 12: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206 - case 15: stack.push(stack[stack.length - 1]); // 89 - case 16: stack.push(arg1); // 27 - case 17: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169 - case 20: // 191 - case 21: stack.push(arg0); // 42 - case 22: stack.push(stack.pop().value); // 180 1 100 - case 25: stack.push(arg0); // 42 - case 26: stack.push(stack.pop().offset); // 180 1 99 - case 29: stack.push(arg1); // 27 - case 30: stack.push(stack.pop() + stack.pop()); // 96 - case 31: stack.push(arg0); // 42 - case 32: stack.push(stack.pop().offset); // 180 1 99 - case 35: stack.push(arg0); // 42 - case 36: stack.push(stack.pop().count); // 180 1 97 - case 39: stack.push(stack.pop() + stack.pop()); // 96 - 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 - case 43: return stack.pop(); // 172 - } -} -function java_lang_String_codePointBeforeII(arg0,arg1) { - var arg2; - var arg3; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 27 - case 1: stack.push(1); // 4 - case 2: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 3: arg2 = stack.pop(); // 61 - case 4: stack.push(arg2); // 28 - case 5: if (stack.pop() < 0) { gt = 16; continue; } // 155 0 11 - case 8: stack.push(arg2); // 28 - case 9: stack.push(arg0); // 42 - case 10: stack.push(stack.pop().count); // 180 1 97 - case 13: if (stack.pop() > stack.pop()) { gt = 25; continue; } // 161 0 12 - case 16: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206 - case 19: stack.push(stack[stack.length - 1]); // 89 - case 20: stack.push(arg1); // 27 - case 21: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169 - case 24: // 191 - case 25: stack.push(arg0); // 42 - case 26: stack.push(stack.pop().value); // 180 1 100 - case 29: stack.push(arg0); // 42 - case 30: stack.push(stack.pop().offset); // 180 1 99 - case 33: stack.push(arg1); // 27 - case 34: stack.push(stack.pop() + stack.pop()); // 96 - case 35: stack.push(arg0); // 42 - case 36: stack.push(stack.pop().offset); // 180 1 99 - 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 - case 42: return stack.pop(); // 172 - } -} -function java_lang_String_codePointCountIII(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 27 - case 1: if (stack.pop() < 0) { gt = 17; continue; } // 155 0 16 - case 4: stack.push(arg2); // 28 - case 5: stack.push(arg0); // 42 - case 6: stack.push(stack.pop().count); // 180 1 97 - case 9: if (stack.pop() < stack.pop()) { gt = 17; continue; } // 163 0 8 - case 12: stack.push(arg1); // 27 - case 13: stack.push(arg2); // 28 - case 14: if (stack.pop() >= stack.pop()) { gt = 25; continue; } // 164 0 11 - case 17: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194 - case 20: stack.push(stack[stack.length - 1]); // 89 - case 21: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124 - case 24: // 191 - case 25: stack.push(arg0); // 42 - case 26: stack.push(stack.pop().value); // 180 1 100 - case 29: stack.push(arg0); // 42 - case 30: stack.push(stack.pop().offset); // 180 1 99 - case 33: stack.push(arg1); // 27 - case 34: stack.push(stack.pop() + stack.pop()); // 96 - case 35: stack.push(arg2); // 28 - case 36: stack.push(arg1); // 27 - case 37: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - 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 - case 41: return stack.pop(); // 172 - } -} -function java_lang_String_offsetByCodePointsIII(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(5); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 27 - case 1: if (stack.pop() < 0) { gt = 12; continue; } // 155 0 11 - case 4: stack.push(arg1); // 27 - case 5: stack.push(arg0); // 42 - case 6: stack.push(stack.pop().count); // 180 1 97 - case 9: if (stack.pop() >= stack.pop()) { gt = 20; continue; } // 164 0 11 - case 12: stack.push(new java_lang_IndexOutOfBoundsException); // 187 0 194 - case 15: stack.push(stack[stack.length - 1]); // 89 - case 16: { java_lang_IndexOutOfBoundsException_consV(stack.pop()); } // 183 1 124 - case 19: // 191 - case 20: stack.push(arg0); // 42 - case 21: stack.push(stack.pop().value); // 180 1 100 - case 24: stack.push(arg0); // 42 - case 25: stack.push(stack.pop().offset); // 180 1 99 - case 28: stack.push(arg0); // 42 - case 29: stack.push(stack.pop().count); // 180 1 97 - case 32: stack.push(arg0); // 42 - case 33: stack.push(stack.pop().offset); // 180 1 99 - case 36: stack.push(arg1); // 27 - case 37: stack.push(stack.pop() + stack.pop()); // 96 - case 38: stack.push(arg2); // 28 - 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 - case 42: stack.push(arg0); // 42 - case 43: stack.push(stack.pop().offset); // 180 1 99 - case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 47: return stack.pop(); // 172 - } -} -*/ - -// public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) { -function java_lang_String_getCharsVIIACAI(arg0,arg1,arg2,arg3,arg4) { - var s = arg0.toString(); - while (arg1 < arg2) { - arg3[arg4++] = s[arg1++]; - } -} - -/* -function java_lang_String_getBytesVIIABI(arg0,arg1,arg2,arg3,arg4) { - var arg5; - var arg6; - var arg7; - var arg8; - var arg9; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 27 - case 1: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 12 - case 4: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206 - case 7: stack.push(stack[stack.length - 1]); // 89 - case 8: stack.push(arg1); // 27 - case 9: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169 - case 12: // 191 - case 13: stack.push(arg2); // 28 - case 14: stack.push(arg0); // 42 - case 15: stack.push(stack.pop().count); // 180 1 97 - case 18: if (stack.pop() >= stack.pop()) { gt = 30; continue; } // 164 0 12 - case 21: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206 - case 24: stack.push(stack[stack.length - 1]); // 89 - case 25: stack.push(arg2); // 28 - case 26: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169 - case 29: // 191 - case 30: stack.push(arg1); // 27 - case 31: stack.push(arg2); // 28 - case 32: if (stack.pop() >= stack.pop()) { gt = 46; continue; } // 164 0 14 - case 35: stack.push(new java_lang_StringIndexOutOfBoundsException); // 187 0 206 - case 38: stack.push(stack[stack.length - 1]); // 89 - case 39: stack.push(arg2); // 28 - case 40: stack.push(arg1); // 27 - case 41: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 42: { var v0 = stack.pop(); java_lang_StringIndexOutOfBoundsException_consVI(stack.pop(), v0); } // 183 1 169 - case 45: // 191 - case 46: stack.push(arg4); // 21 4 - case 48: arg5 = stack.pop() // 54 5 - case 50: stack.push(arg0); // 42 - case 51: stack.push(stack.pop().offset); // 180 1 99 - case 54: stack.push(arg2); // 28 - case 55: stack.push(stack.pop() + stack.pop()); // 96 - case 56: arg6 = stack.pop() // 54 6 - case 58: stack.push(arg0); // 42 - case 59: stack.push(stack.pop().offset); // 180 1 99 - case 62: stack.push(arg1); // 27 - case 63: stack.push(stack.pop() + stack.pop()); // 96 - case 64: arg7 = stack.pop() // 54 7 - case 66: stack.push(arg0); // 42 - case 67: stack.push(stack.pop().value); // 180 1 100 - case 70: arg8 = stack.pop() // 58 8 - case 72: stack.push(arg7); // 21 7 - case 74: stack.push(arg6); // 21 6 - case 76: if (stack.pop() <= stack.pop()) { gt = 98; continue; } // 162 0 22 - case 79: stack.push(arg3); // 45 - case 80: stack.push(arg5); // 21 5 - case 82: arg5++; // 132 5 1 - case 85: stack.push(arg8); // 25 8 - case 87: stack.push(arg7); // 21 7 - case 89: arg7++; // 132 7 1 - case 92: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 93: // number conversion // 145 - case 94: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 84 - case 95: gt = 72; continue; // 167 255 233 - case 98: return; // 177 - } -} -function java_lang_String_getBytesABLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11 - case 4: stack.push(new java_lang_NullPointerException); // 187 0 198 - case 7: stack.push(stack[stack.length - 1]); // 89 - case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128 - case 11: // 191 - case 12: stack.push(arg1); // 43 - case 13: stack.push(arg0); // 42 - case 14: stack.push(stack.pop().value); // 180 1 100 - case 17: stack.push(arg0); // 42 - case 18: stack.push(stack.pop().offset); // 180 1 99 - case 21: stack.push(arg0); // 42 - case 22: stack.push(stack.pop().count); // 180 1 97 - 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 - case 28: return stack.pop(); // 176 - } -} -function java_lang_String_getBytesABLjava_nio_charset_Charset(arg0,arg1) { - var arg2; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11 - case 4: stack.push(new java_lang_NullPointerException); // 187 0 198 - case 7: stack.push(stack[stack.length - 1]); // 89 - case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128 - case 11: // 191 - case 12: stack.push(arg1); // 43 - case 13: stack.push(arg0); // 42 - case 14: stack.push(stack.pop().value); // 180 1 100 - case 17: stack.push(arg0); // 42 - case 18: stack.push(stack.pop().offset); // 180 1 99 - case 21: stack.push(arg0); // 42 - case 22: stack.push(stack.pop().count); // 180 1 97 - 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 - case 28: return stack.pop(); // 176 - } -} -function java_lang_String_getBytesAB(arg0) { - var arg1; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: stack.push(arg0); // 42 - case 5: stack.push(stack.pop().offset); // 180 1 99 - case 8: stack.push(arg0); // 42 - case 9: stack.push(stack.pop().count); // 180 1 97 - 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 - case 15: return stack.pop(); // 176 - } -} -*/ -function java_lang_String_equalsZLjava_lang_Object(arg0,arg1) { - return arg0.toString() === arg1.toString(); -} - -function java_lang_String_hashCodeI(self) { - var h = 0; - var s = self.toString(); - for (var i = 0; i < s.length; i++) { - var high = (h >> 16) & 0xffff, low = h & 0xffff; - h = (((((31 * high) & 0xffff) << 16) >>> 0) + (31 * low) + s.charCodeAt(i)) & 0xffffffff; - } - return h; -} - -/* -function java_lang_String_contentEqualsZLjava_lang_StringBuffer(arg0,arg1) { - var arg2; - var arg3; - var arg4; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: stack.push(stack[stack.length - 1]); // 89 - case 2: arg2 = stack.pop(); // 77 - case 3: // 194 - case 4: stack.push(arg0); // 42 - case 5: stack.push(arg1); // 43 - case 6: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.contentEqualsZLjava_lang_CharSequence(self, v0)); } // 182 1 146 - case 9: stack.push(arg2); // 44 - case 10: // 195 - case 11: return stack.pop(); // 172 - case 12: arg3 = stack.pop(); // 78 - case 13: stack.push(arg2); // 44 - case 14: // 195 - case 15: stack.push(arg3); // 45 - case 16: // 191 - } -} -function java_lang_String_contentEqualsZLjava_lang_CharSequence(arg0,arg1) { - var arg2; - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().count); // 180 1 97 - case 4: stack.push(arg1); // 43 - case 5: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 185 1 188 - case 8: // 1 - case 9: // 0 - case 10: if (stack.pop() == stack.pop()) { gt = 15; continue; } // 159 0 5 - case 13: stack.push(0); // 3 - case 14: return stack.pop(); // 172 - case 15: stack.push(arg1); // 43 - case 16: stack.push(stack.pop().$instOf_java_lang_AbstractStringBuilder ? 1 : 0); // 193 0 186 - case 19: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 58 - case 22: stack.push(arg0); // 42 - case 23: stack.push(stack.pop().value); // 180 1 100 - case 26: arg2 = stack.pop(); // 77 - case 27: stack.push(arg1); // 43 - case 28: if(stack[stack.length - 1].$instOf_java_lang_AbstractStringBuilder != 1) throw {}; // 192 0 186 - case 31: { var self = stack.pop(); stack.push(self.getValueAC(self)); } // 182 1 103 - case 34: arg3 = stack.pop(); // 78 - case 35: stack.push(arg0); // 42 - case 36: stack.push(stack.pop().offset); // 180 1 99 - case 39: arg4 = stack.pop() // 54 4 - case 41: stack.push(0); // 3 - case 42: arg5 = stack.pop() // 54 5 - case 44: stack.push(arg0); // 42 - case 45: stack.push(stack.pop().count); // 180 1 97 - case 48: arg6 = stack.pop() // 54 6 - case 50: stack.push(arg6); // 21 6 - case 52: arg6 += 255; // 132 6 255 - case 55: if (stack.pop() == 0) { gt = 77; continue; } // 153 0 22 - case 58: stack.push(arg2); // 44 - case 59: stack.push(arg4); // 21 4 - case 61: arg4++; // 132 4 1 - case 64: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 65: stack.push(arg3); // 45 - case 66: stack.push(arg5); // 21 5 - case 68: arg5++; // 132 5 1 - case 71: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 72: if (stack.pop() == stack.pop()) { gt = 50; continue; } // 159 255 234 - case 75: stack.push(0); // 3 - case 76: return stack.pop(); // 172 - case 77: stack.push(arg1); // 43 - case 78: stack.push(arg0); // 42 - case 79: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.equalsZLjava_lang_Object(self, v0)); } // 182 1 131 - case 82: if (stack.pop() == 0) { gt = 87; continue; } // 153 0 5 - case 85: stack.push(1); // 4 - case 86: return stack.pop(); // 172 - case 87: stack.push(arg0); // 42 - case 88: stack.push(stack.pop().value); // 180 1 100 - case 91: arg2 = stack.pop(); // 77 - case 92: stack.push(arg0); // 42 - case 93: stack.push(stack.pop().offset); // 180 1 99 - case 96: arg3 = stack.pop(); // 62 - case 97: stack.push(0); // 3 - case 98: arg4 = stack.pop() // 54 4 - case 100: stack.push(arg0); // 42 - case 101: stack.push(stack.pop().count); // 180 1 97 - case 104: arg5 = stack.pop() // 54 5 - case 106: stack.push(arg5); // 21 5 - case 108: arg5 += 255; // 132 5 255 - case 111: if (stack.pop() == 0) { gt = 136; continue; } // 153 0 25 - case 114: stack.push(arg2); // 44 - case 115: stack.push(arg3); // 29 - case 116: arg3++; // 132 3 1 - case 119: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 120: stack.push(arg1); // 43 - case 121: stack.push(arg4); // 21 4 - case 123: arg4++; // 132 4 1 - case 126: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.charAtCI(self, v0)); } // 185 1 189 - case 129: // 2 - case 130: // 0 - case 131: if (stack.pop() == stack.pop()) { gt = 106; continue; } // 159 255 231 - case 134: stack.push(0); // 3 - case 135: return stack.pop(); // 172 - case 136: stack.push(1); // 4 - case 137: return stack.pop(); // 172 - } -} -function java_lang_String_equalsIgnoreCaseZLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(6); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: // 166 - case 3: // 0 - case 4: stack.push(4); // 7 - case 5: stack.push(1); // 4 - case 6: gt = 44; continue; // 167 0 38 - case 9: stack.push(arg1); // 43 - case 10: if (!stack.pop()) { gt = 43; continue; } // 198 0 33 - case 13: stack.push(arg1); // 43 - case 14: stack.push(stack.pop().count); // 180 1 97 - case 17: stack.push(arg0); // 42 - case 18: stack.push(stack.pop().count); // 180 1 97 - case 21: if (stack.pop() != stack.pop()) { gt = 43; continue; } // 160 0 22 - case 24: stack.push(arg0); // 42 - case 25: stack.push(1); // 4 - case 26: stack.push(0); // 3 - case 27: stack.push(arg1); // 43 - case 28: stack.push(0); // 3 - case 29: stack.push(arg0); // 42 - case 30: stack.push(stack.pop().count); // 180 1 97 - 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 - case 36: if (stack.pop() == 0) { gt = 43; continue; } // 153 0 7 - case 39: stack.push(1); // 4 - case 40: gt = 44; continue; // 167 0 4 - case 43: stack.push(0); // 3 - case 44: return stack.pop(); // 172 - } -} -function java_lang_String_compareToILjava_lang_String(arg0,arg1) { - var arg2; - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var arg13; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().count); // 180 1 97 - case 4: arg2 = stack.pop(); // 61 - case 5: stack.push(arg1); // 43 - case 6: stack.push(stack.pop().count); // 180 1 97 - case 9: arg3 = stack.pop(); // 62 - case 10: stack.push(arg2); // 28 - case 11: stack.push(arg3); // 29 - case 12: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Math_minIII(v0, v1)); } // 184 1 127 - case 15: arg4 = stack.pop() // 54 4 - case 17: stack.push(arg0); // 42 - case 18: stack.push(stack.pop().value); // 180 1 100 - case 21: arg5 = stack.pop() // 58 5 - case 23: stack.push(arg1); // 43 - case 24: stack.push(stack.pop().value); // 180 1 100 - case 27: arg6 = stack.pop() // 58 6 - case 29: stack.push(arg0); // 42 - case 30: stack.push(stack.pop().offset); // 180 1 99 - case 33: arg7 = stack.pop() // 54 7 - case 35: stack.push(arg1); // 43 - case 36: stack.push(stack.pop().offset); // 180 1 99 - case 39: arg8 = stack.pop() // 54 8 - case 41: stack.push(arg7); // 21 7 - case 43: stack.push(arg8); // 21 8 - case 45: if (stack.pop() != stack.pop()) { gt = 102; continue; } // 160 0 57 - case 48: stack.push(arg7); // 21 7 - case 50: arg9 = stack.pop() // 54 9 - case 52: stack.push(arg4); // 21 4 - case 54: stack.push(arg7); // 21 7 - case 56: stack.push(stack.pop() + stack.pop()); // 96 - case 57: arg10 = stack.pop() // 54 10 - case 59: stack.push(arg9); // 21 9 - case 61: stack.push(arg10); // 21 10 - case 63: if (stack.pop() <= stack.pop()) { gt = 99; continue; } // 162 0 36 - case 66: stack.push(arg5); // 25 5 - case 68: stack.push(arg9); // 21 9 - case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 71: arg11 = stack.pop() // 54 11 - case 73: stack.push(arg6); // 25 6 - case 75: stack.push(arg9); // 21 9 - case 77: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 78: arg12 = stack.pop() // 54 12 - case 80: stack.push(arg11); // 21 11 - case 82: stack.push(arg12); // 21 12 - case 84: if (stack.pop() == stack.pop()) { gt = 93; continue; } // 159 0 9 - case 87: stack.push(arg11); // 21 11 - case 89: stack.push(arg12); // 21 12 - case 91: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 92: return stack.pop(); // 172 - case 93: arg9++; // 132 9 1 - case 96: gt = 59; continue; // 167 255 219 - case 99: gt = 146; continue; // 167 0 47 - case 102: stack.push(arg4); // 21 4 - case 104: arg4 += 255; // 132 4 255 - case 107: if (stack.pop() == 0) { gt = 146; continue; } // 153 0 39 - case 110: stack.push(arg5); // 25 5 - case 112: stack.push(arg7); // 21 7 - case 114: arg7++; // 132 7 1 - case 117: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 118: arg9 = stack.pop() // 54 9 - case 120: stack.push(arg6); // 25 6 - case 122: stack.push(arg8); // 21 8 - case 124: arg8++; // 132 8 1 - case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 128: arg10 = stack.pop() // 54 10 - case 130: stack.push(arg9); // 21 9 - case 132: stack.push(arg10); // 21 10 - case 134: if (stack.pop() == stack.pop()) { gt = 143; continue; } // 159 0 9 - case 137: stack.push(arg9); // 21 9 - case 139: stack.push(arg10); // 21 10 - case 141: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 142: return stack.pop(); // 172 - case 143: gt = 102; continue; // 167 255 215 - case 146: stack.push(arg2); // 28 - case 147: stack.push(arg3); // 29 - case 148: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 149: return stack.pop(); // 172 - } -} -function java_lang_String_compareToIgnoreCaseILjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(java_lang_String_CASE_INSENSITIVE_ORDER); // 178 1 102 - case 3: stack.push(arg0); // 42 - case 4: stack.push(arg1); // 43 - 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 - case 8: stack.push(0); // 3 - case 9: // 0 - case 10: return stack.pop(); // 172 - } -} -function java_lang_String_regionMatchesZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4) { - var arg5; - var arg6; - var arg7; - var arg8; - var arg9; -; - var stack = new Array(6); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: arg5 = stack.pop() // 58 5 - case 6: stack.push(arg0); // 42 - case 7: stack.push(stack.pop().offset); // 180 1 99 - case 10: stack.push(arg1); // 27 - case 11: stack.push(stack.pop() + stack.pop()); // 96 - case 12: arg6 = stack.pop() // 54 6 - case 14: stack.push(arg2); // 44 - case 15: stack.push(stack.pop().value); // 180 1 100 - case 18: arg7 = stack.pop() // 58 7 - case 20: stack.push(arg2); // 44 - case 21: stack.push(stack.pop().offset); // 180 1 99 - case 24: stack.push(arg3); // 29 - case 25: stack.push(stack.pop() + stack.pop()); // 96 - case 26: arg8 = stack.pop() // 54 8 - case 28: stack.push(arg3); // 29 - case 29: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 37 - case 32: stack.push(arg1); // 27 - case 33: if (stack.pop() < 0) { gt = 66; continue; } // 155 0 33 - case 36: stack.push(arg1); // 27 - case 37: // number conversion // 133 - case 38: stack.push(arg0); // 42 - case 39: stack.push(stack.pop().count); // 180 1 97 - case 42: // number conversion // 133 - case 43: stack.push(arg4); // 21 4 - case 45: // number conversion // 133 - case 46: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101 - case 47: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148 - case 48: if (stack.pop() > 0) { gt = 66; continue; } // 157 0 18 - case 51: stack.push(arg3); // 29 - case 52: // number conversion // 133 - case 53: stack.push(arg2); // 44 - case 54: stack.push(stack.pop().count); // 180 1 97 - case 57: // number conversion // 133 - case 58: stack.push(arg4); // 21 4 - case 60: // number conversion // 133 - case 61: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101 - case 62: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148 - case 63: if (stack.pop() <= 0) { gt = 68; continue; } // 158 0 5 - case 66: stack.push(0); // 3 - case 67: return stack.pop(); // 172 - case 68: stack.push(arg4); // 21 4 - case 70: arg4 += 255; // 132 4 255 - case 73: if (stack.pop() <= 0) { gt = 97; continue; } // 158 0 24 - case 76: stack.push(arg5); // 25 5 - case 78: stack.push(arg6); // 21 6 - case 80: arg6++; // 132 6 1 - case 83: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 84: stack.push(arg7); // 25 7 - case 86: stack.push(arg8); // 21 8 - case 88: arg8++; // 132 8 1 - case 91: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 92: if (stack.pop() == stack.pop()) { gt = 68; continue; } // 159 255 232 - case 95: stack.push(0); // 3 - case 96: return stack.pop(); // 172 - case 97: stack.push(1); // 4 - case 98: return stack.pop(); // 172 - } -} -function java_lang_String_regionMatchesZZILjava_lang_StringII(arg0,arg1,arg2,arg3,arg4,arg5) { - var arg6; - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var arg13; - var arg14; -; - var stack = new Array(6); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: arg6 = stack.pop() // 58 6 - case 6: stack.push(arg0); // 42 - case 7: stack.push(stack.pop().offset); // 180 1 99 - case 10: stack.push(arg2); // 28 - case 11: stack.push(stack.pop() + stack.pop()); // 96 - case 12: arg7 = stack.pop() // 54 7 - case 14: stack.push(arg3); // 45 - case 15: stack.push(stack.pop().value); // 180 1 100 - case 18: arg8 = stack.pop() // 58 8 - case 20: stack.push(arg3); // 45 - case 21: stack.push(stack.pop().offset); // 180 1 99 - case 24: stack.push(arg4); // 21 4 - case 26: stack.push(stack.pop() + stack.pop()); // 96 - case 27: arg9 = stack.pop() // 54 9 - case 29: stack.push(arg4); // 21 4 - case 31: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 38 - case 34: stack.push(arg2); // 28 - case 35: if (stack.pop() < 0) { gt = 69; continue; } // 155 0 34 - case 38: stack.push(arg2); // 28 - case 39: // number conversion // 133 - case 40: stack.push(arg0); // 42 - case 41: stack.push(stack.pop().count); // 180 1 97 - case 44: // number conversion // 133 - case 45: stack.push(arg5); // 21 5 - case 47: // number conversion // 133 - case 48: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101 - case 49: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148 - case 50: if (stack.pop() > 0) { gt = 69; continue; } // 157 0 19 - case 53: stack.push(arg4); // 21 4 - case 55: // number conversion // 133 - case 56: stack.push(arg3); // 45 - case 57: stack.push(stack.pop().count); // 180 1 97 - case 60: // number conversion // 133 - case 61: stack.push(arg5); // 21 5 - case 63: // number conversion // 133 - case 64: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 101 - case 65: { var delta = stack.pop() - stack.pop(); stack.push(delta < 0 ?-1 : (delta == 0 ? 0 : 1)); } // 148 - case 66: if (stack.pop() <= 0) { gt = 71; continue; } // 158 0 5 - case 69: stack.push(0); // 3 - case 70: return stack.pop(); // 172 - case 71: stack.push(arg5); // 21 5 - case 73: arg5 += 255; // 132 5 255 - case 76: if (stack.pop() <= 0) { gt = 155; continue; } // 158 0 79 - case 79: stack.push(arg6); // 25 6 - case 81: stack.push(arg7); // 21 7 - case 83: arg7++; // 132 7 1 - case 86: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 87: arg10 = stack.pop() // 54 10 - case 89: stack.push(arg8); // 25 8 - case 91: stack.push(arg9); // 21 9 - case 93: arg9++; // 132 9 1 - case 96: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 97: arg11 = stack.pop() // 54 11 - case 99: stack.push(arg10); // 21 10 - case 101: stack.push(arg11); // 21 11 - case 103: if (stack.pop() != stack.pop()) { gt = 109; continue; } // 160 0 6 - case 106: gt = 71; continue; // 167 255 221 - case 109: stack.push(arg1); // 27 - case 110: if (stack.pop() == 0) { gt = 153; continue; } // 153 0 43 - case 113: stack.push(arg10); // 21 10 - case 115: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105 - case 118: arg12 = stack.pop() // 54 12 - case 120: stack.push(arg11); // 21 11 - case 122: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCC(v0)); } // 184 1 105 - case 125: arg13 = stack.pop() // 54 13 - case 127: stack.push(arg12); // 21 12 - case 129: stack.push(arg13); // 21 13 - case 131: if (stack.pop() != stack.pop()) { gt = 137; continue; } // 160 0 6 - case 134: gt = 71; continue; // 167 255 193 - case 137: stack.push(arg12); // 21 12 - case 139: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104 - case 142: stack.push(arg13); // 21 13 - case 144: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104 - case 147: if (stack.pop() != stack.pop()) { gt = 153; continue; } // 160 0 6 - case 150: gt = 71; continue; // 167 255 177 - case 153: stack.push(0); // 3 - case 154: return stack.pop(); // 172 - case 155: stack.push(1); // 4 - case 156: return stack.pop(); // 172 - } -} -function java_lang_String_startsWithZLjava_lang_StringI(arg0,arg1,arg2) { - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; - var arg8; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: arg3 = stack.pop(); // 78 - case 5: stack.push(arg0); // 42 - case 6: stack.push(stack.pop().offset); // 180 1 99 - case 9: stack.push(arg2); // 28 - case 10: stack.push(stack.pop() + stack.pop()); // 96 - case 11: arg4 = stack.pop() // 54 4 - case 13: stack.push(arg1); // 43 - case 14: stack.push(stack.pop().value); // 180 1 100 - case 17: arg5 = stack.pop() // 58 5 - case 19: stack.push(arg1); // 43 - case 20: stack.push(stack.pop().offset); // 180 1 99 - case 23: arg6 = stack.pop() // 54 6 - case 25: stack.push(arg1); // 43 - case 26: stack.push(stack.pop().count); // 180 1 97 - case 29: arg7 = stack.pop() // 54 7 - case 31: stack.push(arg2); // 28 - case 32: if (stack.pop() < 0) { gt = 46; continue; } // 155 0 14 - case 35: stack.push(arg2); // 28 - case 36: stack.push(arg0); // 42 - case 37: stack.push(stack.pop().count); // 180 1 97 - case 40: stack.push(arg7); // 21 7 - case 42: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 43: if (stack.pop() >= stack.pop()) { gt = 48; continue; } // 164 0 5 - case 46: stack.push(0); // 3 - case 47: return stack.pop(); // 172 - case 48: arg7 += 255; // 132 7 255 - case 51: stack.push(arg7); // 21 7 - case 53: if (stack.pop() < 0) { gt = 76; continue; } // 155 0 23 - case 56: stack.push(arg3); // 45 - case 57: stack.push(arg4); // 21 4 - case 59: arg4++; // 132 4 1 - case 62: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 63: stack.push(arg5); // 25 5 - case 65: stack.push(arg6); // 21 6 - case 67: arg6++; // 132 6 1 - case 70: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 71: if (stack.pop() == stack.pop()) { gt = 48; continue; } // 159 255 233 - case 74: stack.push(0); // 3 - case 75: return stack.pop(); // 172 - case 76: stack.push(1); // 4 - case 77: return stack.pop(); // 172 - } -} -function java_lang_String_startsWithZLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: stack.push(0); // 3 - 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 - case 6: return stack.pop(); // 172 - } -} -function java_lang_String_endsWithZLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: stack.push(arg0); // 42 - case 3: stack.push(stack.pop().count); // 180 1 97 - case 6: stack.push(arg1); // 43 - case 7: stack.push(stack.pop().count); // 180 1 97 - case 10: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - 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 - case 14: return stack.pop(); // 172 - } -} -function java_lang_String_lastIndexOfII(arg0,arg1) { - var arg2; -; - var stack = new Array(4); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 27 - case 2: stack.push(arg0); // 42 - case 3: stack.push(stack.pop().count); // 180 1 97 - case 6: stack.push(1); // 4 - case 7: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 8: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.lastIndexOfIII(self, v0, v1)); } // 182 1 136 - case 11: return stack.pop(); // 172 - } -} -function java_lang_String_lastIndexOfIII(arg0,arg1,arg2) { - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; - var arg8; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().offset); // 180 1 99 - case 4: arg3 = stack.pop(); // 62 - case 5: stack.push(arg0); // 42 - case 6: stack.push(stack.pop().value); // 180 1 100 - case 9: arg4 = stack.pop() // 58 4 - case 11: stack.push(arg0); // 42 - case 12: stack.push(stack.pop().offset); // 180 1 99 - case 15: stack.push(arg2); // 28 - case 16: stack.push(arg0); // 42 - case 17: stack.push(stack.pop().count); // 180 1 97 - case 20: if (stack.pop() > stack.pop()) { gt = 32; continue; } // 161 0 12 - case 23: stack.push(arg0); // 42 - case 24: stack.push(stack.pop().count); // 180 1 97 - case 27: stack.push(1); // 4 - case 28: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 29: gt = 33; continue; // 167 0 4 - case 32: stack.push(arg2); // 28 - case 33: stack.push(stack.pop() + stack.pop()); // 96 - case 34: arg5 = stack.pop() // 54 5 - case 36: stack.push(arg1); // 27 - case 37: stack.push(65536); // 18 3 - case 39: if (stack.pop() <= stack.pop()) { gt = 73; continue; } // 162 0 34 - case 42: stack.push(arg5); // 21 5 - case 44: stack.push(arg3); // 29 - case 45: if (stack.pop() > stack.pop()) { gt = 71; continue; } // 161 0 26 - case 48: stack.push(arg4); // 25 4 - case 50: stack.push(arg5); // 21 5 - case 52: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 53: stack.push(arg1); // 27 - case 54: if (stack.pop() != stack.pop()) { gt = 65; continue; } // 160 0 11 - case 57: stack.push(arg5); // 21 5 - case 59: stack.push(arg0); // 42 - case 60: stack.push(stack.pop().offset); // 180 1 99 - case 63: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 64: return stack.pop(); // 172 - case 65: arg5 += 255; // 132 5 255 - case 68: gt = 42; continue; // 167 255 230 - case 71: // 2 - case 72: return stack.pop(); // 172 - case 73: stack.push(arg0); // 42 - case 74: stack.push(stack.pop().offset); // 180 1 99 - case 77: stack.push(arg0); // 42 - case 78: stack.push(stack.pop().count); // 180 1 97 - case 81: stack.push(stack.pop() + stack.pop()); // 96 - case 82: arg6 = stack.pop() // 54 6 - case 84: stack.push(arg1); // 27 - case 85: stack.push(1114111); // 18 4 - case 87: if (stack.pop() < stack.pop()) { gt = 154; continue; } // 163 0 67 - case 90: stack.push(arg1); // 27 - case 91: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109 - case 94: arg7 = stack.pop() // 58 7 - case 96: stack.push(arg5); // 21 5 - case 98: stack.push(arg3); // 29 - case 99: if (stack.pop() > stack.pop()) { gt = 154; continue; } // 161 0 55 - case 102: stack.push(arg4); // 25 4 - case 104: stack.push(arg5); // 21 5 - case 106: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 107: stack.push(arg7); // 25 7 - case 109: stack.push(0); // 3 - case 110: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 111: if (stack.pop() != stack.pop()) { gt = 148; continue; } // 160 0 37 - case 114: stack.push(arg5); // 21 5 - case 116: stack.push(1); // 4 - case 117: stack.push(stack.pop() + stack.pop()); // 96 - case 118: stack.push(arg6); // 21 6 - case 120: if (stack.pop() != stack.pop()) { gt = 126; continue; } // 160 0 6 - case 123: gt = 154; continue; // 167 0 31 - case 126: stack.push(arg4); // 25 4 - case 128: stack.push(arg5); // 21 5 - case 130: stack.push(1); // 4 - case 131: stack.push(stack.pop() + stack.pop()); // 96 - case 132: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 133: stack.push(arg7); // 25 7 - case 135: stack.push(1); // 4 - case 136: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 137: if (stack.pop() != stack.pop()) { gt = 148; continue; } // 160 0 11 - case 140: stack.push(arg5); // 21 5 - case 142: stack.push(arg0); // 42 - case 143: stack.push(stack.pop().offset); // 180 1 99 - case 146: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 147: return stack.pop(); // 172 - case 148: arg5 += 255; // 132 5 255 - case 151: gt = 96; continue; // 167 255 201 - case 154: // 2 - case 155: return stack.pop(); // 172 - } -} -function java_lang_String_indexOfILjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: stack.push(0); // 3 - 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 - case 6: return stack.pop(); // 172 - } -} -function java_lang_String_indexOfILjava_lang_StringI(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(7); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: stack.push(arg0); // 42 - case 5: stack.push(stack.pop().offset); // 180 1 99 - case 8: stack.push(arg0); // 42 - case 9: stack.push(stack.pop().count); // 180 1 97 - case 12: stack.push(arg1); // 43 - case 13: stack.push(stack.pop().value); // 180 1 100 - case 16: stack.push(arg1); // 43 - case 17: stack.push(stack.pop().offset); // 180 1 99 - case 20: stack.push(arg1); // 43 - case 21: stack.push(stack.pop().count); // 180 1 97 - case 24: stack.push(arg2); // 28 - 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 - case 28: return stack.pop(); // 172 - } -} -function java_lang_String_indexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) { - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg6); // 21 6 - case 2: stack.push(arg2); // 28 - case 3: if (stack.pop() > stack.pop()) { gt = 17; continue; } // 161 0 14 - case 6: stack.push(arg5); // 21 5 - case 8: if (stack.pop() != 0) { gt = 15; continue; } // 154 0 7 - case 11: stack.push(arg2); // 28 - case 12: gt = 16; continue; // 167 0 4 - case 15: // 2 - case 16: return stack.pop(); // 172 - case 17: stack.push(arg6); // 21 6 - case 19: if (stack.pop() >= 0) { gt = 25; continue; } // 156 0 6 - case 22: stack.push(0); // 3 - case 23: arg6 = stack.pop() // 54 6 - case 25: stack.push(arg5); // 21 5 - case 27: if (stack.pop() != 0) { gt = 33; continue; } // 154 0 6 - case 30: stack.push(arg6); // 21 6 - case 32: return stack.pop(); // 172 - case 33: stack.push(arg3); // 45 - case 34: stack.push(arg4); // 21 4 - case 36: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 37: arg7 = stack.pop() // 54 7 - case 39: stack.push(arg1); // 27 - case 40: stack.push(arg2); // 28 - case 41: stack.push(arg5); // 21 5 - case 43: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 44: stack.push(stack.pop() + stack.pop()); // 96 - case 45: arg8 = stack.pop() // 54 8 - case 47: stack.push(arg1); // 27 - case 48: stack.push(arg6); // 21 6 - case 50: stack.push(stack.pop() + stack.pop()); // 96 - case 51: arg9 = stack.pop() // 54 9 - case 53: stack.push(arg9); // 21 9 - case 55: stack.push(arg8); // 21 8 - case 57: if (stack.pop() < stack.pop()) { gt = 164; continue; } // 163 0 107 - case 60: stack.push(arg0); // 42 - case 61: stack.push(arg9); // 21 9 - case 63: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 64: stack.push(arg7); // 21 7 - case 66: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 25 - case 69: arg9++; // 132 9 1 - case 72: stack.push(arg9); // 21 9 - case 74: stack.push(arg8); // 21 8 - case 76: if (stack.pop() < stack.pop()) { gt = 91; continue; } // 163 0 15 - case 79: stack.push(arg0); // 42 - case 80: stack.push(arg9); // 21 9 - case 82: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 83: stack.push(arg7); // 21 7 - case 85: if (stack.pop() == stack.pop()) { gt = 91; continue; } // 159 0 6 - case 88: gt = 69; continue; // 167 255 237 - case 91: stack.push(arg9); // 21 9 - case 93: stack.push(arg8); // 21 8 - case 95: if (stack.pop() < stack.pop()) { gt = 158; continue; } // 163 0 63 - case 98: stack.push(arg9); // 21 9 - case 100: stack.push(1); // 4 - case 101: stack.push(stack.pop() + stack.pop()); // 96 - case 102: arg10 = stack.pop() // 54 10 - case 104: stack.push(arg10); // 21 10 - case 106: stack.push(arg5); // 21 5 - case 108: stack.push(stack.pop() + stack.pop()); // 96 - case 109: stack.push(1); // 4 - case 110: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 111: arg11 = stack.pop() // 54 11 - case 113: stack.push(arg4); // 21 4 - case 115: stack.push(1); // 4 - case 116: stack.push(stack.pop() + stack.pop()); // 96 - case 117: arg12 = stack.pop() // 54 12 - case 119: stack.push(arg10); // 21 10 - case 121: stack.push(arg11); // 21 11 - case 123: if (stack.pop() <= stack.pop()) { gt = 146; continue; } // 162 0 23 - case 126: stack.push(arg0); // 42 - case 127: stack.push(arg10); // 21 10 - case 129: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 130: stack.push(arg3); // 45 - case 131: stack.push(arg12); // 21 12 - case 133: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 134: if (stack.pop() != stack.pop()) { gt = 146; continue; } // 160 0 12 - case 137: arg10++; // 132 10 1 - case 140: arg12++; // 132 12 1 - case 143: gt = 119; continue; // 167 255 232 - case 146: stack.push(arg10); // 21 10 - case 148: stack.push(arg11); // 21 11 - case 150: if (stack.pop() != stack.pop()) { gt = 158; continue; } // 160 0 8 - case 153: stack.push(arg9); // 21 9 - case 155: stack.push(arg1); // 27 - case 156: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 157: return stack.pop(); // 172 - case 158: arg9++; // 132 9 1 - case 161: gt = 53; continue; // 167 255 148 - case 164: // 2 - case 165: return stack.pop(); // 172 - } -} -function java_lang_String_lastIndexOfILjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: stack.push(arg0); // 42 - case 3: stack.push(stack.pop().count); // 180 1 97 - case 6: { var v1 = stack.pop(); var v0 = stack.pop(); var self = stack.pop(); stack.push(self.lastIndexOfILjava_lang_StringI(self, v0, v1)); } // 182 1 151 - case 9: return stack.pop(); // 172 - } -} -function java_lang_String_lastIndexOfILjava_lang_StringI(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(7); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().value); // 180 1 100 - case 4: stack.push(arg0); // 42 - case 5: stack.push(stack.pop().offset); // 180 1 99 - case 8: stack.push(arg0); // 42 - case 9: stack.push(stack.pop().count); // 180 1 97 - case 12: stack.push(arg1); // 43 - case 13: stack.push(stack.pop().value); // 180 1 100 - case 16: stack.push(arg1); // 43 - case 17: stack.push(stack.pop().offset); // 180 1 99 - case 20: stack.push(arg1); // 43 - case 21: stack.push(stack.pop().count); // 180 1 97 - case 24: stack.push(arg2); // 28 - case 25: { var v6 = stack.pop(); var v5 = stack.pop(); var v4 = stack.pop(); var v3 = stack.pop(); var v2 = stack.pop(); var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_String_lastIndexOfAIACAIAIACAIAIAI(v0, v1, v2, v3, v4, v5, v6)); } // 184 1 145 - case 28: return stack.pop(); // 172 - } -} -function java_lang_String_lastIndexOfIACIIACIII(arg0,arg1,arg2,arg3,arg4,arg5,arg6) { - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var arg13; - var arg14; - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg2); // 28 - case 1: stack.push(arg5); // 21 5 - case 3: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 4: arg7 = stack.pop() // 54 7 - case 6: stack.push(arg6); // 21 6 - case 8: if (stack.pop() >= 0) { gt = 13; continue; } // 156 0 5 - case 11: // 2 - case 12: return stack.pop(); // 172 - case 13: stack.push(arg6); // 21 6 - case 15: stack.push(arg7); // 21 7 - case 17: if (stack.pop() >= stack.pop()) { gt = 24; continue; } // 164 0 7 - case 20: stack.push(arg7); // 21 7 - case 22: arg6 = stack.pop() // 54 6 - case 24: stack.push(arg5); // 21 5 - case 26: if (stack.pop() != 0) { gt = 32; continue; } // 154 0 6 - case 29: stack.push(arg6); // 21 6 - case 31: return stack.pop(); // 172 - case 32: stack.push(arg4); // 21 4 - case 34: stack.push(arg5); // 21 5 - case 36: stack.push(stack.pop() + stack.pop()); // 96 - case 37: stack.push(1); // 4 - case 38: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 39: arg8 = stack.pop() // 54 8 - case 41: stack.push(arg3); // 45 - case 42: stack.push(arg8); // 21 8 - case 44: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 45: arg9 = stack.pop() // 54 9 - case 47: stack.push(arg1); // 27 - case 48: stack.push(arg5); // 21 5 - case 50: stack.push(stack.pop() + stack.pop()); // 96 - case 51: stack.push(1); // 4 - case 52: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 53: arg10 = stack.pop() // 54 10 - case 55: stack.push(arg10); // 21 10 - case 57: stack.push(arg6); // 21 6 - case 59: stack.push(stack.pop() + stack.pop()); // 96 - case 60: arg11 = stack.pop() // 54 11 - case 62: stack.push(arg11); // 21 11 - case 64: stack.push(arg10); // 21 10 - case 66: if (stack.pop() > stack.pop()) { gt = 84; continue; } // 161 0 18 - case 69: stack.push(arg0); // 42 - case 70: stack.push(arg11); // 21 11 - case 72: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 73: stack.push(arg9); // 21 9 - case 75: if (stack.pop() == stack.pop()) { gt = 84; continue; } // 159 0 9 - case 78: arg11 += 255; // 132 11 255 - case 81: gt = 62; continue; // 167 255 237 - case 84: stack.push(arg11); // 21 11 - case 86: stack.push(arg10); // 21 10 - case 88: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 5 - case 91: // 2 - case 92: return stack.pop(); // 172 - case 93: stack.push(arg11); // 21 11 - case 95: stack.push(1); // 4 - case 96: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 97: arg12 = stack.pop() // 54 12 - case 99: stack.push(arg12); // 21 12 - case 101: stack.push(arg5); // 21 5 - case 103: stack.push(1); // 4 - case 104: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 105: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 106: arg13 = stack.pop() // 54 13 - case 108: stack.push(arg8); // 21 8 - case 110: stack.push(1); // 4 - case 111: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 112: arg14 = stack.pop() // 54 14 - case 114: stack.push(arg12); // 21 12 - case 116: stack.push(arg13); // 21 13 - case 118: if (stack.pop() >= stack.pop()) { gt = 144; continue; } // 164 0 26 - case 121: stack.push(arg0); // 42 - case 122: stack.push(arg12); // 21 12 - case 124: arg12 += 255; // 132 12 255 - case 127: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 128: stack.push(arg3); // 45 - case 129: stack.push(arg14); // 21 14 - case 131: arg14 += 255; // 132 14 255 - case 134: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 135: if (stack.pop() == stack.pop()) { gt = 114; continue; } // 159 255 235 - case 138: arg11 += 255; // 132 11 255 - case 141: gt = 62; continue; // 167 255 177 - case 144: stack.push(arg13); // 21 13 - case 146: stack.push(arg1); // 27 - case 147: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 148: stack.push(1); // 4 - case 149: stack.push(stack.pop() + stack.pop()); // 96 - case 150: return stack.pop(); // 172 - } -} -*/ -function java_lang_String_substringLjava_lang_StringI(arg0,arg1) { - return arg0.toString().substring(arg1); -} -function java_lang_String_substringLjava_lang_StringII(arg0,arg1,arg2) { - return arg0.toString().substring(arg1, arg2); -} - -function java_lang_String_replaceLjava_lang_StringCC(arg0,arg1,arg2) { - if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1); - if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2); - var s = arg0.toString(); - for (;;) { - var ret = s.replace(arg1, arg2); - if (ret === s) { - return ret; - } - s = ret; - } -} -function java_lang_String_containsZLjava_lang_CharSequence(arg0,arg1) { - return arg0.toString().indexOf(arg1.toString()) >= 0; -} - -/* -function java_lang_String_subSequenceLjava_lang_CharSequenceII(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 27 - case 2: stack.push(arg2); // 28 - 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 - case 6: return stack.pop(); // 176 - } -} -function java_lang_String_concatLjava_lang_StringLjava_lang_String(arg0,arg1) { - var arg2; - var arg3; - var arg4; -; - var stack = new Array(5); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: { var self = stack.pop(); stack.push(self.lengthI(self)); } // 182 1 133 - case 4: arg2 = stack.pop(); // 61 - case 5: stack.push(arg2); // 28 - case 6: if (stack.pop() != 0) { gt = 11; continue; } // 154 0 5 - case 9: stack.push(arg0); // 42 - case 10: return stack.pop(); // 176 - case 11: stack.push(arg0); // 42 - case 12: stack.push(stack.pop().count); // 180 1 97 - case 15: stack.push(arg2); // 28 - case 16: stack.push(stack.pop() + stack.pop()); // 96 - case 17: stack.push(new Array(stack.pop())); // 188 5 - case 19: arg3 = stack.pop(); // 78 - case 20: stack.push(arg0); // 42 - case 21: stack.push(0); // 3 - case 22: stack.push(arg0); // 42 - case 23: stack.push(stack.pop().count); // 180 1 97 - case 26: stack.push(arg3); // 45 - case 27: stack.push(0); // 3 - 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 - case 31: stack.push(arg1); // 43 - case 32: stack.push(0); // 3 - case 33: stack.push(arg2); // 28 - case 34: stack.push(arg3); // 45 - case 35: stack.push(arg0); // 42 - case 36: stack.push(stack.pop().count); // 180 1 97 - 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 - case 42: stack.push(new java_lang_String); // 187 0 200 - case 45: stack.push(stack[stack.length - 1]); // 89 - case 46: stack.push(0); // 3 - case 47: stack.push(arg0); // 42 - case 48: stack.push(stack.pop().count); // 180 1 97 - case 51: stack.push(arg2); // 28 - case 52: stack.push(stack.pop() + stack.pop()); // 96 - case 53: stack.push(arg3); // 45 - 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 - case 57: return stack.pop(); // 176 - } -} -function java_lang_String_matchesZLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: stack.push(arg0); // 42 - 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 - case 5: return stack.pop(); // 172 - } -} -function java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186 - case 4: stack.push(arg0); // 42 - case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185 - case 8: stack.push(arg2); // 44 - case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceFirstLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 182 - case 12: return stack.pop(); // 176 - } -} -function java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186 - case 4: stack.push(arg0); // 42 - case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185 - case 8: stack.push(arg2); // 44 - case 9: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181 - case 12: return stack.pop(); // 176 - } -} -function java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132 - case 4: stack.push(16); // 16 16 - 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 - case 9: stack.push(arg0); // 42 - case 10: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.matcherLjava_util_regex_MatcherLjava_lang_CharSequence(self, v0)); } // 182 1 185 - case 13: stack.push(arg2); // 44 - case 14: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132 - case 17: { var v0 = stack.pop(); stack.push(java_util_regex_Matcher_quoteReplacementLjava_lang_StringLjava_lang_String(v0)); } // 184 1 180 - case 20: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.replaceAllLjava_lang_StringLjava_lang_String(self, v0)); } // 182 1 181 - case 23: return stack.pop(); // 176 - } -} -function java_lang_String_splitALjava_lang_StringLjava_lang_StringI(arg0,arg1,arg2) { - var arg3; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: { var v0 = stack.pop(); stack.push(java_util_regex_Pattern_compileLjava_util_regex_PatternLjava_lang_String(v0)); } // 184 1 186 - case 4: stack.push(arg0); // 42 - case 5: stack.push(arg2); // 28 - 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 - case 9: return stack.pop(); // 176 - } -} -function java_lang_String_splitALjava_lang_StringLjava_lang_String(arg0,arg1) { - var arg2; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: stack.push(0); // 3 - 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 - case 6: return stack.pop(); // 176 - } -} -function java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) { - var arg2; - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var arg13; - var arg14; -; - var stack = new Array(6); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11 - case 4: stack.push(new java_lang_NullPointerException); // 187 0 198 - case 7: stack.push(stack[stack.length - 1]); // 89 - case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128 - case 11: // 191 - case 12: stack.push(0); // 3 - case 13: arg2 = stack.pop(); // 61 - case 14: stack.push(arg2); // 28 - case 15: stack.push(arg0); // 42 - case 16: stack.push(stack.pop().count); // 180 1 97 - case 19: if (stack.pop() <= stack.pop()) { gt = 94; continue; } // 162 0 75 - case 22: stack.push(arg0); // 42 - case 23: stack.push(stack.pop().value); // 180 1 100 - case 26: stack.push(arg0); // 42 - case 27: stack.push(stack.pop().offset); // 180 1 99 - case 30: stack.push(arg2); // 28 - case 31: stack.push(stack.pop() + stack.pop()); // 96 - case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 33: arg3 = stack.pop(); // 62 - case 34: stack.push(arg3); // 29 - case 35: stack.push(55296); // 18 1 - case 37: if (stack.pop() > stack.pop()) { gt = 77; continue; } // 161 0 40 - case 40: stack.push(arg3); // 29 - case 41: stack.push(56319); // 18 2 - case 43: if (stack.pop() < stack.pop()) { gt = 77; continue; } // 163 0 34 - case 46: stack.push(arg0); // 42 - case 47: stack.push(arg2); // 28 - case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134 - case 51: arg4 = stack.pop() // 54 4 - case 53: stack.push(arg4); // 21 4 - case 55: stack.push(arg4); // 21 4 - case 57: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107 - case 60: if (stack.pop() == stack.pop()) { gt = 66; continue; } // 159 0 6 - case 63: gt = 96; continue; // 167 0 33 - case 66: stack.push(arg2); // 28 - case 67: stack.push(arg4); // 21 4 - case 69: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106 - case 72: stack.push(stack.pop() + stack.pop()); // 96 - case 73: arg2 = stack.pop(); // 61 - case 74: gt = 91; continue; // 167 0 17 - case 77: stack.push(arg3); // 29 - case 78: stack.push(arg3); // 29 - case 79: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseCC(v0)); } // 184 1 104 - case 82: if (stack.pop() == stack.pop()) { gt = 88; continue; } // 159 0 6 - case 85: gt = 96; continue; // 167 0 11 - case 88: arg2++; // 132 2 1 - case 91: gt = 14; continue; // 167 255 179 - case 94: stack.push(arg0); // 42 - case 95: return stack.pop(); // 176 - case 96: stack.push(arg0); // 42 - case 97: stack.push(stack.pop().count); // 180 1 97 - case 100: stack.push(new Array(stack.pop())); // 188 5 - case 102: arg3 = stack.pop(); // 78 - case 103: stack.push(0); // 3 - case 104: arg4 = stack.pop() // 54 4 - case 106: stack.push(arg0); // 42 - case 107: stack.push(stack.pop().value); // 180 1 100 - case 110: stack.push(arg0); // 42 - case 111: stack.push(stack.pop().offset); // 180 1 99 - case 114: stack.push(arg3); // 45 - case 115: stack.push(0); // 3 - case 116: stack.push(arg2); // 28 - 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 - case 120: stack.push(arg1); // 43 - case 121: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178 - case 124: arg5 = stack.pop() // 58 5 - case 126: stack.push(arg5); // 25 5 - case 128: stack.push("tr"); // 18 11 - case 130: // 165 - case 131: // 0 - case 132: stack.push(6405); // 17 25 5 - case 135: stack.push("az"); // 18 5 - case 137: // 165 - case 138: // 0 - case 139: stack.push(1); // 10 - case 140: stack.push(arg5); // 25 5 - case 142: stack.push("lt"); // 18 9 - case 144: // 166 - case 145: // 0 - case 146: stack.push(4); // 7 - case 147: stack.push(1); // 4 - case 148: gt = 152; continue; // 167 0 4 - case 151: stack.push(0); // 3 - case 152: arg6 = stack.pop() // 54 6 - case 154: stack.push(arg2); // 28 - case 155: arg11 = stack.pop() // 54 11 - case 157: stack.push(arg11); // 21 11 - case 159: stack.push(arg0); // 42 - case 160: stack.push(stack.pop().count); // 180 1 97 - case 163: if (stack.pop() <= stack.pop()) { gt = 419; continue; } // 162 1 0 - case 166: stack.push(arg0); // 42 - case 167: stack.push(stack.pop().value); // 180 1 100 - case 170: stack.push(arg0); // 42 - case 171: stack.push(stack.pop().offset); // 180 1 99 - case 174: stack.push(arg11); // 21 11 - case 176: stack.push(stack.pop() + stack.pop()); // 96 - case 177: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 178: arg9 = stack.pop() // 54 9 - case 180: stack.push(arg9); // 21 9 - case 182: // number conversion // 146 - case 183: stack.push(55296); // 18 1 - case 185: if (stack.pop() > stack.pop()) { gt = 214; continue; } // 161 0 29 - case 188: stack.push(arg9); // 21 9 - case 190: // number conversion // 146 - case 191: stack.push(56319); // 18 2 - case 193: if (stack.pop() < stack.pop()) { gt = 214; continue; } // 163 0 21 - case 196: stack.push(arg0); // 42 - case 197: stack.push(arg11); // 21 11 - case 199: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134 - case 202: arg9 = stack.pop() // 54 9 - case 204: stack.push(arg9); // 21 9 - case 206: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106 - case 209: arg10 = stack.pop() // 54 10 - case 211: gt = 217; continue; // 167 0 6 - case 214: stack.push(1); // 4 - case 215: arg10 = stack.pop() // 54 10 - case 217: stack.push(arg6); // 21 6 - case 219: if (stack.pop() != 0) { gt = 230; continue; } // 154 0 11 - case 222: stack.push(arg9); // 21 9 - case 224: stack.push(931); // 17 3 163 - case 227: if (stack.pop() != stack.pop()) { gt = 242; continue; } // 160 0 15 - case 230: stack.push(arg0); // 42 - case 231: stack.push(arg11); // 21 11 - case 233: stack.push(arg1); // 43 - 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 - case 237: arg8 = stack.pop() // 54 8 - case 239: gt = 249; continue; // 167 0 10 - case 242: stack.push(arg9); // 21 9 - case 244: { var v0 = stack.pop(); stack.push(java_lang_Character_toLowerCaseII(v0)); } // 184 1 107 - case 247: arg8 = stack.pop() // 54 8 - case 249: stack.push(arg8); // 21 8 - case 251: // 2 - case 252: if (stack.pop() == stack.pop()) { gt = 262; continue; } // 159 0 10 - case 255: stack.push(arg8); // 21 8 - case 257: stack.push(65536); // 18 3 - case 259: if (stack.pop() > stack.pop()) { gt = 399; continue; } // 161 0 140 - case 262: stack.push(arg8); // 21 8 - case 264: // 2 - case 265: if (stack.pop() != stack.pop()) { gt = 280; continue; } // 160 0 15 - case 268: stack.push(arg0); // 42 - case 269: stack.push(arg11); // 21 11 - case 271: stack.push(arg1); // 43 - 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 - case 275: arg7 = stack.pop() // 58 7 - case 277: gt = 315; continue; // 167 0 38 - case 280: stack.push(arg10); // 21 10 - case 282: stack.push(2); // 5 - case 283: if (stack.pop() != stack.pop()) { gt = 308; continue; } // 160 0 25 - case 286: stack.push(arg4); // 21 4 - case 288: stack.push(arg8); // 21 8 - case 290: stack.push(arg3); // 45 - case 291: stack.push(arg11); // 21 11 - case 293: stack.push(arg4); // 21 4 - case 295: stack.push(stack.pop() + stack.pop()); // 96 - 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 - case 299: stack.push(arg10); // 21 10 - case 301: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 302: stack.push(stack.pop() + stack.pop()); // 96 - case 303: arg4 = stack.pop() // 54 4 - case 305: gt = 409; continue; // 167 0 104 - case 308: stack.push(arg8); // 21 8 - case 310: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109 - case 313: arg7 = stack.pop() // 58 7 - case 315: stack.push(arg7); // 25 7 - case 317: stack.push(stack.pop().length); // 190 - case 318: arg12 = stack.pop() // 54 12 - case 320: stack.push(arg12); // 21 12 - case 322: stack.push(arg10); // 21 10 - case 324: if (stack.pop() >= stack.pop()) { gt = 355; continue; } // 164 0 31 - case 327: stack.push(arg3); // 45 - case 328: stack.push(stack.pop().length); // 190 - case 329: stack.push(arg12); // 21 12 - case 331: stack.push(stack.pop() + stack.pop()); // 96 - case 332: stack.push(arg10); // 21 10 - case 334: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 335: stack.push(new Array(stack.pop())); // 188 5 - case 337: arg13 = stack.pop() // 58 13 - case 339: stack.push(arg3); // 45 - case 340: stack.push(0); // 3 - case 341: stack.push(arg13); // 25 13 - case 343: stack.push(0); // 3 - case 344: stack.push(arg11); // 21 11 - case 346: stack.push(arg4); // 21 4 - case 348: stack.push(stack.pop() + stack.pop()); // 96 - 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 - case 352: stack.push(arg13); // 25 13 - case 354: arg3 = stack.pop(); // 78 - case 355: stack.push(0); // 3 - case 356: arg13 = stack.pop() // 54 13 - case 358: stack.push(arg13); // 21 13 - case 360: stack.push(arg12); // 21 12 - case 362: if (stack.pop() <= stack.pop()) { gt = 386; continue; } // 162 0 24 - case 365: stack.push(arg3); // 45 - case 366: stack.push(arg11); // 21 11 - case 368: stack.push(arg4); // 21 4 - case 370: stack.push(stack.pop() + stack.pop()); // 96 - case 371: stack.push(arg13); // 21 13 - case 373: stack.push(stack.pop() + stack.pop()); // 96 - case 374: stack.push(arg7); // 25 7 - case 376: stack.push(arg13); // 21 13 - case 378: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 379: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85 - case 380: arg13++; // 132 13 1 - case 383: gt = 358; continue; // 167 255 231 - case 386: stack.push(arg4); // 21 4 - case 388: stack.push(arg12); // 21 12 - case 390: stack.push(arg10); // 21 10 - case 392: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 393: stack.push(stack.pop() + stack.pop()); // 96 - case 394: arg4 = stack.pop() // 54 4 - case 396: gt = 409; continue; // 167 0 13 - case 399: stack.push(arg3); // 45 - case 400: stack.push(arg11); // 21 11 - case 402: stack.push(arg4); // 21 4 - case 404: stack.push(stack.pop() + stack.pop()); // 96 - case 405: stack.push(arg8); // 21 8 - case 407: // number conversion // 146 - case 408: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85 - case 409: stack.push(arg11); // 21 11 - case 411: stack.push(arg10); // 21 10 - case 413: stack.push(stack.pop() + stack.pop()); // 96 - case 414: arg11 = stack.pop() // 54 11 - case 416: gt = 157; continue; // 167 254 253 - case 419: stack.push(new java_lang_String); // 187 0 200 - case 422: stack.push(stack[stack.length - 1]); // 89 - case 423: stack.push(0); // 3 - case 424: stack.push(arg0); // 42 - case 425: stack.push(stack.pop().count); // 180 1 97 - case 428: stack.push(arg4); // 21 4 - case 430: stack.push(stack.pop() + stack.pop()); // 96 - case 431: stack.push(arg3); // 45 - 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 - case 435: return stack.pop(); // 176 - } -} -function java_lang_String_toLowerCaseLjava_lang_String(arg0) { - var arg1; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179 - case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toLowerCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 158 - case 7: return stack.pop(); // 176 - } -} -function java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale(arg0,arg1) { - var arg2; - var arg3; - var arg4; - var arg5; - var arg6; - var arg7; - var arg8; - var arg9; - var arg10; - var arg11; - var arg12; - var arg13; - var arg14; -; - var stack = new Array(6); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg1); // 43 - case 1: if (stack.pop()) { gt = 12; continue; } // 199 0 11 - case 4: stack.push(new java_lang_NullPointerException); // 187 0 198 - case 7: stack.push(stack[stack.length - 1]); // 89 - case 8: { java_lang_NullPointerException_consV(stack.pop()); } // 183 1 128 - case 11: // 191 - case 12: stack.push(0); // 3 - case 13: arg2 = stack.pop(); // 61 - case 14: stack.push(arg2); // 28 - case 15: stack.push(arg0); // 42 - case 16: stack.push(stack.pop().count); // 180 1 97 - case 19: if (stack.pop() <= stack.pop()) { gt = 93; continue; } // 162 0 74 - case 22: stack.push(arg0); // 42 - case 23: stack.push(stack.pop().value); // 180 1 100 - case 26: stack.push(arg0); // 42 - case 27: stack.push(stack.pop().offset); // 180 1 99 - case 30: stack.push(arg2); // 28 - case 31: stack.push(stack.pop() + stack.pop()); // 96 - case 32: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 33: arg3 = stack.pop(); // 62 - case 34: stack.push(arg3); // 29 - case 35: stack.push(55296); // 18 1 - case 37: if (stack.pop() > stack.pop()) { gt = 61; continue; } // 161 0 24 - case 40: stack.push(arg3); // 29 - case 41: stack.push(56319); // 18 2 - case 43: if (stack.pop() < stack.pop()) { gt = 61; continue; } // 163 0 18 - case 46: stack.push(arg0); // 42 - case 47: stack.push(arg2); // 28 - case 48: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134 - case 51: arg3 = stack.pop(); // 62 - case 52: stack.push(arg3); // 29 - case 53: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106 - case 56: arg4 = stack.pop() // 54 4 - case 58: gt = 64; continue; // 167 0 6 - case 61: stack.push(1); // 4 - case 62: arg4 = stack.pop() // 54 4 - case 64: stack.push(arg3); // 29 - case 65: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108 - case 68: arg5 = stack.pop() // 54 5 - case 70: stack.push(arg5); // 21 5 - case 72: // 2 - case 73: if (stack.pop() == stack.pop()) { gt = 95; continue; } // 159 0 22 - case 76: stack.push(arg3); // 29 - case 77: stack.push(arg5); // 21 5 - case 79: if (stack.pop() == stack.pop()) { gt = 85; continue; } // 159 0 6 - case 82: gt = 95; continue; // 167 0 13 - case 85: stack.push(arg2); // 28 - case 86: stack.push(arg4); // 21 4 - case 88: stack.push(stack.pop() + stack.pop()); // 96 - case 89: arg2 = stack.pop(); // 61 - case 90: gt = 14; continue; // 167 255 180 - case 93: stack.push(arg0); // 42 - case 94: return stack.pop(); // 176 - case 95: stack.push(arg0); // 42 - case 96: stack.push(stack.pop().count); // 180 1 97 - case 99: stack.push(new Array(stack.pop())); // 188 5 - case 101: arg3 = stack.pop(); // 78 - case 102: stack.push(0); // 3 - case 103: arg4 = stack.pop() // 54 4 - case 105: stack.push(arg0); // 42 - case 106: stack.push(stack.pop().value); // 180 1 100 - case 109: stack.push(arg0); // 42 - case 110: stack.push(stack.pop().offset); // 180 1 99 - case 113: stack.push(arg3); // 45 - case 114: stack.push(0); // 3 - case 115: stack.push(arg2); // 28 - 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 - case 119: stack.push(arg1); // 43 - case 120: { var self = stack.pop(); stack.push(self.getLanguageLjava_lang_String(self)); } // 182 1 178 - case 123: arg5 = stack.pop() // 58 5 - case 125: stack.push(arg5); // 25 5 - case 127: stack.push("tr"); // 18 11 - case 129: // 165 - case 130: // 0 - case 131: stack.push(6405); // 17 25 5 - case 134: stack.push("az"); // 18 5 - case 136: // 165 - case 137: // 0 - case 138: stack.push(1); // 10 - case 139: stack.push(arg5); // 25 5 - case 141: stack.push("lt"); // 18 9 - case 143: // 166 - case 144: // 0 - case 145: stack.push(4); // 7 - case 146: stack.push(1); // 4 - case 147: gt = 151; continue; // 167 0 4 - case 150: stack.push(0); // 3 - case 151: arg6 = stack.pop() // 54 6 - case 153: stack.push(arg2); // 28 - case 154: arg11 = stack.pop() // 54 11 - case 156: stack.push(arg11); // 21 11 - case 158: stack.push(arg0); // 42 - case 159: stack.push(stack.pop().count); // 180 1 97 - case 162: if (stack.pop() <= stack.pop()) { gt = 425; continue; } // 162 1 7 - case 165: stack.push(arg0); // 42 - case 166: stack.push(stack.pop().value); // 180 1 100 - case 169: stack.push(arg0); // 42 - case 170: stack.push(stack.pop().offset); // 180 1 99 - case 173: stack.push(arg11); // 21 11 - case 175: stack.push(stack.pop() + stack.pop()); // 96 - case 176: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 177: arg9 = stack.pop() // 54 9 - case 179: stack.push(arg9); // 21 9 - case 181: // number conversion // 146 - case 182: stack.push(55296); // 18 1 - case 184: if (stack.pop() > stack.pop()) { gt = 213; continue; } // 161 0 29 - case 187: stack.push(arg9); // 21 9 - case 189: // number conversion // 146 - case 190: stack.push(56319); // 18 2 - case 192: if (stack.pop() < stack.pop()) { gt = 213; continue; } // 163 0 21 - case 195: stack.push(arg0); // 42 - case 196: stack.push(arg11); // 21 11 - case 198: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.codePointAtII(self, v0)); } // 182 1 134 - case 201: arg9 = stack.pop() // 54 9 - case 203: stack.push(arg9); // 21 9 - case 205: { var v0 = stack.pop(); stack.push(java_lang_Character_charCountII(v0)); } // 184 1 106 - case 208: arg10 = stack.pop() // 54 10 - case 210: gt = 216; continue; // 167 0 6 - case 213: stack.push(1); // 4 - case 214: arg10 = stack.pop() // 54 10 - case 216: stack.push(arg6); // 21 6 - case 218: if (stack.pop() == 0) { gt = 233; continue; } // 153 0 15 - case 221: stack.push(arg0); // 42 - case 222: stack.push(arg11); // 21 11 - case 224: stack.push(arg1); // 43 - 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 - case 228: arg8 = stack.pop() // 54 8 - case 230: gt = 240; continue; // 167 0 10 - case 233: stack.push(arg9); // 21 9 - case 235: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseExII(v0)); } // 184 1 108 - case 238: arg8 = stack.pop() // 54 8 - case 240: stack.push(arg8); // 21 8 - case 242: // 2 - case 243: if (stack.pop() == stack.pop()) { gt = 253; continue; } // 159 0 10 - case 246: stack.push(arg8); // 21 8 - case 248: stack.push(65536); // 18 3 - case 250: if (stack.pop() > stack.pop()) { gt = 405; continue; } // 161 0 155 - case 253: stack.push(arg8); // 21 8 - case 255: // 2 - case 256: if (stack.pop() != stack.pop()) { gt = 286; continue; } // 160 0 30 - case 259: stack.push(arg6); // 21 6 - case 261: if (stack.pop() == 0) { gt = 276; continue; } // 153 0 15 - case 264: stack.push(arg0); // 42 - case 265: stack.push(arg11); // 21 11 - case 267: stack.push(arg1); // 43 - 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 - case 271: arg7 = stack.pop() // 58 7 - case 273: gt = 321; continue; // 167 0 48 - case 276: stack.push(arg9); // 21 9 - case 278: { var v0 = stack.pop(); stack.push(java_lang_Character_toUpperCaseCharArrayACI(v0)); } // 184 1 110 - case 281: arg7 = stack.pop() // 58 7 - case 283: gt = 321; continue; // 167 0 38 - case 286: stack.push(arg10); // 21 10 - case 288: stack.push(2); // 5 - case 289: if (stack.pop() != stack.pop()) { gt = 314; continue; } // 160 0 25 - case 292: stack.push(arg4); // 21 4 - case 294: stack.push(arg8); // 21 8 - case 296: stack.push(arg3); // 45 - case 297: stack.push(arg11); // 21 11 - case 299: stack.push(arg4); // 21 4 - case 301: stack.push(stack.pop() + stack.pop()); // 96 - 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 - case 305: stack.push(arg10); // 21 10 - case 307: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 308: stack.push(stack.pop() + stack.pop()); // 96 - case 309: arg4 = stack.pop() // 54 4 - case 311: gt = 415; continue; // 167 0 104 - case 314: stack.push(arg8); // 21 8 - case 316: { var v0 = stack.pop(); stack.push(java_lang_Character_toCharsACI(v0)); } // 184 1 109 - case 319: arg7 = stack.pop() // 58 7 - case 321: stack.push(arg7); // 25 7 - case 323: stack.push(stack.pop().length); // 190 - case 324: arg12 = stack.pop() // 54 12 - case 326: stack.push(arg12); // 21 12 - case 328: stack.push(arg10); // 21 10 - case 330: if (stack.pop() >= stack.pop()) { gt = 361; continue; } // 164 0 31 - case 333: stack.push(arg3); // 45 - case 334: stack.push(stack.pop().length); // 190 - case 335: stack.push(arg12); // 21 12 - case 337: stack.push(stack.pop() + stack.pop()); // 96 - case 338: stack.push(arg10); // 21 10 - case 340: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 341: stack.push(new Array(stack.pop())); // 188 5 - case 343: arg13 = stack.pop() // 58 13 - case 345: stack.push(arg3); // 45 - case 346: stack.push(0); // 3 - case 347: stack.push(arg13); // 25 13 - case 349: stack.push(0); // 3 - case 350: stack.push(arg11); // 21 11 - case 352: stack.push(arg4); // 21 4 - case 354: stack.push(stack.pop() + stack.pop()); // 96 - 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 - case 358: stack.push(arg13); // 25 13 - case 360: arg3 = stack.pop(); // 78 - case 361: stack.push(0); // 3 - case 362: arg13 = stack.pop() // 54 13 - case 364: stack.push(arg13); // 21 13 - case 366: stack.push(arg12); // 21 12 - case 368: if (stack.pop() <= stack.pop()) { gt = 392; continue; } // 162 0 24 - case 371: stack.push(arg3); // 45 - case 372: stack.push(arg11); // 21 11 - case 374: stack.push(arg4); // 21 4 - case 376: stack.push(stack.pop() + stack.pop()); // 96 - case 377: stack.push(arg13); // 21 13 - case 379: stack.push(stack.pop() + stack.pop()); // 96 - case 380: stack.push(arg7); // 25 7 - case 382: stack.push(arg13); // 21 13 - case 384: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 385: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85 - case 386: arg13++; // 132 13 1 - case 389: gt = 364; continue; // 167 255 231 - case 392: stack.push(arg4); // 21 4 - case 394: stack.push(arg12); // 21 12 - case 396: stack.push(arg10); // 21 10 - case 398: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 399: stack.push(stack.pop() + stack.pop()); // 96 - case 400: arg4 = stack.pop() // 54 4 - case 402: gt = 415; continue; // 167 0 13 - case 405: stack.push(arg3); // 45 - case 406: stack.push(arg11); // 21 11 - case 408: stack.push(arg4); // 21 4 - case 410: stack.push(stack.pop() + stack.pop()); // 96 - case 411: stack.push(arg8); // 21 8 - case 413: // number conversion // 146 - case 414: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85 - case 415: stack.push(arg11); // 21 11 - case 417: stack.push(arg10); // 21 10 - case 419: stack.push(stack.pop() + stack.pop()); // 96 - case 420: arg11 = stack.pop() // 54 11 - case 422: gt = 156; continue; // 167 254 246 - case 425: stack.push(new java_lang_String); // 187 0 200 - case 428: stack.push(stack[stack.length - 1]); // 89 - case 429: stack.push(0); // 3 - case 430: stack.push(arg0); // 42 - case 431: stack.push(stack.pop().count); // 180 1 97 - case 434: stack.push(arg4); // 21 4 - case 436: stack.push(stack.pop() + stack.pop()); // 96 - case 437: stack.push(arg3); // 45 - 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 - case 441: return stack.pop(); // 176 - } -} -function java_lang_String_toUpperCaseLjava_lang_String(arg0) { - var arg1; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: { stack.push(java_util_Locale_getDefaultLjava_util_Locale()); } // 184 1 179 - case 4: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.toUpperCaseLjava_lang_StringLjava_util_Locale(self, v0)); } // 182 1 159 - case 7: return stack.pop(); // 176 - } -} -function java_lang_String_trimLjava_lang_String(arg0) { - var arg1; - var arg2; - var arg3; - var arg4; - var arg5; -; - var stack = new Array(3); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(stack.pop().count); // 180 1 97 - case 4: arg1 = stack.pop(); // 60 - case 5: stack.push(0); // 3 - case 6: arg2 = stack.pop(); // 61 - case 7: stack.push(arg0); // 42 - case 8: stack.push(stack.pop().offset); // 180 1 99 - case 11: arg3 = stack.pop(); // 62 - case 12: stack.push(arg0); // 42 - case 13: stack.push(stack.pop().value); // 180 1 100 - case 16: arg4 = stack.pop() // 58 4 - case 18: stack.push(arg2); // 28 - case 19: stack.push(arg1); // 27 - case 20: if (stack.pop() <= stack.pop()) { gt = 40; continue; } // 162 0 20 - case 23: stack.push(arg4); // 25 4 - case 25: stack.push(arg3); // 29 - case 26: stack.push(arg2); // 28 - case 27: stack.push(stack.pop() + stack.pop()); // 96 - case 28: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 29: stack.push(32); // 16 32 - case 31: if (stack.pop() < stack.pop()) { gt = 40; continue; } // 163 0 9 - case 34: arg2++; // 132 2 1 - case 37: gt = 18; continue; // 167 255 237 - case 40: stack.push(arg2); // 28 - case 41: stack.push(arg1); // 27 - case 42: if (stack.pop() <= stack.pop()) { gt = 64; continue; } // 162 0 22 - case 45: stack.push(arg4); // 25 4 - case 47: stack.push(arg3); // 29 - case 48: stack.push(arg1); // 27 - case 49: stack.push(stack.pop() + stack.pop()); // 96 - case 50: stack.push(1); // 4 - case 51: { var tmp = stack.pop(); stack.push(stack.pop() - tmp); } // 100 - case 52: { var indx = stack.pop(); stack.push(stack.pop()[indx]); } // 52 - case 53: stack.push(32); // 16 32 - case 55: if (stack.pop() < stack.pop()) { gt = 64; continue; } // 163 0 9 - case 58: arg1 += 255; // 132 1 255 - case 61: gt = 40; continue; // 167 255 235 - case 64: stack.push(arg2); // 28 - case 65: if (stack.pop() > 0) { gt = 76; continue; } // 157 0 11 - case 68: stack.push(arg1); // 27 - case 69: stack.push(arg0); // 42 - case 70: stack.push(stack.pop().count); // 180 1 97 - case 73: if (stack.pop() <= stack.pop()) { gt = 85; continue; } // 162 0 12 - case 76: stack.push(arg0); // 42 - case 77: stack.push(arg2); // 28 - case 78: stack.push(arg1); // 27 - 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 - case 82: gt = 86; continue; // 167 0 4 - case 85: stack.push(arg0); // 42 - case 86: return stack.pop(); // 176 - } -} -*/ -function java_lang_String_toStringLjava_lang_String(arg0) { - return arg0.toString(); -} -function java_lang_String_toCharArrayAC(arg0) { - return arg0.toString().split(''); -} -/* -function java_lang_String_formatLjava_lang_StringLjava_lang_StringLjava_lang_Object(arg0,arg1) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(new java_util_Formatter); // 187 0 211 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: { java_util_Formatter_consV(stack.pop()); } // 183 1 174 - case 7: stack.push(arg0); // 42 - case 8: stack.push(arg1); // 43 - 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 - case 12: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175 - case 15: return stack.pop(); // 176 - } -} -function java_lang_String_formatLjava_lang_StringLjava_util_LocaleLjava_lang_StringLjava_lang_Object(arg0,arg1,arg2) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(new java_util_Formatter); // 187 0 211 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: stack.push(arg0); // 42 - case 5: { var v0 = stack.pop(); java_util_Formatter_consVLjava_util_Locale(stack.pop(), v0); } // 183 1 176 - case 8: stack.push(arg1); // 43 - case 9: stack.push(arg2); // 44 - 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 - case 13: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 175 - case 16: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringLjava_lang_Object(arg0) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: if (stack.pop()) { gt = 9; continue; } // 199 0 8 - case 4: stack.push("null"); // 18 10 - case 6: gt = 13; continue; // 167 0 7 - case 9: stack.push(arg0); // 42 - case 10: { var self = stack.pop(); stack.push(self.toStringLjava_lang_String(self)); } // 182 1 132 - case 13: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringAC(arg0) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(new java_lang_String); // 187 0 200 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: stack.push(arg0); // 42 - case 5: { var v0 = stack.pop(); java_lang_String_consVAC(stack.pop(), v0); } // 183 1 142 - case 8: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringACII(arg0,arg1,arg2) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(new java_lang_String); // 187 0 200 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: stack.push(arg0); // 42 - case 5: stack.push(arg1); // 27 - case 6: stack.push(arg2); // 28 - 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 - case 10: return stack.pop(); // 176 - } -} -function java_lang_String_copyValueOfLjava_lang_StringACII(arg0,arg1,arg2) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(new java_lang_String); // 187 0 200 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: stack.push(arg0); // 42 - case 5: stack.push(arg1); // 27 - case 6: stack.push(arg2); // 28 - 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 - case 10: return stack.pop(); // 176 - } -} -function java_lang_String_copyValueOfLjava_lang_StringAC(arg0) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(0); // 3 - case 2: stack.push(arg0); // 42 - case 3: stack.push(stack.pop().length); // 190 - 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 - case 7: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringZ(arg0) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 26 - case 1: if (stack.pop() == 0) { gt = 9; continue; } // 153 0 8 - case 4: stack.push("true"); // 18 12 - case 6: gt = 11; continue; // 167 0 5 - case 9: stack.push("false"); // 18 8 - case 11: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringC(arg0) { - var arg1; - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(1); // 4 - case 1: stack.push(new Array(stack.pop())); // 188 5 - case 3: stack.push(stack[stack.length - 1]); // 89 - case 4: stack.push(0); // 3 - case 5: stack.push(arg0); // 26 - case 6: { var value = stack.pop(); var indx = stack.pop(); stack.pop()[indx] = value; } // 85 - case 7: arg1 = stack.pop(); // 76 - case 8: stack.push(new java_lang_String); // 187 0 200 - case 11: stack.push(stack[stack.length - 1]); // 89 - case 12: stack.push(0); // 3 - case 13: stack.push(1); // 4 - case 14: stack.push(arg1); // 43 - 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 - case 18: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringJ(arg0) { - var arg1; - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 30 - case 1: stack.push(10); // 16 10 - case 3: { var v1 = stack.pop(); var v0 = stack.pop(); stack.push(java_lang_Long_toStringLjava_lang_StringJI(v0, v1)); } // 184 1 126 - case 6: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringF(arg0) { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 34 - case 1: { var v0 = stack.pop(); stack.push(java_lang_Float_toStringLjava_lang_StringF(v0)); } // 184 1 122 - case 4: return stack.pop(); // 176 - } -} -function java_lang_String_valueOfLjava_lang_StringD(arg0) { - var arg1; - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 38 - case 1: { var v0 = stack.pop(); stack.push(java_lang_Double_toStringLjava_lang_StringD(v0)); } // 184 1 121 - case 4: return stack.pop(); // 176 - } -} -function java_lang_String_internLjava_lang_String(arg0) { - // no code found for null -} -function java_lang_String_compareToILjava_lang_Object(arg0,arg1) { - var arg2; -; - var stack = new Array(2); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(arg0); // 42 - case 1: stack.push(arg1); // 43 - case 2: if(stack[stack.length - 1].$instOf_java_lang_String != 1) throw {}; // 192 0 200 - case 5: { var v0 = stack.pop(); var self = stack.pop(); stack.push(self.compareToILjava_lang_String(self, v0)); } // 182 1 148 - case 8: return stack.pop(); // 172 - } -} -function java_lang_String_classV() { - var stack = new Array(); - var gt = 0; - for(;;) switch(gt) { - case 0: stack.push(0); // 3 - case 1: stack.push(new Array(stack.pop())); // 189 0 183 - case 4: java_lang_String_serialPersistentFields = stack.pop(); // 179 1 101 - case 7: stack.push(new java_lang_String$CaseInsensitiveComparator); // 187 0 202 - case 10: stack.push(stack[stack.length - 1]); // 89 - case 11: // 1 - case 12: { var v0 = stack.pop(); java_lang_String$CaseInsensitiveComparator_consVLjava_lang_String$1(stack.pop(), v0); } // 183 1 160 - case 15: java_lang_String_CASE_INSENSITIVE_ORDER = stack.pop(); // 179 1 102 - case 18: return; // 177 - } -} -*/ -var java_lang_String_serialVersionUID = 0; -var java_lang_String_serialPersistentFields = 0; -var java_lang_String_CASE_INSENSITIVE_ORDER = 0; -function java_lang_String() { - /** the real value of this 'string' we delegate to */ - this.r = ''; -} -java_lang_String.prototype = new String; -java_lang_String.prototype.toString = function() { return this.r; };; -//java_lang_String_classV(); - -/* new method for JavaScript String */ -String.prototype.consVAC = java_lang_String_consVAC; -String.prototype.consVACII = java_lang_String_consVACII; -String.prototype.charAtCI = java_lang_String_charAtCI; -String.prototype.lengthI = java_lang_String_lengthI; -String.prototype.isEmptyZ = java_lang_String_isEmptyZ; -String.prototype.getCharsVIIACI = java_lang_String_getCharsVIIACAI; -String.prototype.getCharsVACI = java_lang_String_getCharsVACI; -String.prototype.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String; -String.prototype.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI; -String.prototype.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII; -String.prototype.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC; -String.prototype.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence; -String.prototype.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object; -String.prototype.hashCodeI = java_lang_String_hashCodeI; -String.prototype.toCharArrayAC = java_lang_String_toCharArrayAC; -String.prototype.valueOfLjava_lang_StringI=java_lang_String_valueOfLjava_lang_StringI; -String.prototype.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI; -String.prototype.startsWithZLjava_lang_String=java_lang_String_startsWithZLjava_lang_String; -String.prototype.endsWithZLjava_lang_String=java_lang_String_endsWithZLjava_lang_String; -String.prototype.indexOfII=java_lang_String_indexOfII; -String.prototype.indexOfIII=java_lang_String_indexOfIII; - -String.prototype.$instOf_java_lang_String = true; -String.prototype.$instOf_java_io_Serializable = true; -String.prototype.$instOf_java_lang_Comparable = true; -String.prototype.$instOf_java_lang_CharSequence = true; - -/* - this.lengthI = java_lang_String_lengthI; - this.isEmptyZ = java_lang_String_isEmptyZ; - this.charAtCI = java_lang_String_charAtCI; - this.codePointAtII = java_lang_String_codePointAtII; - this.codePointBeforeII = java_lang_String_codePointBeforeII; - this.codePointCountIII = java_lang_String_codePointCountIII; - this.offsetByCodePointsIII = java_lang_String_offsetByCodePointsIII; - this.getCharsVACI = java_lang_String_getCharsVACI; - this.getCharsVIIACI = java_lang_String_getCharsVIIACI; - this.getBytesVIIABI = java_lang_String_getBytesVIIABI; - this.getBytesABLjava_lang_String = java_lang_String_getBytesABLjava_lang_String; - this.getBytesABLjava_nio_charset_Charset = java_lang_String_getBytesABLjava_nio_charset_Charset; - this.getBytesAB = java_lang_String_getBytesAB; - this.equalsZLjava_lang_Object = java_lang_String_equalsZLjava_lang_Object; - this.contentEqualsZLjava_lang_StringBuffer = java_lang_String_contentEqualsZLjava_lang_StringBuffer; - this.contentEqualsZLjava_lang_CharSequence = java_lang_String_contentEqualsZLjava_lang_CharSequence; - this.equalsIgnoreCaseZLjava_lang_String = java_lang_String_equalsIgnoreCaseZLjava_lang_String; - this.compareToILjava_lang_String = java_lang_String_compareToILjava_lang_String; - this.compareToIgnoreCaseILjava_lang_String = java_lang_String_compareToIgnoreCaseILjava_lang_String; - this.regionMatchesZILjava_lang_StringII = java_lang_String_regionMatchesZILjava_lang_StringII; - this.regionMatchesZZILjava_lang_StringII = java_lang_String_regionMatchesZZILjava_lang_StringII; - this.startsWithZLjava_lang_StringI = java_lang_String_startsWithZLjava_lang_StringI; - this.startsWithZLjava_lang_String = java_lang_String_startsWithZLjava_lang_String; - this.endsWithZLjava_lang_String = java_lang_String_endsWithZLjava_lang_String; - this.hashCodeI = java_lang_String_hashCodeI; - this.indexOfII = java_lang_String_indexOfII; - this.indexOfIII = java_lang_String_indexOfIII; - this.lastIndexOfII = java_lang_String_lastIndexOfII; - this.lastIndexOfIII = java_lang_String_lastIndexOfIII; - this.indexOfILjava_lang_String = java_lang_String_indexOfILjava_lang_String; - this.indexOfILjava_lang_StringI = java_lang_String_indexOfILjava_lang_StringI; - this.lastIndexOfILjava_lang_String = java_lang_String_lastIndexOfILjava_lang_String; - this.lastIndexOfILjava_lang_StringI = java_lang_String_lastIndexOfILjava_lang_StringI; - this.substringLjava_lang_StringI = java_lang_String_substringLjava_lang_StringI; - this.substringLjava_lang_StringII = java_lang_String_substringLjava_lang_StringII; - this.subSequenceLjava_lang_CharSequenceII = java_lang_String_subSequenceLjava_lang_CharSequenceII; - this.concatLjava_lang_StringLjava_lang_String = java_lang_String_concatLjava_lang_StringLjava_lang_String; - this.replaceLjava_lang_StringCC = java_lang_String_replaceLjava_lang_StringCC; - this.matchesZLjava_lang_String = java_lang_String_matchesZLjava_lang_String; - this.containsZLjava_lang_CharSequence = java_lang_String_containsZLjava_lang_CharSequence; - this.replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceFirstLjava_lang_StringLjava_lang_StringLjava_lang_String; - this.replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String = java_lang_String_replaceAllLjava_lang_StringLjava_lang_StringLjava_lang_String; - this.replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence = java_lang_String_replaceLjava_lang_StringLjava_lang_CharSequenceLjava_lang_CharSequence; - this.splitALjava_lang_StringLjava_lang_StringI = java_lang_String_splitALjava_lang_StringLjava_lang_StringI; - this.splitALjava_lang_StringLjava_lang_String = java_lang_String_splitALjava_lang_StringLjava_lang_String; - this.toLowerCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toLowerCaseLjava_lang_StringLjava_util_Locale; - this.toLowerCaseLjava_lang_String = java_lang_String_toLowerCaseLjava_lang_String; - this.toUpperCaseLjava_lang_StringLjava_util_Locale = java_lang_String_toUpperCaseLjava_lang_StringLjava_util_Locale; - this.toUpperCaseLjava_lang_String = java_lang_String_toUpperCaseLjava_lang_String; - this.trimLjava_lang_String = java_lang_String_trimLjava_lang_String; - this.toStringLjava_lang_String = java_lang_String_toStringLjava_lang_String; - this.internLjava_lang_String = java_lang_String_internLjava_lang_String; - this.compareToILjava_lang_Object = java_lang_String_compareToILjava_lang_Object; - */ - - - +// initialize methods on String constants +java_lang_String(false) diff -r 3ee23267706c -r 8bd4adaf6590 javap/pom.xml --- a/javap/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/javap/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,11 +5,11 @@ org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr javap - 1.0-SNAPSHOT + 0.3-SNAPSHOT javap http://maven.apache.org @@ -35,7 +35,7 @@ org.apidesign.bck2brwsr emul - 1.0-SNAPSHOT + 0.3-SNAPSHOT diff -r 3ee23267706c -r 8bd4adaf6590 javap/src/main/java/org/apidesign/javap/AnnotationParser.java --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Thu Nov 29 20:19:00 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Mon Dec 03 14:44:49 2012 +0100 @@ -71,6 +71,9 @@ String attrName = cd.StringValue(dis.readUnsignedShort()); readValue(dis, cd, typeName, attrName); } + if (cnt == 0) { + visitAttr(typeName, null, null); + } } private void readValue(DataInputStream dis, ClassData cd, String typeName, String attrName) diff -r 3ee23267706c -r 8bd4adaf6590 javap/src/main/java/org/apidesign/javap/FieldData.java --- a/javap/src/main/java/org/apidesign/javap/FieldData.java Thu Nov 29 20:19:00 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/FieldData.java Mon Dec 03 14:44:49 2012 +0100 @@ -163,4 +163,13 @@ public Vector getAttributes(){ return attrs; } + + public byte[] findAnnotationData(boolean classRetention) { + String n = classRetention ? + "RuntimeInvisibleAnnotations" : // NOI18N + "RuntimeVisibleAnnotations"; // NOI18N + AttrData[] arr = new AttrData[attrs.size()]; + attrs.copyInto(arr); + return ClassData.findAttr(n, arr); + } } diff -r 3ee23267706c -r 8bd4adaf6590 javaquery/api/pom.xml --- a/javaquery/api/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/javaquery/api/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,11 +5,11 @@ org.apidesign.bck2brwsr javaquery - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr javaquery.api - 1.0-SNAPSHOT + 0.3-SNAPSHOT JavaQuery API http://maven.apache.org @@ -47,20 +47,20 @@ org.apidesign.bck2brwsr core - 1.0-SNAPSHOT + 0.3-SNAPSHOT jar org.apidesign.bck2brwsr emul - 1.0-SNAPSHOT + 0.3-SNAPSHOT jar runtime org.apidesign.bck2brwsr vm4brwsr - 0.1-SNAPSHOT + 0.3-SNAPSHOT jar test diff -r 3ee23267706c -r 8bd4adaf6590 javaquery/demo-calculator/pom.xml --- a/javaquery/demo-calculator/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/javaquery/demo-calculator/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,7 +5,7 @@ org.apidesign.bck2brwsr demo.calculator - 1.0-SNAPSHOT + 0.3-SNAPSHOT jar JavaQuery Demo - Calculator @@ -19,7 +19,7 @@ org.apidesign.bck2brwsr mojo - 1.0-SNAPSHOT + 0.3-SNAPSHOT @@ -62,12 +62,12 @@ org.apidesign.bck2brwsr emul - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr javaquery.api - 1.0-SNAPSHOT + 0.3-SNAPSHOT diff -r 3ee23267706c -r 8bd4adaf6590 javaquery/pom.xml --- a/javaquery/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/javaquery/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -4,11 +4,11 @@ bck2brwsr org.apidesign - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr javaquery - 1.0-SNAPSHOT + 0.3-SNAPSHOT pom JavaQuery API and Demo diff -r 3ee23267706c -r 8bd4adaf6590 mojo/pom.xml --- a/mojo/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/mojo/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -5,11 +5,11 @@ org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr mojo - 1.0-SNAPSHOT + 0.3-SNAPSHOT maven-plugin Maven Mojo to Compile to JavaScript http://maven.apache.org @@ -63,7 +63,7 @@ ${project.groupId} vm4brwsr - 0.1-SNAPSHOT + 0.3-SNAPSHOT emul diff -r 3ee23267706c -r 8bd4adaf6590 pom.xml --- a/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -3,7 +3,7 @@ 4.0.0 org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT pom Back 2 Browser diff -r 3ee23267706c -r 8bd4adaf6590 vm/nb-configuration.xml --- a/vm/nb-configuration.xml Thu Nov 29 20:19:00 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ - - - - - - - all - - diff -r 3ee23267706c -r 8bd4adaf6590 vm/pom.xml --- a/vm/pom.xml Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/pom.xml Mon Dec 03 14:44:49 2012 +0100 @@ -4,12 +4,12 @@ org.apidesign bck2brwsr - 1.0-SNAPSHOT + 0.3-SNAPSHOT org.apidesign.bck2brwsr vm4brwsr - 0.1-SNAPSHOT + 0.3-SNAPSHOT jar Java VM for Browser @@ -83,21 +83,21 @@ - org.apidesign.bck2brwsr + ${project.groupId} core - 1.0-SNAPSHOT + 0.3-SNAPSHOT jar - org.apidesign.bck2brwsr + ${project.groupId} emul - 1.0-SNAPSHOT + 0.3-SNAPSHOT test ${project.groupId} javap - 1.0-SNAPSHOT + 0.3-SNAPSHOT diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Dec 03 14:44:49 2012 +0100 @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; -import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.javap.AnnotationParser; import org.apidesign.javap.ClassData; import org.apidesign.javap.FieldData; @@ -51,6 +50,16 @@ * @param resourcePath name of resources to read */ protected abstract void requireScript(String resourcePath); + + /** Allows subclasses to redefine what field a function representing a + * class gets assigned. By default it returns the suggested name followed + * by " = "; + * + * @param className suggested name of the class + */ + protected String assignClass(String className) { + return className + " = "; + } /** * Converts a given class file to a JavaScript version. @@ -74,71 +83,95 @@ return null; } } + String[] proto = findAnnotation(arrData, jc, + "org.apidesign.bck2brwsr.core.JavaScriptPrototype", + "container", "prototype" + ); StringArray toInitilize = new StringArray(); - for (MethodData m : jc.getMethods()) { - if (m.isStatic()) { - generateStaticMethod(m, toInitilize); - } else { - generateInstanceMethod(m); + final String className = className(jc); + out.append("\n\n").append(assignClass(className)); + out.append("function CLS() {"); + out.append("\n if (!CLS.prototype.$instOf_").append(className).append(") {"); + for (FieldData v : jc.getFields()) { + if (v.isStatic()) { + out.append("\n CLS.").append(v.getName()).append(initField(v)); } } - final String className = className(jc); - out.append("\nfunction ").append(className); - out.append("() {"); + if (proto == null) { + String sc = jc.getSuperClassName(); // with _ + out.append("\n var p = CLS.prototype = "). + append(sc.replace('/', '_')).append("(true);"); + out.append("\n var c = p;"); + } else { + out.append("\n var p = CLS.prototype = ").append(proto[1]).append(";"); + out.append("\n var c = ").append(proto[0]).append(";"); + } + for (MethodData m : jc.getMethods()) { + byte[] onlyArr = m.findAnnotationData(true); + String[] only = findAnnotation(onlyArr, jc, + "org.apidesign.bck2brwsr.core.JavaScriptOnly", + "name", "value" + ); + if (only != null) { + if (only[0] != null && only[1] != null) { + out.append("\n p.").append(only[0]).append(" = ") + .append(only[1]).append(";"); + } + continue; + } + if (m.isStatic()) { + generateStaticMethod("\n c.", m, toInitilize); + } else { + generateInstanceMethod("\n c.", m); + } + } + out.append("\n c.constructor = CLS;"); + out.append("\n c.$instOf_").append(className).append(" = true;"); + for (String superInterface : jc.getSuperInterfaces()) { + out.append("\n c.$instOf_").append(superInterface.replace('/', '_')).append(" = true;"); + } + out.append("\n }"); + out.append("\n if (arguments.length === 0) {"); + out.append("\n if (!(this instanceof CLS)) {"); + out.append("\n return new CLS();"); + out.append("\n }"); for (FieldData v : jc.getFields()) { + byte[] onlyArr = v.findAnnotationData(true); + String[] only = findAnnotation(onlyArr, jc, + "org.apidesign.bck2brwsr.core.JavaScriptOnly", + "name", "value" + ); + if (only != null) { + if (only[0] != null && only[1] != null) { + out.append("\n p.").append(only[0]).append(" = ") + .append(only[1]).append(";"); + } + continue; + } if (!v.isStatic()) { - out.append("\n this.fld_"). + out.append("\n this.fld_"). append(v.getName()).append(initField(v)); } } - out.append("\n}\n\nfunction ").append(className).append("_proto() {"); - out.append("\n if (").append(className). - append(".prototype.$instOf_").append(className).append(") {"); - out.append("\n return new ").append(className).append(";"); + out.append("\n return this;"); out.append("\n }"); - for (FieldData v : jc.getFields()) { - if (v.isStatic()) { - generateStaticField(v); - } - } - // ClassName sc = jc.getSuperClass(); - String sc = jc.getSuperClassName(); // with _ - if (sc != null) { - out.append("\n var p = ").append(className) - .append(".prototype = "). - append(sc.replace('/', '_')).append("_proto();"); - } else { - out.append("\n var p = ").append(className).append(".prototype;"); - } - for (MethodData m : jc.getMethods()) { - if (!m.getName().contains("")) { - generateMethodReference("\n p.", m); - } - } - out.append("\n p.$instOf_").append(className).append(" = true;"); - for (String superInterface : jc.getSuperInterfaces()) { - out.append("\n p.$instOf_").append(superInterface.replace('/', '_')).append(" = true;"); - } - out.append("\n return new ").append(className).append(";"); + out.append("\n return arguments[0] ? new CLS() : CLS.prototype;"); out.append("\n}"); - out.append("\n").append(className).append("_proto();"); StringBuilder sb = new StringBuilder(); for (String init : toInitilize.toArray()) { sb.append("\n").append(init).append("();"); } return sb.toString(); } - private void generateStaticMethod(MethodData m, StringArray toInitilize) throws IOException { - if (javaScriptBody(m, true)) { + private void generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException { + if (javaScriptBody(prefix, m, true)) { return; } StringBuilder argsCnt = new StringBuilder(); final String mn = findMethodName(m, argsCnt); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(mn); + out.append(prefix).append(mn).append(" = function"); if (mn.equals("classV")) { - toInitilize.add(className(jc) + '_' + mn); + toInitilize.add(className(jc) + "(false)." + mn); } out.append('('); String space = ""; @@ -162,26 +195,18 @@ } produceCode(m); } else { - out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); + out.append(" throw 'no code found for ").append(m.getInternalSig()).append("';\n"); } - out.append("}"); + out.append("};"); } - private void generateMethodReference(String prefix, MethodData m) throws IOException { - final String name = findMethodName(m, new StringBuilder()); - out.append(prefix).append(name).append(" = ") - .append(className(jc)) - .append('_').append(name).append(";"); - } - - private void generateInstanceMethod(MethodData m) throws IOException { - if (javaScriptBody(m, false)) { + private void generateInstanceMethod(String prefix, MethodData m) throws IOException { + if (javaScriptBody(prefix, m, false)) { return; } StringBuilder argsCnt = new StringBuilder(); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(findMethodName(m, argsCnt)); + final String mn = findMethodName(m, argsCnt); + out.append(prefix).append(mn).append(" = function"); out.append("(arg0"); String space = ","; for (int index = 1, i = 0; i < argsCnt.length(); i++) { @@ -202,9 +227,9 @@ } produceCode(m); } else { - out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); + out.append(" throw 'no code found for ").append(m.getInternalSig()).append("';\n"); } - out.append("}"); + out.append("};"); } private void produceCode(MethodData m) throws IOException { @@ -987,12 +1012,6 @@ } } - private void generateStaticField(FieldData v) throws IOException { - out.append("\n ") - .append(className(jc)) - .append('.').append(v.getName()).append(initField(v)); - } - private String findMethodName(MethodData m, StringBuilder cnt) { StringBuilder name = new StringBuilder(); if ("".equals(m.getName())) { // NOI18N @@ -1038,7 +1057,7 @@ final String in = mi[0]; out.append(in.replace('/', '_')); - out.append(".prototype."); + out.append("(false)."); out.append(mn); out.append('('); if (numArguments > 0) { @@ -1113,12 +1132,12 @@ return d.replace('[', 'A'); } - private boolean javaScriptBody(MethodData m, boolean isStatic) throws IOException { + private boolean javaScriptBody(String prefix, MethodData m, boolean isStatic) throws IOException { byte[] arr = m.findAnnotationData(true); if (arr == null) { return false; } - final String jvmType = "L" + JavaScriptBody.class.getName().replace('.', '/') + ";"; + final String jvmType = "Lorg/apidesign/bck2brwsr/core/JavaScriptBody;"; class P extends AnnotationParser { int cnt; String[] args = new String[30]; @@ -1143,9 +1162,8 @@ return false; } StringBuilder cnt = new StringBuilder(); - out.append("\nfunction ").append(className(jc)).append('_'). - append(findMethodName(m, cnt)); - out.append("("); + out.append(prefix).append(findMethodName(m, cnt)); + out.append(" = function("); String space; int index; if (!isStatic) { diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Mon Dec 03 14:44:49 2012 +0100 @@ -101,6 +101,7 @@ } readResource(emul, out); } + js.scripts = new StringArray(); } StringArray toInit = StringArray.asList(js.references.toArray()); diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ArrayTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -29,7 +29,7 @@ */ public class ArrayTest { @Test public void verifySimpleIntOperation() throws Exception { - assertExec("CheckTheSum", "org_apidesign_vm4brwsr_Array_simpleI", + assertExec("CheckTheSum", Array.class, "simpleI", Double.valueOf(15) ); } @@ -39,13 +39,13 @@ } @Test public void verifyOperationsOnArrays() throws Exception { - assertExec("The sum is 105", "org_apidesign_vm4brwsr_Array_sumD", + assertExec("The sum is 105", Array.class, "sumD", Double.valueOf(105) ); } @Test public void doesCopyArrayWork() throws Exception { - assertExec("Returns 'a'", "org_apidesign_vm4brwsr_Array_copyArrayC", Double.valueOf('a')); + assertExec("Returns 'a'", Array.class, "copyArrayC", Double.valueOf('a')); } private static CharSequence codeSeq; @@ -59,21 +59,7 @@ ); codeSeq = sb; } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + private static void assertExec(String msg, Class clazz, String method, Object expRes, Object... args) throws Exception { + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/Instance.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java Mon Dec 03 14:44:49 2012 +0100 @@ -17,6 +17,8 @@ */ package org.apidesign.vm4brwsr; +import org.apidesign.bck2brwsr.core.JavaScriptBody; + /** * * @author Jaroslav Tulach @@ -89,4 +91,38 @@ private static boolean isNull() { return createInstance(true) == null; } + + @JavaScriptBody(args = "obj", body = "return obj.constructor;") + static Object constructor(Object obj) { + return obj; + } + + public static boolean sharedConstructor() { + class X { + } + + X x1 = new X(); + X x2 = new X(); + + return constructor(x1) == constructor(x2); + } + public static boolean differentConstructor() { + class X { + } + class Y { + } + + X x = new X(); + Y y = new Y(); + + return constructor(x) == constructor(y); + } + @JavaScriptBody(args = {}, body = "return {};") + private static Object jsObj() { + return null; + } + + public static boolean iofObject() { + return jsObj() instanceof Object; + } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -18,9 +18,7 @@ package org.apidesign.vm4brwsr; import javax.script.Invocable; -import javax.script.ScriptException; import org.testng.annotations.Test; -import static org.testng.Assert.*; import org.testng.annotations.BeforeClass; /** @@ -31,42 +29,42 @@ @Test public void verifyDefaultDoubleValue() throws Exception { assertExec( "Will be zero", - "org_apidesign_vm4brwsr_Instance_defaultDblValueD", + Instance.class, "defaultDblValueD", Double.valueOf(0) ); } @Test public void verifyStaticMethodCall() throws Exception { assertExec( "Will be zero", - "org_apidesign_vm4brwsr_InstanceSub_recallDblD", + InstanceSub.class, "recallDblD", Double.valueOf(0) ); } @Test public void verifyAssignedByteValue() throws Exception { assertExec( "Will one thirty one", - "org_apidesign_vm4brwsr_Instance_assignedByteValueB", + Instance.class, "assignedByteValueB", Double.valueOf(31) ); } @Test public void verifyMagicOne() throws Exception { assertExec( "Should be three and something", - "org_apidesign_vm4brwsr_Instance_magicOneD", + Instance.class, "magicOneD", Double.valueOf(3.3) ); } @Test public void verifyInstanceMethods() throws Exception { assertExec( "Should be eleven as we invoke overwritten method, plus 44", - "org_apidesign_vm4brwsr_Instance_virtualBytesI", + Instance.class, "virtualBytesI", Double.valueOf(55) ); } @Test public void verifyInterfaceMethods() throws Exception { assertExec( "Retruns default value", - "org_apidesign_vm4brwsr_Instance_interfaceBytesF", + Instance.class, "interfaceBytesF", Double.valueOf(31) ); } @@ -74,7 +72,7 @@ @Test public void isNull() throws Exception { assertExec( "Yes, we are instance", - "org_apidesign_vm4brwsr_Instance_isNullZ", + Instance.class, "isNullZ", Double.valueOf(0.0) ); } @@ -82,7 +80,7 @@ @Test public void isInstanceOf() throws Exception { assertExec( "Yes, we are instance", - "org_apidesign_vm4brwsr_Instance_instanceOfZZ", + Instance.class, "instanceOfZZ", Double.valueOf(1.0), true ); } @@ -90,7 +88,7 @@ @Test public void notInstanceOf() throws Exception { assertExec( "No, we are not an instance", - "org_apidesign_vm4brwsr_Instance_instanceOfZZ", + Instance.class, "instanceOfZZ", Double.valueOf(0.0), false ); } @@ -98,18 +96,42 @@ @Test public void verifyCastToClass() throws Exception { assertExec( "Five signals all is good", - "org_apidesign_vm4brwsr_Instance_castsWorkIZ", + Instance.class, "castsWorkIZ", Double.valueOf(5.0), false ); } @Test public void verifyCastToInterface() throws Exception { assertExec( "Five signals all is good", - "org_apidesign_vm4brwsr_Instance_castsWorkIZ", + Instance.class, "castsWorkIZ", Double.valueOf(5.0), true ); } + @Test public void sharedConstructor() throws Exception { + assertExec( + "Constructor of first and 2nd instance should be the same", + Instance.class, "sharedConstructorZ", + Double.valueOf(1.0) + ); + } + + @Test public void differentConstructor() throws Exception { + assertExec( + "Constructor of X and Y should be the different", + Instance.class, "differentConstructorZ", + Double.valueOf(0) + ); + } + + @Test public void jsObjectIsLikeJavaObject() throws Exception { + assertExec( + "JavaScript object is instance of Java Object", + Instance.class, "iofObjectZ", + Double.valueOf(1) + ); + } + protected String startCompilationWith() { return "org/apidesign/vm4brwsr/Instance"; } @@ -127,25 +149,9 @@ } private void assertExec( - String msg, String methodName, Object expRes, Object... args + String msg, Class clazz, String method, Object expRes, Object... args ) throws Exception { - - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + codeSeq, ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + codeSeq, ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); - + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -17,11 +17,6 @@ */ package org.apidesign.vm4brwsr; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; import javax.script.Invocable; import javax.script.ScriptException; import static org.testng.Assert.*; @@ -34,19 +29,19 @@ */ public class NumberTest { @Test public void integerFromString() throws Exception { - assertExec("Can convert string to integer", "java_lang_Integer_parseIntILjava_lang_String", + assertExec("Can convert string to integer", Integer.class, "parseIntILjava_lang_String", Double.valueOf(333), "333" ); } @Test public void doubleFromString() throws Exception { - assertExec("Can convert string to double", "java_lang_Double_parseDoubleDLjava_lang_String", + assertExec("Can convert string to double", Double.class, "parseDoubleDLjava_lang_String", Double.valueOf(33.3), "33.3" ); } @Test public void autoboxDouble() throws Exception { - assertExec("Autoboxing of doubles is OK", "org_apidesign_vm4brwsr_Numbers_autoboxDblToStringLjava_lang_String", + assertExec("Autoboxing of doubles is OK", Numbers.class, "autoboxDblToStringLjava_lang_String", "3.3" ); } @@ -56,7 +51,7 @@ } @Test public void jslog1000() throws Exception { - assertExec("log_10(1000) == 3", "java_lang_Math_log10DD", + assertExec("log_10(1000) == 3", Math.class, "log10DD", Double.valueOf(3.0), 1000.0 ); } @@ -65,20 +60,20 @@ assertEquals(3, Numbers.rem(303, 10)); } @Test public void jsRem() throws Exception { - assertExec("Should be three", "org_apidesign_vm4brwsr_Numbers_remIII", + assertExec("Should be three", Numbers.class, "remIII", Double.valueOf(3.0), 303, 10 ); } @Test public void deserializeInt() throws Exception { int exp = Numbers.deserInt(); - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserIntI", + assertExec("Should be the same", Numbers.class, "deserIntI", Double.valueOf(exp) ); } @Test public void deserializeSimpleLong() throws Exception { - assertExec("Should be 3454", "org_apidesign_vm4brwsr_Numbers_deserLongJAB", + assertExec("Should be 3454", Numbers.class, "deserLongJAB", Double.valueOf(3454), new byte[] { (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)13, (byte)126 } ); @@ -102,7 +97,7 @@ @Test public void deserializeFloatInJS() throws Exception { float f = 54324.32423f; - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserFloatF", + assertExec("Should be the same", Numbers.class, "deserFloatF", Double.valueOf(f) ); } @@ -115,7 +110,7 @@ @Test public void deserializeDoubleInJS() throws Exception { double f = 3.0; - assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserDoubleD", f); + assertExec("Should be the same", Numbers.class, "deserDoubleD", f); } /* @Test public void serDouble() throws IOException { @@ -136,7 +131,7 @@ @Test public void fiveInStringJS() throws Exception { String s = Numbers.intToString(); assertExec("Should be the same: " + s, - "org_apidesign_vm4brwsr_Numbers_intToStringLjava_lang_String", + Numbers.class, "intToStringLjava_lang_String", s ); } @@ -144,7 +139,7 @@ @Test public void sevenInStringJS() throws Exception { String s = Numbers.floatToString(); assertExec("Should be the same: " + s, - "org_apidesign_vm4brwsr_Numbers_floatToStringLjava_lang_String", + Numbers.class, "floatToStringLjava_lang_String", s ); } @@ -162,15 +157,16 @@ } private static void assertExec( - String msg, String methodName, Object expRes, Object... args) throws Exception { + String msg, Class clazz, String method, Object expRes, Object... args) throws Exception { Object ret = null; try { - ret = code.invokeFunction(methodName, args); + ret = code.invokeFunction(clazz.getName().replace('.', '_'), true); + ret = code.invokeMethod(ret, method, args); } catch (ScriptException ex) { - fail("Execution failed in\n" + codeSeq, ex); + fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + codeSeq, ex); + fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); } if (ret == null && expRes == null) { return; @@ -181,10 +177,10 @@ if (expRes instanceof Double && ret instanceof Double) { double expD = ((Double)expRes).doubleValue(); double retD = ((Double)ret).doubleValue(); - assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + codeSeq); + assertEquals(retD, expD, 0.000004, msg + " was " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); return; } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -36,7 +36,7 @@ @Test public void threePlusFour() throws Exception { assertExec( "Should be seven", - "org_apidesign_vm4brwsr_StaticMethod_sumIII", + StaticMethod.class, "sumIII", Double.valueOf(7), 3, 4 ); @@ -45,7 +45,7 @@ @Test public void checkReallyInitializedValues() throws Exception { assertExec( "Return true", - "org_apidesign_vm4brwsr_StaticMethod_isNullZ", + StaticMethod.class, "isNullZ", Double.valueOf(1) ); } @@ -53,7 +53,7 @@ @Test public void powerOfThree() throws Exception { assertExec( "Should be nine", - "org_apidesign_vm4brwsr_StaticMethod_powerFF", + StaticMethod.class, "powerFF", Double.valueOf(9), 3.0f ); @@ -62,7 +62,7 @@ @Test public void minusOne() throws Exception { assertExec( "Should be minus one", - "org_apidesign_vm4brwsr_StaticMethod_minusOneI", + StaticMethod.class, "minusOneI", Double.valueOf(-1) ); } @@ -70,7 +70,7 @@ @Test public void doubleWithoutLong() throws Exception { assertExec( "Should be two", - "org_apidesign_vm4brwsr_StaticMethod_minusDDJ", + StaticMethod.class, "minusDDJ", Double.valueOf(2), 3.0d, 1l ); @@ -79,7 +79,7 @@ @Test public void divAndRound() throws Exception { assertExec( "Should be rounded to one", - "org_apidesign_vm4brwsr_StaticMethod_divIBD", + StaticMethod.class, "divIBD", Double.valueOf(1), 3, 3.75 ); @@ -87,7 +87,7 @@ @Test public void mixedMethodFourParams() throws Exception { assertExec( "Should be two", - "org_apidesign_vm4brwsr_StaticMethod_mixIIJBD", + StaticMethod.class, "mixIIJBD", Double.valueOf(20), 2, 10l, 5, 2.0 ); @@ -95,7 +95,7 @@ @Test public void factRec() throws Exception { assertExec( "Factorial of 5 is 120", - "org_apidesign_vm4brwsr_StaticMethod_factRecJI", + StaticMethod.class, "factRecJI", Double.valueOf(120), 5 ); @@ -103,7 +103,7 @@ @Test public void factIter() throws Exception { assertExec( "Factorial of 5 is 120", - "org_apidesign_vm4brwsr_StaticMethod_factIterJI", + StaticMethod.class, "factIterJI", Double.valueOf(120), 5 ); @@ -112,7 +112,7 @@ @Test public void xor() throws Exception { assertExec( "Xor is 4", - "org_apidesign_vm4brwsr_StaticMethod_xorJIJ", + StaticMethod.class, "xorJIJ", Double.valueOf(4), 7, 3 @@ -122,7 +122,7 @@ @Test public void or() throws Exception { assertExec( "Or will be 7", - "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII", + StaticMethod.class, "orOrAndJZII", Double.valueOf(7), true, 4, @@ -132,14 +132,14 @@ @Test public void nullCheck() throws Exception { assertExec( "Returns nothing", - "org_apidesign_vm4brwsr_StaticMethod_noneLjava_lang_ObjectII", + StaticMethod.class, "noneLjava_lang_ObjectII", null, 1, 3 ); } @Test public void and() throws Exception { assertExec( "And will be 3", - "org_apidesign_vm4brwsr_StaticMethod_orOrAndJZII", + StaticMethod.class, "orOrAndJZII", Double.valueOf(3), false, 7, @@ -149,7 +149,7 @@ @Test public void inc4() throws Exception { assertExec( "It will be 4", - "org_apidesign_vm4brwsr_StaticMethod_inc4I", + StaticMethod.class, "inc4I", Double.valueOf(4) ); } @@ -162,7 +162,7 @@ @Test public void shiftLeftInJS() throws Exception { assertExec( "Setting 9th bit", - "org_apidesign_vm4brwsr_StaticMethod_shiftLeftIII", + StaticMethod.class, "shiftLeftIII", Double.valueOf(256), 1, 8 ); @@ -176,7 +176,7 @@ @Test public void shiftRightInJS() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ", + StaticMethod.class, "shiftArithmRightIIIZ", Double.valueOf(-1), -8, 3, true ); @@ -189,7 +189,7 @@ @Test public void unsignedShiftRightInJS() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StaticMethod_shiftArithmRightIIIZ", + StaticMethod.class, "shiftArithmRightIIIZ", Double.valueOf(1), 8, 3, false ); @@ -198,7 +198,7 @@ @Test public void javaScriptBody() throws Exception { assertExec( "JavaScript string", - "org_apidesign_vm4brwsr_StaticMethod_i2sLjava_lang_StringII", + StaticMethod.class, "i2sLjava_lang_StringII", "333", 330, 3 ); @@ -207,7 +207,7 @@ @Test public void switchJarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Jarda", 0 ); @@ -216,7 +216,7 @@ @Test public void switchDarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Darda", 1 ); @@ -224,7 +224,7 @@ @Test public void switchParda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtch2Ljava_lang_StringI", + StaticMethod.class, "swtch2Ljava_lang_StringI", "Parda", 22 ); @@ -232,7 +232,7 @@ @Test public void switchMarda() throws Exception { assertExec( "The expected value", - "org_apidesign_vm4brwsr_StaticMethod_swtchLjava_lang_StringI", + StaticMethod.class, "swtchLjava_lang_StringI", "Marda", -433 ); @@ -249,16 +249,25 @@ } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - StringBuilder sb = new StringBuilder(); - + private static void assertExec( + String msg, Class clazz, String method, + Object expRes, Object... args + ) throws Exception { + assertExec(code, codeSeq, msg, clazz, method, expRes, args); + } + static void assertExec( + Invocable toRun, CharSequence theCode, + String msg, Class clazz, String method, + Object expRes, Object... args + ) throws Exception { Object ret = null; try { - ret = code.invokeFunction(methodName, args); + ret = toRun.invokeFunction(clazz.getName().replace('.', '_'), true); + ret = toRun.invokeMethod(ret, method, args); } catch (ScriptException ex) { - fail("Execution failed in\n" + codeSeq, ex); + fail("Execution failed in\n" + dumpJS(theCode), ex); } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + codeSeq, ex); + fail("Cannot find method in\n" + dumpJS(theCode), ex); } if (ret == null && expRes == null) { return; @@ -266,17 +275,25 @@ if (expRes != null && expRes.equals(ret)) { return; } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + codeSeq); + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + dumpJS(theCode)); } static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException { + return compileClass(sb, null, names); + } + static Invocable compileClass( + StringBuilder sb, ScriptEngine[] eng, String... names + ) throws ScriptException, IOException { if (sb == null) { sb = new StringBuilder(); } GenJS.compile(sb, names); ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine js = sem.getEngineByExtension("js"); + if (eng != null) { + eng[0] = js; + } try { Object res = js.eval(sb.toString()); assertTrue(js instanceof Invocable, "It is invocable object: " + res); @@ -285,7 +302,7 @@ if (sb.length() > 2000) { sb = dumpJS(sb); } - fail("Could not compile:\n" + sb, ex); + fail("Could not evaluate:\n" + sb, ex); return null; } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Mon Dec 03 14:44:49 2012 +0100 @@ -64,6 +64,10 @@ return h.hashCode(); } + public static boolean isStringInstance() { + return chars('a', (char)30, 'b') instanceof String; + } + public static String insertBuffer() { StringBuilder sb = new StringBuilder(); sb.append("Jardo!"); diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -31,7 +31,7 @@ @Test public void firstChar() throws Exception { assertExec( "First char in Hello is H", - "org_apidesign_vm4brwsr_StringSample_sayHelloCI", + StringSample.class, "sayHelloCI", 72, 0 ); } @@ -39,7 +39,7 @@ @Test public void fromChars() throws Exception { assertExec( "First char in Hello is ABC", - "org_apidesign_vm4brwsr_StringSample_fromCharsLjava_lang_StringCCC", + StringSample.class, "fromCharsLjava_lang_StringCCC", "ABC", 'A', 'B', 'C' ); } @@ -47,7 +47,7 @@ @Test public void concatChars() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsLjava_lang_StringCCC", + StringSample.class, "charsLjava_lang_StringCCC", "ABC", 'A', 'B', 'C' ); } @@ -55,7 +55,7 @@ @Test public void concatCharsFromInts() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsFromNumbersLjava_lang_String", + StringSample.class, "charsFromNumbersLjava_lang_String", "ABC" ); } @@ -63,15 +63,23 @@ @Test public void concatCharsFromChars() throws Exception { assertExec( "Composing yields ABC", - "org_apidesign_vm4brwsr_StringSample_charsFromCharsLjava_lang_String", + StringSample.class, "charsFromCharsLjava_lang_String", "ABC" ); } + @Test public void instanceOfWorks() throws Exception { + assertExec( + "It is string", + StringSample.class, "isStringInstanceZ", + Double.valueOf(1.0) + ); + } + @Test(timeOut=10000) public void toStringConcatenation() throws Exception { assertExec( "Five executions should generate 5Hello World!", - "org_apidesign_vm4brwsr_StringSample_toStringTestLjava_lang_StringI", + StringSample.class, "toStringTestLjava_lang_StringI", "Hello World!5", 5 ); } @@ -82,7 +90,7 @@ @Test(timeOut=10000) public void stringStringConcat() throws Exception { assertExec( "Composes strings OK", - "org_apidesign_vm4brwsr_StringSample_concatStringsLjava_lang_String", + StringSample.class, "concatStringsLjava_lang_String", "Hello World!1" + "\\\n\r\t" ); } @@ -90,21 +98,21 @@ @Test public void equalsAndSubstring() throws Exception { assertExec( "Composes are OK", - "org_apidesign_vm4brwsr_StringSample_equalToHelloZII", + StringSample.class, "equalToHelloZII", true, 0, 5 ); } @Test public void replaceChars() throws Exception { assertExec( "Can replace slashes by underscores", - "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC", "x_y_z", "x/y/z", '/', '_' ); } @Test public void replaceIntChars() throws Exception { assertExec( "Can replace slashes by underscores", - "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + StringSample.class, "replaceLjava_lang_StringLjava_lang_StringCC", "x_y_z", "x/y/z", (int)'/', (int)'_' ); } @@ -112,7 +120,7 @@ @Test public void insertBuilder() throws Exception { assertExec( "Can insert something into a buffer?", - "org_apidesign_vm4brwsr_StringSample_insertBufferLjava_lang_String", + StringSample.class, "insertBufferLjava_lang_String", "Ahojdo!" ); } @@ -122,7 +130,7 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " +jh, - "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String", + StringSample.class, "hashCodeILjava_lang_String", Double.valueOf(jh), j ); } @@ -131,28 +139,28 @@ int jh = StringSample.hashCode(j); assertExec( "Hashcode is the same " + jh, - "org_apidesign_vm4brwsr_StringSample_hashCodeILjava_lang_String", + StringSample.class, "hashCodeILjava_lang_String", Double.valueOf(jh), j ); } @Test public void stringSwitch1() throws Exception { assertExec( "Get one", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(1), "jedna" ); } @Test public void stringSwitch2() throws Exception { assertExec( "Get two", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(2), "dve" ); } @Test public void stringSwitchDefault() throws Exception { assertExec( "Get -1", - "org_apidesign_vm4brwsr_StringSample_stringSwitchILjava_lang_String", + StringSample.class, "stringSwitchILjava_lang_String", Double.valueOf(-1), "none" ); } @@ -161,7 +169,7 @@ assertEquals(StringSample.countAB("Ahoj Bedo!"), 3, "Verify Java code is sane"); assertExec( "One A and one B adds to 3", - "org_apidesign_vm4brwsr_StringSample_countABILjava_lang_String", + StringSample.class, "countABILjava_lang_String", Double.valueOf(3), "Ahoj Bedo!" ); @@ -180,23 +188,10 @@ codeSeq = sb; } - private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { - Object ret = null; - try { - ret = code.invokeFunction(methodName, args); - } catch (ScriptException ex) { - fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); - } - if (ret == null && expRes == null) { - return; - } - if (expRes.equals(ret)) { - return; - } - assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); - + private static void assertExec(String msg, + Class clazz, String method, Object expRes, Object... args + ) throws Exception { + StaticMethodTest.assertExec(code, codeSeq, msg, clazz, method, expRes, args); } } diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java Mon Dec 03 14:44:49 2012 +0100 @@ -0,0 +1,68 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.vm4brwsr; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import org.apidesign.bck2brwsr.core.JavaScriptBody; + +/** + * + * @author Jaroslav Tulach + */ +class VMLazy extends ByteCodeToJavaScript { + private final Object vm; + private final Object global; + + private VMLazy(Object global, Object vm, Appendable out) { + super(out); + this.vm = vm; + this.global = global; + } + + static String toJavaScript(Object global, Object vm, byte[] is) throws IOException { + StringBuilder sb = new StringBuilder(); + new VMLazy(global, vm, sb).compile(new ByteArrayInputStream(is)); + return sb.toString().toString(); + } + + @JavaScriptBody(args = { "self", "n" }, + body= + "var cls = n.replaceLjava_lang_StringCC(n,'/','_').toString();" + + "var glb = self.fld_global;" + + "var vm = self.fld_vm;" + + "if (glb[cls]) return false;" + + "glb[cls] = function() {" + + " return vm.loadClass(n,cls);" + + "};" + + "return true;" + ) + @Override + protected boolean requireReference(String internalClassName) { + throw new UnsupportedOperationException(); + } + + @Override + protected void requireScript(String resourcePath) { + } + + @Override + protected String assignClass(String className) { + return "arguments[0][arguments[1]]="; + } +} diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -0,0 +1,132 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.vm4brwsr; + +import java.io.IOException; +import java.io.InputStream; +import javax.script.Invocable; +import javax.script.ScriptContext; +import javax.script.ScriptEngine; +import javax.script.ScriptException; +import org.testng.annotations.BeforeClass; +import static org.testng.Assert.*; +import org.testng.annotations.Test; + +/** Implements loading class by class. + * + * @author Jaroslav Tulach + */ +public class VMLazyTest { + + + private static CharSequence codeSeq; + private static Invocable code; + + @BeforeClass + public void compileTheCode() throws Exception { + StringBuilder sb = new StringBuilder(); + + sb.append("\nfunction test(clazz, as, method) {"); + sb.append("\n var l = new lazyVM(this);"); + sb.append("\n var c = l.loadClass(clazz, as);"); + sb.append("\n return c[method]();"); + sb.append("\n}"); + + + sb.append("\nfunction lazyVM(global) {"); + sb.append("\n var self = this;"); + sb.append("\n var glb = global;"); + sb.append("\n lazyVM.prototype.loadClass = function(res, name) {"); + sb.append("\n var script = org_apidesign_vm4brwsr_VMLazy(true)." + + "toJavaScriptLjava_lang_StringLjava_lang_ObjectLjava_lang_ObjectAB(" + + " glb, self," + + " loader.get(res + '.class')" + + ");"); + sb.append("\n try {"); + sb.append("\n new Function(script)(glb, name);"); + sb.append("\n } catch (ex) {"); + sb.append("\n throw 'Cannot compile ' + res + ' error: ' + ex + ' script:\\n' + script;"); + sb.append("\n };"); + sb.append("\n return glb[name](true);"); + sb.append("\n };"); + sb.append("\n"); + sb.append("\n}\n"); + + ScriptEngine[] arr = { null }; + code = StaticMethodTest.compileClass(sb, arr, + "org/apidesign/vm4brwsr/VMLazy" + ); + arr[0].getContext().setAttribute("loader", new FindBytes(), ScriptContext.ENGINE_SCOPE); + codeSeq = sb; + } + + @Test public void invokeStaticMethod() throws Exception { + assertExec("Trying to get -1", "test", Double.valueOf(-1), + "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI" + ); + } + + @Test public void loadDependantClass() throws Exception { + assertExec("Trying to get zero", "test", Double.valueOf(0), + "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDblD" + ); + } + + private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { + Object ret = null; + try { + ret = code.invokeFunction(methodName, args); + } catch (ScriptException ex) { + fail("Execution failed in\n" + StaticMethodTest.dumpJS(codeSeq), ex); + } catch (NoSuchMethodException ex) { + fail("Cannot find method in\n" + StaticMethodTest.dumpJS(codeSeq), ex); + } + if (ret == null && expRes == null) { + return; + } + if (expRes.equals(ret)) { + return; + } + assertEquals(ret, expRes, msg + "was: " + ret + "\n" + StaticMethodTest.dumpJS(codeSeq)); + } + + public static final class FindBytes { + public byte[] get(String name) throws IOException { + InputStream is = VMLazyTest.class.getClassLoader().getResourceAsStream(name); + if (is == null) { + throw new IOException("Can't find " + name); + } + byte[] arr = new byte[is.available()]; + int len = is.read(arr); + if (len != arr.length) { + throw new IOException("Read only " + len + " wanting " + arr.length); + } + /* + System.err.print("loader['" + name + "'] = ["); + for (int i = 0; i < arr.length; i++) { + if (i > 0) { + System.err.print(", "); + } + System.err.print(arr[i]); + } + System.err.println("]"); + */ + return arr; + } + } +} diff -r 3ee23267706c -r 8bd4adaf6590 vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Thu Nov 29 20:19:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Mon Dec 03 14:44:49 2012 +0100 @@ -41,10 +41,8 @@ Object ret; try { - ret = code.invokeFunction( - "org_apidesign_vm4brwsr_VMinVM_toJavaScriptLjava_lang_StringAB", - arr - ); + ret = code.invokeFunction(VMinVM.class.getName().replace('.', '_'), true); + ret = code.invokeMethod(ret, "toJavaScriptLjava_lang_StringAB", arr); } catch (Exception ex) { File f = File.createTempFile("execution", ".js"); FileWriter w = new FileWriter(f);