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