@@ -437,43 +437,29 @@ private static SubString interpretDollar(
437437
438438 /* Allow a real backslash (literal "\\") to escape "$1" etc. */
439439 int version = cx .getLanguageVersion ();
440- if (version != Context .VERSION_DEFAULT && version <= Context .VERSION_1_4 ) {
441- if (dp > 0 && da .charAt (dp - 1 ) == '\\' ) return null ;
442- }
443440 int daL = da .length ();
444441 if (dp + 1 >= daL ) return null ;
445442 /* Interpret all Perl match-induced dollar variables. */
446443 dc = da .charAt (dp + 1 );
447444 if (NativeRegExp .isDigit (dc )) {
448445 int cp ;
449- if (version != Context .VERSION_DEFAULT && version <= Context .VERSION_1_4 ) {
450- if (dc == '0' ) return null ;
451- /* Check for overflow to avoid gobbling arbitrary decimal digits. */
452- num = 0 ;
453- cp = dp ;
454- while (++cp < daL && NativeRegExp .isDigit (dc = da .charAt (cp ))) {
446+ /* ECMA 3, 1-9 or 01-99 */
447+ int parenCount = (res .parens == null ) ? 0 : res .parens .length ;
448+ num = dc - '0' ;
449+ if (num > parenCount ) return null ;
450+ cp = dp + 2 ;
451+ if ((dp + 2 ) < daL ) {
452+ dc = da .charAt (dp + 2 );
453+ if (NativeRegExp .isDigit (dc )) {
455454 tmp = 10 * num + (dc - '0' );
456- if (tmp < num ) break ;
457- num = tmp ;
458- }
459- } else {
460- /* ECMA 3, 1-9 or 01-99 */
461- int parenCount = (res .parens == null ) ? 0 : res .parens .length ;
462- num = dc - '0' ;
463- if (num > parenCount ) return null ;
464- cp = dp + 2 ;
465- if ((dp + 2 ) < daL ) {
466- dc = da .charAt (dp + 2 );
467- if (NativeRegExp .isDigit (dc )) {
468- tmp = 10 * num + (dc - '0' );
469- if (tmp <= parenCount ) {
470- cp ++;
471- num = tmp ;
472- }
455+ if (tmp <= parenCount ) {
456+ cp ++;
457+ num = tmp ;
473458 }
474459 }
475- if (num == 0 ) return null ; /* $0 or $00 is not valid */
476460 }
461+ if (num == 0 ) return null ; /* $0 or $00 is not valid */
462+
477463 /* Adjust num from 1 $n-origin to 0 array-index-origin. */
478464 num --;
479465 skip [0 ] = cp - dp ;
0 commit comments