| Index: src/runtime/runtime-classes.cc
|
| diff --git a/src/runtime/runtime-classes.cc b/src/runtime/runtime-classes.cc
|
| index ce4b2b5fe3f7c33e5ce16b1504bb8e929f3f3635..75d9e524790d7a0050155511ad46bb1940922985 100644
|
| --- a/src/runtime/runtime-classes.cc
|
| +++ b/src/runtime/runtime-classes.cc
|
| @@ -16,6 +16,28 @@ namespace v8 {
|
| namespace internal {
|
|
|
|
|
| +RUNTIME_FUNCTION(Runtime_ThrowNonMethodError) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 0);
|
| + THROW_NEW_ERROR_RETURN_FAILURE(
|
| + isolate, NewReferenceError("non_method", HandleVector<Object>(NULL, 0)));
|
| +}
|
| +
|
| +
|
| +static Object* ThrowUnsupportedSuper(Isolate* isolate) {
|
| + THROW_NEW_ERROR_RETURN_FAILURE(
|
| + isolate,
|
| + NewReferenceError("unsupported_super", HandleVector<Object>(NULL, 0)));
|
| +}
|
| +
|
| +
|
| +RUNTIME_FUNCTION(Runtime_ThrowUnsupportedSuperError) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 0);
|
| + return ThrowUnsupportedSuper(isolate);
|
| +}
|
| +
|
| +
|
| RUNTIME_FUNCTION(Runtime_ToMethod) {
|
| HandleScope scope(isolate);
|
| DCHECK(args.length() == 2);
|
| @@ -35,13 +57,8 @@ RUNTIME_FUNCTION(Runtime_HomeObjectSymbol) {
|
| }
|
|
|
|
|
| -RUNTIME_FUNCTION(Runtime_LoadFromSuper) {
|
| - HandleScope scope(isolate);
|
| - DCHECK(args.length() == 3);
|
| - CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
|
| - CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
|
| - CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
|
| -
|
| +static Object* LoadFromSuper(Isolate* isolate, Handle<Object> receiver,
|
| + Handle<JSObject> home_object, Handle<Name> name) {
|
| if (home_object->IsAccessCheckNeeded() &&
|
| !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) {
|
| isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET);
|
| @@ -59,6 +76,36 @@ RUNTIME_FUNCTION(Runtime_LoadFromSuper) {
|
| }
|
|
|
|
|
| +RUNTIME_FUNCTION(Runtime_LoadFromSuper) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 3);
|
| + CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
|
| + CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
|
| +
|
| + return LoadFromSuper(isolate, receiver, home_object, name);
|
| +}
|
| +
|
| +
|
| +RUNTIME_FUNCTION(Runtime_LoadKeyedFromSuper) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 3);
|
| + CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
|
| + CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
|
| +
|
| + Handle<Name> name;
|
| + if (!Runtime::ToName(isolate, key).ToHandle(&name)) {
|
| + return ThrowUnsupportedSuper(isolate);
|
| + }
|
| + uint32_t index;
|
| + if (name->AsArrayIndex(&index)) {
|
| + return ThrowUnsupportedSuper(isolate);
|
| + }
|
| + return LoadFromSuper(isolate, receiver, home_object, name);
|
| +}
|
| +
|
| +
|
| static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object,
|
| Handle<Object> receiver, Handle<Name> name,
|
| Handle<Object> value, StrictMode strict_mode) {
|
|
|