Chromium Code Reviews| 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 <stdlib.h> | 5 #include <stdlib.h> |
| 6 #include <limits> | 6 #include <limits> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
| (...skipping 1936 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1947 | 1947 |
| 1948 RUNTIME_FUNCTION(Runtime_HomeObjectSymbol) { | 1948 RUNTIME_FUNCTION(Runtime_HomeObjectSymbol) { |
| 1949 DCHECK(args.length() == 0); | 1949 DCHECK(args.length() == 0); |
| 1950 return isolate->heap()->home_object_symbol(); | 1950 return isolate->heap()->home_object_symbol(); |
| 1951 } | 1951 } |
| 1952 | 1952 |
| 1953 | 1953 |
| 1954 RUNTIME_FUNCTION(Runtime_LoadFromSuper) { | 1954 RUNTIME_FUNCTION(Runtime_LoadFromSuper) { |
| 1955 HandleScope scope(isolate); | 1955 HandleScope scope(isolate); |
| 1956 DCHECK(args.length() == 3); | 1956 DCHECK(args.length() == 3); |
| 1957 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 0); | 1957 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |
| 1958 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 1); | 1958 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |
| 1959 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); | 1959 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); |
| 1960 | 1960 |
| 1961 if (home_object->IsAccessCheckNeeded() && | 1961 if (home_object->IsAccessCheckNeeded() && |
| 1962 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) { | 1962 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) { |
| 1963 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); | 1963 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); |
| 1964 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 1964 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
| 1965 } | 1965 } |
| 1966 | 1966 |
| 1967 PrototypeIterator iter(isolate, home_object); | 1967 PrototypeIterator iter(isolate, home_object); |
| 1968 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 1968 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |
| 1969 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 1969 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |
| 1970 | 1970 |
| 1971 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | 1971 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); |
| 1972 Handle<Object> result; | 1972 Handle<Object> result; |
| 1973 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); | 1973 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); |
| 1974 return *result; | 1974 return *result; |
| 1975 } | 1975 } |
| 1976 | 1976 |
| 1977 | 1977 |
| 1978 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, | |
| 1979 Handle<Object> receiver, Handle<Name> name, | |
| 1980 Handle<Object> value, StrictMode strict_mode) { | |
| 1981 if (home_object->IsAccessCheckNeeded() && | |
| 1982 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) { | |
| 1983 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); | |
| 1984 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | |
| 1985 } | |
| 1986 | |
| 1987 PrototypeIterator iter(isolate, home_object); | |
| 1988 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | |
| 1989 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | |
| 1990 | |
| 1991 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | |
| 1992 Handle<Object> result; | |
| 1993 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
| 1994 isolate, result, | |
| 1995 Object::SetProperty(&it, value, strict_mode, | |
| 1996 Object::CERTAINLY_NOT_STORE_FROM_KEYED, | |
| 1997 Object::SUPER_PROPERTY)); | |
| 1998 return *result; | |
| 1999 } | |
| 2000 | |
| 2001 | |
| 2002 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { | |
| 2003 HandleScope scope(isolate); | |
| 2004 DCHECK(args.length() == 4); | |
| 2005 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | |
| 2006 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | |
| 2007 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | |
| 2008 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | |
| 2009 | |
| 2010 return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); | |
| 2011 } | |
| 2012 | |
| 2013 | |
| 2014 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { | |
|
arv (Not doing code reviews)
2014/09/29 14:37:27
Why not take strict mode as a parameter?
| |
| 2015 HandleScope scope(isolate); | |
| 2016 DCHECK(args.length() == 4); | |
| 2017 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | |
| 2018 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | |
| 2019 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | |
| 2020 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | |
| 2021 | |
| 2022 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); | |
| 2023 } | |
| 2024 | |
| 2025 | |
| 1978 RUNTIME_FUNCTION(Runtime_IsExtensible) { | 2026 RUNTIME_FUNCTION(Runtime_IsExtensible) { |
| 1979 SealHandleScope shs(isolate); | 2027 SealHandleScope shs(isolate); |
| 1980 DCHECK(args.length() == 1); | 2028 DCHECK(args.length() == 1); |
| 1981 CONVERT_ARG_CHECKED(JSObject, obj, 0); | 2029 CONVERT_ARG_CHECKED(JSObject, obj, 0); |
| 1982 if (obj->IsJSGlobalProxy()) { | 2030 if (obj->IsJSGlobalProxy()) { |
| 1983 PrototypeIterator iter(isolate, obj); | 2031 PrototypeIterator iter(isolate, obj); |
| 1984 if (iter.IsAtEnd()) return isolate->heap()->false_value(); | 2032 if (iter.IsAtEnd()) return isolate->heap()->false_value(); |
| 1985 DCHECK(iter.GetCurrent()->IsJSGlobalObject()); | 2033 DCHECK(iter.GetCurrent()->IsJSGlobalObject()); |
| 1986 obj = JSObject::cast(iter.GetCurrent()); | 2034 obj = JSObject::cast(iter.GetCurrent()); |
| 1987 } | 2035 } |
| (...skipping 12584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 14572 } | 14620 } |
| 14573 return NULL; | 14621 return NULL; |
| 14574 } | 14622 } |
| 14575 | 14623 |
| 14576 | 14624 |
| 14577 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { | 14625 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { |
| 14578 return &(kIntrinsicFunctions[static_cast<int>(id)]); | 14626 return &(kIntrinsicFunctions[static_cast<int>(id)]); |
| 14579 } | 14627 } |
| 14580 } | 14628 } |
| 14581 } // namespace v8::internal | 14629 } // namespace v8::internal |
| OLD | NEW |