src/jdk/nashorn/internal/runtime/regexp/joni/Analyser.java

Print this page




 754             if (en.isMemory()) {
 755                 node = en.target;
 756                 // !goto retry;!
 757                 continue retry;
 758             }
 759         }
 760 
 761         break;
 762         } // while
 763     }
 764 
 765     private void updateStringNodeCaseFoldMultiByte(StringNode sn) {
 766         char[] chars = sn.chars;
 767         int end = sn.end;
 768         value = sn.p;
 769         int sp = 0;
 770         char buf;
 771 
 772         while (value < end) {
 773             int ovalue = value;
 774             buf = Character.toLowerCase(chars[value++]);
 775 
 776             if (chars[ovalue] != buf) {
 777 
 778                 char[] sbuf = new char[sn.length() << 1];
 779                 System.arraycopy(chars, sn.p, sbuf, 0, ovalue - sn.p);
 780                 value = ovalue;
 781                 while (value < end) {
 782                     buf = Character.toLowerCase(chars[value++]);
 783                     if (sp >= sbuf.length) {
 784                         char[]tmp = new char[sbuf.length << 1];
 785                         System.arraycopy(sbuf, 0, tmp, 0, sbuf.length);
 786                         sbuf = tmp;
 787                     }
 788                     sbuf[sp++] = buf;
 789                 }
 790                 sn.set(sbuf, 0, sp);
 791                 return;
 792             }
 793             sp++;
 794         }
 795     }
 796 
 797     private void updateStringNodeCaseFold(Node node) {
 798         StringNode sn = (StringNode)node;
 799         updateStringNodeCaseFoldMultiByte(sn);
 800     }
 801 
 802     private Node expandCaseFoldMakeRemString(char[] chars, int p, int end) {




 754             if (en.isMemory()) {
 755                 node = en.target;
 756                 // !goto retry;!
 757                 continue retry;
 758             }
 759         }
 760 
 761         break;
 762         } // while
 763     }
 764 
 765     private void updateStringNodeCaseFoldMultiByte(StringNode sn) {
 766         char[] chars = sn.chars;
 767         int end = sn.end;
 768         value = sn.p;
 769         int sp = 0;
 770         char buf;
 771 
 772         while (value < end) {
 773             int ovalue = value;
 774             buf = EncodingHelper.toLowerCase(chars[value++]);
 775 
 776             if (chars[ovalue] != buf) {
 777 
 778                 char[] sbuf = new char[sn.length() << 1];
 779                 System.arraycopy(chars, sn.p, sbuf, 0, ovalue - sn.p);
 780                 value = ovalue;
 781                 while (value < end) {
 782                     buf = EncodingHelper.toLowerCase(chars[value++]);
 783                     if (sp >= sbuf.length) {
 784                         char[]tmp = new char[sbuf.length << 1];
 785                         System.arraycopy(sbuf, 0, tmp, 0, sbuf.length);
 786                         sbuf = tmp;
 787                     }
 788                     sbuf[sp++] = buf;
 789                 }
 790                 sn.set(sbuf, 0, sp);
 791                 return;
 792             }
 793             sp++;
 794         }
 795     }
 796 
 797     private void updateStringNodeCaseFold(Node node) {
 798         StringNode sn = (StringNode)node;
 799         updateStringNodeCaseFoldMultiByte(sn);
 800     }
 801 
 802     private Node expandCaseFoldMakeRemString(char[] chars, int p, int end) {