aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenevill <none@none>2015-02-03 16:48:19 +0000
committerenevill <none@none>2015-02-03 16:48:19 +0000
commitcd862a5fea8bc2c71e8da66c27817f4f34b147c7 (patch)
treef62e65140522a8cc885ad4a7a7b3967c3ac9cec8
parentbb613032bd0763a0f6acefd89e9291ec663a6aa0 (diff)
parent45919293c1eff2bdb704d0f5e12b02e7465f0a3e (diff)
Merge up to jdk8u40-b23
-rw-r--r--.hgtags34
-rw-r--r--THIRD_PARTY_README2
-rw-r--r--src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java4
-rw-r--r--src/com/sun/org/apache/bcel/internal/generic/MethodGen.java100
-rw-r--r--src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java42
-rw-r--r--src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java21
6 files changed, 178 insertions, 25 deletions
diff --git a/.hgtags b/.hgtags
index 81dc858..b604f3c 100644
--- a/.hgtags
+++ b/.hgtags
@@ -323,6 +323,8 @@ d6ded60cfdc53861ae7d1a010f95b5036d610e80 jdk8u20-b23
dd09d8b9edefb5684941941e5d9b35c84ee066f3 jdk8u20-b24
dd09d8b9edefb5684941941e5d9b35c84ee066f3 jdk8u20-b25
938b9d502c2b0f9684151e1b1f47cf7052db1502 jdk8u20-b26
+f734649a3f89316d84fc669fdbf7bbff92e7291a jdk8u20-b31
+d791a17744d50a456d60ee5118d8cb9633bb36d2 jdk8u20-b32
65e5ee249ebc81c0ccfff23946a0a2a6d4becdcc jdk8u25-b00
b29277565edfdece4e3928b135d4fd86ae141e4f jdk8u25-b01
09df5bda467090041090873f71d418eebcadf516 jdk8u25-b02
@@ -342,6 +344,21 @@ f5ac2e242bb95be0a3deddf37362178202086137 jdk8u25-b15
df68b132a471ed1e825a79bd1d8acb47d2bcc04f jdk8u25-b16
7a721e57b38ff6c1d34af0b86f6482540a815d90 jdk8u25-b17
fddbc00bde281d7d437b052262e921ed51de8b9a jdk8u25-b18
+30420a31a81f21e363f412ae9801b7467c8cc908 jdk8u25-b31
+19b6e16343925a4bf27879795b530d4f64e5d262 jdk8u31-b00
+469792d179304c9b3218930112547577e1aecb77 jdk8u31-b01
+adbd3e31ef1a95b3f80a77dfbb843d52c053c6d3 jdk8u31-b02
+d7961ca9afbc744674eb3ffda8ef2003158f3ea6 jdk8u31-b03
+3bcd38c92f216e6e0fd74742720b6f786301953e jdk8u31-b04
+17bca3fe325b353929e0eda3f1aaa7cc2806b93d jdk8u31-b05
+a1ab81b8cc36b156f272b20da62922d7f8aa6fe9 jdk8u31-b06
+573b761785f798a8b5366a87aceb7324b312f747 jdk8u31-b07
+43f0821902a71c1fccc99be36a0b205b1ae79183 jdk8u31-b08
+630b05fb2ddcdaeda6269ddb74357f651b73d6d7 jdk8u31-b09
+b5165ac3556e95c42a295d3cbeef8cd6e5607b25 jdk8u31-b10
+f475dbc70345904bda6b520af43955e244292886 jdk8u31-b11
+6563e438377f2086253577e08593b1ddfb901eff jdk8u31-b12
+1dd828fd98f1b84de5dcadb904322b711e7489ff jdk8u31-b13
3a1bba8076da4e54882123e98e219eab1c31ccef jdk8u40-b00
f219da378d0768ff042d77221e5d20676ecc16f0 jdk8u40-b01
28b875efa43d8c19a3a209d37b791872d1f36d6c jdk8u40-b02
@@ -354,6 +371,23 @@ b2210de1587b16ca1d1d781b55e19bc70724c62b jdk8u40-b07
c45c0ee4160026207cef1850c215c2691d43a97d jdk8u40-b09
1f5248bc0714a45160525d48bfcf455b9cdf86a3 jdk8u40-b10
0bf6dbb6ac4e2258d4d832bb949cb1be2402a899 jdk8u40-b11
+d73144ee471d4d4c49db94b3cc8990479961499a jdk8u40-b03
+23c1a41d75adc6fc57f69528c2c804079f449d94 jdk8u40-b04
+8d60cebf6a0c1cf1a5669e49deb795a1445e826b jdk8u40-b05
+50a2adfa57fcbbe1587991d53f58d227070a24db jdk8u40-b06
+b2210de1587b16ca1d1d781b55e19bc70724c62b jdk8u40-b07
+641eb6543c7186d1c2c26eaf96803b1e6b411d9a jdk8u40-b08
+c45c0ee4160026207cef1850c215c2691d43a97d jdk8u40-b09
+1f5248bc0714a45160525d48bfcf455b9cdf86a3 jdk8u40-b10
+0bf6dbb6ac4e2258d4d832bb949cb1be2402a899 jdk8u40-b11
3d2b6fdd9fade1ae372fc141dde7a31072d280ce jdk8u40-b12-aarch64
e5b6e5b8b16b604bbfbe240ed709176cf8042430 jdk8u40-b12-aarch64-1262
7252d7fdc0edacea3e89fb279274def6116a14b5 jdk8u40-b12-aarch64-1263
+ed46c05af2570feed5ea264eca02f223055109e9 jdk8u40-b15
+cda81fbeec94b31dba27a043fbf58f442524cdf5 jdk8u40-b16
+cb63029168a52d62d82c3325f1092405c318e78c jdk8u40-b17
+6103f5a8119a85937ae006f18b8dfc04f73315d0 jdk8u40-b18
+3b73732d6886dc8155f0c1fbb125ca60d9e2fd2b jdk8u40-b19
+7bfc889330e0ec1fd495990eaa0d7f0c390b7304 jdk8u40-b20
+78d90db9de2801eec010ccb9f0db3caf969dfc3b jdk8u40-b21
+54a13451ce243f2159ed3996e6efcf374a5750ca jdk8u40-b22
diff --git a/THIRD_PARTY_README b/THIRD_PARTY_README
index 6d1c60f..c34ce6b 100644
--- a/THIRD_PARTY_README
+++ b/THIRD_PARTY_README
@@ -3385,7 +3385,7 @@ with JRE 8, JDK 8, and OpenJDK 8.
included with JRE 8, JDK 8, and OpenJDK 8.
Apache Commons Math 3.2
- Apache Derby 10.10.1.3
+ Apache Derby 10.11.1.2
Apache Jakarta BCEL 5.1
Apache Jakarta Regexp 1.4
Apache Santuario XML Security for Java 1.5.4
diff --git a/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java b/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
index fe35197..763eca6 100644
--- a/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
+++ b/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
@@ -213,6 +213,10 @@ public class DescendingVisitor implements Visitor {
public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {
stack.push(obj);
obj.accept(visitor);
+
+ LocalVariable[] vars = obj.getLocalVariableTypeTable();
+ for(int i=0; i < vars.length; i++)
+ vars[i].accept(this);
stack.pop();
}
diff --git a/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java b/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java
index 34da007..6934582 100644
--- a/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java
+++ b/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java
@@ -87,6 +87,7 @@ public class MethodGen extends FieldGenOrMethodGen {
private boolean strip_attributes;
private ArrayList variable_vec = new ArrayList();
+ private ArrayList type_vec = new ArrayList();
private ArrayList line_number_vec = new ArrayList();
private ArrayList exception_vec = new ArrayList();
private ArrayList throws_vec = new ArrayList();
@@ -260,7 +261,7 @@ public class MethodGen extends FieldGenOrMethodGen {
}
} else if (a instanceof LocalVariableTypeTable) {
LocalVariable[] lv = ((LocalVariableTypeTable) a).getLocalVariableTypeTable();
- removeLocalVariables();
+ removeLocalVariableTypes();
for (int k = 0; k < lv.length; k++) {
LocalVariable l = lv[k];
InstructionHandle start = il.findHandle(l.getStartPC());
@@ -272,7 +273,7 @@ public class MethodGen extends FieldGenOrMethodGen {
if (null == end) {
end = il.getEnd();
}
- addLocalVariable(l.getName(), Type.getType(l.getSignature()), l
+ addLocalVariableType(l.getName(), Type.getType(l.getSignature()), l
.getIndex(), start, end);
}
} else
@@ -406,6 +407,31 @@ public class MethodGen extends FieldGenOrMethodGen {
return lg;
}
+ /*
+ * If the range of the variable has not been set yet, it will be set to be
+ * val id from the start to the end of the instruction list.
+ *
+ * @return array of declared local variable types sorted by index
+ */
+ private LocalVariableGen[] getLocalVariableTypes() {
+ int size = type_vec.size();
+ LocalVariableGen[] lg = new LocalVariableGen[size];
+ type_vec.toArray(lg);
+
+ for(int i=0; i < size; i++) {
+ if(lg[i].getStart() == null)
+ lg[i].setStart(il.getStart());
+
+ if(lg[i].getEnd() == null)
+ lg[i].setEnd(il.getEnd());
+ }
+
+ if(size > 1)
+ sort(lg, 0, size - 1);
+
+ return lg;
+ }
+
/**
* @return `LocalVariableTable' attribute of all the local variables of this method.
*/
@@ -422,6 +448,68 @@ public class MethodGen extends FieldGenOrMethodGen {
}
/**
+ * @return `LocalVariableTypeTable' attribute of all the local variable
+ * types of this method.
+ */
+ public LocalVariableTypeTable getLocalVariableTypeTable(ConstantPoolGen cp) {
+ LocalVariableGen[] lg = getLocalVariableTypes();
+ int size = lg.length;
+ LocalVariable[] lv = new LocalVariable[size];
+
+ for(int i=0; i < size; i++)
+ lv[i] = lg[i].getLocalVariable(cp);
+
+ return new LocalVariableTypeTable(cp.addUtf8("LocalVariableTypeTable"),
+ 2 + lv.length * 10, lv, cp.getConstantPool());
+ }
+
+ /**
+ * Adds a local variable type to this method.
+ *
+ * @param name variable name
+ * @param type variable type
+ * @param slot the index of the local variable, if type is long or double, the next available
+ * index is slot+2
+ * @param start from where the variable is valid
+ * @param end until where the variable is valid
+ * @return new local variable object
+ * @see LocalVariable
+ */
+ private LocalVariableGen addLocalVariableType(String name, Type type, int slot,
+ InstructionHandle start,
+ InstructionHandle end) {
+ byte t = type.getType();
+
+ if(t != Constants.T_ADDRESS) {
+ int add = type.getSize();
+
+ if(slot + add > max_locals)
+ max_locals = slot + add;
+
+ LocalVariableGen l = new LocalVariableGen(slot, name, type, start, end);
+ int i;
+
+ if((i = type_vec.indexOf(l)) >= 0) // Overwrite if necessary
+ type_vec.set(i, l);
+ else
+ type_vec.add(l);
+
+ return l;
+ } else {
+ throw new IllegalArgumentException("Can not use " + type +
+ " as type for local variable");
+
+ }
+ }
+
+ /**
+ * Remove all local variable types.
+ */
+ private void removeLocalVariableTypes() {
+ type_vec.clear();
+ }
+
+ /**
* Give an instruction a line number corresponding to the source code line.
*
* @param ih instruction to tag
@@ -637,12 +725,17 @@ public class MethodGen extends FieldGenOrMethodGen {
LineNumberTable lnt = null;
LocalVariableTable lvt = null;
+ LocalVariableTypeTable lvtt = null;
- /* Create LocalVariableTable and LineNumberTable attributes (for debuggers, e.g.)
+ /* Create LocalVariableTable, LocalvariableTypeTable, and LineNumberTable
+ * attributes (for debuggers, e.g.)
*/
if((variable_vec.size() > 0) && !strip_attributes)
addCodeAttribute(lvt = getLocalVariableTable(cp));
+ if((type_vec.size() > 0) && !strip_attributes)
+ addCodeAttribute(lvtt = getLocalVariableTypeTable(cp));
+
if((line_number_vec.size() > 0) && !strip_attributes)
addCodeAttribute(lnt = getLineNumberTable(cp));
@@ -691,6 +784,7 @@ public class MethodGen extends FieldGenOrMethodGen {
// Undo effects of adding attributes
if(lvt != null) removeCodeAttribute(lvt);
+ if(lvtt != null) removeCodeAttribute(lvtt);
if(lnt != null) removeCodeAttribute(lnt);
if(code != null) removeAttribute(code);
if(et != null) removeAttribute(et);
diff --git a/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java b/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
index 518c09a..c293551 100644
--- a/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
+++ b/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
@@ -147,8 +147,9 @@ public class XML11EntityScanner
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)c;
- load(1, false, true);
+ load(1, false, false);
}
if (c == '\r' && external) {
int cc = fCurrentEntity.ch[fCurrentEntity.position++];
@@ -306,9 +307,10 @@ public class XML11EntityScanner
if (XML11Char.isXML11NameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
return symbol;
@@ -317,9 +319,10 @@ public class XML11EntityScanner
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.position;
--fCurrentEntity.startPosition;
return null;
@@ -332,10 +335,11 @@ public class XML11EntityScanner
return null;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
return symbol;
@@ -464,9 +468,10 @@ public class XML11EntityScanner
if (XML11Char.isXML11NCNameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
return symbol;
@@ -475,9 +480,10 @@ public class XML11EntityScanner
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.position;
--fCurrentEntity.startPosition;
return null;
@@ -490,10 +496,11 @@ public class XML11EntityScanner
return null;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
return symbol;
@@ -628,9 +635,10 @@ public class XML11EntityScanner
if (XML11Char.isXML11NCNameStart(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
qname.setValues(null, name, name, null);
@@ -640,9 +648,10 @@ public class XML11EntityScanner
}
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = ch;
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
--fCurrentEntity.startPosition;
--fCurrentEntity.position;
return false;
@@ -655,10 +664,11 @@ public class XML11EntityScanner
return false;
}
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(2);
fCurrentEntity.ch[0] = ch;
fCurrentEntity.ch[1] = ch2;
offset = 0;
- if (load(2, false, true)) {
+ if (load(2, false, false)) {
fCurrentEntity.columnNumber += 2;
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
qname.setValues(null, name, name, null);
@@ -835,8 +845,9 @@ public class XML11EntityScanner
load(0, true, true);
}
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
fCurrentEntity.startPosition = 0;
}
@@ -976,8 +987,9 @@ public class XML11EntityScanner
load(0, true, true);
}
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.startPosition = 0;
fCurrentEntity.position = 0;
}
@@ -1346,8 +1358,9 @@ public class XML11EntityScanner
else if (c == '\n' && (cc == '\r' ) && fCurrentEntity.isExternal()) {
// handle newlines
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)cc;
- load(1, false, true);
+ load(1, false, false);
}
int ccc = fCurrentEntity.ch[++fCurrentEntity.position];
if (ccc == '\n' || ccc == 0x85) {
@@ -1408,8 +1421,9 @@ public class XML11EntityScanner
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = (char)c;
- entityChanged = load(1, true, true);
+ entityChanged = load(1, true, false);
if (!entityChanged) {
// the load change the position to be 1,
// need to restore it when entity not changed
diff --git a/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java b/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
index 9e5dba5..768118d 100644
--- a/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
+++ b/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
@@ -538,8 +538,9 @@ public class XMLEntityScanner implements XMLLocator {
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)c;
- load(1, false, true);
+ load(1, false, false);
}
if (c == '\r' && isExternal) {
if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
@@ -670,9 +671,10 @@ public class XMLEntityScanner implements XMLLocator {
int offset = fCurrentEntity.position;
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
@@ -776,10 +778,11 @@ public class XMLEntityScanner implements XMLLocator {
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
if (++fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
offset = 0;
- if (load(1, false, true)) {
+ if (load(1, false, false)) {
fCurrentEntity.columnNumber++;
//adding into symbol table.
//XXX We are trying to add single character in SymbolTable??????
@@ -906,8 +909,9 @@ public class XMLEntityScanner implements XMLLocator {
if (fCurrentEntity.position == fCurrentEntity.count) {
load(0, true, true);
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
}
@@ -1054,8 +1058,9 @@ public class XMLEntityScanner implements XMLLocator {
if (fCurrentEntity.position == fCurrentEntity.count) {
load(0, true, true);
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
- load(1, false, true);
+ load(1, false, false);
fCurrentEntity.position = 0;
}
@@ -1427,8 +1432,9 @@ public class XMLEntityScanner implements XMLLocator {
} else if (c == '\n' && cc == '\r' && isExternal) {
// handle newlines
if (fCurrentEntity.position == fCurrentEntity.count) {
+ invokeListeners(1);
fCurrentEntity.ch[0] = (char)cc;
- load(1, false, true);
+ load(1, false, false);
}
fCurrentEntity.position++;
if (fCurrentEntity.ch[fCurrentEntity.position] == '\n') {
@@ -1502,8 +1508,9 @@ public class XMLEntityScanner implements XMLLocator {
fCurrentEntity.lineNumber++;
fCurrentEntity.columnNumber = 1;
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
+ invokeListeners(0);
fCurrentEntity.ch[0] = (char)c;
- entityChanged = load(1, true, true);
+ entityChanged = load(1, true, false);
if (!entityChanged){
// the load change the position to be 1,
// need to restore it when entity not changed