Mercurial > hg > release > icedtea7-forest-2.6 > jaxp
changeset 1255:8cc37ea6edf6 icedtea-2.6pre18
Merge jdk7u80-b05
author | andrew |
---|---|
date | Thu, 29 Jan 2015 22:20:21 +0000 |
parents | 75422c2e0f34 (current diff) 9af3447d957e (diff) |
children | 0e0fc4440a3b |
files | .hgtags src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java src/com/sun/org/apache/bcel/internal/generic/MethodGen.java src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java |
diffstat | 5 files changed, 186 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Thu Jan 22 02:55:35 2015 +0000 +++ b/.hgtags Thu Jan 29 22:20:21 2015 +0000 @@ -493,11 +493,19 @@ 45db678253587755df4a00066e42e2fce04bbb71 jdk7u65-b18 4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b19 f3b7bb6f1924ab7f635cdd60db7fbab64576cd6d jdk7u65-b32 +7215972c2c30d0fa469a459a3e4fcee6bc93991d jdk7u80-b00 +4c959b6a32057ec18c9c722ada3d0d0c716a51c4 jdk7u80-b01 +25a1b88d7a473e067471e00a5457236736e9a2e0 jdk7u80-b02 d41f31b707c87675f3467e980b1ceef2e53b3b5d jdk7u65-b20 d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01 4e323af07c47061109fb5f585613b0cc4b4208ca jdk7u65-b40 a5f829d7fa05cf769402dfc82c94b737b8d011b0 jdk7u65-b31 f33ea72260ca7480f4a1405d35a3709895b491a2 jdk7u65-b33 +d1f8566d39c56e40516a1afb304ed7c0681355d8 jdk7u67-b01 +a9c1c53386a9b7856802a98a597a8cbf73e28fa0 jdk7u67-b31 +e7300cd38793c7620f39be5f73b7fcba2f80555b jdk7u67-b32 +78c4bc9bfa12cc97039fd84c5ec1cbd086a0ba35 jdk7u67-b33 +39a6fbc6ef75eba7b3c28e8485a0665d904f21eb jdk7u67-b34 86e93799766d67102a37559b3831abcc825d7e24 jdk7u66-b00 d34839cb2f15dee01cdfb1fd93378849de34d662 jdk7u66-b01 19e4e978c8212921104ba16d0db6bf18c6f8d0ab jdk7u66-b09 @@ -539,6 +547,39 @@ 8f0d267ca63ab2f9d7839604ae88fafbcc0ad2d4 jdk7u72-b13 fec38133453a8d70d4c528595ae1cab47909c4bd jdk7u72-b14 e8ab19435208726b1334ba8e7928ea154e0959b3 jdk7u72-b30 +d8246774af472f617033202d2c58c7572da08dcd jdk7u72-b31 +4173f90038ff1764576d08efa34109a7895f106b jdk7u75-b00 +b9eaa7d194dd5e23bd2d53be4d57b25fdcb08e31 jdk7u75-b01 +98eaae4f301779861be3f9a8b0854ec83074615a jdk7u75-b02 +eb57739c7818a0dbaa39122ad35f5e48584be5df jdk7u75-b03 +908a056c8d8fa65864cbf5745a050f675be35288 jdk7u75-b04 +079579b6672777d71624b49b29042cd19cbccef2 jdk7u75-b05 +967717c26bb17ff3c3aa399072eebed17c599a92 jdk7u75-b06 +1a9565415e4142f9914b309888056f9b8f27de97 jdk7u75-b07 +d8419be679448402af177510f1a154ca7935d24f jdk7u75-b08 +08599c76e606df8d369d1eda03ac876ffbaafb36 jdk7u75-b09 +d3c566dedbcde177bfa573ae3632ad21c335a03d jdk7u75-b10 +1d6f8fbbfefc63adde96d70d74dc281616b7ac01 jdk7u75-b11 +15f65800816f164b5855744b59fbc3d661e0511d jdk7u75-b12 +d6c90cc2e91d58688884a8e659e79603e37d4cd5 jdk7u75-b13 +999eb9cbf8404232a03e3a877680ca3541b8f62c jdk7u75-b30 +4efcb94971a21562649ae01c07880139a35d3403 jdk7u75-b31 +8405eb3c02e3f81b20faa1adf43d447e2e7b7705 jdk7u76-b00 +f478245e2c18bd459d085c70cf7aa212b1f30dbf jdk7u76-b01 +bb77b08b760634a87ee3c1fbb3c7a519d61d4e87 jdk7u76-b02 +0c337b6088029d8867732a2f1e08dcc7271e6111 jdk7u76-b03 +0d0d6c0a1ae3cae89f59491c6643fe7f12c497bc jdk7u76-b04 +5bde0c6472681b8e508c7f54692ad3ca69c6a544 jdk7u76-b05 +9e39563c9f33ceac879ee214bc27db3e5f1d5004 jdk7u76-b06 +4e5b7d15fad4fc32c67a45512391c71e7e33460e jdk7u76-b07 +aefcd8f73cfb456a133ee923859683c68338649f jdk7u76-b08 +c6675d4d08b8d5e6a2bb9f631d8b5762f0b51cdf jdk7u76-b09 +62e1b60c3adfd3133e3fe9f8d5194512f503c540 jdk7u76-b10 +33040bd2deb5371a85fe7d7a9442cdf649919b39 jdk7u76-b11 +7167fcf821b00424c0464086f4047a7209dc9e59 jdk7u76-b12 +6262c3d41bb13f58338c4bc7946468ba70825046 jdk7u76-b13 +d3907dca5ffc798076f44cc63f01f7beb41343a9 jdk7u76-b30 +ddfc89ace6cc33a2d50d5faf100e83b05c9bc89f jdk7u76-b31 7215972c2c30d0fa469a459a3e4fcee6bc93991d jdk7u80-b00 4c959b6a32057ec18c9c722ada3d0d0c716a51c4 jdk7u80-b01 614b7c12f276c52ebef06fb17c79cf0eadbcc774 icedtea-2.6pre07 @@ -555,3 +596,5 @@ 133c38a2d10fdb95e332ceefa4db8cf765c8b413 icedtea-2.6pre15 a41b3447afd7011c7d08b5077549695687b70ea4 icedtea-2.6pre16 54100657ce67cb5164cb0683ceb58ae60542fd79 icedtea-2.6pre17 +3f6f053831796f654ad8fd77a6e4f99163742649 jdk7u80-b04 +b93c3e02132fd13971aea6df3c5f6fcd4c3b1780 jdk7u80-b05
--- a/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java Thu Jan 22 02:55:35 2015 +0000 +++ b/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java Thu Jan 29 22:20:21 2015 +0000 @@ -213,6 +213,10 @@ 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(); }
--- a/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java Thu Jan 22 02:55:35 2015 +0000 +++ b/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java Thu Jan 29 22:20:21 2015 +0000 @@ -87,6 +87,7 @@ 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 @@ } } 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 @@ 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 @@ 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 @@ } /** + * @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 @@ 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 @@ // 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);
--- a/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Thu Jan 22 02:55:35 2015 +0000 +++ b/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Thu Jan 29 22:20:21 2015 +0000 @@ -147,8 +147,9 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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
--- a/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Thu Jan 22 02:55:35 2015 +0000 +++ b/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Thu Jan 29 22:20:21 2015 +0000 @@ -538,8 +538,9 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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; } @@ -1419,8 +1424,9 @@ } 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') { @@ -1494,8 +1500,9 @@ 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