OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/ast.h" | 7 #include "src/ast.h" |
8 #include "src/base/platform/platform.h" | 8 #include "src/base/platform/platform.h" |
9 #include "src/compilation-cache.h" | 9 #include "src/compilation-cache.h" |
10 #include "src/compiler.h" | 10 #include "src/compiler.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 Handle<JSRegExp> re, | 81 Handle<JSRegExp> re, |
82 Handle<String> pattern, | 82 Handle<String> pattern, |
83 Handle<String> error_text, | 83 Handle<String> error_text, |
84 const char* message) { | 84 const char* message) { |
85 Isolate* isolate = re->GetIsolate(); | 85 Isolate* isolate = re->GetIsolate(); |
86 Factory* factory = isolate->factory(); | 86 Factory* factory = isolate->factory(); |
87 Handle<FixedArray> elements = factory->NewFixedArray(2); | 87 Handle<FixedArray> elements = factory->NewFixedArray(2); |
88 elements->set(0, *pattern); | 88 elements->set(0, *pattern); |
89 elements->set(1, *error_text); | 89 elements->set(1, *error_text); |
90 Handle<JSArray> array = factory->NewJSArrayWithElements(elements); | 90 Handle<JSArray> array = factory->NewJSArrayWithElements(elements); |
91 Handle<Object> regexp_err = factory->NewSyntaxError(message, array); | 91 Handle<Object> regexp_err; |
92 return isolate->Throw<Object>(regexp_err); | 92 THROW_NEW_ERROR(isolate, NewSyntaxError(message, array), Object); |
93 } | 93 } |
94 | 94 |
95 | 95 |
96 ContainedInLattice AddRange(ContainedInLattice containment, | 96 ContainedInLattice AddRange(ContainedInLattice containment, |
97 const int* ranges, | 97 const int* ranges, |
98 int ranges_length, | 98 int ranges_length, |
99 Interval new_range) { | 99 Interval new_range) { |
100 DCHECK((ranges_length & 1) == 1); | 100 DCHECK((ranges_length & 1) == 1); |
101 DCHECK(ranges[ranges_length - 1] == String::kMaxUtf16CodeUnit + 1); | 101 DCHECK(ranges[ranges_length - 1] == String::kMaxUtf16CodeUnit + 1); |
102 if (containment == kLatticeUnknown) return containment; | 102 if (containment == kLatticeUnknown) return containment; |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 if (saved_code->IsCode()) { | 365 if (saved_code->IsCode()) { |
366 // Reinstate the code in the original place. | 366 // Reinstate the code in the original place. |
367 re->SetDataAt(JSRegExp::code_index(is_ascii), saved_code); | 367 re->SetDataAt(JSRegExp::code_index(is_ascii), saved_code); |
368 DCHECK(compiled_code->IsSmi()); | 368 DCHECK(compiled_code->IsSmi()); |
369 return true; | 369 return true; |
370 } | 370 } |
371 return CompileIrregexp(re, sample_subject, is_ascii); | 371 return CompileIrregexp(re, sample_subject, is_ascii); |
372 } | 372 } |
373 | 373 |
374 | 374 |
375 static bool CreateRegExpErrorObjectAndThrow(Handle<JSRegExp> re, | 375 static void CreateRegExpErrorObjectAndThrow(Handle<JSRegExp> re, bool is_ascii, |
376 bool is_ascii, | |
377 Handle<String> error_message, | 376 Handle<String> error_message, |
378 Isolate* isolate) { | 377 Isolate* isolate) { |
379 Factory* factory = isolate->factory(); | 378 Factory* factory = isolate->factory(); |
380 Handle<FixedArray> elements = factory->NewFixedArray(2); | 379 Handle<FixedArray> elements = factory->NewFixedArray(2); |
381 elements->set(0, re->Pattern()); | 380 elements->set(0, re->Pattern()); |
382 elements->set(1, *error_message); | 381 elements->set(1, *error_message); |
383 Handle<JSArray> array = factory->NewJSArrayWithElements(elements); | 382 Handle<JSArray> array = factory->NewJSArrayWithElements(elements); |
384 Handle<Object> regexp_err = | 383 Handle<Object> error; |
| 384 MaybeHandle<Object> maybe_error = |
385 factory->NewSyntaxError("malformed_regexp", array); | 385 factory->NewSyntaxError("malformed_regexp", array); |
386 isolate->Throw(*regexp_err); | 386 if (maybe_error.ToHandle(&error)) isolate->Throw(*error); |
387 return false; | |
388 } | 387 } |
389 | 388 |
390 | 389 |
391 bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, | 390 bool RegExpImpl::CompileIrregexp(Handle<JSRegExp> re, |
392 Handle<String> sample_subject, | 391 Handle<String> sample_subject, |
393 bool is_ascii) { | 392 bool is_ascii) { |
394 // Compile the RegExp. | 393 // Compile the RegExp. |
395 Isolate* isolate = re->GetIsolate(); | 394 Isolate* isolate = re->GetIsolate(); |
396 Zone zone(isolate); | 395 Zone zone(isolate); |
397 PostponeInterruptsScope postpone(isolate); | 396 PostponeInterruptsScope postpone(isolate); |
(...skipping 5706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6104 } | 6103 } |
6105 | 6104 |
6106 return compiler.Assemble(¯o_assembler, | 6105 return compiler.Assemble(¯o_assembler, |
6107 node, | 6106 node, |
6108 data->capture_count, | 6107 data->capture_count, |
6109 pattern); | 6108 pattern); |
6110 } | 6109 } |
6111 | 6110 |
6112 | 6111 |
6113 }} // namespace v8::internal | 6112 }} // namespace v8::internal |
OLD | NEW |