| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 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 | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #include <stdlib.h> | 
|  | 6 #include <limits> | 
|  | 7 | 
|  | 8 #include "src/v8.h" | 
|  | 9 | 
|  | 10 #include "src/isolate-inl.h" | 
|  | 11 #include "src/runtime/runtime.h" | 
|  | 12 #include "src/runtime/runtime-utils.h" | 
|  | 13 | 
|  | 14 | 
|  | 15 namespace v8 { | 
|  | 16 namespace internal { | 
|  | 17 | 
|  | 18 | 
|  | 19 RUNTIME_FUNCTION(Runtime_ToMethod) { | 
|  | 20   HandleScope scope(isolate); | 
|  | 21   DCHECK(args.length() == 2); | 
|  | 22   CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); | 
|  | 23   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 
|  | 24   Handle<JSFunction> clone = JSFunction::CloneClosure(fun); | 
|  | 25   Handle<Symbol> home_object_symbol(isolate->heap()->home_object_symbol()); | 
|  | 26   JSObject::SetOwnPropertyIgnoreAttributes(clone, home_object_symbol, | 
|  | 27                                            home_object, DONT_ENUM).Assert(); | 
|  | 28   return *clone; | 
|  | 29 } | 
|  | 30 | 
|  | 31 | 
|  | 32 RUNTIME_FUNCTION(Runtime_HomeObjectSymbol) { | 
|  | 33   DCHECK(args.length() == 0); | 
|  | 34   return isolate->heap()->home_object_symbol(); | 
|  | 35 } | 
|  | 36 | 
|  | 37 | 
|  | 38 RUNTIME_FUNCTION(Runtime_LoadFromSuper) { | 
|  | 39   HandleScope scope(isolate); | 
|  | 40   DCHECK(args.length() == 3); | 
|  | 41   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 
|  | 42   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 
|  | 43   CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); | 
|  | 44 | 
|  | 45   if (home_object->IsAccessCheckNeeded() && | 
|  | 46       !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) { | 
|  | 47     isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); | 
|  | 48     RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 
|  | 49   } | 
|  | 50 | 
|  | 51   PrototypeIterator iter(isolate, home_object); | 
|  | 52   Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 
|  | 53   if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 
|  | 54 | 
|  | 55   LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | 
|  | 56   Handle<Object> result; | 
|  | 57   ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); | 
|  | 58   return *result; | 
|  | 59 } | 
|  | 60 | 
|  | 61 | 
|  | 62 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, | 
|  | 63                             Handle<Object> receiver, Handle<Name> name, | 
|  | 64                             Handle<Object> value, StrictMode strict_mode) { | 
|  | 65   if (home_object->IsAccessCheckNeeded() && | 
|  | 66       !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) { | 
|  | 67     isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); | 
|  | 68     RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 
|  | 69   } | 
|  | 70 | 
|  | 71   PrototypeIterator iter(isolate, home_object); | 
|  | 72   Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 
|  | 73   if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 
|  | 74 | 
|  | 75   LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | 
|  | 76   Handle<Object> result; | 
|  | 77   ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
|  | 78       isolate, result, | 
|  | 79       Object::SetProperty(&it, value, strict_mode, | 
|  | 80                           Object::CERTAINLY_NOT_STORE_FROM_KEYED, | 
|  | 81                           Object::SUPER_PROPERTY)); | 
|  | 82   return *result; | 
|  | 83 } | 
|  | 84 | 
|  | 85 | 
|  | 86 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { | 
|  | 87   HandleScope scope(isolate); | 
|  | 88   DCHECK(args.length() == 4); | 
|  | 89   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 
|  | 90   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 
|  | 91   CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 
|  | 92   CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | 
|  | 93 | 
|  | 94   return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); | 
|  | 95 } | 
|  | 96 | 
|  | 97 | 
|  | 98 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { | 
|  | 99   HandleScope scope(isolate); | 
|  | 100   DCHECK(args.length() == 4); | 
|  | 101   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); | 
|  | 102   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); | 
|  | 103   CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 
|  | 104   CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); | 
|  | 105 | 
|  | 106   return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); | 
|  | 107 } | 
|  | 108 } | 
|  | 109 }  // namespace v8::internal | 
| OLD | NEW | 
|---|