| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
| 6 | 6 |
| 7 #include "src/arguments.h" | 7 #include "src/arguments.h" |
| 8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
| 9 #include "src/debug/debug.h" | 9 #include "src/debug/debug.h" |
| 10 #include "src/isolate-inl.h" | 10 #include "src/isolate-inl.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 // TODO(verwaest): Make sure GetProperty(LookupIterator*) can handle this, and | 42 // TODO(verwaest): Make sure GetProperty(LookupIterator*) can handle this, and |
| 43 // remove the special casing here. | 43 // remove the special casing here. |
| 44 if (name->AsArrayIndex(&index)) { | 44 if (name->AsArrayIndex(&index)) { |
| 45 return Object::GetElement(isolate, object, index); | 45 return Object::GetElement(isolate, object, index); |
| 46 } else { | 46 } else { |
| 47 return Object::GetProperty(object, name, language_mode); | 47 return Object::GetProperty(object, name, language_mode); |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 | 50 |
| 51 | 51 |
| 52 MaybeHandle<Object> Runtime::KeyedGetObjectProperty( | 52 static MaybeHandle<Object> KeyedGetObjectProperty(Isolate* isolate, |
| 53 Isolate* isolate, Handle<Object> receiver_obj, Handle<Object> key_obj, | 53 Handle<Object> receiver_obj, |
| 54 LanguageMode language_mode) { | 54 Handle<Object> key_obj, |
| 55 LanguageMode language_mode) { |
| 55 // Fast cases for getting named properties of the receiver JSObject | 56 // Fast cases for getting named properties of the receiver JSObject |
| 56 // itself. | 57 // itself. |
| 57 // | 58 // |
| 58 // The global proxy objects has to be excluded since LookupOwn on | 59 // The global proxy objects has to be excluded since LookupOwn on |
| 59 // the global proxy object can return a valid result even though the | 60 // the global proxy object can return a valid result even though the |
| 60 // global proxy object never has properties. This is the case | 61 // global proxy object never has properties. This is the case |
| 61 // because the global proxy object forwards everything to its hidden | 62 // because the global proxy object forwards everything to its hidden |
| 62 // prototype including own lookups. | 63 // prototype including own lookups. |
| 63 // | 64 // |
| 64 // Additionally, we need to make sure that we do not cache results | 65 // Additionally, we need to make sure that we do not cache results |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 Handle<String> str = Handle<String>::cast(receiver_obj); | 119 Handle<String> str = Handle<String>::cast(receiver_obj); |
| 119 int index = Handle<Smi>::cast(key_obj)->value(); | 120 int index = Handle<Smi>::cast(key_obj)->value(); |
| 120 if (index >= 0 && index < str->length()) { | 121 if (index >= 0 && index < str->length()) { |
| 121 Factory* factory = isolate->factory(); | 122 Factory* factory = isolate->factory(); |
| 122 return factory->LookupSingleCharacterStringFromCode( | 123 return factory->LookupSingleCharacterStringFromCode( |
| 123 String::Flatten(str)->Get(index)); | 124 String::Flatten(str)->Get(index)); |
| 124 } | 125 } |
| 125 } | 126 } |
| 126 | 127 |
| 127 // Fall back to GetObjectProperty. | 128 // Fall back to GetObjectProperty. |
| 128 return GetObjectProperty(isolate, receiver_obj, key_obj, language_mode); | 129 return Runtime::GetObjectProperty(isolate, receiver_obj, key_obj, |
| 130 language_mode); |
| 129 } | 131 } |
| 130 | 132 |
| 131 | 133 |
| 132 MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, | 134 MaybeHandle<Object> Runtime::DeleteObjectProperty(Isolate* isolate, |
| 133 Handle<JSReceiver> receiver, | 135 Handle<JSReceiver> receiver, |
| 134 Handle<Object> key, | 136 Handle<Object> key, |
| 135 LanguageMode language_mode) { | 137 LanguageMode language_mode) { |
| 136 // Check if the given key is an array index. | 138 // Check if the given key is an array index. |
| 137 uint32_t index = 0; | 139 uint32_t index = 0; |
| 138 if (key->ToArrayIndex(&index)) { | 140 if (key->ToArrayIndex(&index)) { |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 RUNTIME_FUNCTION(Runtime_KeyedGetProperty) { | 515 RUNTIME_FUNCTION(Runtime_KeyedGetProperty) { |
| 514 HandleScope scope(isolate); | 516 HandleScope scope(isolate); |
| 515 DCHECK(args.length() == 2); | 517 DCHECK(args.length() == 2); |
| 516 | 518 |
| 517 CONVERT_ARG_HANDLE_CHECKED(Object, receiver_obj, 0); | 519 CONVERT_ARG_HANDLE_CHECKED(Object, receiver_obj, 0); |
| 518 CONVERT_ARG_HANDLE_CHECKED(Object, key_obj, 1); | 520 CONVERT_ARG_HANDLE_CHECKED(Object, key_obj, 1); |
| 519 | 521 |
| 520 Handle<Object> result; | 522 Handle<Object> result; |
| 521 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 523 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 522 isolate, result, | 524 isolate, result, |
| 523 Runtime::KeyedGetObjectProperty(isolate, receiver_obj, key_obj, SLOPPY)); | 525 KeyedGetObjectProperty(isolate, receiver_obj, key_obj, SLOPPY)); |
| 524 return *result; | 526 return *result; |
| 525 } | 527 } |
| 526 | 528 |
| 527 | 529 |
| 528 RUNTIME_FUNCTION(Runtime_KeyedGetPropertyStrong) { | 530 RUNTIME_FUNCTION(Runtime_KeyedGetPropertyStrong) { |
| 529 HandleScope scope(isolate); | 531 HandleScope scope(isolate); |
| 530 DCHECK(args.length() == 2); | 532 DCHECK(args.length() == 2); |
| 531 | 533 |
| 532 CONVERT_ARG_HANDLE_CHECKED(Object, receiver_obj, 0); | 534 CONVERT_ARG_HANDLE_CHECKED(Object, receiver_obj, 0); |
| 533 CONVERT_ARG_HANDLE_CHECKED(Object, key_obj, 1); | 535 CONVERT_ARG_HANDLE_CHECKED(Object, key_obj, 1); |
| 534 | 536 |
| 535 Handle<Object> result; | 537 Handle<Object> result; |
| 536 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 538 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 537 isolate, result, | 539 isolate, result, |
| 538 Runtime::KeyedGetObjectProperty(isolate, receiver_obj, key_obj, STRONG)); | 540 KeyedGetObjectProperty(isolate, receiver_obj, key_obj, STRONG)); |
| 539 return *result; | 541 return *result; |
| 540 } | 542 } |
| 541 | 543 |
| 542 | 544 |
| 543 RUNTIME_FUNCTION(Runtime_AddNamedProperty) { | 545 RUNTIME_FUNCTION(Runtime_AddNamedProperty) { |
| 544 HandleScope scope(isolate); | 546 HandleScope scope(isolate); |
| 545 RUNTIME_ASSERT(args.length() == 4); | 547 RUNTIME_ASSERT(args.length() == 4); |
| 546 | 548 |
| 547 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); | 549 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); |
| 548 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); | 550 CONVERT_ARG_HANDLE_CHECKED(Name, name, 1); |
| (...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1554 RUNTIME_FUNCTION(Runtime_CreateIterResultObject) { | 1556 RUNTIME_FUNCTION(Runtime_CreateIterResultObject) { |
| 1555 HandleScope scope(isolate); | 1557 HandleScope scope(isolate); |
| 1556 DCHECK_EQ(2, args.length()); | 1558 DCHECK_EQ(2, args.length()); |
| 1557 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); | 1559 CONVERT_ARG_HANDLE_CHECKED(Object, value, 0); |
| 1558 CONVERT_ARG_HANDLE_CHECKED(Object, done, 1); | 1560 CONVERT_ARG_HANDLE_CHECKED(Object, done, 1); |
| 1559 return *isolate->factory()->NewJSIteratorResult(value, done); | 1561 return *isolate->factory()->NewJSIteratorResult(value, done); |
| 1560 } | 1562 } |
| 1561 | 1563 |
| 1562 } // namespace internal | 1564 } // namespace internal |
| 1563 } // namespace v8 | 1565 } // namespace v8 |
| OLD | NEW |