diff -r a93a52b33474 -r 9d757281c666 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 20 17:23:12 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 09 20:36:12 2015 +0100 @@ -19,6 +19,7 @@ import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; import org.apidesign.bck2brwsr.core.JavaScriptBody; import static org.apidesign.vm4brwsr.ByteCodeParser.*; @@ -1703,7 +1704,7 @@ char[] returnType = { 'V' }; StringBuilder cnt = new StringBuilder(); String mn = findMethodName(mi, cnt, returnType); - + final int numArguments = isStatic ? cnt.length() : cnt.length() + 1; final CharSequence[] vars = new CharSequence[numArguments]; @@ -1711,6 +1712,32 @@ vars[j] = mapper.popValue(); } + if (( + "newUpdater__Ljava_util_concurrent_atomic_AtomicIntegerFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn) + && "java/util/concurrent/atomic/AtomicIntegerFieldUpdater".equals(mi[0]) + ) || ( + "newUpdater__Ljava_util_concurrent_atomic_AtomicLongFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn) + && "java/util/concurrent/atomic/AtomicLongFieldUpdater".equals(mi[0]) + )) { + if (vars[1] instanceof String) { + String field = vars[1].toString(); + if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') { + vars[1] = "c._" + field.substring(1, field.length() - 1); + } + } + } + if ( + "newUpdater__Ljava_util_concurrent_atomic_AtomicReferenceFieldUpdater_2Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn) + && "java/util/concurrent/atomic/AtomicReferenceFieldUpdater".equals(mi[0]) + ) { + if (vars[1] instanceof String) { + String field = vars[2].toString(); + if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') { + vars[2] = "c._" + field.substring(1, field.length() - 1); + } + } + } + if (returnType[0] != 'V') { mapper.flush(this); append("var ")