diff --git a/js/rhino/src/org/mozilla/javascript/regexp/NativeRegExp.java b/js/rhino/src/org/mozilla/javascript/regexp/NativeRegExp.java index 09dcb579b853..a72f4ca806ee 100644 --- a/js/rhino/src/org/mozilla/javascript/regexp/NativeRegExp.java +++ b/js/rhino/src/org/mozilla/javascript/regexp/NativeRegExp.java @@ -2552,19 +2552,19 @@ System.out.println("Testing at " + x.cp + ", op = " + op); if (state.parenCount > re.parenCount) throw new RuntimeException(); if (state.parenCount == 0) { - res.parens.clear(); + res.parens = null; res.lastParen = SubString.emptySubString; } else { SubString parsub = null; int num; - res.parens.setSize(re.parenCount); + res.parens = new SubString[re.parenCount]; for (num = 0; num < re.parenCount; num++) { int cap_index = state.parens_index(num); String parstr; if (cap_index != -1) { int cap_length = state.parens_length(num); parsub = new SubString(gData.cpbegin,cap_index,cap_length); - res.parens.set(num, parsub); + res.parens[num] = parsub; if (matchType == TEST) continue; parstr = parsub.toString(); obj.put(num+1, obj, parstr); diff --git a/js/rhino/src/org/mozilla/javascript/regexp/RegExpImpl.java b/js/rhino/src/org/mozilla/javascript/regexp/RegExpImpl.java index 7121a492031f..b4b5db0deb4f 100644 --- a/js/rhino/src/org/mozilla/javascript/regexp/RegExpImpl.java +++ b/js/rhino/src/org/mozilla/javascript/regexp/RegExpImpl.java @@ -41,10 +41,6 @@ import org.mozilla.javascript.*; */ public class RegExpImpl implements RegExpProxy { - public RegExpImpl() { - parens = new ObjArray(); - } - public boolean isRegExp(Scriptable obj) { return obj instanceof NativeRegExp; } @@ -270,7 +266,7 @@ public class RegExpImpl implements RegExpProxy { result = i - matchlen[0]; break; } - int size = parens.size(); + int size = (parens == null) ? 0 : parens.length; parensp[0] = new String[size]; for (int num = 0; num < size; num++) { SubString parsub = getParenSubString(num); @@ -283,9 +279,10 @@ public class RegExpImpl implements RegExpProxy { * Analog of REGEXP_PAREN_SUBSTRING in C jsregexp.h. * Assumes zero-based; i.e., for $3, i==2 */ - SubString getParenSubString(int i) { - if (i < parens.size()) { - SubString parsub = (SubString)parens.get(i); + SubString getParenSubString(int i) + { + if (parens != null && i < parens.length) { + SubString parsub = parens[i]; if (parsub != null) { return parsub; } @@ -295,7 +292,7 @@ public class RegExpImpl implements RegExpProxy { String input; /* input string to match (perl $_, GC root) */ boolean multiline; /* whether input contains newlines (perl $*) */ - ObjArray parens; /* Vector of SubString; last set of parens + SubString[] parens; /* Vector of SubString; last set of parens matched (perl $1, $2) */ SubString lastMatch; /* last string matched (perl $&) */ SubString lastParen; /* last paren matched (perl $+) */ @@ -426,7 +423,7 @@ class ReplaceData extends GlobData { } } else { /* ECMA 3, 1-9 or 01-99 */ - int parenCount = res.parens.size(); + int parenCount = (res.parens == null) ? 0 : res.parens.length; num = NativeRegExp.unDigit(dc); if (num > parenCount) return null; @@ -487,12 +484,12 @@ class ReplaceData extends GlobData { if (lambda != null) { // invoke lambda function with args lastMatch, $1, $2, ... $n, // leftContext.length, whole string. - ObjArray parens = reImpl.parens; - int parenCount = parens.size(); + SubString[] parens = reImpl.parens; + int parenCount = (parens == null) ? 0 : parens.length; Object[] args = new Object[parenCount + 3]; args[0] = reImpl.lastMatch.toString(); for (int i=0; i < parenCount; i++) { - SubString sub = (SubString) parens.get(i); + SubString sub = parens[i]; if (sub != null) { args[i+1] = sub.toString(); } else {