Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: src/regexp.js

Issue 3197010: Version 2.3.10... (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/profile-generator-inl.h ('k') | src/runtime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 this.answer = 0; 130 this.answer = 0;
131 // answerSaved marks whether the contents of answer is valid for a cache 131 // answerSaved marks whether the contents of answer is valid for a cache
132 // hit in RegExpExec, StringMatch and StringSplit. 132 // hit in RegExpExec, StringMatch and StringSplit.
133 this.answerSaved = false; 133 this.answerSaved = false;
134 } 134 }
135 135
136 136
137 var regExpCache = new RegExpCache(); 137 var regExpCache = new RegExpCache();
138 138
139 139
140 function CloneRegExpResult(array) {
141 if (array == null) return null;
142 var length = array.length;
143 var answer = %_RegExpConstructResult(length, array.index, array.input);
144 for (var i = 0; i < length; i++) {
145 answer[i] = array[i];
146 }
147 return answer;
148 }
149
150
151 function BuildResultFromMatchInfo(lastMatchInfo, s) { 140 function BuildResultFromMatchInfo(lastMatchInfo, s) {
152 var numResults = NUMBER_OF_CAPTURES(lastMatchInfo) >> 1; 141 var numResults = NUMBER_OF_CAPTURES(lastMatchInfo) >> 1;
153 var result = %_RegExpConstructResult(numResults, lastMatchInfo[CAPTURE0], s); 142 var result = %_RegExpConstructResult(numResults, lastMatchInfo[CAPTURE0], s);
154 if (numResults === 1) { 143 if (numResults === 1) {
155 var matchStart = lastMatchInfo[CAPTURE(0)]; 144 var matchStart = lastMatchInfo[CAPTURE(0)];
156 var matchEnd = lastMatchInfo[CAPTURE(1)]; 145 var matchEnd = lastMatchInfo[CAPTURE(1)];
157 result[0] = SubString(s, matchStart, matchEnd); 146 result[0] = SubString(s, matchStart, matchEnd);
158 } else { 147 } else {
159 for (var i = 0; i < numResults; i++) { 148 for (var i = 0; i < numResults; i++) {
160 var matchStart = lastMatchInfo[CAPTURE(i << 1)]; 149 var matchStart = lastMatchInfo[CAPTURE(i << 1)];
(...skipping 29 matching lines...) Expand all
190 } 179 }
191 180
192 var cache = regExpCache; 181 var cache = regExpCache;
193 var saveAnswer = false; 182 var saveAnswer = false;
194 183
195 if (%_ObjectEquals(cache.type, 'exec') && 184 if (%_ObjectEquals(cache.type, 'exec') &&
196 %_ObjectEquals(cache.lastIndex, this.lastIndex) && 185 %_ObjectEquals(cache.lastIndex, this.lastIndex) &&
197 %_IsRegExpEquivalent(cache.regExp, this) && 186 %_IsRegExpEquivalent(cache.regExp, this) &&
198 %_ObjectEquals(cache.subject, string)) { 187 %_ObjectEquals(cache.subject, string)) {
199 if (cache.answerSaved) { 188 if (cache.answerSaved) {
200 return CloneRegExpResult(cache.answer); 189 return %_RegExpCloneResult(cache.answer);
201 } else { 190 } else {
202 saveAnswer = true; 191 saveAnswer = true;
203 } 192 }
204 } 193 }
205 194
206 if (%_ArgumentsLength() == 0) { 195 if (%_ArgumentsLength() == 0) {
207 var regExpInput = LAST_INPUT(lastMatchInfo); 196 var regExpInput = LAST_INPUT(lastMatchInfo);
208 if (IS_UNDEFINED(regExpInput)) { 197 if (IS_UNDEFINED(regExpInput)) {
209 throw MakeError('no_input_to_regexp', [this]); 198 throw MakeError('no_input_to_regexp', [this]);
210 } 199 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 } 233 }
245 lastMatchInfoOverride = null; 234 lastMatchInfoOverride = null;
246 var result = BuildResultFromMatchInfo(matchIndices, s); 235 var result = BuildResultFromMatchInfo(matchIndices, s);
247 236
248 if (this.global) { 237 if (this.global) {
249 this.lastIndex = lastMatchInfo[CAPTURE1]; 238 this.lastIndex = lastMatchInfo[CAPTURE1];
250 } else { 239 } else {
251 cache.regExp = this; 240 cache.regExp = this;
252 cache.subject = s; 241 cache.subject = s;
253 cache.lastIndex = lastIndex; 242 cache.lastIndex = lastIndex;
254 if (saveAnswer) cache.answer = CloneRegExpResult(result); 243 if (saveAnswer) cache.answer = %_RegExpCloneResult(result);
255 cache.answerSaved = saveAnswer; 244 cache.answerSaved = saveAnswer;
256 cache.type = 'exec'; 245 cache.type = 'exec';
257 } 246 }
258 return result; 247 return result;
259 248
260 } 249 }
261 250
262 251
263 // One-element cache for the simplified test regexp. 252 // One-element cache for the simplified test regexp.
264 var regexp_key; 253 var regexp_key;
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 %DefineAccessor($RegExp, "$'", SETTER, NoOpSetter, DONT_ENUM | DONT_DELETE); 529 %DefineAccessor($RegExp, "$'", SETTER, NoOpSetter, DONT_ENUM | DONT_DELETE);
541 530
542 for (var i = 1; i < 10; ++i) { 531 for (var i = 1; i < 10; ++i) {
543 %DefineAccessor($RegExp, '$' + i, GETTER, RegExpMakeCaptureGetter(i), DONT_D ELETE); 532 %DefineAccessor($RegExp, '$' + i, GETTER, RegExpMakeCaptureGetter(i), DONT_D ELETE);
544 %DefineAccessor($RegExp, '$' + i, SETTER, NoOpSetter, DONT_DELETE); 533 %DefineAccessor($RegExp, '$' + i, SETTER, NoOpSetter, DONT_DELETE);
545 } 534 }
546 } 535 }
547 536
548 537
549 SetupRegExp(); 538 SetupRegExp();
OLDNEW
« no previous file with comments | « src/profile-generator-inl.h ('k') | src/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698