| 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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   263   HandleScope scope(isolate); |   263   HandleScope scope(isolate); | 
|   264   DCHECK(args.length() == 1); |   264   DCHECK(args.length() == 1); | 
|   265   CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); |   265   CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); | 
|   266   Handle<Object> result; |   266   Handle<Object> result; | 
|   267   ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, |   267   ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
|   268                                      JSObject::PreventExtensions(obj)); |   268                                      JSObject::PreventExtensions(obj)); | 
|   269   return *result; |   269   return *result; | 
|   270 } |   270 } | 
|   271  |   271  | 
|   272  |   272  | 
|   273 RUNTIME_FUNCTION(Runtime_ToMethod) { |  | 
|   274   HandleScope scope(isolate); |  | 
|   275   DCHECK(args.length() == 2); |  | 
|   276   CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); |  | 
|   277   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |  | 
|   278   Handle<JSFunction> clone = JSFunction::CloneClosure(fun); |  | 
|   279   Handle<Symbol> home_object_symbol(isolate->heap()->home_object_symbol()); |  | 
|   280   JSObject::SetOwnPropertyIgnoreAttributes(clone, home_object_symbol, |  | 
|   281                                            home_object, DONT_ENUM).Assert(); |  | 
|   282   return *clone; |  | 
|   283 } |  | 
|   284  |  | 
|   285  |  | 
|   286 RUNTIME_FUNCTION(Runtime_HomeObjectSymbol) { |  | 
|   287   DCHECK(args.length() == 0); |  | 
|   288   return isolate->heap()->home_object_symbol(); |  | 
|   289 } |  | 
|   290  |  | 
|   291  |  | 
|   292 RUNTIME_FUNCTION(Runtime_LoadFromSuper) { |  | 
|   293   HandleScope scope(isolate); |  | 
|   294   DCHECK(args.length() == 3); |  | 
|   295   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |  | 
|   296   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |  | 
|   297   CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); |  | 
|   298  |  | 
|   299   if (home_object->IsAccessCheckNeeded() && |  | 
|   300       !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) { |  | 
|   301     isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); |  | 
|   302     RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |  | 
|   303   } |  | 
|   304  |  | 
|   305   PrototypeIterator iter(isolate, home_object); |  | 
|   306   Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |  | 
|   307   if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |  | 
|   308  |  | 
|   309   LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); |  | 
|   310   Handle<Object> result; |  | 
|   311   ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); |  | 
|   312   return *result; |  | 
|   313 } |  | 
|   314  |  | 
|   315  |  | 
|   316 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, |  | 
|   317                             Handle<Object> receiver, Handle<Name> name, |  | 
|   318                             Handle<Object> value, StrictMode strict_mode) { |  | 
|   319   if (home_object->IsAccessCheckNeeded() && |  | 
|   320       !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) { |  | 
|   321     isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); |  | 
|   322     RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |  | 
|   323   } |  | 
|   324  |  | 
|   325   PrototypeIterator iter(isolate, home_object); |  | 
|   326   Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |  | 
|   327   if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |  | 
|   328  |  | 
|   329   LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); |  | 
|   330   Handle<Object> result; |  | 
|   331   ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |  | 
|   332       isolate, result, |  | 
|   333       Object::SetProperty(&it, value, strict_mode, |  | 
|   334                           Object::CERTAINLY_NOT_STORE_FROM_KEYED, |  | 
|   335                           Object::SUPER_PROPERTY)); |  | 
|   336   return *result; |  | 
|   337 } |  | 
|   338  |  | 
|   339  |  | 
|   340 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { |  | 
|   341   HandleScope scope(isolate); |  | 
|   342   DCHECK(args.length() == 4); |  | 
|   343   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |  | 
|   344   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |  | 
|   345   CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |  | 
|   346   CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); |  | 
|   347  |  | 
|   348   return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); |  | 
|   349 } |  | 
|   350  |  | 
|   351  |  | 
|   352 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { |  | 
|   353   HandleScope scope(isolate); |  | 
|   354   DCHECK(args.length() == 4); |  | 
|   355   CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); |  | 
|   356   CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); |  | 
|   357   CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |  | 
|   358   CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); |  | 
|   359  |  | 
|   360   return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); |  | 
|   361 } |  | 
|   362  |  | 
|   363  |  | 
|   364 RUNTIME_FUNCTION(Runtime_IsExtensible) { |   273 RUNTIME_FUNCTION(Runtime_IsExtensible) { | 
|   365   SealHandleScope shs(isolate); |   274   SealHandleScope shs(isolate); | 
|   366   DCHECK(args.length() == 1); |   275   DCHECK(args.length() == 1); | 
|   367   CONVERT_ARG_CHECKED(JSObject, obj, 0); |   276   CONVERT_ARG_CHECKED(JSObject, obj, 0); | 
|   368   if (obj->IsJSGlobalProxy()) { |   277   if (obj->IsJSGlobalProxy()) { | 
|   369     PrototypeIterator iter(isolate, obj); |   278     PrototypeIterator iter(isolate, obj); | 
|   370     if (iter.IsAtEnd()) return isolate->heap()->false_value(); |   279     if (iter.IsAtEnd()) return isolate->heap()->false_value(); | 
|   371     DCHECK(iter.GetCurrent()->IsJSGlobalObject()); |   280     DCHECK(iter.GetCurrent()->IsJSGlobalObject()); | 
|   372     obj = JSObject::cast(iter.GetCurrent()); |   281     obj = JSObject::cast(iter.GetCurrent()); | 
|   373   } |   282   } | 
| (...skipping 3060 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3434   } |  3343   } | 
|  3435   return NULL; |  3344   return NULL; | 
|  3436 } |  3345 } | 
|  3437  |  3346  | 
|  3438  |  3347  | 
|  3439 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { |  3348 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { | 
|  3440   return &(kIntrinsicFunctions[static_cast<int>(id)]); |  3349   return &(kIntrinsicFunctions[static_cast<int>(id)]); | 
|  3441 } |  3350 } | 
|  3442 } |  3351 } | 
|  3443 }  // namespace v8::internal |  3352 }  // namespace v8::internal | 
| OLD | NEW |