OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 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 "src/factory.h" | 5 #include "src/factory.h" |
6 | 6 |
7 #include "src/allocation-site-scopes.h" | 7 #include "src/allocation-site-scopes.h" |
8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 symbol->set_is_private(true); | 719 symbol->set_is_private(true); |
720 return symbol; | 720 return symbol; |
721 } | 721 } |
722 | 722 |
723 | 723 |
724 Handle<Context> Factory::NewNativeContext() { | 724 Handle<Context> Factory::NewNativeContext() { |
725 Handle<FixedArray> array = | 725 Handle<FixedArray> array = |
726 NewFixedArray(Context::NATIVE_CONTEXT_SLOTS, TENURED); | 726 NewFixedArray(Context::NATIVE_CONTEXT_SLOTS, TENURED); |
727 array->set_map_no_write_barrier(*native_context_map()); | 727 array->set_map_no_write_barrier(*native_context_map()); |
728 Handle<Context> context = Handle<Context>::cast(array); | 728 Handle<Context> context = Handle<Context>::cast(array); |
729 context->set_native_context(*context); | |
730 context->set_js_array_maps(*undefined_value()); | 729 context->set_js_array_maps(*undefined_value()); |
731 context->set_errors_thrown(Smi::FromInt(0)); | 730 context->set_errors_thrown(Smi::FromInt(0)); |
732 DCHECK(context->IsNativeContext()); | 731 DCHECK(context->IsNativeContext()); |
733 return context; | 732 return context; |
734 } | 733 } |
735 | 734 |
736 | 735 |
737 Handle<Context> Factory::NewScriptContext(Handle<JSFunction> function, | 736 Handle<Context> Factory::NewScriptContext(Handle<JSFunction> function, |
738 Handle<ScopeInfo> scope_info) { | 737 Handle<ScopeInfo> scope_info) { |
739 Handle<FixedArray> array = | 738 Handle<FixedArray> array = |
740 NewFixedArray(scope_info->ContextLength(), TENURED); | 739 NewFixedArray(scope_info->ContextLength(), TENURED); |
741 array->set_map_no_write_barrier(*script_context_map()); | 740 array->set_map_no_write_barrier(*script_context_map()); |
742 Handle<Context> context = Handle<Context>::cast(array); | 741 Handle<Context> context = Handle<Context>::cast(array); |
743 context->set_closure(*function); | 742 context->set_closure(*function); |
744 context->set_previous(function->context()); | 743 context->set_previous(function->context()); |
745 context->set_extension(*scope_info); | 744 context->set_extension(*scope_info); |
746 context->set_native_context(function->native_context()); | 745 context->set_global_object(function->context()->global_object()); |
747 DCHECK(context->IsScriptContext()); | 746 DCHECK(context->IsScriptContext()); |
748 return context; | 747 return context; |
749 } | 748 } |
750 | 749 |
751 | 750 |
752 Handle<ScriptContextTable> Factory::NewScriptContextTable() { | 751 Handle<ScriptContextTable> Factory::NewScriptContextTable() { |
753 Handle<FixedArray> array = NewFixedArray(1); | 752 Handle<FixedArray> array = NewFixedArray(1); |
754 array->set_map_no_write_barrier(*script_context_table_map()); | 753 array->set_map_no_write_barrier(*script_context_table_map()); |
755 Handle<ScriptContextTable> context_table = | 754 Handle<ScriptContextTable> context_table = |
756 Handle<ScriptContextTable>::cast(array); | 755 Handle<ScriptContextTable>::cast(array); |
(...skipping 15 matching lines...) Expand all Loading... |
772 | 771 |
773 Handle<Context> Factory::NewFunctionContext(int length, | 772 Handle<Context> Factory::NewFunctionContext(int length, |
774 Handle<JSFunction> function) { | 773 Handle<JSFunction> function) { |
775 DCHECK(length >= Context::MIN_CONTEXT_SLOTS); | 774 DCHECK(length >= Context::MIN_CONTEXT_SLOTS); |
776 Handle<FixedArray> array = NewFixedArray(length); | 775 Handle<FixedArray> array = NewFixedArray(length); |
777 array->set_map_no_write_barrier(*function_context_map()); | 776 array->set_map_no_write_barrier(*function_context_map()); |
778 Handle<Context> context = Handle<Context>::cast(array); | 777 Handle<Context> context = Handle<Context>::cast(array); |
779 context->set_closure(*function); | 778 context->set_closure(*function); |
780 context->set_previous(function->context()); | 779 context->set_previous(function->context()); |
781 context->set_extension(Smi::FromInt(0)); | 780 context->set_extension(Smi::FromInt(0)); |
782 context->set_native_context(function->native_context()); | 781 context->set_global_object(function->context()->global_object()); |
783 return context; | 782 return context; |
784 } | 783 } |
785 | 784 |
786 | 785 |
787 Handle<Context> Factory::NewCatchContext(Handle<JSFunction> function, | 786 Handle<Context> Factory::NewCatchContext(Handle<JSFunction> function, |
788 Handle<Context> previous, | 787 Handle<Context> previous, |
789 Handle<String> name, | 788 Handle<String> name, |
790 Handle<Object> thrown_object) { | 789 Handle<Object> thrown_object) { |
791 STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == Context::THROWN_OBJECT_INDEX); | 790 STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == Context::THROWN_OBJECT_INDEX); |
792 Handle<FixedArray> array = NewFixedArray(Context::MIN_CONTEXT_SLOTS + 1); | 791 Handle<FixedArray> array = NewFixedArray(Context::MIN_CONTEXT_SLOTS + 1); |
793 array->set_map_no_write_barrier(*catch_context_map()); | 792 array->set_map_no_write_barrier(*catch_context_map()); |
794 Handle<Context> context = Handle<Context>::cast(array); | 793 Handle<Context> context = Handle<Context>::cast(array); |
795 context->set_closure(*function); | 794 context->set_closure(*function); |
796 context->set_previous(*previous); | 795 context->set_previous(*previous); |
797 context->set_extension(*name); | 796 context->set_extension(*name); |
798 context->set_native_context(previous->native_context()); | 797 context->set_global_object(previous->global_object()); |
799 context->set(Context::THROWN_OBJECT_INDEX, *thrown_object); | 798 context->set(Context::THROWN_OBJECT_INDEX, *thrown_object); |
800 return context; | 799 return context; |
801 } | 800 } |
802 | 801 |
803 | 802 |
804 Handle<Context> Factory::NewWithContext(Handle<JSFunction> function, | 803 Handle<Context> Factory::NewWithContext(Handle<JSFunction> function, |
805 Handle<Context> previous, | 804 Handle<Context> previous, |
806 Handle<JSReceiver> extension) { | 805 Handle<JSReceiver> extension) { |
807 Handle<FixedArray> array = NewFixedArray(Context::MIN_CONTEXT_SLOTS); | 806 Handle<FixedArray> array = NewFixedArray(Context::MIN_CONTEXT_SLOTS); |
808 array->set_map_no_write_barrier(*with_context_map()); | 807 array->set_map_no_write_barrier(*with_context_map()); |
809 Handle<Context> context = Handle<Context>::cast(array); | 808 Handle<Context> context = Handle<Context>::cast(array); |
810 context->set_closure(*function); | 809 context->set_closure(*function); |
811 context->set_previous(*previous); | 810 context->set_previous(*previous); |
812 context->set_extension(*extension); | 811 context->set_extension(*extension); |
813 context->set_native_context(previous->native_context()); | 812 context->set_global_object(previous->global_object()); |
814 return context; | 813 return context; |
815 } | 814 } |
816 | 815 |
817 | 816 |
818 Handle<Context> Factory::NewBlockContext(Handle<JSFunction> function, | 817 Handle<Context> Factory::NewBlockContext(Handle<JSFunction> function, |
819 Handle<Context> previous, | 818 Handle<Context> previous, |
820 Handle<ScopeInfo> scope_info) { | 819 Handle<ScopeInfo> scope_info) { |
821 Handle<FixedArray> array = | 820 Handle<FixedArray> array = |
822 NewFixedArrayWithHoles(scope_info->ContextLength()); | 821 NewFixedArrayWithHoles(scope_info->ContextLength()); |
823 array->set_map_no_write_barrier(*block_context_map()); | 822 array->set_map_no_write_barrier(*block_context_map()); |
824 Handle<Context> context = Handle<Context>::cast(array); | 823 Handle<Context> context = Handle<Context>::cast(array); |
825 context->set_closure(*function); | 824 context->set_closure(*function); |
826 context->set_previous(*previous); | 825 context->set_previous(*previous); |
827 context->set_extension(*scope_info); | 826 context->set_extension(*scope_info); |
828 context->set_native_context(previous->native_context()); | 827 context->set_global_object(previous->global_object()); |
829 return context; | 828 return context; |
830 } | 829 } |
831 | 830 |
832 | 831 |
833 Handle<Struct> Factory::NewStruct(InstanceType type) { | 832 Handle<Struct> Factory::NewStruct(InstanceType type) { |
834 CALL_HEAP_FUNCTION( | 833 CALL_HEAP_FUNCTION( |
835 isolate(), | 834 isolate(), |
836 isolate()->heap()->AllocateStruct(type), | 835 isolate()->heap()->AllocateStruct(type), |
837 Struct); | 836 Struct); |
838 } | 837 } |
(...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2327 } | 2326 } |
2328 | 2327 |
2329 | 2328 |
2330 Handle<Object> Factory::ToBoolean(bool value) { | 2329 Handle<Object> Factory::ToBoolean(bool value) { |
2331 return value ? true_value() : false_value(); | 2330 return value ? true_value() : false_value(); |
2332 } | 2331 } |
2333 | 2332 |
2334 | 2333 |
2335 } // namespace internal | 2334 } // namespace internal |
2336 } // namespace v8 | 2335 } // namespace v8 |
OLD | NEW |