| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 } | 344 } |
| 345 } | 345 } |
| 346 | 346 |
| 347 // Only attempt to find the hidden properties in the local object and not | 347 // Only attempt to find the hidden properties in the local object and not |
| 348 // in the prototype chain. Note that HasLocalProperty() can cause a GC in | 348 // in the prototype chain. Note that HasLocalProperty() can cause a GC in |
| 349 // the general case in the presence of interceptors. | 349 // the general case in the presence of interceptors. |
| 350 if (!obj->HasHiddenPropertiesObject()) { | 350 if (!obj->HasHiddenPropertiesObject()) { |
| 351 // Hidden properties object not found. Allocate a new hidden properties | 351 // Hidden properties object not found. Allocate a new hidden properties |
| 352 // object if requested. Otherwise return the undefined value. | 352 // object if requested. Otherwise return the undefined value. |
| 353 if (create_if_needed) { | 353 if (create_if_needed) { |
| 354 Handle<Object> hidden_obj = Factory::NewJSObject(Top::object_function()); | 354 Handle<Object> hidden_obj = |
| 355 Factory::NewJSObject(Isolate::Current()->object_function()); |
| 355 CALL_HEAP_FUNCTION(obj->SetHiddenPropertiesObject(*hidden_obj), Object); | 356 CALL_HEAP_FUNCTION(obj->SetHiddenPropertiesObject(*hidden_obj), Object); |
| 356 } else { | 357 } else { |
| 357 return Factory::undefined_value(); | 358 return Factory::undefined_value(); |
| 358 } | 359 } |
| 359 } | 360 } |
| 360 return Handle<Object>(obj->GetHiddenPropertiesObject()); | 361 return Handle<Object>(obj->GetHiddenPropertiesObject()); |
| 361 } | 362 } |
| 362 | 363 |
| 363 | 364 |
| 364 Handle<Object> DeleteElement(Handle<JSObject> obj, | 365 Handle<Object> DeleteElement(Handle<JSObject> obj, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 | 438 |
| 438 Handle<JSValue> GetScriptWrapper(Handle<Script> script) { | 439 Handle<JSValue> GetScriptWrapper(Handle<Script> script) { |
| 439 if (script->wrapper()->proxy() != NULL) { | 440 if (script->wrapper()->proxy() != NULL) { |
| 440 // Return the script wrapper directly from the cache. | 441 // Return the script wrapper directly from the cache. |
| 441 return Handle<JSValue>( | 442 return Handle<JSValue>( |
| 442 reinterpret_cast<JSValue**>(script->wrapper()->proxy())); | 443 reinterpret_cast<JSValue**>(script->wrapper()->proxy())); |
| 443 } | 444 } |
| 444 | 445 |
| 445 // Construct a new script wrapper. | 446 // Construct a new script wrapper. |
| 446 Counters::script_wrappers.Increment(); | 447 Counters::script_wrappers.Increment(); |
| 447 Handle<JSFunction> constructor = Top::script_function(); | 448 Handle<JSFunction> constructor = Isolate::Current()->script_function(); |
| 448 Handle<JSValue> result = | 449 Handle<JSValue> result = |
| 449 Handle<JSValue>::cast(Factory::NewJSObject(constructor)); | 450 Handle<JSValue>::cast(Factory::NewJSObject(constructor)); |
| 450 result->set_value(*script); | 451 result->set_value(*script); |
| 451 | 452 |
| 452 // Create a new weak global handle and use it to cache the wrapper | 453 // Create a new weak global handle and use it to cache the wrapper |
| 453 // for future use. The cache will automatically be cleared by the | 454 // for future use. The cache will automatically be cleared by the |
| 454 // garbage collector when it is not used anymore. | 455 // garbage collector when it is not used anymore. |
| 455 Handle<Object> handle = GlobalHandles::Create(*result); | 456 Handle<Object> handle = GlobalHandles::Create(*result); |
| 456 GlobalHandles::MakeWeak(handle.location(), NULL, &ClearWrapperCache); | 457 GlobalHandles::MakeWeak(handle.location(), NULL, &ClearWrapperCache); |
| 457 script->wrapper()->set_proxy(reinterpret_cast<Address>(handle.location())); | 458 script->wrapper()->set_proxy(reinterpret_cast<Address>(handle.location())); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 } | 617 } |
| 617 return result; | 618 return result; |
| 618 } | 619 } |
| 619 | 620 |
| 620 | 621 |
| 621 Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object, | 622 Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object, |
| 622 KeyCollectionType type) { | 623 KeyCollectionType type) { |
| 623 Handle<FixedArray> content = Factory::empty_fixed_array(); | 624 Handle<FixedArray> content = Factory::empty_fixed_array(); |
| 624 Handle<JSObject> arguments_boilerplate = | 625 Handle<JSObject> arguments_boilerplate = |
| 625 Handle<JSObject>( | 626 Handle<JSObject>( |
| 626 Top::context()->global_context()->arguments_boilerplate()); | 627 Isolate::Current()->context()->global_context()-> |
| 628 arguments_boilerplate()); |
| 627 Handle<JSFunction> arguments_function = | 629 Handle<JSFunction> arguments_function = |
| 628 Handle<JSFunction>( | 630 Handle<JSFunction>( |
| 629 JSFunction::cast(arguments_boilerplate->map()->constructor())); | 631 JSFunction::cast(arguments_boilerplate->map()->constructor())); |
| 630 | 632 |
| 631 // Only collect keys if access is permitted. | 633 // Only collect keys if access is permitted. |
| 632 for (Handle<Object> p = object; | 634 for (Handle<Object> p = object; |
| 633 *p != HEAP->null_value(); | 635 *p != HEAP->null_value(); |
| 634 p = Handle<Object>(p->GetPrototype())) { | 636 p = Handle<Object>(p->GetPrototype())) { |
| 635 Handle<JSObject> current(JSObject::cast(*p)); | 637 Handle<JSObject> current(JSObject::cast(*p)); |
| 636 | 638 |
| 637 // Check access rights if required. | 639 // Check access rights if required. |
| 638 if (current->IsAccessCheckNeeded() && | 640 if (current->IsAccessCheckNeeded() && |
| 639 !Top::MayNamedAccess(*current, HEAP->undefined_value(), | 641 !Isolate::Current()->MayNamedAccess(*current, HEAP->undefined_value(), |
| 640 v8::ACCESS_KEYS)) { | 642 v8::ACCESS_KEYS)) { |
| 641 Top::ReportFailedAccessCheck(*current, v8::ACCESS_KEYS); | 643 Isolate::Current()->ReportFailedAccessCheck(*current, v8::ACCESS_KEYS); |
| 642 break; | 644 break; |
| 643 } | 645 } |
| 644 | 646 |
| 645 // Compute the element keys. | 647 // Compute the element keys. |
| 646 Handle<FixedArray> element_keys = | 648 Handle<FixedArray> element_keys = |
| 647 Factory::NewFixedArray(current->NumberOfEnumElements()); | 649 Factory::NewFixedArray(current->NumberOfEnumElements()); |
| 648 current->GetEnumElementKeys(*element_keys); | 650 current->GetEnumElementKeys(*element_keys); |
| 649 content = UnionOfKeys(content, element_keys); | 651 content = UnionOfKeys(content, element_keys); |
| 650 | 652 |
| 651 // Add the element keys from the interceptor. | 653 // Add the element keys from the interceptor. |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 ClearExceptionFlag flag) { | 745 ClearExceptionFlag flag) { |
| 744 return shared->is_compiled() || CompileLazyShared(shared, flag); | 746 return shared->is_compiled() || CompileLazyShared(shared, flag); |
| 745 } | 747 } |
| 746 | 748 |
| 747 | 749 |
| 748 static bool CompileLazyHelper(CompilationInfo* info, | 750 static bool CompileLazyHelper(CompilationInfo* info, |
| 749 ClearExceptionFlag flag) { | 751 ClearExceptionFlag flag) { |
| 750 // Compile the source information to a code object. | 752 // Compile the source information to a code object. |
| 751 ASSERT(!info->shared_info()->is_compiled()); | 753 ASSERT(!info->shared_info()->is_compiled()); |
| 752 bool result = Compiler::CompileLazy(info); | 754 bool result = Compiler::CompileLazy(info); |
| 753 ASSERT(result != Top::has_pending_exception()); | 755 ASSERT(result != Isolate::Current()->has_pending_exception()); |
| 754 if (!result && flag == CLEAR_EXCEPTION) Top::clear_pending_exception(); | 756 if (!result && flag == CLEAR_EXCEPTION) { |
| 757 Isolate::Current()->clear_pending_exception(); |
| 758 } |
| 755 return result; | 759 return result; |
| 756 } | 760 } |
| 757 | 761 |
| 758 | 762 |
| 759 bool CompileLazyShared(Handle<SharedFunctionInfo> shared, | 763 bool CompileLazyShared(Handle<SharedFunctionInfo> shared, |
| 760 ClearExceptionFlag flag) { | 764 ClearExceptionFlag flag) { |
| 761 CompilationInfo info(shared); | 765 CompilationInfo info(shared); |
| 762 return CompileLazyHelper(&info, flag); | 766 return CompileLazyHelper(&info, flag); |
| 763 } | 767 } |
| 764 | 768 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 | 816 |
| 813 OptimizedObjectForAddingMultipleProperties:: | 817 OptimizedObjectForAddingMultipleProperties:: |
| 814 ~OptimizedObjectForAddingMultipleProperties() { | 818 ~OptimizedObjectForAddingMultipleProperties() { |
| 815 // Reoptimize the object to allow fast property access. | 819 // Reoptimize the object to allow fast property access. |
| 816 if (has_been_transformed_) { | 820 if (has_been_transformed_) { |
| 817 TransformToFastProperties(object_, unused_property_fields_); | 821 TransformToFastProperties(object_, unused_property_fields_); |
| 818 } | 822 } |
| 819 } | 823 } |
| 820 | 824 |
| 821 } } // namespace v8::internal | 825 } } // namespace v8::internal |
| OLD | NEW |