1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 20 17:23:12 2015 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 09 20:36:12 2015 +0100
1.3 @@ -19,6 +19,7 @@
1.4
1.5 import java.io.IOException;
1.6 import java.io.InputStream;
1.7 +import java.util.Arrays;
1.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.9 import static org.apidesign.vm4brwsr.ByteCodeParser.*;
1.10
1.11 @@ -1703,7 +1704,7 @@
1.12 char[] returnType = { 'V' };
1.13 StringBuilder cnt = new StringBuilder();
1.14 String mn = findMethodName(mi, cnt, returnType);
1.15 -
1.16 +
1.17 final int numArguments = isStatic ? cnt.length() : cnt.length() + 1;
1.18 final CharSequence[] vars = new CharSequence[numArguments];
1.19
1.20 @@ -1711,6 +1712,32 @@
1.21 vars[j] = mapper.popValue();
1.22 }
1.23
1.24 + if ((
1.25 + "newUpdater__Ljava_util_concurrent_atomic_AtomicIntegerFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
1.26 + && "java/util/concurrent/atomic/AtomicIntegerFieldUpdater".equals(mi[0])
1.27 + ) || (
1.28 + "newUpdater__Ljava_util_concurrent_atomic_AtomicLongFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
1.29 + && "java/util/concurrent/atomic/AtomicLongFieldUpdater".equals(mi[0])
1.30 + )) {
1.31 + if (vars[1] instanceof String) {
1.32 + String field = vars[1].toString();
1.33 + if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') {
1.34 + vars[1] = "c._" + field.substring(1, field.length() - 1);
1.35 + }
1.36 + }
1.37 + }
1.38 + if (
1.39 + "newUpdater__Ljava_util_concurrent_atomic_AtomicReferenceFieldUpdater_2Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
1.40 + && "java/util/concurrent/atomic/AtomicReferenceFieldUpdater".equals(mi[0])
1.41 + ) {
1.42 + if (vars[1] instanceof String) {
1.43 + String field = vars[2].toString();
1.44 + if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') {
1.45 + vars[2] = "c._" + field.substring(1, field.length() - 1);
1.46 + }
1.47 + }
1.48 + }
1.49 +
1.50 if (returnType[0] != 'V') {
1.51 mapper.flush(this);
1.52 append("var ")