| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 | 566 |
| 567 // | 567 // |
| 568 // Accessors::FunctionArguments | 568 // Accessors::FunctionArguments |
| 569 // | 569 // |
| 570 | 570 |
| 571 | 571 |
| 572 static MaybeObject* ConstructArgumentsObjectForInlinedFunction( | 572 static MaybeObject* ConstructArgumentsObjectForInlinedFunction( |
| 573 JavaScriptFrame* frame, | 573 JavaScriptFrame* frame, |
| 574 Handle<JSFunction> inlined_function, | 574 Handle<JSFunction> inlined_function, |
| 575 int inlined_frame_index) { | 575 int inlined_frame_index) { |
| 576 Factory* factory = Isolate::Current()->factory(); | 576 Isolate* isolate = inlined_function->GetIsolate(); |
| 577 Factory* factory = isolate->factory(); |
| 577 Vector<SlotRef> args_slots = | 578 Vector<SlotRef> args_slots = |
| 578 SlotRef::ComputeSlotMappingForArguments( | 579 SlotRef::ComputeSlotMappingForArguments( |
| 579 frame, | 580 frame, |
| 580 inlined_frame_index, | 581 inlined_frame_index, |
| 581 inlined_function->shared()->formal_parameter_count()); | 582 inlined_function->shared()->formal_parameter_count()); |
| 582 int args_count = args_slots.length(); | 583 int args_count = args_slots.length(); |
| 583 Handle<JSObject> arguments = | 584 Handle<JSObject> arguments = |
| 584 factory->NewArgumentsObject(inlined_function, args_count); | 585 factory->NewArgumentsObject(inlined_function, args_count); |
| 585 Handle<FixedArray> array = factory->NewFixedArray(args_count); | 586 Handle<FixedArray> array = factory->NewFixedArray(args_count); |
| 586 for (int i = 0; i < args_count; ++i) { | 587 for (int i = 0; i < args_count; ++i) { |
| 587 Handle<Object> value = args_slots[i].GetValue(); | 588 Handle<Object> value = args_slots[i].GetValue(isolate); |
| 588 array->set(i, *value); | 589 array->set(i, *value); |
| 589 } | 590 } |
| 590 arguments->set_elements(*array); | 591 arguments->set_elements(*array); |
| 591 args_slots.Dispose(); | 592 args_slots.Dispose(); |
| 592 | 593 |
| 593 // Return the freshly allocated arguments object. | 594 // Return the freshly allocated arguments object. |
| 594 return *arguments; | 595 return *arguments; |
| 595 } | 596 } |
| 596 | 597 |
| 597 | 598 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 800 Object* value_raw, | 801 Object* value_raw, |
| 801 void*) { | 802 void*) { |
| 802 const bool kSkipHiddenPrototypes = true; | 803 const bool kSkipHiddenPrototypes = true; |
| 803 // To be consistent with other Set functions, return the value. | 804 // To be consistent with other Set functions, return the value. |
| 804 if (!(FLAG_harmony_observation && receiver_raw->map()->is_observed())) | 805 if (!(FLAG_harmony_observation && receiver_raw->map()->is_observed())) |
| 805 return receiver_raw->SetPrototype(value_raw, kSkipHiddenPrototypes); | 806 return receiver_raw->SetPrototype(value_raw, kSkipHiddenPrototypes); |
| 806 | 807 |
| 807 Isolate* isolate = receiver_raw->GetIsolate(); | 808 Isolate* isolate = receiver_raw->GetIsolate(); |
| 808 HandleScope scope(isolate); | 809 HandleScope scope(isolate); |
| 809 Handle<JSObject> receiver(receiver_raw); | 810 Handle<JSObject> receiver(receiver_raw); |
| 810 Handle<Object> value(value_raw); | 811 Handle<Object> value(value_raw, isolate); |
| 811 Handle<Object> old_value(GetPrototypeSkipHiddenPrototypes(*receiver)); | 812 Handle<Object> old_value(GetPrototypeSkipHiddenPrototypes(*receiver), |
| 813 isolate); |
| 812 | 814 |
| 813 MaybeObject* result = receiver->SetPrototype(*value, kSkipHiddenPrototypes); | 815 MaybeObject* result = receiver->SetPrototype(*value, kSkipHiddenPrototypes); |
| 814 Handle<Object> hresult; | 816 Handle<Object> hresult; |
| 815 if (!result->ToHandle(&hresult, isolate)) return result; | 817 if (!result->ToHandle(&hresult, isolate)) return result; |
| 816 | 818 |
| 817 Handle<Object> new_value(GetPrototypeSkipHiddenPrototypes(*receiver)); | 819 Handle<Object> new_value(GetPrototypeSkipHiddenPrototypes(*receiver), |
| 820 isolate); |
| 818 if (!new_value->SameValue(*old_value)) { | 821 if (!new_value->SameValue(*old_value)) { |
| 819 JSObject::EnqueueChangeRecord(receiver, "prototype", | 822 JSObject::EnqueueChangeRecord(receiver, "prototype", |
| 820 isolate->factory()->Proto_symbol(), | 823 isolate->factory()->Proto_symbol(), |
| 821 old_value); | 824 old_value); |
| 822 } | 825 } |
| 823 return *hresult; | 826 return *hresult; |
| 824 } | 827 } |
| 825 | 828 |
| 826 | 829 |
| 827 const AccessorDescriptor Accessors::ObjectPrototype = { | 830 const AccessorDescriptor Accessors::ObjectPrototype = { |
| 828 ObjectGetPrototype, | 831 ObjectGetPrototype, |
| 829 ObjectSetPrototype, | 832 ObjectSetPrototype, |
| 830 0 | 833 0 |
| 831 }; | 834 }; |
| 832 | 835 |
| 833 | 836 |
| 834 // | 837 // |
| 835 // Accessors::MakeModuleExport | 838 // Accessors::MakeModuleExport |
| 836 // | 839 // |
| 837 | 840 |
| 838 static v8::Handle<v8::Value> ModuleGetExport( | 841 static v8::Handle<v8::Value> ModuleGetExport( |
| 839 v8::Local<v8::String> property, | 842 v8::Local<v8::String> property, |
| 840 const v8::AccessorInfo& info) { | 843 const v8::AccessorInfo& info) { |
| 841 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 844 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); |
| 842 Context* context = Context::cast(instance->context()); | 845 Context* context = Context::cast(instance->context()); |
| 843 ASSERT(context->IsModuleContext()); | 846 ASSERT(context->IsModuleContext()); |
| 844 int slot = info.Data()->Int32Value(); | 847 int slot = info.Data()->Int32Value(); |
| 845 Object* value = context->get(slot); | 848 Object* value = context->get(slot); |
| 849 Isolate* isolate = instance->GetIsolate(); |
| 846 if (value->IsTheHole()) { | 850 if (value->IsTheHole()) { |
| 847 Handle<String> name = v8::Utils::OpenHandle(*property); | 851 Handle<String> name = v8::Utils::OpenHandle(*property); |
| 848 Isolate* isolate = instance->GetIsolate(); | |
| 849 isolate->ScheduleThrow( | 852 isolate->ScheduleThrow( |
| 850 *isolate->factory()->NewReferenceError("not_defined", | 853 *isolate->factory()->NewReferenceError("not_defined", |
| 851 HandleVector(&name, 1))); | 854 HandleVector(&name, 1))); |
| 852 return v8::Handle<v8::Value>(); | 855 return v8::Handle<v8::Value>(); |
| 853 } | 856 } |
| 854 return v8::Utils::ToLocal(Handle<Object>(value)); | 857 return v8::Utils::ToLocal(Handle<Object>(value, isolate)); |
| 855 } | 858 } |
| 856 | 859 |
| 857 | 860 |
| 858 static void ModuleSetExport( | 861 static void ModuleSetExport( |
| 859 v8::Local<v8::String> property, | 862 v8::Local<v8::String> property, |
| 860 v8::Local<v8::Value> value, | 863 v8::Local<v8::Value> value, |
| 861 const v8::AccessorInfo& info) { | 864 const v8::AccessorInfo& info) { |
| 862 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 865 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); |
| 863 Context* context = Context::cast(instance->context()); | 866 Context* context = Context::cast(instance->context()); |
| 864 ASSERT(context->IsModuleContext()); | 867 ASSERT(context->IsModuleContext()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 889 info->set_data(Smi::FromInt(index)); | 892 info->set_data(Smi::FromInt(index)); |
| 890 Handle<Object> getter = v8::FromCData(&ModuleGetExport); | 893 Handle<Object> getter = v8::FromCData(&ModuleGetExport); |
| 891 Handle<Object> setter = v8::FromCData(&ModuleSetExport); | 894 Handle<Object> setter = v8::FromCData(&ModuleSetExport); |
| 892 info->set_getter(*getter); | 895 info->set_getter(*getter); |
| 893 if (!(attributes & ReadOnly)) info->set_setter(*setter); | 896 if (!(attributes & ReadOnly)) info->set_setter(*setter); |
| 894 return info; | 897 return info; |
| 895 } | 898 } |
| 896 | 899 |
| 897 | 900 |
| 898 } } // namespace v8::internal | 901 } } // namespace v8::internal |
| OLD | NEW |