| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/objects.h" | 5 #include "src/objects.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <iomanip> | 8 #include <iomanip> |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 15407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15418 Isolate* isolate = regexp->GetIsolate(); | 15418 Isolate* isolate = regexp->GetIsolate(); |
| 15419 Factory* factory = isolate->factory(); | 15419 Factory* factory = isolate->factory(); |
| 15420 // If source is the empty string we set it to "(?:)" instead as | 15420 // If source is the empty string we set it to "(?:)" instead as |
| 15421 // suggested by ECMA-262, 5th, section 15.10.4.1. | 15421 // suggested by ECMA-262, 5th, section 15.10.4.1. |
| 15422 if (source->length() == 0) source = factory->query_colon_string(); | 15422 if (source->length() == 0) source = factory->query_colon_string(); |
| 15423 | 15423 |
| 15424 Handle<String> escaped_source; | 15424 Handle<String> escaped_source; |
| 15425 ASSIGN_RETURN_ON_EXCEPTION(isolate, escaped_source, | 15425 ASSIGN_RETURN_ON_EXCEPTION(isolate, escaped_source, |
| 15426 EscapeRegExpSource(isolate, source), JSRegExp); | 15426 EscapeRegExpSource(isolate, source), JSRegExp); |
| 15427 | 15427 |
| 15428 RETURN_ON_EXCEPTION(isolate, RegExpImpl::Compile(regexp, source, flags), |
| 15429 JSRegExp); |
| 15430 |
| 15428 regexp->set_source(*escaped_source); | 15431 regexp->set_source(*escaped_source); |
| 15429 regexp->set_flags(Smi::FromInt(flags)); | 15432 regexp->set_flags(Smi::FromInt(flags)); |
| 15430 | 15433 |
| 15431 Map* map = regexp->map(); | 15434 Map* map = regexp->map(); |
| 15432 Object* constructor = map->GetConstructor(); | 15435 Object* constructor = map->GetConstructor(); |
| 15433 if (constructor->IsJSFunction() && | 15436 if (constructor->IsJSFunction() && |
| 15434 JSFunction::cast(constructor)->initial_map() == map) { | 15437 JSFunction::cast(constructor)->initial_map() == map) { |
| 15435 // If we still have the original map, set in-object properties directly. | 15438 // If we still have the original map, set in-object properties directly. |
| 15436 regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex, | 15439 regexp->InObjectPropertyAtPut(JSRegExp::kLastIndexFieldIndex, |
| 15437 Smi::FromInt(0), SKIP_WRITE_BARRIER); | 15440 Smi::FromInt(0), SKIP_WRITE_BARRIER); |
| 15438 } else { | 15441 } else { |
| 15439 // Map has changed, so use generic, but slower, method. | 15442 // Map has changed, so use generic, but slower, method. |
| 15440 PropertyAttributes writable = | 15443 PropertyAttributes writable = |
| 15441 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); | 15444 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE); |
| 15442 JSObject::SetOwnPropertyIgnoreAttributes( | 15445 JSObject::SetOwnPropertyIgnoreAttributes( |
| 15443 regexp, factory->last_index_string(), | 15446 regexp, factory->last_index_string(), |
| 15444 Handle<Smi>(Smi::FromInt(0), isolate), writable) | 15447 Handle<Smi>(Smi::FromInt(0), isolate), writable) |
| 15445 .Check(); | 15448 .Check(); |
| 15446 } | 15449 } |
| 15447 | 15450 |
| 15448 RETURN_ON_EXCEPTION(isolate, RegExpImpl::Compile(regexp, source, flags), | |
| 15449 JSRegExp); | |
| 15450 | |
| 15451 return regexp; | 15451 return regexp; |
| 15452 } | 15452 } |
| 15453 | 15453 |
| 15454 | 15454 |
| 15455 // RegExpKey carries the source and flags of a regular expression as key. | 15455 // RegExpKey carries the source and flags of a regular expression as key. |
| 15456 class RegExpKey : public HashTableKey { | 15456 class RegExpKey : public HashTableKey { |
| 15457 public: | 15457 public: |
| 15458 RegExpKey(Handle<String> string, JSRegExp::Flags flags) | 15458 RegExpKey(Handle<String> string, JSRegExp::Flags flags) |
| 15459 : string_(string), flags_(Smi::FromInt(flags)) {} | 15459 : string_(string), flags_(Smi::FromInt(flags)) {} |
| 15460 | 15460 |
| (...skipping 2814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18275 if (cell->value() != *new_value) { | 18275 if (cell->value() != *new_value) { |
| 18276 cell->set_value(*new_value); | 18276 cell->set_value(*new_value); |
| 18277 Isolate* isolate = cell->GetIsolate(); | 18277 Isolate* isolate = cell->GetIsolate(); |
| 18278 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 18278 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 18279 isolate, DependentCode::kPropertyCellChangedGroup); | 18279 isolate, DependentCode::kPropertyCellChangedGroup); |
| 18280 } | 18280 } |
| 18281 } | 18281 } |
| 18282 | 18282 |
| 18283 } // namespace internal | 18283 } // namespace internal |
| 18284 } // namespace v8 | 18284 } // namespace v8 |
| OLD | NEW |