| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 4676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4687 if (isolate->has_pending_exception()) return Nothing<bool>(); | 4687 if (isolate->has_pending_exception()) return Nothing<bool>(); |
| 4688 if (owned && !target_desc.configurable()) { | 4688 if (owned && !target_desc.configurable()) { |
| 4689 isolate->Throw(*factory->NewTypeError( | 4689 isolate->Throw(*factory->NewTypeError( |
| 4690 MessageTemplate::kProxyDeletePropertyViolatesInvariant, name)); | 4690 MessageTemplate::kProxyDeletePropertyViolatesInvariant, name)); |
| 4691 return Nothing<bool>(); | 4691 return Nothing<bool>(); |
| 4692 } | 4692 } |
| 4693 return Just(true); | 4693 return Just(true); |
| 4694 } | 4694 } |
| 4695 | 4695 |
| 4696 | 4696 |
| 4697 // static | |
| 4698 MaybeHandle<Context> JSProxy::GetFunctionRealm(Handle<JSProxy> proxy) { | |
| 4699 DCHECK(proxy->map()->is_constructor()); | |
| 4700 if (JSProxy::IsRevoked(proxy)) { | |
| 4701 THROW_NEW_ERROR(proxy->GetIsolate(), | |
| 4702 NewTypeError(MessageTemplate::kProxyRevoked), Context); | |
| 4703 } | |
| 4704 | |
| 4705 // TODO(verwaest): Get rid of JSFunctionProxies. | |
| 4706 Object* target = proxy->IsJSFunctionProxy() | |
| 4707 ? JSFunctionProxy::cast(*proxy)->construct_trap() | |
| 4708 : proxy->target(); | |
| 4709 return JSReceiver::GetFunctionRealm(handle(JSReceiver::cast(target))); | |
| 4710 } | |
| 4711 | |
| 4712 | |
| 4713 // static | |
| 4714 MaybeHandle<Context> JSFunction::GetFunctionRealm(Handle<JSFunction> function) { | |
| 4715 DCHECK(function->map()->is_constructor()); | |
| 4716 return handle(function->context()->native_context()); | |
| 4717 } | |
| 4718 | |
| 4719 | |
| 4720 // static | |
| 4721 MaybeHandle<Context> JSObject::GetFunctionRealm(Handle<JSObject> object) { | |
| 4722 DCHECK(object->map()->is_constructor()); | |
| 4723 DCHECK(!object->IsJSFunction()); | |
| 4724 return handle(object->GetCreationContext()); | |
| 4725 } | |
| 4726 | |
| 4727 | |
| 4728 // static | |
| 4729 MaybeHandle<Context> JSReceiver::GetFunctionRealm(Handle<JSReceiver> receiver) { | |
| 4730 if (receiver->IsJSProxy()) { | |
| 4731 return JSProxy::GetFunctionRealm(Handle<JSProxy>::cast(receiver)); | |
| 4732 } | |
| 4733 | |
| 4734 if (receiver->IsJSFunction()) { | |
| 4735 return JSFunction::GetFunctionRealm(Handle<JSFunction>::cast(receiver)); | |
| 4736 } | |
| 4737 | |
| 4738 return JSObject::GetFunctionRealm(Handle<JSObject>::cast(receiver)); | |
| 4739 } | |
| 4740 | |
| 4741 | |
| 4742 Maybe<PropertyAttributes> JSProxy::GetPropertyAttributes(LookupIterator* it) { | 4697 Maybe<PropertyAttributes> JSProxy::GetPropertyAttributes(LookupIterator* it) { |
| 4743 Isolate* isolate = it->isolate(); | 4698 Isolate* isolate = it->isolate(); |
| 4744 HandleScope scope(isolate); | 4699 HandleScope scope(isolate); |
| 4745 PropertyDescriptor desc; | 4700 PropertyDescriptor desc; |
| 4746 bool found = JSProxy::GetOwnPropertyDescriptor(it, &desc); | 4701 bool found = JSProxy::GetOwnPropertyDescriptor(it, &desc); |
| 4747 if (isolate->has_pending_exception()) return Nothing<PropertyAttributes>(); | 4702 if (isolate->has_pending_exception()) return Nothing<PropertyAttributes>(); |
| 4748 if (!found) return Just(ABSENT); | 4703 if (!found) return Just(ABSENT); |
| 4749 return Just(desc.ToAttributes()); | 4704 return Just(desc.ToAttributes()); |
| 4750 } | 4705 } |
| 4751 | 4706 |
| (...skipping 7481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12233 return handle(new_target->initial_map(), isolate); | 12188 return handle(new_target->initial_map(), isolate); |
| 12234 } | 12189 } |
| 12235 } | 12190 } |
| 12236 | 12191 |
| 12237 // First create a new map with the size and number of in-object properties | 12192 // First create a new map with the size and number of in-object properties |
| 12238 // suggested by the function. | 12193 // suggested by the function. |
| 12239 DCHECK(!new_target->shared()->is_generator()); | 12194 DCHECK(!new_target->shared()->is_generator()); |
| 12240 DCHECK(!constructor->shared()->is_generator()); | 12195 DCHECK(!constructor->shared()->is_generator()); |
| 12241 | 12196 |
| 12242 // Fetch or allocate prototype. | 12197 // Fetch or allocate prototype. |
| 12243 // TODO(verwaest): In case of non-instance prototype, use the | |
| 12244 // intrinsicDefaultProto instead. | |
| 12245 Handle<Object> prototype; | 12198 Handle<Object> prototype; |
| 12246 if (new_target->has_instance_prototype()) { | 12199 if (new_target->has_instance_prototype()) { |
| 12247 prototype = handle(new_target->instance_prototype(), isolate); | 12200 prototype = handle(new_target->instance_prototype(), isolate); |
| 12248 } else { | 12201 } else { |
| 12249 prototype = isolate->factory()->NewFunctionPrototype(new_target); | 12202 prototype = isolate->factory()->NewFunctionPrototype(new_target); |
| 12250 } | 12203 } |
| 12251 | 12204 |
| 12252 // Finally link initial map and constructor function if the original | 12205 // Finally link initial map and constructor function if the original |
| 12253 // constructor is actually a subclass constructor. | 12206 // constructor is actually a subclass constructor. |
| 12254 if (IsSubclassConstructor(new_target->shared()->kind())) { | 12207 if (IsSubclassConstructor(new_target->shared()->kind())) { |
| (...skipping 6376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18631 if (cell->value() != *new_value) { | 18584 if (cell->value() != *new_value) { |
| 18632 cell->set_value(*new_value); | 18585 cell->set_value(*new_value); |
| 18633 Isolate* isolate = cell->GetIsolate(); | 18586 Isolate* isolate = cell->GetIsolate(); |
| 18634 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 18587 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 18635 isolate, DependentCode::kPropertyCellChangedGroup); | 18588 isolate, DependentCode::kPropertyCellChangedGroup); |
| 18636 } | 18589 } |
| 18637 } | 18590 } |
| 18638 | 18591 |
| 18639 } // namespace internal | 18592 } // namespace internal |
| 18640 } // namespace v8 | 18593 } // namespace v8 |
| OLD | NEW |