OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 // TODO(rmcilroy): Remove this define after this flag is turned on globally | 5 // TODO(rmcilroy): Remove this define after this flag is turned on globally |
6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/compiler.h" | 10 #include "src/compiler.h" |
(...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1597 B(LdaSmi8), U8(2), // | 1597 B(LdaSmi8), U8(2), // |
1598 B(Star), R(1), // | 1598 B(Star), R(1), // |
1599 B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2), // | 1599 B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2), // |
1600 B(Return) // | 1600 B(Return) // |
1601 }, | 1601 }, |
1602 }, | 1602 }, |
1603 { | 1603 { |
1604 "function f() { return %spread_iterable([1]) }\nf()", | 1604 "function f() { return %spread_iterable([1]) }\nf()", |
1605 2 * kPointerSize, | 1605 2 * kPointerSize, |
1606 1, | 1606 1, |
1607 16, | 1607 15, |
1608 { | 1608 { |
1609 B(LdaUndefined), // | 1609 B(LdaUndefined), // |
1610 B(Star), R(0), // | 1610 B(Star), R(0), // |
1611 B(LdaConstant), U8(0), // | 1611 B(CreateArrayLiteral), U8(0), U8(0), U8(3), // |
1612 B(CreateArrayLiteral), U8(0), U8(3), // | |
1613 B(Star), R(1), // | 1612 B(Star), R(1), // |
1614 B(CallJSRuntime), U16(Context::SPREAD_ITERABLE_INDEX), R(0), // | 1613 B(CallJSRuntime), U16(Context::SPREAD_ITERABLE_INDEX), R(0), // |
1615 U8(1), // | 1614 U8(1), // |
1616 B(Return), // | 1615 B(Return), // |
1617 }, | 1616 }, |
1618 1, | 1617 1, |
1619 {InstanceType::FIXED_ARRAY_TYPE}, | 1618 {InstanceType::FIXED_ARRAY_TYPE}, |
1620 }, | 1619 }, |
1621 }; | 1620 }; |
1622 | 1621 |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2600 | 2599 |
2601 int deep_elements_flags = | 2600 int deep_elements_flags = |
2602 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 2601 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
2603 int closure = Register::function_closure().index(); | 2602 int closure = Register::function_closure().index(); |
2604 int first_context_slot = Context::MIN_CONTEXT_SLOTS; | 2603 int first_context_slot = Context::MIN_CONTEXT_SLOTS; |
2605 | 2604 |
2606 ExpectedSnippet<InstanceType> snippets[] = { | 2605 ExpectedSnippet<InstanceType> snippets[] = { |
2607 {"var a = {x:13, y:14}; return delete a.x;", | 2606 {"var a = {x:13, y:14}; return delete a.x;", |
2608 1 * kPointerSize, | 2607 1 * kPointerSize, |
2609 1, | 2608 1, |
2610 12, | 2609 11, |
2611 { | 2610 { |
2612 B(LdaConstant), U8(0), // | 2611 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
2613 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 2612 B(Star), R(0), // |
2614 B(Star), R(0), // | 2613 B(LdaConstant), U8(1), // |
2615 B(LdaConstant), U8(1), // | 2614 B(DeletePropertySloppy), R(0), // |
2616 B(DeletePropertySloppy), R(0), // | |
2617 B(Return) | 2615 B(Return) |
2618 }, | 2616 }, |
2619 2, | 2617 2, |
2620 {InstanceType::FIXED_ARRAY_TYPE, | 2618 {InstanceType::FIXED_ARRAY_TYPE, |
2621 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 2619 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
2622 {"'use strict'; var a = {x:13, y:14}; return delete a.x;", | 2620 {"'use strict'; var a = {x:13, y:14}; return delete a.x;", |
2623 1 * kPointerSize, | 2621 1 * kPointerSize, |
2624 1, | 2622 1, |
2625 12, | 2623 11, |
2626 { | 2624 { |
2627 B(LdaConstant), U8(0), // | 2625 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
2628 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 2626 B(Star), R(0), // |
2629 B(Star), R(0), // | 2627 B(LdaConstant), U8(1), // |
2630 B(LdaConstant), U8(1), // | 2628 B(DeletePropertyStrict), R(0), // |
2631 B(DeletePropertyStrict), R(0), // | |
2632 B(Return) | 2629 B(Return) |
2633 }, | 2630 }, |
2634 2, | 2631 2, |
2635 {InstanceType::FIXED_ARRAY_TYPE, | 2632 {InstanceType::FIXED_ARRAY_TYPE, |
2636 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 2633 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
2637 {"var a = {1:13, 2:14}; return delete a[2];", | 2634 {"var a = {1:13, 2:14}; return delete a[2];", |
2638 1 * kPointerSize, | 2635 1 * kPointerSize, |
2639 1, | 2636 1, |
2640 12, | 2637 11, |
2641 { | 2638 { |
2642 B(LdaConstant), U8(0), // | 2639 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
2643 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 2640 B(Star), R(0), // |
2644 B(Star), R(0), // | 2641 B(LdaSmi8), U8(2), // |
2645 B(LdaSmi8), U8(2), // | 2642 B(DeletePropertySloppy), R(0), // |
2646 B(DeletePropertySloppy), R(0), // | |
2647 B(Return) | 2643 B(Return) |
2648 }, | 2644 }, |
2649 1, | 2645 1, |
2650 {InstanceType::FIXED_ARRAY_TYPE}}, | 2646 {InstanceType::FIXED_ARRAY_TYPE}}, |
2651 {"var a = 10; return delete a;", | 2647 {"var a = 10; return delete a;", |
2652 1 * kPointerSize, | 2648 1 * kPointerSize, |
2653 1, | 2649 1, |
2654 6, | 2650 6, |
2655 { | 2651 { |
2656 B(LdaSmi8), U8(10), // | 2652 B(LdaSmi8), U8(10), // |
2657 B(Star), R(0), // | 2653 B(Star), R(0), // |
2658 B(LdaFalse), // | 2654 B(LdaFalse), // |
2659 B(Return) | 2655 B(Return) |
2660 }, | 2656 }, |
2661 0}, | 2657 0}, |
2662 {"'use strict';" | 2658 {"'use strict';" |
2663 "var a = {1:10};" | 2659 "var a = {1:10};" |
2664 "(function f1() {return a;});" | 2660 "(function f1() {return a;});" |
2665 "return delete a[1];", | 2661 "return delete a[1];", |
2666 2 * kPointerSize, | 2662 2 * kPointerSize, |
2667 1, | 2663 1, |
2668 28, | 2664 27, |
2669 { | 2665 { |
2670 B(CallRuntime), U16(Runtime::kNewFunctionContext), // | 2666 B(CallRuntime), U16(Runtime::kNewFunctionContext), // |
2671 R(closure), U8(1), // | 2667 R(closure), U8(1), // |
2672 B(PushContext), R(0), // | 2668 B(PushContext), R(0), // |
2673 B(LdaConstant), U8(0), // | 2669 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
2674 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 2670 B(StaContextSlot), R(0), U8(first_context_slot), // |
2675 B(StaContextSlot), R(0), U8(first_context_slot), // | 2671 B(CreateClosure), U8(1), U8(0), // |
2676 B(CreateClosure), U8(1), U8(0), // | 2672 B(LdaContextSlot), R(0), U8(first_context_slot), // |
2677 B(LdaContextSlot), R(0), U8(first_context_slot), // | 2673 B(Star), R(1), // |
2678 B(Star), R(1), // | 2674 B(LdaSmi8), U8(1), // |
2679 B(LdaSmi8), U8(1), // | 2675 B(DeletePropertyStrict), R(1), // |
2680 B(DeletePropertyStrict), R(1), // | |
2681 B(Return) | 2676 B(Return) |
2682 }, | 2677 }, |
2683 2, | 2678 2, |
2684 {InstanceType::FIXED_ARRAY_TYPE, | 2679 {InstanceType::FIXED_ARRAY_TYPE, |
2685 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 2680 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
2686 {"return delete 'test';", | 2681 {"return delete 'test';", |
2687 0 * kPointerSize, | 2682 0 * kPointerSize, |
2688 1, | 2683 1, |
2689 2, | 2684 2, |
2690 { | 2685 { |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2848 FeedbackVectorSlot slot2 = feedback_spec.AddLoadICSlot(); | 2843 FeedbackVectorSlot slot2 = feedback_spec.AddLoadICSlot(); |
2849 uint8_t i_flags = JSRegExp::kIgnoreCase; | 2844 uint8_t i_flags = JSRegExp::kIgnoreCase; |
2850 | 2845 |
2851 Handle<i::TypeFeedbackVector> vector = | 2846 Handle<i::TypeFeedbackVector> vector = |
2852 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 2847 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
2853 | 2848 |
2854 ExpectedSnippet<const char*> snippets[] = { | 2849 ExpectedSnippet<const char*> snippets[] = { |
2855 {"return /ab+d/;", | 2850 {"return /ab+d/;", |
2856 0 * kPointerSize, | 2851 0 * kPointerSize, |
2857 1, | 2852 1, |
2858 6, | 2853 5, |
2859 { | 2854 { |
2860 B(LdaConstant), U8(0), // | 2855 B(CreateRegExpLiteral), U8(0), U8(0), U8(0), // |
2861 B(CreateRegExpLiteral), U8(0), U8(0), // | 2856 B(Return), // |
2862 B(Return), // | |
2863 }, | 2857 }, |
2864 1, | 2858 1, |
2865 {"ab+d"}}, | 2859 {"ab+d"}}, |
2866 {"return /(\\w+)\\s(\\w+)/i;", | 2860 {"return /(\\w+)\\s(\\w+)/i;", |
2867 0 * kPointerSize, | 2861 0 * kPointerSize, |
2868 1, | 2862 1, |
2869 6, | 2863 5, |
2870 { | 2864 { |
2871 B(LdaConstant), U8(0), // | 2865 B(CreateRegExpLiteral), U8(0), U8(0), U8(i_flags), // |
2872 B(CreateRegExpLiteral), U8(0), U8(i_flags), // | 2866 B(Return), // |
2873 B(Return), // | |
2874 }, | 2867 }, |
2875 1, | 2868 1, |
2876 {"(\\w+)\\s(\\w+)"}}, | 2869 {"(\\w+)\\s(\\w+)"}}, |
2877 {"return /ab+d/.exec('abdd');", | 2870 {"return /ab+d/.exec('abdd');", |
2878 3 * kPointerSize, | 2871 3 * kPointerSize, |
2879 1, | 2872 1, |
2880 23, | 2873 22, |
2881 { | 2874 { |
2882 B(LdaConstant), U8(0), // | 2875 B(CreateRegExpLiteral), U8(0), U8(0), U8(0), // |
2883 B(CreateRegExpLiteral), U8(0), U8(0), // | |
2884 B(Star), R(1), // | 2876 B(Star), R(1), // |
2885 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // | 2877 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // |
2886 B(Star), R(0), // | 2878 B(Star), R(0), // |
2887 B(LdaConstant), U8(2), // | 2879 B(LdaConstant), U8(2), // |
2888 B(Star), R(2), // | 2880 B(Star), R(2), // |
2889 B(Call), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 2881 B(Call), R(0), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
2890 B(Return), // | 2882 B(Return), // |
2891 }, | 2883 }, |
2892 3, | 2884 3, |
2893 {"ab+d", "exec", "abdd"}}, | 2885 {"ab+d", "exec", "abdd"}}, |
2894 }; | 2886 }; |
2895 | 2887 |
2896 for (size_t i = 0; i < arraysize(snippets); i++) { | 2888 for (size_t i = 0; i < arraysize(snippets); i++) { |
2897 Handle<BytecodeArray> bytecode_array = | 2889 Handle<BytecodeArray> bytecode_array = |
2898 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 2890 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
2899 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 2891 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
2900 } | 2892 } |
2901 } | 2893 } |
2902 | 2894 |
2903 | 2895 |
| 2896 TEST(RegExpLiteralsWide) { |
| 2897 InitializedHandleScope handle_scope; |
| 2898 BytecodeGeneratorHelper helper; |
| 2899 Zone zone; |
| 2900 |
| 2901 int wide_idx = 0; |
| 2902 |
| 2903 ExpectedSnippet<InstanceType, 257> snippets[] = { |
| 2904 {"var a;" REPEAT_256(SPACE, "a = 1.23;") "return /ab+d/;", |
| 2905 1 * kPointerSize, |
| 2906 1, |
| 2907 1031, |
| 2908 { |
| 2909 REPEAT_256(COMMA, // |
| 2910 B(LdaConstant), U8(wide_idx++), // |
| 2911 B(Star), R(0)), // |
| 2912 B(CreateRegExpLiteralWide), U16(256), U16(0), U8(0), // |
| 2913 B(Return) // |
| 2914 }, |
| 2915 257, |
| 2916 {REPEAT_256(COMMA, InstanceType::HEAP_NUMBER_TYPE), |
| 2917 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 2918 }; |
| 2919 |
| 2920 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 2921 Handle<BytecodeArray> bytecode_array = |
| 2922 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 2923 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 2924 } |
| 2925 } |
| 2926 |
| 2927 |
2904 TEST(ArrayLiterals) { | 2928 TEST(ArrayLiterals) { |
2905 InitializedHandleScope handle_scope; | 2929 InitializedHandleScope handle_scope; |
2906 BytecodeGeneratorHelper helper; | 2930 BytecodeGeneratorHelper helper; |
2907 Zone zone; | 2931 Zone zone; |
2908 | 2932 |
2909 FeedbackVectorSpec feedback_spec(&zone); | 2933 FeedbackVectorSpec feedback_spec(&zone); |
2910 FeedbackVectorSlot slot1 = feedback_spec.AddKeyedStoreICSlot(); | 2934 FeedbackVectorSlot slot1 = feedback_spec.AddKeyedStoreICSlot(); |
2911 FeedbackVectorSlot slot2 = feedback_spec.AddKeyedStoreICSlot(); | 2935 FeedbackVectorSlot slot2 = feedback_spec.AddKeyedStoreICSlot(); |
2912 FeedbackVectorSlot slot3 = feedback_spec.AddKeyedStoreICSlot(); | 2936 FeedbackVectorSlot slot3 = feedback_spec.AddKeyedStoreICSlot(); |
2913 | 2937 |
2914 Handle<i::TypeFeedbackVector> vector = | 2938 Handle<i::TypeFeedbackVector> vector = |
2915 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 2939 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
2916 | 2940 |
2917 int simple_flags = | 2941 int simple_flags = |
2918 ArrayLiteral::kDisableMementos | ArrayLiteral::kShallowElements; | 2942 ArrayLiteral::kDisableMementos | ArrayLiteral::kShallowElements; |
2919 int deep_elements_flags = ArrayLiteral::kDisableMementos; | 2943 int deep_elements_flags = ArrayLiteral::kDisableMementos; |
2920 ExpectedSnippet<InstanceType> snippets[] = { | 2944 ExpectedSnippet<InstanceType> snippets[] = { |
2921 {"return [ 1, 2 ];", | 2945 {"return [ 1, 2 ];", |
2922 0, | 2946 0, |
2923 1, | 2947 1, |
2924 6, | 2948 5, |
2925 { | 2949 { |
2926 B(LdaConstant), U8(0), // | 2950 B(CreateArrayLiteral), U8(0), U8(0), U8(simple_flags), // |
2927 B(CreateArrayLiteral), U8(0), U8(simple_flags), // | 2951 B(Return) // |
2928 B(Return) // | |
2929 }, | 2952 }, |
2930 1, | 2953 1, |
2931 {InstanceType::FIXED_ARRAY_TYPE}}, | 2954 {InstanceType::FIXED_ARRAY_TYPE}}, |
2932 {"var a = 1; return [ a, a + 1 ];", | 2955 {"var a = 1; return [ a, a + 1 ];", |
2933 3 * kPointerSize, | 2956 3 * kPointerSize, |
2934 1, | 2957 1, |
2935 35, | 2958 34, |
2936 { | 2959 { |
2937 B(LdaSmi8), U8(1), // | 2960 B(LdaSmi8), U8(1), // |
2938 B(Star), R(0), // | 2961 B(Star), R(0), // |
2939 B(LdaConstant), U8(0), // | 2962 B(CreateArrayLiteral), U8(0), U8(0), U8(3), // |
2940 B(CreateArrayLiteral), U8(0), U8(3), // | |
2941 B(Star), R(2), // | 2963 B(Star), R(2), // |
2942 B(LdaZero), // | 2964 B(LdaZero), // |
2943 B(Star), R(1), // | 2965 B(Star), R(1), // |
2944 B(Ldar), R(0), // | 2966 B(Ldar), R(0), // |
2945 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // | 2967 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // |
2946 B(LdaSmi8), U8(1), // | 2968 B(LdaSmi8), U8(1), // |
2947 B(Star), R(1), // | 2969 B(Star), R(1), // |
2948 B(LdaSmi8), U8(1), // | 2970 B(LdaSmi8), U8(1), // |
2949 B(Add), R(0), // | 2971 B(Add), R(0), // |
2950 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // | 2972 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot1)), // |
2951 B(Ldar), R(2), // | 2973 B(Ldar), R(2), // |
2952 B(Return), // | 2974 B(Return), // |
2953 }, | 2975 }, |
2954 1, | 2976 1, |
2955 {InstanceType::FIXED_ARRAY_TYPE}}, | 2977 {InstanceType::FIXED_ARRAY_TYPE}}, |
2956 {"return [ [ 1, 2 ], [ 3 ] ];", | 2978 {"return [ [ 1, 2 ], [ 3 ] ];", |
2957 0, | 2979 0, |
2958 1, | 2980 1, |
2959 6, | 2981 5, |
2960 { | 2982 { |
2961 B(LdaConstant), U8(0), // | 2983 B(CreateArrayLiteral), U8(0), U8(2), U8(deep_elements_flags), // |
2962 B(CreateArrayLiteral), U8(2), U8(deep_elements_flags), // | 2984 B(Return) // |
2963 B(Return) // | |
2964 }, | 2985 }, |
2965 1, | 2986 1, |
2966 {InstanceType::FIXED_ARRAY_TYPE}}, | 2987 {InstanceType::FIXED_ARRAY_TYPE}}, |
2967 {"var a = 1; return [ [ a, 2 ], [ a + 2 ] ];", | 2988 {"var a = 1; return [ [ a, 2 ], [ a + 2 ] ];", |
2968 5 * kPointerSize, | 2989 5 * kPointerSize, |
2969 1, | 2990 1, |
2970 67, | 2991 64, |
2971 { | 2992 { |
2972 B(LdaSmi8), U8(1), // | 2993 B(LdaSmi8), U8(1), // |
2973 B(Star), R(0), // | 2994 B(Star), R(0), // |
2974 B(LdaConstant), U8(0), // | 2995 B(CreateArrayLiteral), U8(0), U8(2), U8(deep_elements_flags), // |
2975 B(CreateArrayLiteral), U8(2), U8(deep_elements_flags), // | |
2976 B(Star), R(2), // | 2996 B(Star), R(2), // |
2977 B(LdaZero), // | 2997 B(LdaZero), // |
2978 B(Star), R(1), // | 2998 B(Star), R(1), // |
2979 B(LdaConstant), U8(1), // | 2999 B(CreateArrayLiteral), U8(1), U8(0), U8(simple_flags), // |
2980 B(CreateArrayLiteral), U8(0), U8(simple_flags), // | |
2981 B(Star), R(4), // | 3000 B(Star), R(4), // |
2982 B(LdaZero), // | 3001 B(LdaZero), // |
2983 B(Star), R(3), // | 3002 B(Star), R(3), // |
2984 B(Ldar), R(0), // | 3003 B(Ldar), R(0), // |
2985 B(KeyedStoreICSloppy), R(4), R(3), U8(vector->GetIndex(slot1)), // | 3004 B(KeyedStoreICSloppy), R(4), R(3), U8(vector->GetIndex(slot1)), // |
2986 B(Ldar), R(4), // | 3005 B(Ldar), R(4), // |
2987 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot3)), // | 3006 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot3)), // |
2988 B(LdaSmi8), U8(1), // | 3007 B(LdaSmi8), U8(1), // |
2989 B(Star), R(1), // | 3008 B(Star), R(1), // |
2990 B(LdaConstant), U8(2), // | 3009 B(CreateArrayLiteral), U8(2), U8(1), U8(simple_flags), // |
2991 B(CreateArrayLiteral), U8(1), U8(simple_flags), // | |
2992 B(Star), R(4), // | 3010 B(Star), R(4), // |
2993 B(LdaZero), // | 3011 B(LdaZero), // |
2994 B(Star), R(3), // | 3012 B(Star), R(3), // |
2995 B(LdaSmi8), U8(2), // | 3013 B(LdaSmi8), U8(2), // |
2996 B(Add), R(0), // | 3014 B(Add), R(0), // |
2997 B(KeyedStoreICSloppy), R(4), R(3), U8(vector->GetIndex(slot2)), // | 3015 B(KeyedStoreICSloppy), R(4), R(3), U8(vector->GetIndex(slot2)), // |
2998 B(Ldar), R(4), // | 3016 B(Ldar), R(4), // |
2999 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot3)), // | 3017 B(KeyedStoreICSloppy), R(2), R(1), U8(vector->GetIndex(slot3)), // |
3000 B(Ldar), R(2), // | 3018 B(Ldar), R(2), // |
3001 B(Return), // | 3019 B(Return), // |
3002 }, | 3020 }, |
3003 3, | 3021 3, |
3004 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, | 3022 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
3005 InstanceType::FIXED_ARRAY_TYPE}}, | 3023 InstanceType::FIXED_ARRAY_TYPE}}, |
3006 }; | 3024 }; |
3007 | 3025 |
3008 for (size_t i = 0; i < arraysize(snippets); i++) { | 3026 for (size_t i = 0; i < arraysize(snippets); i++) { |
3009 Handle<BytecodeArray> bytecode_array = | 3027 Handle<BytecodeArray> bytecode_array = |
3010 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3028 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3011 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3029 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3012 } | 3030 } |
3013 } | 3031 } |
3014 | 3032 |
3015 | 3033 |
| 3034 TEST(ArrayLiteralsWide) { |
| 3035 InitializedHandleScope handle_scope; |
| 3036 BytecodeGeneratorHelper helper; |
| 3037 Zone zone; |
| 3038 |
| 3039 int wide_idx = 0; |
| 3040 int simple_flags = |
| 3041 ArrayLiteral::kDisableMementos | ArrayLiteral::kShallowElements; |
| 3042 |
| 3043 ExpectedSnippet<InstanceType, 257> snippets[] = { |
| 3044 {"var a;" REPEAT_256(SPACE, "a = 1.23;") "return [ 1 , 2 ];", |
| 3045 1 * kPointerSize, |
| 3046 1, |
| 3047 1031, |
| 3048 { |
| 3049 REPEAT_256(COMMA, // |
| 3050 B(LdaConstant), U8(wide_idx++), // |
| 3051 B(Star), R(0)), // |
| 3052 B(CreateArrayLiteralWide), U16(256), U16(0), U8(simple_flags), // |
| 3053 B(Return) // |
| 3054 }, |
| 3055 257, |
| 3056 {REPEAT_256(COMMA, InstanceType::HEAP_NUMBER_TYPE), |
| 3057 InstanceType::FIXED_ARRAY_TYPE}}, |
| 3058 }; |
| 3059 |
| 3060 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 3061 Handle<BytecodeArray> bytecode_array = |
| 3062 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 3063 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 3064 } |
| 3065 } |
| 3066 |
| 3067 |
3016 TEST(ObjectLiterals) { | 3068 TEST(ObjectLiterals) { |
3017 InitializedHandleScope handle_scope; | 3069 InitializedHandleScope handle_scope; |
3018 BytecodeGeneratorHelper helper; | 3070 BytecodeGeneratorHelper helper; |
3019 Zone zone; | 3071 Zone zone; |
3020 | 3072 |
3021 FeedbackVectorSpec feedback_spec(&zone); | 3073 FeedbackVectorSpec feedback_spec(&zone); |
3022 FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot(); | 3074 FeedbackVectorSlot slot1 = feedback_spec.AddStoreICSlot(); |
3023 | 3075 |
3024 Handle<i::TypeFeedbackVector> vector = | 3076 Handle<i::TypeFeedbackVector> vector = |
3025 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 3077 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
3026 | 3078 |
3027 int simple_flags = ObjectLiteral::kFastElements | | 3079 int simple_flags = ObjectLiteral::kFastElements | |
3028 ObjectLiteral::kShallowProperties | | 3080 ObjectLiteral::kShallowProperties | |
3029 ObjectLiteral::kDisableMementos; | 3081 ObjectLiteral::kDisableMementos; |
3030 int deep_elements_flags = | 3082 int deep_elements_flags = |
3031 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 3083 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
3032 ExpectedSnippet<InstanceType> snippets[] = { | 3084 ExpectedSnippet<InstanceType> snippets[] = { |
3033 {"return { };", | 3085 {"return { };", |
3034 0, | 3086 0, |
3035 1, | 3087 1, |
3036 6, | 3088 5, |
3037 { | 3089 { |
3038 B(LdaConstant), U8(0), // | 3090 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // |
3039 B(CreateObjectLiteral), U8(0), U8(simple_flags), // | 3091 B(Return) // |
3040 B(Return) // | |
3041 }, | 3092 }, |
3042 1, | 3093 1, |
3043 {InstanceType::FIXED_ARRAY_TYPE}}, | 3094 {InstanceType::FIXED_ARRAY_TYPE}}, |
3044 {"return { name: 'string', val: 9.2 };", | 3095 {"return { name: 'string', val: 9.2 };", |
3045 0, | 3096 0, |
3046 1, | 3097 1, |
3047 6, | 3098 5, |
3048 { | 3099 { |
3049 B(LdaConstant), U8(0), // | 3100 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3050 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3101 B(Return) // |
3051 B(Return) // | |
3052 }, | 3102 }, |
3053 1, | 3103 1, |
3054 {InstanceType::FIXED_ARRAY_TYPE}}, | 3104 {InstanceType::FIXED_ARRAY_TYPE}}, |
3055 {"var a = 1; return { name: 'string', val: a };", | 3105 {"var a = 1; return { name: 'string', val: a };", |
3056 2 * kPointerSize, | 3106 2 * kPointerSize, |
3057 1, | 3107 1, |
3058 20, | 3108 19, |
3059 { | 3109 { |
3060 B(LdaSmi8), U8(1), // | 3110 B(LdaSmi8), U8(1), // |
3061 B(Star), R(0), // | 3111 B(Star), R(0), // |
3062 B(LdaConstant), U8(0), // | 3112 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3063 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3113 B(Star), R(1), // |
3064 B(Star), R(1), // | 3114 B(Ldar), R(0), // |
3065 B(Ldar), R(0), // | 3115 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
3066 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 3116 B(Ldar), R(1), // |
3067 B(Ldar), R(1), // | 3117 B(Return), // |
3068 B(Return), // | |
3069 }, | 3118 }, |
3070 2, | 3119 2, |
3071 {InstanceType::FIXED_ARRAY_TYPE, | 3120 {InstanceType::FIXED_ARRAY_TYPE, |
3072 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3121 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3073 {"var a = 1; return { val: a, val: a + 1 };", | 3122 {"var a = 1; return { val: a, val: a + 1 };", |
3074 2 * kPointerSize, | 3123 2 * kPointerSize, |
3075 1, | 3124 1, |
3076 22, | 3125 21, |
3077 { | 3126 { |
3078 B(LdaSmi8), U8(1), // | 3127 B(LdaSmi8), U8(1), // |
3079 B(Star), R(0), // | 3128 B(Star), R(0), // |
3080 B(LdaConstant), U8(0), // | 3129 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3081 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3130 B(Star), R(1), // |
3082 B(Star), R(1), // | 3131 B(LdaSmi8), U8(1), // |
3083 B(LdaSmi8), U8(1), // | 3132 B(Add), R(0), // |
3084 B(Add), R(0), // | 3133 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
3085 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 3134 B(Ldar), R(1), // |
3086 B(Ldar), R(1), // | 3135 B(Return), // |
3087 B(Return), // | |
3088 }, | 3136 }, |
3089 2, | 3137 2, |
3090 {InstanceType::FIXED_ARRAY_TYPE, | 3138 {InstanceType::FIXED_ARRAY_TYPE, |
3091 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3139 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3092 {"return { func: function() { } };", | 3140 {"return { func: function() { } };", |
3093 1 * kPointerSize, | 3141 1 * kPointerSize, |
3094 1, | 3142 1, |
3095 17, | 3143 16, |
3096 { | 3144 { |
3097 B(LdaConstant), U8(0), // | 3145 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3098 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3146 B(Star), R(0), // |
3099 B(Star), R(0), // | 3147 B(CreateClosure), U8(2), U8(0), // |
3100 B(CreateClosure), U8(2), U8(0), // | 3148 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // |
3101 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 3149 B(Ldar), R(0), // |
3102 B(Ldar), R(0), // | 3150 B(Return), // |
3103 B(Return), // | |
3104 }, | 3151 }, |
3105 3, | 3152 3, |
3106 {InstanceType::FIXED_ARRAY_TYPE, | 3153 {InstanceType::FIXED_ARRAY_TYPE, |
3107 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3154 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3108 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3155 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3109 {"return { func(a) { return a; } };", | 3156 {"return { func(a) { return a; } };", |
3110 1 * kPointerSize, | 3157 1 * kPointerSize, |
3111 1, | 3158 1, |
3112 17, | 3159 16, |
3113 { | 3160 { |
3114 B(LdaConstant), U8(0), // | 3161 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3115 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3162 B(Star), R(0), // |
3116 B(Star), R(0), // | 3163 B(CreateClosure), U8(2), U8(0), // |
3117 B(CreateClosure), U8(2), U8(0), // | 3164 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // |
3118 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 3165 B(Ldar), R(0), // |
3119 B(Ldar), R(0), // | 3166 B(Return), // |
3120 B(Return), // | |
3121 }, | 3167 }, |
3122 3, | 3168 3, |
3123 {InstanceType::FIXED_ARRAY_TYPE, | 3169 {InstanceType::FIXED_ARRAY_TYPE, |
3124 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3170 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3125 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3171 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3126 {"return { get a() { return 2; } };", | 3172 {"return { get a() { return 2; } };", |
3127 5 * kPointerSize, | 3173 5 * kPointerSize, |
3128 1, | 3174 1, |
3129 30, | 3175 29, |
3130 { | 3176 { |
3131 B(LdaConstant), U8(0), // | 3177 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3132 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | |
3133 B(Star), R(0), // | 3178 B(Star), R(0), // |
3134 B(LdaConstant), U8(1), // | 3179 B(LdaConstant), U8(1), // |
3135 B(Star), R(1), // | 3180 B(Star), R(1), // |
3136 B(CreateClosure), U8(2), U8(0), // | 3181 B(CreateClosure), U8(2), U8(0), // |
3137 B(Star), R(2), // | 3182 B(Star), R(2), // |
3138 B(LdaNull), // | 3183 B(LdaNull), // |
3139 B(Star), R(3), // | 3184 B(Star), R(3), // |
3140 B(LdaZero), // | 3185 B(LdaZero), // |
3141 B(Star), R(4), // | 3186 B(Star), R(4), // |
3142 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3187 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3143 R(0), U8(5), // | 3188 R(0), U8(5), // |
3144 B(Ldar), R(0), // | 3189 B(Ldar), R(0), // |
3145 B(Return), // | 3190 B(Return), // |
3146 }, | 3191 }, |
3147 3, | 3192 3, |
3148 {InstanceType::FIXED_ARRAY_TYPE, | 3193 {InstanceType::FIXED_ARRAY_TYPE, |
3149 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3194 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3150 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3195 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3151 {"return { get a() { return this.x; }, set a(val) { this.x = val } };", | 3196 {"return { get a() { return this.x; }, set a(val) { this.x = val } };", |
3152 5 * kPointerSize, | 3197 5 * kPointerSize, |
3153 1, | 3198 1, |
3154 32, | 3199 31, |
3155 { | 3200 { |
3156 B(LdaConstant), U8(0), // | 3201 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3157 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | |
3158 B(Star), R(0), // | 3202 B(Star), R(0), // |
3159 B(LdaConstant), U8(1), // | 3203 B(LdaConstant), U8(1), // |
3160 B(Star), R(1), // | 3204 B(Star), R(1), // |
3161 B(CreateClosure), U8(2), U8(0), // | 3205 B(CreateClosure), U8(2), U8(0), // |
3162 B(Star), R(2), // | 3206 B(Star), R(2), // |
3163 B(CreateClosure), U8(3), U8(0), // | 3207 B(CreateClosure), U8(3), U8(0), // |
3164 B(Star), R(3), // | 3208 B(Star), R(3), // |
3165 B(LdaZero), // | 3209 B(LdaZero), // |
3166 B(Star), R(4), // | 3210 B(Star), R(4), // |
3167 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3211 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3168 R(0), U8(5), // | 3212 R(0), U8(5), // |
3169 B(Ldar), R(0), // | 3213 B(Ldar), R(0), // |
3170 B(Return), // | 3214 B(Return), // |
3171 }, | 3215 }, |
3172 4, | 3216 4, |
3173 {InstanceType::FIXED_ARRAY_TYPE, | 3217 {InstanceType::FIXED_ARRAY_TYPE, |
3174 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3218 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3175 InstanceType::SHARED_FUNCTION_INFO_TYPE, | 3219 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
3176 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3220 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3177 {"return { set b(val) { this.y = val } };", | 3221 {"return { set b(val) { this.y = val } };", |
3178 5 * kPointerSize, | 3222 5 * kPointerSize, |
3179 1, | 3223 1, |
3180 30, | 3224 29, |
3181 { | 3225 { |
3182 B(LdaConstant), U8(0), // | 3226 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3183 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | |
3184 B(Star), R(0), // | 3227 B(Star), R(0), // |
3185 B(LdaConstant), U8(1), // | 3228 B(LdaConstant), U8(1), // |
3186 B(Star), R(1), // | 3229 B(Star), R(1), // |
3187 B(LdaNull), // | 3230 B(LdaNull), // |
3188 B(Star), R(2), // | 3231 B(Star), R(2), // |
3189 B(CreateClosure), U8(2), U8(0), // | 3232 B(CreateClosure), U8(2), U8(0), // |
3190 B(Star), R(3), // | 3233 B(Star), R(3), // |
3191 B(LdaZero), // | 3234 B(LdaZero), // |
3192 B(Star), R(4), // | 3235 B(Star), R(4), // |
3193 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3236 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3194 R(0), U8(5), // | 3237 R(0), U8(5), // |
3195 B(Ldar), R(0), // | 3238 B(Ldar), R(0), // |
3196 B(Return), // | 3239 B(Return), // |
3197 }, | 3240 }, |
3198 3, | 3241 3, |
3199 {InstanceType::FIXED_ARRAY_TYPE, | 3242 {InstanceType::FIXED_ARRAY_TYPE, |
3200 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3243 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3201 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3244 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3202 {"var a = 1; return { 1: a };", | 3245 {"var a = 1; return { 1: a };", |
3203 5 * kPointerSize, | 3246 5 * kPointerSize, |
3204 1, | 3247 1, |
3205 30, | 3248 29, |
3206 { | 3249 { |
3207 B(LdaSmi8), U8(1), // | 3250 B(LdaSmi8), U8(1), // |
3208 B(Star), R(0), // | 3251 B(Star), R(0), // |
3209 B(LdaConstant), U8(0), // | 3252 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3210 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | 3253 B(Star), R(1), // |
3211 B(Star), R(1), // | 3254 B(LdaSmi8), U8(1), // |
3212 B(LdaSmi8), U8(1), // | 3255 B(Star), R(2), // |
3213 B(Star), R(2), // | 3256 B(Ldar), R(0), // |
3214 B(Ldar), R(0), // | 3257 B(Star), R(3), // |
3215 B(Star), R(3), // | 3258 B(LdaZero), // |
3216 B(LdaZero), // | 3259 B(Star), R(4), // |
3217 B(Star), R(4), // | 3260 B(CallRuntime), U16(Runtime::kSetProperty), R(1), U8(4), // |
3218 B(CallRuntime), U16(Runtime::kSetProperty), R(1), U8(4), // | 3261 B(Ldar), R(1), // |
3219 B(Ldar), R(1), // | 3262 B(Return), // |
3220 B(Return), // | |
3221 }, | 3263 }, |
3222 1, | 3264 1, |
3223 {InstanceType::FIXED_ARRAY_TYPE}}, | 3265 {InstanceType::FIXED_ARRAY_TYPE}}, |
3224 {"return { __proto__: null }", | 3266 {"return { __proto__: null }", |
3225 2 * kPointerSize, | 3267 2 * kPointerSize, |
3226 1, | 3268 1, |
3227 18, | 3269 17, |
3228 { | 3270 { |
3229 B(LdaConstant), U8(0), // | 3271 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // |
3230 B(CreateObjectLiteral), U8(0), U8(simple_flags), // | |
3231 B(Star), R(0), // | 3272 B(Star), R(0), // |
3232 B(LdaNull), B(Star), R(1), // | 3273 B(LdaNull), B(Star), R(1), // |
3233 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(0), U8(2), // | 3274 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(0), U8(2), // |
3234 B(Ldar), R(0), // | 3275 B(Ldar), R(0), // |
3235 B(Return), // | 3276 B(Return), // |
3236 }, | 3277 }, |
3237 1, | 3278 1, |
3238 {InstanceType::FIXED_ARRAY_TYPE}}, | 3279 {InstanceType::FIXED_ARRAY_TYPE}}, |
3239 {"var a = 'test'; return { [a]: 1 }", | 3280 {"var a = 'test'; return { [a]: 1 }", |
3240 5 * kPointerSize, | 3281 5 * kPointerSize, |
3241 1, | 3282 1, |
3242 31, | 3283 30, |
3243 { | 3284 { |
3244 B(LdaConstant), U8(0), // | 3285 B(LdaConstant), U8(0), // |
3245 B(Star), R(0), // | 3286 B(Star), R(0), // |
3246 B(LdaConstant), U8(1), // | 3287 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
3247 B(CreateObjectLiteral), U8(0), U8(simple_flags), // | |
3248 B(Star), R(1), // | 3288 B(Star), R(1), // |
3249 B(Ldar), R(0), // | 3289 B(Ldar), R(0), // |
3250 B(ToName), // | 3290 B(ToName), // |
3251 B(Star), R(2), // | 3291 B(Star), R(2), // |
3252 B(LdaSmi8), U8(1), // | 3292 B(LdaSmi8), U8(1), // |
3253 B(Star), R(3), // | 3293 B(Star), R(3), // |
3254 B(LdaZero), // | 3294 B(LdaZero), // |
3255 B(Star), R(4), // | 3295 B(Star), R(4), // |
3256 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3296 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
3257 U8(4), // | 3297 U8(4), // |
3258 B(Ldar), R(1), // | 3298 B(Ldar), R(1), // |
3259 B(Return), // | 3299 B(Return), // |
3260 }, | 3300 }, |
3261 2, | 3301 2, |
3262 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3302 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3263 InstanceType::FIXED_ARRAY_TYPE}}, | 3303 InstanceType::FIXED_ARRAY_TYPE}}, |
3264 {"var a = 'test'; return { val: a, [a]: 1 }", | 3304 {"var a = 'test'; return { val: a, [a]: 1 }", |
3265 5 * kPointerSize, | 3305 5 * kPointerSize, |
3266 1, | 3306 1, |
3267 37, | 3307 36, |
3268 { | 3308 { |
3269 B(LdaConstant), U8(0), // | 3309 B(LdaConstant), U8(0), // |
3270 B(Star), R(0), // | 3310 B(Star), R(0), // |
3271 B(LdaConstant), U8(1), // | 3311 B(CreateObjectLiteral), U8(1), U8(0), U8(deep_elements_flags), // |
3272 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | |
3273 B(Star), R(1), // | 3312 B(Star), R(1), // |
3274 B(Ldar), R(0), // | 3313 B(Ldar), R(0), // |
3275 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // | 3314 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // |
3276 B(Ldar), R(0), // | 3315 B(Ldar), R(0), // |
3277 B(ToName), // | 3316 B(ToName), // |
3278 B(Star), R(2), // | 3317 B(Star), R(2), // |
3279 B(LdaSmi8), U8(1), // | 3318 B(LdaSmi8), U8(1), // |
3280 B(Star), R(3), // | 3319 B(Star), R(3), // |
3281 B(LdaZero), // | 3320 B(LdaZero), // |
3282 B(Star), R(4), // | 3321 B(Star), R(4), // |
3283 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3322 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
3284 U8(4), // | 3323 U8(4), // |
3285 B(Ldar), R(1), // | 3324 B(Ldar), R(1), // |
3286 B(Return), // | 3325 B(Return), // |
3287 }, | 3326 }, |
3288 3, | 3327 3, |
3289 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3328 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3290 InstanceType::FIXED_ARRAY_TYPE, | 3329 InstanceType::FIXED_ARRAY_TYPE, |
3291 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3330 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3292 {"var a = 'test'; return { [a]: 1, __proto__: {} }", | 3331 {"var a = 'test'; return { [a]: 1, __proto__: {} }", |
3293 5 * kPointerSize, | 3332 5 * kPointerSize, |
3294 1, | 3333 1, |
3295 43, | 3334 41, |
3296 { | 3335 { |
3297 B(LdaConstant), U8(0), // | 3336 B(LdaConstant), U8(0), // |
3298 B(Star), R(0), // | 3337 B(Star), R(0), // |
3299 B(LdaConstant), U8(1), // | 3338 B(CreateObjectLiteral), U8(1), U8(1), U8(simple_flags), // |
3300 B(CreateObjectLiteral), U8(1), U8(simple_flags), // | |
3301 B(Star), R(1), // | 3339 B(Star), R(1), // |
3302 B(Ldar), R(0), // | 3340 B(Ldar), R(0), // |
3303 B(ToName), // | 3341 B(ToName), // |
3304 B(Star), R(2), // | 3342 B(Star), R(2), // |
3305 B(LdaSmi8), U8(1), // | 3343 B(LdaSmi8), U8(1), // |
3306 B(Star), R(3), // | 3344 B(Star), R(3), // |
3307 B(LdaZero), // | 3345 B(LdaZero), // |
3308 B(Star), R(4), // | 3346 B(Star), R(4), // |
3309 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3347 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
3310 U8(4), // | 3348 U8(4), // |
3311 B(LdaConstant), U8(1), // | 3349 B(CreateObjectLiteral), U8(1), U8(0), U8(13), // |
3312 B(CreateObjectLiteral), U8(0), U8(13), // | |
3313 B(Star), R(2), // | 3350 B(Star), R(2), // |
3314 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // | 3351 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // |
3315 B(Ldar), R(1), // | 3352 B(Ldar), R(1), // |
3316 B(Return), // | 3353 B(Return), // |
3317 }, | 3354 }, |
3318 2, | 3355 2, |
3319 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3356 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3320 InstanceType::FIXED_ARRAY_TYPE}}, | 3357 InstanceType::FIXED_ARRAY_TYPE}}, |
3321 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", | 3358 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", |
3322 5 * kPointerSize, | 3359 5 * kPointerSize, |
3323 1, | 3360 1, |
3324 65, | 3361 64, |
3325 { | 3362 { |
3326 B(LdaConstant), U8(0), // | 3363 B(LdaConstant), U8(0), // |
3327 B(Star), R(0), // | 3364 B(Star), R(0), // |
3328 B(LdaConstant), U8(1), // | 3365 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
3329 B(CreateObjectLiteral), U8(0), U8(simple_flags), // | |
3330 B(Star), R(1), // | 3366 B(Star), R(1), // |
3331 B(Ldar), R(0), // | 3367 B(Ldar), R(0), // |
3332 B(ToName), // | 3368 B(ToName), // |
3333 B(Star), R(2), // | 3369 B(Star), R(2), // |
3334 B(LdaConstant), U8(2), // | 3370 B(LdaConstant), U8(2), // |
3335 B(Star), R(3), // | 3371 B(Star), R(3), // |
3336 B(LdaZero), // | 3372 B(LdaZero), // |
3337 B(Star), R(4), // | 3373 B(Star), R(4), // |
3338 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3374 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // |
3339 U8(4), // | 3375 U8(4), // |
(...skipping 26 matching lines...) Expand all Loading... |
3366 }; | 3402 }; |
3367 | 3403 |
3368 for (size_t i = 0; i < arraysize(snippets); i++) { | 3404 for (size_t i = 0; i < arraysize(snippets); i++) { |
3369 Handle<BytecodeArray> bytecode_array = | 3405 Handle<BytecodeArray> bytecode_array = |
3370 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3406 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3371 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3407 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3372 } | 3408 } |
3373 } | 3409 } |
3374 | 3410 |
3375 | 3411 |
| 3412 TEST(ObjectLiteralsWide) { |
| 3413 InitializedHandleScope handle_scope; |
| 3414 BytecodeGeneratorHelper helper; |
| 3415 Zone zone; |
| 3416 |
| 3417 int deep_elements_flags = |
| 3418 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
| 3419 int wide_idx = 0; |
| 3420 |
| 3421 ExpectedSnippet<InstanceType, 257> snippets[] = { |
| 3422 {"var a;" REPEAT_256(SPACE, |
| 3423 "a = 1.23;") "return { name: 'string', val: 9.2 };", |
| 3424 1 * kPointerSize, |
| 3425 1, |
| 3426 1031, |
| 3427 { |
| 3428 REPEAT_256(COMMA, // |
| 3429 B(LdaConstant), U8(wide_idx++), // |
| 3430 B(Star), R(0)), // |
| 3431 B(CreateObjectLiteralWide), U16(256), U16(0), // |
| 3432 U8(deep_elements_flags), // |
| 3433 B(Return) // |
| 3434 }, |
| 3435 257, |
| 3436 {REPEAT_256(COMMA, InstanceType::HEAP_NUMBER_TYPE), |
| 3437 InstanceType::FIXED_ARRAY_TYPE}}, |
| 3438 }; |
| 3439 |
| 3440 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 3441 Handle<BytecodeArray> bytecode_array = |
| 3442 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 3443 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 3444 } |
| 3445 } |
| 3446 |
| 3447 |
3376 TEST(TopLevelObjectLiterals) { | 3448 TEST(TopLevelObjectLiterals) { |
3377 InitializedHandleScope handle_scope; | 3449 InitializedHandleScope handle_scope; |
3378 BytecodeGeneratorHelper helper; | 3450 BytecodeGeneratorHelper helper; |
3379 | 3451 |
3380 int has_function_flags = ObjectLiteral::kFastElements | | 3452 int has_function_flags = ObjectLiteral::kFastElements | |
3381 ObjectLiteral::kHasFunction | | 3453 ObjectLiteral::kHasFunction | |
3382 ObjectLiteral::kDisableMementos; | 3454 ObjectLiteral::kDisableMementos; |
3383 ExpectedSnippet<InstanceType> snippets[] = { | 3455 ExpectedSnippet<InstanceType> snippets[] = { |
3384 {"var a = { func: function() { } };", | 3456 {"var a = { func: function() { } };", |
3385 5 * kPointerSize, | 3457 5 * kPointerSize, |
3386 1, | 3458 1, |
3387 49, | 3459 48, |
3388 { | 3460 { |
3389 B(LdaConstant), U8(0), // | 3461 B(LdaConstant), U8(0), // |
3390 B(Star), R(1), // | 3462 B(Star), R(1), // |
3391 B(LdaZero), // | 3463 B(LdaZero), // |
3392 B(Star), R(2), // | 3464 B(Star), R(2), // |
3393 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // | 3465 B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), // |
3394 B(LdaConstant), U8(1), // | 3466 B(LdaConstant), U8(1), // |
3395 B(Star), R(1), // | 3467 B(Star), R(1), // |
3396 B(LdaZero), // | 3468 B(LdaZero), // |
3397 B(Star), R(2), // | 3469 B(Star), R(2), // |
3398 B(LdaConstant), U8(2), // | 3470 B(CreateObjectLiteral), U8(2), U8(0), U8(has_function_flags), // |
3399 B(CreateObjectLiteral), U8(0), U8(has_function_flags), // | |
3400 B(Star), R(4), // | 3471 B(Star), R(4), // |
3401 B(CreateClosure), U8(4), U8(1), // | 3472 B(CreateClosure), U8(4), U8(1), // |
3402 B(StoreICSloppy), R(4), U8(3), U8(5), // | 3473 B(StoreICSloppy), R(4), U8(3), U8(5), // |
3403 B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1), // | 3474 B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1), // |
3404 B(Ldar), R(4), // | 3475 B(Ldar), R(4), // |
3405 B(Star), R(3), // | 3476 B(Star), R(3), // |
3406 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), // | 3477 B(CallRuntime), U16(Runtime::kInitializeVarGlobal), R(1), U8(3), // |
3407 B(LdaUndefined), // | 3478 B(LdaUndefined), // |
3408 B(Return), // | 3479 B(Return), // |
3409 }, | 3480 }, |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3956 B(ToNumber), // | 4027 B(ToNumber), // |
3957 B(Star), R(1), // | 4028 B(Star), R(1), // |
3958 B(Dec), // | 4029 B(Dec), // |
3959 B(Star), R(0), // | 4030 B(Star), R(0), // |
3960 B(Ldar), R(1), // | 4031 B(Ldar), R(1), // |
3961 B(Return), // | 4032 B(Return), // |
3962 }}, | 4033 }}, |
3963 {"var a = { val: 1 }; return a.val++;", | 4034 {"var a = { val: 1 }; return a.val++;", |
3964 2 * kPointerSize, | 4035 2 * kPointerSize, |
3965 1, | 4036 1, |
3966 22, | 4037 21, |
3967 { | 4038 { |
3968 B(LdaConstant), U8(0), // | 4039 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
3969 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | 4040 B(Star), R(0), // |
3970 B(Star), R(0), // | 4041 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // |
3971 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 4042 B(ToNumber), // |
3972 B(ToNumber), // | 4043 B(Star), R(1), // |
3973 B(Star), R(1), // | 4044 B(Inc), // |
3974 B(Inc), // | 4045 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // |
3975 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // | 4046 B(Ldar), R(1), // |
3976 B(Ldar), R(1), // | 4047 B(Return), // |
3977 B(Return), // | |
3978 }, | 4048 }, |
3979 2, | 4049 2, |
3980 {InstanceType::FIXED_ARRAY_TYPE, | 4050 {InstanceType::FIXED_ARRAY_TYPE, |
3981 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4051 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3982 {"var a = { val: 1 }; return --a.val;", | 4052 {"var a = { val: 1 }; return --a.val;", |
3983 1 * kPointerSize, | 4053 1 * kPointerSize, |
3984 1, | 4054 1, |
3985 18, | 4055 17, |
3986 { | 4056 { |
3987 B(LdaConstant), U8(0), // | 4057 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
3988 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | 4058 B(Star), R(0), // |
3989 B(Star), R(0), // | 4059 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // |
3990 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 4060 B(ToNumber), // |
3991 B(ToNumber), // | 4061 B(Dec), // |
3992 B(Dec), // | 4062 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // |
3993 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // | 4063 B(Return), // |
3994 B(Return), // | |
3995 }, | 4064 }, |
3996 2, | 4065 2, |
3997 {InstanceType::FIXED_ARRAY_TYPE, | 4066 {InstanceType::FIXED_ARRAY_TYPE, |
3998 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4067 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3999 {"var name = 'var'; var a = { val: 1 }; return a[name]--;", | 4068 {"var name = 'var'; var a = { val: 1 }; return a[name]--;", |
4000 4 * kPointerSize, | 4069 4 * kPointerSize, |
4001 1, | 4070 1, |
4002 29, | 4071 28, |
4003 { | 4072 { |
4004 B(LdaConstant), U8(0), // | 4073 B(LdaConstant), U8(0), // |
4005 B(Star), R(0), // | 4074 B(Star), R(0), // |
4006 B(LdaConstant), U8(1), // | 4075 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // |
4007 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | |
4008 B(Star), R(1), // | 4076 B(Star), R(1), // |
4009 B(Ldar), R(0), // | 4077 B(Ldar), R(0), // |
4010 B(Star), R(2), // | 4078 B(Star), R(2), // |
4011 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // | 4079 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // |
4012 B(ToNumber), // | 4080 B(ToNumber), // |
4013 B(Star), R(3), // | 4081 B(Star), R(3), // |
4014 B(Dec), // | 4082 B(Dec), // |
4015 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // | 4083 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // |
4016 B(Ldar), R(3), // | 4084 B(Ldar), R(3), // |
4017 B(Return), // | 4085 B(Return), // |
4018 }, | 4086 }, |
4019 2, | 4087 2, |
4020 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4088 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4021 InstanceType::FIXED_ARRAY_TYPE}}, | 4089 InstanceType::FIXED_ARRAY_TYPE}}, |
4022 {"var name = 'var'; var a = { val: 1 }; return ++a[name];", | 4090 {"var name = 'var'; var a = { val: 1 }; return ++a[name];", |
4023 3 * kPointerSize, | 4091 3 * kPointerSize, |
4024 1, | 4092 1, |
4025 25, | 4093 24, |
4026 { | 4094 { |
4027 B(LdaConstant), U8(0), // | 4095 B(LdaConstant), U8(0), // |
4028 B(Star), R(0), // | 4096 B(Star), R(0), // |
4029 B(LdaConstant), U8(1), // | 4097 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // |
4030 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | |
4031 B(Star), R(1), // | 4098 B(Star), R(1), // |
4032 B(Ldar), R(0), // | 4099 B(Ldar), R(0), // |
4033 B(Star), R(2), // | 4100 B(Star), R(2), // |
4034 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // | 4101 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // |
4035 B(ToNumber), // | 4102 B(ToNumber), // |
4036 B(Inc), // | 4103 B(Inc), // |
4037 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // | 4104 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // |
4038 B(Return), // | 4105 B(Return), // |
4039 }, | 4106 }, |
4040 2, | 4107 2, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4078 B(Dec), // | 4145 B(Dec), // |
4079 B(StaContextSlot), R(1), U8(first_context_slot), // | 4146 B(StaContextSlot), R(1), U8(first_context_slot), // |
4080 B(Ldar), R(2), // | 4147 B(Ldar), R(2), // |
4081 B(Return), // | 4148 B(Return), // |
4082 }, | 4149 }, |
4083 1, | 4150 1, |
4084 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 4151 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
4085 {"var idx = 1; var a = [1, 2]; return a[idx++] = 2;", | 4152 {"var idx = 1; var a = [1, 2]; return a[idx++] = 2;", |
4086 3 * kPointerSize, | 4153 3 * kPointerSize, |
4087 1, | 4154 1, |
4088 26, | 4155 25, |
4089 { | 4156 { |
4090 B(LdaSmi8), U8(1), // | 4157 B(LdaSmi8), U8(1), // |
4091 B(Star), R(0), // | 4158 B(Star), R(0), // |
4092 B(LdaConstant), U8(0), // | 4159 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), // |
4093 B(CreateArrayLiteral), U8(0), U8(array_literal_flags), // | |
4094 B(Star), R(1), // | 4160 B(Star), R(1), // |
4095 B(Ldar), R(0), // | 4161 B(Ldar), R(0), // |
4096 B(ToNumber), // | 4162 B(ToNumber), // |
4097 B(Star), R(2), // | 4163 B(Star), R(2), // |
4098 B(Inc), // | 4164 B(Inc), // |
4099 B(Star), R(0), // | 4165 B(Star), R(0), // |
4100 B(LdaSmi8), U8(2), // | 4166 B(LdaSmi8), U8(2), // |
4101 B(KeyedStoreICSloppy), R(1), R(2), // | 4167 B(KeyedStoreICSloppy), R(1), R(2), // |
4102 U8(store_vector->GetIndex(store_slot)), // | 4168 U8(store_vector->GetIndex(store_slot)), // |
4103 B(Return), // | 4169 B(Return), // |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4234 B(Star), R(0), // | 4300 B(Star), R(0), // |
4235 B(LdaSmi8), U8(2), // | 4301 B(LdaSmi8), U8(2), // |
4236 B(Div), R(0), // | 4302 B(Div), R(0), // |
4237 B(Star), R(0), // | 4303 B(Star), R(0), // |
4238 B(LdaUndefined), // | 4304 B(LdaUndefined), // |
4239 B(Return), // | 4305 B(Return), // |
4240 }}, | 4306 }}, |
4241 {"var a = { val: 2 }; a.name *= 2;", | 4307 {"var a = { val: 2 }; a.name *= 2;", |
4242 2 * kPointerSize, | 4308 2 * kPointerSize, |
4243 1, | 4309 1, |
4244 23, | 4310 22, |
4245 { | 4311 { |
4246 B(LdaConstant), U8(0), // | 4312 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
4247 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | 4313 B(Star), R(0), // |
4248 B(Star), R(0), // | 4314 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // |
4249 B(LoadICSloppy), R(0), U8(1), U8(vector->GetIndex(slot1)), // | 4315 B(Star), R(1), // |
4250 B(Star), R(1), // | 4316 B(LdaSmi8), U8(2), // |
4251 B(LdaSmi8), U8(2), // | 4317 B(Mul), R(1), // |
4252 B(Mul), R(1), // | 4318 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // |
4253 B(StoreICSloppy), R(0), U8(1), U8(vector->GetIndex(slot2)), // | 4319 B(LdaUndefined), // |
4254 B(LdaUndefined), // | 4320 B(Return), // |
4255 B(Return), // | |
4256 }, | 4321 }, |
4257 2, | 4322 2, |
4258 {InstanceType::FIXED_ARRAY_TYPE, | 4323 {InstanceType::FIXED_ARRAY_TYPE, |
4259 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4324 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4260 {"var a = { 1: 2 }; a[1] ^= 2;", | 4325 {"var a = { 1: 2 }; a[1] ^= 2;", |
4261 3 * kPointerSize, | 4326 3 * kPointerSize, |
4262 1, | 4327 1, |
4263 26, | 4328 25, |
4264 { | 4329 { |
4265 B(LdaConstant), U8(0), // | 4330 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
4266 B(CreateObjectLiteral), U8(0), U8(object_literal_flags), // | |
4267 B(Star), R(0), // | 4331 B(Star), R(0), // |
4268 B(LdaSmi8), U8(1), // | 4332 B(LdaSmi8), U8(1), // |
4269 B(Star), R(1), // | 4333 B(Star), R(1), // |
4270 B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // | 4334 B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot1)), // |
4271 B(Star), R(2), // | 4335 B(Star), R(2), // |
4272 B(LdaSmi8), U8(2), // | 4336 B(LdaSmi8), U8(2), // |
4273 B(BitwiseXor), R(2), // | 4337 B(BitwiseXor), R(2), // |
4274 B(KeyedStoreICSloppy), R(0), R(1), U8(vector->GetIndex(slot2)), // | 4338 B(KeyedStoreICSloppy), R(0), R(1), U8(vector->GetIndex(slot2)), // |
4275 B(LdaUndefined), // | 4339 B(LdaUndefined), // |
4276 B(Return), // | 4340 B(Return), // |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4550 B(Jump), U8(-19), // | 4614 B(Jump), U8(-19), // |
4551 B(LdaUndefined), // | 4615 B(LdaUndefined), // |
4552 B(Return), // | 4616 B(Return), // |
4553 }, | 4617 }, |
4554 1, | 4618 1, |
4555 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4619 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4556 {"var x = 0;\n" | 4620 {"var x = 0;\n" |
4557 "for (var p in [1,2,3]) { x += p; }", | 4621 "for (var p in [1,2,3]) { x += p; }", |
4558 5 * kPointerSize, | 4622 5 * kPointerSize, |
4559 1, | 4623 1, |
4560 53, | 4624 52, |
4561 { | 4625 { |
4562 B(LdaZero), // | 4626 B(LdaZero), // |
4563 B(Star), R(1), // | 4627 B(Star), R(1), // |
4564 B(LdaConstant), U8(0), // | 4628 B(CreateArrayLiteral), U8(0), U8(0), U8(simple_flags), // |
4565 B(CreateArrayLiteral), U8(0), U8(simple_flags), // | |
4566 B(JumpIfUndefined), U8(43), // | 4629 B(JumpIfUndefined), U8(43), // |
4567 B(JumpIfNull), U8(41), // | 4630 B(JumpIfNull), U8(41), // |
4568 B(ToObject), // | 4631 B(ToObject), // |
4569 B(Star), R(3), // | 4632 B(Star), R(3), // |
4570 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(3), U8(1), // | 4633 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(3), U8(1), // |
4571 B(ForInPrepare), R(3), // | 4634 B(ForInPrepare), R(3), // |
4572 B(JumpIfUndefined), U8(29), // | 4635 B(JumpIfUndefined), U8(29), // |
4573 B(Star), R(4), // | 4636 B(Star), R(4), // |
4574 B(LdaZero), // | 4637 B(LdaZero), // |
4575 B(Star), R(3), // | 4638 B(Star), R(3), // |
(...skipping 13 matching lines...) Expand all Loading... |
4589 }, | 4652 }, |
4590 1, | 4653 1, |
4591 {InstanceType::FIXED_ARRAY_TYPE}}, | 4654 {InstanceType::FIXED_ARRAY_TYPE}}, |
4592 {"var x = { 'a': 1, 'b': 2 };\n" | 4655 {"var x = { 'a': 1, 'b': 2 };\n" |
4593 "for (x['a'] in [10, 20, 30]) {\n" | 4656 "for (x['a'] in [10, 20, 30]) {\n" |
4594 " if (x['a'] == 10) continue;\n" | 4657 " if (x['a'] == 10) continue;\n" |
4595 " if (x['a'] == 20) break;\n" | 4658 " if (x['a'] == 20) break;\n" |
4596 "}", | 4659 "}", |
4597 4 * kPointerSize, | 4660 4 * kPointerSize, |
4598 1, | 4661 1, |
4599 83, | 4662 81, |
4600 { | 4663 { |
4601 B(LdaConstant), U8(0), // | 4664 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
4602 B(CreateObjectLiteral), U8(0), U8(deep_elements_flags), // | |
4603 B(Star), R(0), // | 4665 B(Star), R(0), // |
4604 B(LdaConstant), U8(1), // | 4666 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // |
4605 B(CreateArrayLiteral), U8(1), U8(simple_flags), // | |
4606 B(JumpIfUndefined), U8(69), // | 4667 B(JumpIfUndefined), U8(69), // |
4607 B(JumpIfNull), U8(67), // | 4668 B(JumpIfNull), U8(67), // |
4608 B(ToObject), // | 4669 B(ToObject), // |
4609 B(Star), R(1), // | 4670 B(Star), R(1), // |
4610 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(1), U8(1), // | 4671 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(1), U8(1), // |
4611 B(ForInPrepare), R(1), // | 4672 B(ForInPrepare), R(1), // |
4612 B(JumpIfUndefined), U8(55), // | 4673 B(JumpIfUndefined), U8(55), // |
4613 B(Star), R(2), // | 4674 B(Star), R(2), // |
4614 B(LdaZero), // | 4675 B(LdaZero), // |
4615 B(Star), R(1), // | 4676 B(Star), R(1), // |
(...skipping 21 matching lines...) Expand all Loading... |
4637 B(LdaUndefined), // | 4698 B(LdaUndefined), // |
4638 B(Return), // | 4699 B(Return), // |
4639 }, | 4700 }, |
4640 3, | 4701 3, |
4641 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, | 4702 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
4642 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4703 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4643 {"var x = [ 10, 11, 12 ] ;\n" | 4704 {"var x = [ 10, 11, 12 ] ;\n" |
4644 "for (x[0] in [1,2,3]) { return x[3]; }", | 4705 "for (x[0] in [1,2,3]) { return x[3]; }", |
4645 5 * kPointerSize, | 4706 5 * kPointerSize, |
4646 1, | 4707 1, |
4647 66, | 4708 64, |
4648 { | 4709 { |
4649 B(LdaConstant), U8(0), // | 4710 B(CreateArrayLiteral), U8(0), U8(0), U8(simple_flags), // |
4650 B(CreateArrayLiteral), U8(0), U8(simple_flags), // | |
4651 B(Star), R(0), // | 4711 B(Star), R(0), // |
4652 B(LdaConstant), U8(1), // | 4712 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // |
4653 B(CreateArrayLiteral), U8(1), U8(simple_flags), // | |
4654 B(JumpIfUndefined), U8(52), // | 4713 B(JumpIfUndefined), U8(52), // |
4655 B(JumpIfNull), U8(50), // | 4714 B(JumpIfNull), U8(50), // |
4656 B(ToObject), // | 4715 B(ToObject), // |
4657 B(Star), R(1), // | 4716 B(Star), R(1), // |
4658 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(1), U8(1), // | 4717 B(CallRuntime), U16(Runtime::kGetPropertyNamesFast), R(1), U8(1), // |
4659 B(ForInPrepare), R(1), // | 4718 B(ForInPrepare), R(1), // |
4660 B(JumpIfUndefined), U8(38), // | 4719 B(JumpIfUndefined), U8(38), // |
4661 B(Star), R(2), // | 4720 B(Star), R(2), // |
4662 B(LdaZero), // | 4721 B(LdaZero), // |
4663 B(Star), R(1), // | 4722 B(Star), R(1), // |
(...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5460 for (size_t i = 0; i < arraysize(snippets); i++) { | 5519 for (size_t i = 0; i < arraysize(snippets); i++) { |
5461 Handle<BytecodeArray> bytecode_array = | 5520 Handle<BytecodeArray> bytecode_array = |
5462 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 5521 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
5463 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 5522 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
5464 } | 5523 } |
5465 } | 5524 } |
5466 | 5525 |
5467 } // namespace interpreter | 5526 } // namespace interpreter |
5468 } // namespace internal | 5527 } // namespace internal |
5469 } // namespace v8 | 5528 } // namespace v8 |
OLD | NEW |