Skip to content

Commit 1846220

Browse files
authored
Merge pull request #40 from BobHanson/yadav1
Yadav1
2 parents bff2eef + 740a91d commit 1846220

File tree

6 files changed

+1114
-13
lines changed

6 files changed

+1114
-13
lines changed
339 Bytes
Binary file not shown.
339 Bytes
Binary file not shown.

sources/net.sf.j2s.core/src/net/sf/j2s/core/astvisitors/Java2ScriptVisitor.java

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import org.eclipse.jdt.core.dom.WhileStatement;
123123
import org.eclipse.jdt.core.dom.WildcardType;
124124

125+
// BH 5/15/2018 -- fix for a[pt++] |= 3 incrementing pt twice (see test/Test_Or.java)
125126
// BH 3/27/2018 -- fix for anonymous inner classes of inner classes not having this.this$0
126127
// BH 1/5/2018 -- @j2sKeep removed; refactored into one class
127128

@@ -1961,6 +1962,7 @@ void addType(String name) {
19611962
break;
19621963
default:
19631964
case 'p': // $p$
1965+
case 'j': // $j$
19641966
break;
19651967
}
19661968
added += ";\r\n";
@@ -2054,9 +2056,12 @@ public boolean visit(Assignment node) {
20542056
return false;
20552057
}
20562058

2059+
int ptArray = (isArray ? buffer.length() : -1);
2060+
left.accept(this);
2061+
int ptArray2 = (isArray ? buffer.length() : -1);
2062+
20572063
if ("boolean".equals(leftName)) {
20582064
// |=, &=, ^=
2059-
left.accept(this);
20602065
buffer.append(" = (");
20612066
left.accept(this);
20622067
switch (op) {
@@ -2079,20 +2084,15 @@ public boolean visit(Assignment node) {
20792084
right.accept(this);
20802085
}
20812086
buffer.append(")");
2082-
isArray = wasArray;
2083-
return false;
2084-
2087+
return fixAssignArray(ptArray, ptArray2, wasArray);
20852088
}
20862089

2087-
left.accept(this);
2088-
20892090
if (!("char".equals(leftName))) {
20902091
if (isNumericType(leftName)) {
20912092
// byte|short|int|long += ...
20922093
buffer.append(" = ");
20932094
addPrimitiveTypedExpression(left, toBinding, leftName, opType, right, rightName, null, true);
2094-
isArray = wasArray;
2095-
return false;
2095+
return fixAssignArray(ptArray, ptArray2, wasArray);
20962096
}
20972097
// not char x ....
20982098
// not boolean x....
@@ -2131,8 +2131,7 @@ public boolean visit(Assignment node) {
21312131
if (needParenthesis) {
21322132
buffer.append(")");
21332133
}
2134-
isArray = wasArray;
2135-
return false;
2134+
return fixAssignArray(ptArray, ptArray2, wasArray);
21362135
}
21372136

21382137
// char left op right where op is not just "="
@@ -2182,7 +2181,44 @@ public boolean visit(Assignment node) {
21822181
if (needCharCode)
21832182
buffer.append(CHARCODEAT0);
21842183
buffer.append(')');
2185-
isArray = wasArray;
2184+
return fixAssignArray(ptArray, ptArray2, wasArray);
2185+
}
2186+
2187+
/**
2188+
* We must fix
2189+
*
2190+
* this.ctype[low++] = (this.ctype[low++]|(4)|0);
2191+
*
2192+
* to read
2193+
*
2194+
* this.ctype[$j$=low++] = (this.ctype[$j$]|(4)|0);
2195+
*
2196+
* so that the index does not get operated upon twice.
2197+
*
2198+
* @param ptArray
2199+
* @param ptArray2
2200+
* @param wasArray
2201+
* @return
2202+
*/
2203+
private boolean fixAssignArray(int ptArray, int ptArray2, boolean wasArray) {
2204+
2205+
if (ptArray >= 0) {
2206+
trailingBuffer.addType("j");
2207+
String left = buffer.substring(ptArray, ptArray2); // zzz[xxx]
2208+
String right = buffer.substring(ptArray2);
2209+
buffer.setLength(ptArray);
2210+
int ptIndex = left.indexOf("[") + 1;
2211+
String left0 = left.substring(0, ptIndex);
2212+
buffer.append(left0);
2213+
buffer.append("$j$=");
2214+
buffer.append(left.substring(ptIndex));
2215+
ptIndex = right.indexOf(left);
2216+
buffer.append(right.substring(0, ptIndex));
2217+
buffer.append(left0);
2218+
buffer.append("$j$]");
2219+
buffer.append(right.substring(ptIndex + left.length()));
2220+
isArray = wasArray;
2221+
}
21862222
return false;
21872223
}
21882224

sources/net.sf.j2s.java.core/build_core_applet.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
java/util/Locale.js
118118
java/util/MapEntry.js
119119
javajs/api/JSFunction.js
120+
javajs/util/AjaxURLConnection.js
120121
javajs/util/AjaxURLStreamHandlerFactory.js
121122
javajs/util/AU.js
122123
javajs/util/JSThread.js

0 commit comments

Comments
 (0)