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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
(...skipping 3182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3193 | 3193 |
3194 int deep_elements_flags = | 3194 int deep_elements_flags = |
3195 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 3195 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
3196 int closure = Register::function_closure().index(); | 3196 int closure = Register::function_closure().index(); |
3197 int first_context_slot = Context::MIN_CONTEXT_SLOTS; | 3197 int first_context_slot = Context::MIN_CONTEXT_SLOTS; |
3198 | 3198 |
3199 ExpectedSnippet<InstanceType> snippets[] = { | 3199 ExpectedSnippet<InstanceType> snippets[] = { |
3200 {"var a = {x:13, y:14}; return delete a.x;", | 3200 {"var a = {x:13, y:14}; return delete a.x;", |
3201 2 * kPointerSize, | 3201 2 * kPointerSize, |
3202 1, | 3202 1, |
3203 13, | 3203 15, |
3204 { | 3204 {B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3205 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3205 B(Star), R(1), // |
3206 B(Star), R(0), // | 3206 B(Star), R(0), // |
3207 B(Star), R(1), // | 3207 B(Star), R(1), // |
3208 B(LdaConstant), U8(1), // | 3208 B(LdaConstant), U8(1), // |
3209 B(DeletePropertySloppy), R(1), // | 3209 B(DeletePropertySloppy), R(1), // |
3210 B(Return) | 3210 B(Return)}, |
3211 }, | |
3212 2, | 3211 2, |
3213 {InstanceType::FIXED_ARRAY_TYPE, | 3212 {InstanceType::FIXED_ARRAY_TYPE, |
3214 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3213 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3215 {"'use strict'; var a = {x:13, y:14}; return delete a.x;", | 3214 {"'use strict'; var a = {x:13, y:14}; return delete a.x;", |
3216 2 * kPointerSize, | 3215 2 * kPointerSize, |
3217 1, | 3216 1, |
3218 13, | 3217 15, |
3219 { | 3218 {B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3220 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3219 B(Star), R(1), // |
3221 B(Star), R(0), // | 3220 B(Star), R(0), // |
3222 B(Star), R(1), // | 3221 B(Star), R(1), // |
3223 B(LdaConstant), U8(1), // | 3222 B(LdaConstant), U8(1), // |
3224 B(DeletePropertyStrict), R(1), // | 3223 B(DeletePropertyStrict), R(1), // |
3225 B(Return) | 3224 B(Return)}, |
3226 }, | |
3227 2, | 3225 2, |
3228 {InstanceType::FIXED_ARRAY_TYPE, | 3226 {InstanceType::FIXED_ARRAY_TYPE, |
3229 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3227 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3230 {"var a = {1:13, 2:14}; return delete a[2];", | 3228 {"var a = {1:13, 2:14}; return delete a[2];", |
3231 2 * kPointerSize, | 3229 2 * kPointerSize, |
3232 1, | 3230 1, |
3233 13, | 3231 15, |
3234 { | 3232 {B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3235 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3233 B(Star), R(1), // |
3236 B(Star), R(0), // | 3234 B(Star), R(0), // |
3237 B(Star), R(1), // | 3235 B(Star), R(1), // |
3238 B(LdaSmi8), U8(2), // | 3236 B(LdaSmi8), U8(2), // |
3239 B(DeletePropertySloppy), R(1), // | 3237 B(DeletePropertySloppy), R(1), // |
3240 B(Return) | 3238 B(Return)}, |
3241 }, | |
3242 1, | 3239 1, |
3243 {InstanceType::FIXED_ARRAY_TYPE}}, | 3240 {InstanceType::FIXED_ARRAY_TYPE}}, |
3244 {"var a = 10; return delete a;", | 3241 {"var a = 10; return delete a;", |
3245 1 * kPointerSize, | 3242 1 * kPointerSize, |
3246 1, | 3243 1, |
3247 6, | 3244 6, |
3248 { | 3245 {B(LdaSmi8), U8(10), // |
3249 B(LdaSmi8), U8(10), // | 3246 B(Star), R(0), // |
3250 B(Star), R(0), // | 3247 B(LdaFalse), // |
3251 B(LdaFalse), // | 3248 B(Return)}, |
3252 B(Return) | |
3253 }, | |
3254 0}, | 3249 0}, |
3255 {"'use strict';" | 3250 {"'use strict';" |
3256 "var a = {1:10};" | 3251 "var a = {1:10};" |
3257 "(function f1() {return a;});" | 3252 "(function f1() {return a;});" |
3258 "return delete a[1];", | 3253 "return delete a[1];", |
3259 2 * kPointerSize, | 3254 2 * kPointerSize, |
3260 1, | 3255 1, |
3261 27, | 3256 29, |
3262 { | 3257 {B(CallRuntime), U16(Runtime::kNewFunctionContext), // |
3263 B(CallRuntime), U16(Runtime::kNewFunctionContext), // | 3258 R(closure), U8(1), // |
3264 R(closure), U8(1), // | 3259 B(PushContext), R(0), // |
3265 B(PushContext), R(0), // | 3260 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3266 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3261 B(Star), R(1), // |
3267 B(StaContextSlot), R(0), U8(first_context_slot), // | 3262 B(StaContextSlot), R(0), U8(first_context_slot), // |
3268 B(CreateClosure), U8(1), U8(0), // | 3263 B(CreateClosure), U8(1), U8(0), // |
3269 B(LdaContextSlot), R(0), U8(first_context_slot), // | 3264 B(LdaContextSlot), R(0), U8(first_context_slot), // |
3270 B(Star), R(1), // | 3265 B(Star), R(1), // |
3271 B(LdaSmi8), U8(1), // | 3266 B(LdaSmi8), U8(1), // |
3272 B(DeletePropertyStrict), R(1), // | 3267 B(DeletePropertyStrict), R(1), // |
3273 B(Return) | 3268 B(Return)}, |
3274 }, | |
3275 2, | 3269 2, |
3276 {InstanceType::FIXED_ARRAY_TYPE, | 3270 {InstanceType::FIXED_ARRAY_TYPE, |
3277 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3271 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3278 {"return delete 'test';", | 3272 {"return delete 'test';", |
3279 0 * kPointerSize, | 3273 0 * kPointerSize, |
3280 1, | 3274 1, |
3281 2, | 3275 2, |
3282 { | 3276 {B(LdaTrue), // |
3283 B(LdaTrue), // | 3277 B(Return)}, |
3284 B(Return) | |
3285 }, | |
3286 0}, | 3278 0}, |
3287 }; | 3279 }; |
3288 | 3280 |
3289 for (size_t i = 0; i < arraysize(snippets); i++) { | 3281 for (size_t i = 0; i < arraysize(snippets); i++) { |
3290 Handle<BytecodeArray> bytecode_array = | 3282 Handle<BytecodeArray> bytecode_array = |
3291 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3283 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
3292 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3284 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
3293 } | 3285 } |
3294 } | 3286 } |
3295 | 3287 |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3677 Handle<i::TypeFeedbackVector> vector = | 3669 Handle<i::TypeFeedbackVector> vector = |
3678 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 3670 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
3679 | 3671 |
3680 int simple_flags = ObjectLiteral::kFastElements | | 3672 int simple_flags = ObjectLiteral::kFastElements | |
3681 ObjectLiteral::kShallowProperties | | 3673 ObjectLiteral::kShallowProperties | |
3682 ObjectLiteral::kDisableMementos; | 3674 ObjectLiteral::kDisableMementos; |
3683 int deep_elements_flags = | 3675 int deep_elements_flags = |
3684 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 3676 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
3685 ExpectedSnippet<InstanceType> snippets[] = { | 3677 ExpectedSnippet<InstanceType> snippets[] = { |
3686 {"return { };", | 3678 {"return { };", |
3687 0, | 3679 kPointerSize, |
3688 1, | 3680 1, |
3689 5, | 3681 7, |
3690 { | 3682 { |
3691 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // | 3683 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // |
| 3684 B(Star), R(0), // |
3692 B(Return) // | 3685 B(Return) // |
3693 }, | 3686 }, |
3694 1, | 3687 1, |
3695 {InstanceType::FIXED_ARRAY_TYPE}}, | 3688 {InstanceType::FIXED_ARRAY_TYPE}}, |
3696 {"return { name: 'string', val: 9.2 };", | 3689 {"return { name: 'string', val: 9.2 };", |
3697 0, | 3690 kPointerSize, |
3698 1, | 3691 1, |
3699 5, | 3692 7, |
3700 { | 3693 { |
3701 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3694 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 3695 B(Star), R(0), // |
3702 B(Return) // | 3696 B(Return) // |
3703 }, | 3697 }, |
3704 1, | 3698 1, |
3705 {InstanceType::FIXED_ARRAY_TYPE}}, | 3699 {InstanceType::FIXED_ARRAY_TYPE}}, |
3706 {"var a = 1; return { name: 'string', val: a };", | 3700 {"var a = 1; return { name: 'string', val: a };", |
3707 2 * kPointerSize, | 3701 2 * kPointerSize, |
3708 1, | 3702 1, |
3709 19, | 3703 19, |
3710 { | 3704 { |
3711 B(LdaSmi8), U8(1), // | 3705 B(LdaSmi8), U8(1), // |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3746 16, | 3740 16, |
3747 { | 3741 { |
3748 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3742 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3749 B(Star), R(0), // | 3743 B(Star), R(0), // |
3750 B(CreateClosure), U8(1), U8(0), // | 3744 B(CreateClosure), U8(1), U8(0), // |
3751 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // | 3745 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // |
3752 B(Ldar), R(0), // | 3746 B(Ldar), R(0), // |
3753 B(Return), // | 3747 B(Return), // |
3754 }, | 3748 }, |
3755 3, | 3749 3, |
3756 {InstanceType::FIXED_ARRAY_TYPE, | 3750 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::SHARED_FUNCTION_INFO_TYPE, |
3757 InstanceType::SHARED_FUNCTION_INFO_TYPE, | |
3758 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3751 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3759 {"return { func(a) { return a; } };", | 3752 {"return { func(a) { return a; } };", |
3760 1 * kPointerSize, | 3753 1 * kPointerSize, |
3761 1, | 3754 1, |
3762 16, | 3755 16, |
3763 { | 3756 { |
3764 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3757 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3765 B(Star), R(0), // | 3758 B(Star), R(0), // |
3766 B(CreateClosure), U8(1), U8(0), // | 3759 B(CreateClosure), U8(1), U8(0), // |
3767 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // | 3760 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot1)), // |
3768 B(Ldar), R(0), // | 3761 B(Ldar), R(0), // |
3769 B(Return), // | 3762 B(Return), // |
3770 }, | 3763 }, |
3771 3, | 3764 3, |
3772 {InstanceType::FIXED_ARRAY_TYPE, | 3765 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::SHARED_FUNCTION_INFO_TYPE, |
3773 InstanceType::SHARED_FUNCTION_INFO_TYPE, | |
3774 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3766 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3775 {"return { get a() { return 2; } };", | 3767 {"return { get a() { return 2; } };", |
3776 5 * kPointerSize, | 3768 6 * kPointerSize, |
3777 1, | 3769 1, |
3778 29, | 3770 32, |
3779 { | 3771 { |
3780 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3772 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3781 B(Star), R(0), // | 3773 B(Star), R(0), // |
| 3774 B(Mov), R(0), R(1), // |
3782 B(LdaConstant), U8(1), // | 3775 B(LdaConstant), U8(1), // |
3783 B(Star), R(1), // | 3776 B(Star), R(2), // |
3784 B(CreateClosure), U8(2), U8(0), // | 3777 B(CreateClosure), U8(2), U8(0), // |
3785 B(Star), R(2), // | 3778 B(Star), R(3), // |
3786 B(LdaNull), // | 3779 B(LdaNull), // |
3787 B(Star), R(3), // | 3780 B(Star), R(4), // |
3788 B(LdaZero), // | 3781 B(LdaZero), // |
3789 B(Star), R(4), // | 3782 B(Star), R(5), // |
3790 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3783 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3791 R(0), U8(5), // | 3784 R(1), U8(5), // |
3792 B(Ldar), R(0), // | 3785 B(Ldar), R(0), // |
3793 B(Return), // | 3786 B(Return), // |
3794 }, | 3787 }, |
3795 3, | 3788 3, |
3796 {InstanceType::FIXED_ARRAY_TYPE, | 3789 {InstanceType::FIXED_ARRAY_TYPE, |
3797 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3790 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3798 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3791 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3799 {"return { get a() { return this.x; }, set a(val) { this.x = val } };", | 3792 {"return { get a() { return this.x; }, set a(val) { this.x = val } };", |
3800 5 * kPointerSize, | 3793 6 * kPointerSize, |
3801 1, | 3794 1, |
3802 31, | 3795 34, |
3803 { | 3796 { |
3804 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3797 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3805 B(Star), R(0), // | 3798 B(Star), R(0), // |
| 3799 B(Mov), R(0), R(1), // |
3806 B(LdaConstant), U8(1), // | 3800 B(LdaConstant), U8(1), // |
3807 B(Star), R(1), // | 3801 B(Star), R(2), // |
3808 B(CreateClosure), U8(2), U8(0), // | 3802 B(CreateClosure), U8(2), U8(0), // |
3809 B(Star), R(2), // | 3803 B(Star), R(3), // |
3810 B(CreateClosure), U8(3), U8(0), // | 3804 B(CreateClosure), U8(3), U8(0), // |
3811 B(Star), R(3), // | 3805 B(Star), R(4), // |
3812 B(LdaZero), // | 3806 B(LdaZero), // |
3813 B(Star), R(4), // | 3807 B(Star), R(5), // |
3814 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3808 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3815 R(0), U8(5), // | 3809 R(1), U8(5), // |
3816 B(Ldar), R(0), // | 3810 B(Ldar), R(0), // |
3817 B(Return), // | 3811 B(Return), // |
3818 }, | 3812 }, |
3819 4, | 3813 4, |
3820 {InstanceType::FIXED_ARRAY_TYPE, | 3814 {InstanceType::FIXED_ARRAY_TYPE, |
3821 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3815 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3822 InstanceType::SHARED_FUNCTION_INFO_TYPE, | 3816 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
3823 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3817 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3824 {"return { set b(val) { this.y = val } };", | 3818 {"return { set b(val) { this.y = val } };", |
3825 5 * kPointerSize, | 3819 6 * kPointerSize, |
3826 1, | 3820 1, |
3827 29, | 3821 32, |
3828 { | 3822 { |
3829 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3823 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3830 B(Star), R(0), // | 3824 B(Star), R(0), // |
| 3825 B(Mov), R(0), R(1), // |
3831 B(LdaConstant), U8(1), // | 3826 B(LdaConstant), U8(1), // |
3832 B(Star), R(1), // | 3827 B(Star), R(2), // |
3833 B(LdaNull), // | 3828 B(LdaNull), // |
3834 B(Star), R(2), // | 3829 B(Star), R(3), // |
3835 B(CreateClosure), U8(2), U8(0), // | 3830 B(CreateClosure), U8(2), U8(0), // |
3836 B(Star), R(3), // | 3831 B(Star), R(4), // |
3837 B(LdaZero), // | 3832 B(LdaZero), // |
3838 B(Star), R(4), // | 3833 B(Star), R(5), // |
3839 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // | 3834 B(CallRuntime), U16(Runtime::kDefineAccessorPropertyUnchecked), // |
3840 R(0), U8(5), // | 3835 R(1), U8(5), // |
3841 B(Ldar), R(0), // | 3836 B(Ldar), R(0), // |
3842 B(Return), // | 3837 B(Return), // |
3843 }, | 3838 }, |
3844 3, | 3839 3, |
3845 {InstanceType::FIXED_ARRAY_TYPE, | 3840 {InstanceType::FIXED_ARRAY_TYPE, |
3846 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3841 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3847 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3842 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
3848 {"var a = 1; return { 1: a };", | 3843 {"var a = 1; return { 1: a };", |
3849 5 * kPointerSize, | 3844 6 * kPointerSize, |
3850 1, | 3845 1, |
3851 29, | 3846 32, |
3852 { | 3847 { |
3853 B(LdaSmi8), U8(1), // | 3848 B(LdaSmi8), U8(1), // |
3854 B(Star), R(0), // | 3849 B(Star), R(0), // |
3855 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 3850 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
3856 B(Star), R(1), // | 3851 B(Star), R(1), // |
| 3852 B(Mov), R(1), R(2), // |
3857 B(LdaSmi8), U8(1), // | 3853 B(LdaSmi8), U8(1), // |
3858 B(Star), R(2), // | 3854 B(Star), R(3), // |
3859 B(Ldar), R(0), // | 3855 B(Ldar), R(0), // |
3860 B(Star), R(3), // | 3856 B(Star), R(4), // |
3861 B(LdaZero), // | 3857 B(LdaZero), // |
3862 B(Star), R(4), // | 3858 B(Star), R(5), // |
3863 B(CallRuntime), U16(Runtime::kSetProperty), R(1), U8(4), // | 3859 B(CallRuntime), U16(Runtime::kSetProperty), R(2), U8(4), // |
3864 B(Ldar), R(1), // | 3860 B(Ldar), R(1), // |
3865 B(Return), // | 3861 B(Return), // |
3866 }, | 3862 }, |
3867 1, | 3863 1, |
3868 {InstanceType::FIXED_ARRAY_TYPE}}, | 3864 {InstanceType::FIXED_ARRAY_TYPE}}, |
3869 {"return { __proto__: null }", | 3865 {"return { __proto__: null }", |
3870 2 * kPointerSize, | 3866 3 * kPointerSize, |
3871 1, | 3867 1, |
3872 17, | 3868 20, |
3873 { | 3869 { |
3874 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // | 3870 B(CreateObjectLiteral), U8(0), U8(0), U8(simple_flags), // |
3875 B(Star), R(0), // | 3871 B(Star), R(0), // |
3876 B(LdaNull), B(Star), R(1), // | 3872 B(Mov), R(0), R(1), // |
3877 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(0), U8(2), // | 3873 B(LdaNull), B(Star), R(2), // |
| 3874 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // |
3878 B(Ldar), R(0), // | 3875 B(Ldar), R(0), // |
3879 B(Return), // | 3876 B(Return), // |
3880 }, | 3877 }, |
3881 1, | 3878 1, |
3882 {InstanceType::FIXED_ARRAY_TYPE}}, | 3879 {InstanceType::FIXED_ARRAY_TYPE}}, |
3883 {"var a = 'test'; return { [a]: 1 }", | 3880 {"var a = 'test'; return { [a]: 1 }", |
3884 5 * kPointerSize, | 3881 6 * kPointerSize, |
3885 1, | 3882 1, |
3886 30, | 3883 33, |
3887 { | 3884 { |
3888 B(LdaConstant), U8(0), // | 3885 B(LdaConstant), U8(0), // |
3889 B(Star), R(0), // | 3886 B(Star), R(0), // |
3890 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // | 3887 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
3891 B(Star), R(1), // | 3888 B(Star), R(1), // |
| 3889 B(Mov), R(1), R(2), // |
3892 B(Ldar), R(0), // | 3890 B(Ldar), R(0), // |
3893 B(ToName), // | 3891 B(ToName), // |
3894 B(Star), R(2), // | 3892 B(Star), R(3), // |
3895 B(LdaSmi8), U8(1), // | 3893 B(LdaSmi8), U8(1), // |
3896 B(Star), R(3), // | 3894 B(Star), R(4), // |
3897 B(LdaZero), // | 3895 B(LdaZero), // |
3898 B(Star), R(4), // | 3896 B(Star), R(5), // |
3899 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3897 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // |
3900 U8(4), // | 3898 U8(4), // |
3901 B(Ldar), R(1), // | 3899 B(Ldar), R(1), // |
3902 B(Return), // | 3900 B(Return), // |
3903 }, | 3901 }, |
3904 2, | 3902 2, |
3905 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3903 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3906 InstanceType::FIXED_ARRAY_TYPE}}, | 3904 InstanceType::FIXED_ARRAY_TYPE}}, |
3907 {"var a = 'test'; return { val: a, [a]: 1 }", | 3905 {"var a = 'test'; return { val: a, [a]: 1 }", |
3908 5 * kPointerSize, | 3906 6 * kPointerSize, |
3909 1, | 3907 1, |
3910 36, | 3908 39, |
3911 { | 3909 { |
3912 B(LdaConstant), U8(0), // | 3910 B(LdaConstant), U8(0), // |
3913 B(Star), R(0), // | 3911 B(Star), R(0), // |
3914 B(CreateObjectLiteral), U8(1), U8(0), U8(deep_elements_flags), // | 3912 B(CreateObjectLiteral), U8(1), U8(0), U8(deep_elements_flags), // |
3915 B(Star), R(1), // | 3913 B(Star), R(1), // |
3916 B(Ldar), R(0), // | 3914 B(Ldar), R(0), // |
3917 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // | 3915 B(StoreICSloppy), R(1), U8(2), U8(vector->GetIndex(slot1)), // |
| 3916 B(Mov), R(1), R(2), // |
3918 B(Ldar), R(0), // | 3917 B(Ldar), R(0), // |
3919 B(ToName), // | 3918 B(ToName), // |
3920 B(Star), R(2), // | 3919 B(Star), R(3), // |
3921 B(LdaSmi8), U8(1), // | 3920 B(LdaSmi8), U8(1), // |
3922 B(Star), R(3), // | 3921 B(Star), R(4), // |
3923 B(LdaZero), // | 3922 B(LdaZero), // |
3924 B(Star), R(4), // | 3923 B(Star), R(5), // |
3925 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | 3924 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // |
3926 U8(4), // | 3925 U8(4), // |
3927 B(Ldar), R(1), // | 3926 B(Ldar), R(1), // |
3928 B(Return), // | 3927 B(Return), // |
3929 }, | 3928 }, |
3930 3, | 3929 3, |
3931 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3930 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3932 InstanceType::FIXED_ARRAY_TYPE, | 3931 InstanceType::FIXED_ARRAY_TYPE, |
3933 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 3932 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
3934 {"var a = 'test'; return { [a]: 1, __proto__: {} }", | 3933 {"var a = 'test'; return { [a]: 1, __proto__: {} }", |
3935 5 * kPointerSize, | 3934 6 * kPointerSize, |
3936 1, | 3935 1, |
3937 41, | 3936 49, |
3938 { | 3937 { |
3939 B(LdaConstant), U8(0), // | 3938 B(LdaConstant), U8(0), // |
3940 B(Star), R(0), // | 3939 B(Star), R(0), // |
3941 B(CreateObjectLiteral), U8(1), U8(1), U8(simple_flags), // | 3940 B(CreateObjectLiteral), U8(1), U8(1), U8(simple_flags), // |
3942 B(Star), R(1), // | 3941 B(Star), R(1), // |
| 3942 B(Mov), R(1), R(2), // |
3943 B(Ldar), R(0), // | 3943 B(Ldar), R(0), // |
3944 B(ToName), // | 3944 B(ToName), // |
3945 B(Star), R(2), // | 3945 B(Star), R(3), // |
3946 B(LdaSmi8), U8(1), // | 3946 B(LdaSmi8), U8(1), // |
| 3947 B(Star), R(4), // |
| 3948 B(LdaZero), // |
| 3949 B(Star), R(5), // |
| 3950 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // |
| 3951 U8(4), // |
| 3952 B(Mov), R(1), R(2), // |
| 3953 B(CreateObjectLiteral), U8(1), U8(0), U8(13), // |
| 3954 B(Star), R(4), // |
3947 B(Star), R(3), // | 3955 B(Star), R(3), // |
3948 B(LdaZero), // | 3956 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(2), U8(2), // |
3949 B(Star), R(4), // | |
3950 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | |
3951 U8(4), // | |
3952 B(CreateObjectLiteral), U8(1), U8(0), U8(13), // | |
3953 B(Star), R(2), // | |
3954 B(CallRuntime), U16(Runtime::kInternalSetPrototype), R(1), U8(2), // | |
3955 B(Ldar), R(1), // | 3957 B(Ldar), R(1), // |
3956 B(Return), // | 3958 B(Return), // |
3957 }, | 3959 }, |
3958 2, | 3960 2, |
3959 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 3961 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
3960 InstanceType::FIXED_ARRAY_TYPE}}, | 3962 InstanceType::FIXED_ARRAY_TYPE}}, |
3961 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", | 3963 {"var n = 'name'; return { [n]: 'val', get a() { }, set a(b) {} };", |
3962 5 * kPointerSize, | 3964 6 * kPointerSize, |
3963 1, | 3965 1, |
3964 64, | 3966 73, |
3965 { | 3967 { |
3966 B(LdaConstant), U8(0), // | 3968 B(LdaConstant), U8(0), // |
3967 B(Star), R(0), // | 3969 B(Star), R(0), // |
3968 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // | 3970 B(CreateObjectLiteral), U8(1), U8(0), U8(simple_flags), // |
3969 B(Star), R(1), // | 3971 B(Star), R(1), // |
| 3972 B(Mov), R(1), R(2), // |
3970 B(Ldar), R(0), // | 3973 B(Ldar), R(0), // |
3971 B(ToName), // | 3974 B(ToName), // |
3972 B(Star), R(2), // | 3975 B(Star), R(3), // |
3973 B(LdaConstant), U8(2), // | 3976 B(LdaConstant), U8(2), // |
| 3977 B(Star), R(4), // |
| 3978 B(LdaZero), // |
| 3979 B(Star), R(5), // |
| 3980 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(2), // |
| 3981 U8(4), // |
| 3982 B(Mov), R(1), R(2), // |
| 3983 B(LdaConstant), U8(3), // |
3974 B(Star), R(3), // | 3984 B(Star), R(3), // |
| 3985 B(CreateClosure), U8(4), U8(0), // |
| 3986 B(Star), R(4), // |
3975 B(LdaZero), // | 3987 B(LdaZero), // |
| 3988 B(Star), R(5), // |
| 3989 B(CallRuntime), U16(Runtime::kDefineGetterPropertyUnchecked), // |
| 3990 R(2), U8(4), // |
| 3991 B(Mov), R(1), R(2), // |
| 3992 B(LdaConstant), U8(3), // |
| 3993 B(Star), R(3), // |
| 3994 B(CreateClosure), U8(5), U8(0), // |
3976 B(Star), R(4), // | 3995 B(Star), R(4), // |
3977 B(CallRuntime), U16(Runtime::kDefineDataPropertyUnchecked), R(1), // | |
3978 U8(4), // | |
3979 B(LdaConstant), U8(3), // | |
3980 B(Star), R(2), // | |
3981 B(CreateClosure), U8(4), U8(0), // | |
3982 B(Star), R(3), // | |
3983 B(LdaZero), // | 3996 B(LdaZero), // |
3984 B(Star), R(4), // | 3997 B(Star), R(5), // |
3985 B(CallRuntime), U16(Runtime::kDefineGetterPropertyUnchecked), // | |
3986 R(1), U8(4), // | |
3987 B(LdaConstant), U8(3), // | |
3988 B(Star), R(2), // | |
3989 B(CreateClosure), U8(5), U8(0), // | |
3990 B(Star), R(3), // | |
3991 B(LdaZero), // | |
3992 B(Star), R(4), // | |
3993 B(CallRuntime), U16(Runtime::kDefineSetterPropertyUnchecked), // | 3998 B(CallRuntime), U16(Runtime::kDefineSetterPropertyUnchecked), // |
3994 R(1), U8(4), // | 3999 R(2), U8(4), // |
3995 B(Ldar), R(1), // | 4000 B(Ldar), R(1), // |
3996 B(Return), // | 4001 B(Return), // |
3997 }, | 4002 }, |
3998 6, | 4003 6, |
3999 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4004 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4000 InstanceType::FIXED_ARRAY_TYPE, | 4005 InstanceType::FIXED_ARRAY_TYPE, |
4001 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4006 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4002 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4007 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4003 InstanceType::SHARED_FUNCTION_INFO_TYPE, | 4008 InstanceType::SHARED_FUNCTION_INFO_TYPE, |
4004 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 4009 InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
(...skipping 12 matching lines...) Expand all Loading... |
4017 BytecodeGeneratorHelper helper; | 4022 BytecodeGeneratorHelper helper; |
4018 Zone zone; | 4023 Zone zone; |
4019 | 4024 |
4020 int deep_elements_flags = | 4025 int deep_elements_flags = |
4021 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 4026 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
4022 int wide_idx = 0; | 4027 int wide_idx = 0; |
4023 | 4028 |
4024 ExpectedSnippet<InstanceType, 257> snippets[] = { | 4029 ExpectedSnippet<InstanceType, 257> snippets[] = { |
4025 {"var a;" REPEAT_256(SPACE, | 4030 {"var a;" REPEAT_256(SPACE, |
4026 "a = 1.23;") "return { name: 'string', val: 9.2 };", | 4031 "a = 1.23;") "return { name: 'string', val: 9.2 };", |
4027 1 * kPointerSize, | 4032 2 * kPointerSize, |
4028 1, | 4033 1, |
4029 1031, | 4034 1033, |
4030 { | 4035 { |
4031 REPEAT_256(COMMA, // | 4036 REPEAT_256(COMMA, // |
4032 B(LdaConstant), U8(wide_idx++), // | 4037 B(LdaConstant), U8(wide_idx++), // |
4033 B(Star), R(0)), // | 4038 B(Star), R(0)), // |
4034 B(CreateObjectLiteralWide), U16(256), U16(0), // | 4039 B(CreateObjectLiteralWide), |
4035 U8(deep_elements_flags), // | 4040 U16(256), U16(0), // |
4036 B(Return) // | 4041 U8(deep_elements_flags), // |
| 4042 B(Star), R(1), // |
| 4043 B(Return) // |
4037 }, | 4044 }, |
4038 257, | 4045 257, |
4039 {REPEAT_256(COMMA, InstanceType::HEAP_NUMBER_TYPE), | 4046 {REPEAT_256(COMMA, InstanceType::HEAP_NUMBER_TYPE), |
4040 InstanceType::FIXED_ARRAY_TYPE}}, | 4047 InstanceType::FIXED_ARRAY_TYPE}}, |
4041 }; | 4048 }; |
4042 | 4049 |
4043 for (size_t i = 0; i < arraysize(snippets); i++) { | 4050 for (size_t i = 0; i < arraysize(snippets); i++) { |
4044 Handle<BytecodeArray> bytecode_array = | 4051 Handle<BytecodeArray> bytecode_array = |
4045 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4052 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
4046 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4053 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4671 B(ToNumber), // | 4678 B(ToNumber), // |
4672 B(Star), R(1), // | 4679 B(Star), R(1), // |
4673 B(Dec), // | 4680 B(Dec), // |
4674 B(Star), R(0), // | 4681 B(Star), R(0), // |
4675 B(Ldar), R(1), // | 4682 B(Ldar), R(1), // |
4676 B(Return), // | 4683 B(Return), // |
4677 }}, | 4684 }}, |
4678 {"var a = { val: 1 }; return a.val++;", | 4685 {"var a = { val: 1 }; return a.val++;", |
4679 3 * kPointerSize, | 4686 3 * kPointerSize, |
4680 1, | 4687 1, |
4681 23, | 4688 25, |
4682 { | 4689 { |
4683 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // | 4690 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
| 4691 B(Star), R(1), // |
4684 B(Star), R(0), // | 4692 B(Star), R(0), // |
4685 B(Star), R(1), // | 4693 B(Star), R(1), // |
4686 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 4694 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
4687 B(ToNumber), // | 4695 B(ToNumber), // |
4688 B(Star), R(2), // | 4696 B(Star), R(2), // |
4689 B(Inc), // | 4697 B(Inc), // |
4690 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // | 4698 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // |
4691 B(Ldar), R(2), // | 4699 B(Ldar), R(2), // |
4692 B(Return), // | 4700 B(Return), // |
4693 }, | 4701 }, |
4694 2, | 4702 2, |
4695 {InstanceType::FIXED_ARRAY_TYPE, | 4703 {InstanceType::FIXED_ARRAY_TYPE, |
4696 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4704 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4697 {"var a = { val: 1 }; return --a.val;", | 4705 {"var a = { val: 1 }; return --a.val;", |
4698 2 * kPointerSize, | 4706 2 * kPointerSize, |
4699 1, | 4707 1, |
4700 19, | 4708 21, |
4701 { | 4709 { |
4702 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // | 4710 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
| 4711 B(Star), R(1), // |
4703 B(Star), R(0), // | 4712 B(Star), R(0), // |
4704 B(Star), R(1), // | 4713 B(Star), R(1), // |
4705 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 4714 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
4706 B(ToNumber), // | 4715 B(ToNumber), // |
4707 B(Dec), // | 4716 B(Dec), // |
4708 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // | 4717 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // |
4709 B(Return), // | 4718 B(Return), // |
4710 }, | 4719 }, |
4711 2, | 4720 2, |
4712 {InstanceType::FIXED_ARRAY_TYPE, | 4721 {InstanceType::FIXED_ARRAY_TYPE, |
4713 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4722 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4714 {"var name = 'var'; var a = { val: 1 }; return a[name]--;", | 4723 {"var name = 'var'; var a = { val: 1 }; return a[name]--;", |
4715 5 * kPointerSize, | 4724 5 * kPointerSize, |
4716 1, | 4725 1, |
4717 30, | 4726 32, |
4718 { | 4727 { |
4719 B(LdaConstant), U8(0), // | 4728 B(LdaConstant), U8(0), // |
4720 B(Star), R(0), // | 4729 B(Star), R(0), // |
4721 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // | 4730 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // |
| 4731 B(Star), R(2), // |
4722 B(Star), R(1), // | 4732 B(Star), R(1), // |
4723 B(Star), R(2), // | 4733 B(Star), R(2), // |
4724 B(Ldar), R(0), // | 4734 B(Ldar), R(0), // |
4725 B(Star), R(3), // | 4735 B(Star), R(3), // |
4726 B(KeyedLoadICSloppy), R(2), U8(vector->GetIndex(slot1)), // | 4736 B(KeyedLoadICSloppy), R(2), U8(vector->GetIndex(slot1)), // |
4727 B(ToNumber), // | 4737 B(ToNumber), // |
4728 B(Star), R(4), // | 4738 B(Star), R(4), // |
4729 B(Dec), // | 4739 B(Dec), // |
4730 B(KeyedStoreICSloppy), R(2), R(3), U8(vector->GetIndex(slot2)), // | 4740 B(KeyedStoreICSloppy), R(2), R(3), U8(vector->GetIndex(slot2)), // |
4731 B(Ldar), R(4), // | 4741 B(Ldar), R(4), // |
4732 B(Return), // | 4742 B(Return), // |
4733 }, | 4743 }, |
4734 2, | 4744 2, |
4735 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4745 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4736 InstanceType::FIXED_ARRAY_TYPE}}, | 4746 InstanceType::FIXED_ARRAY_TYPE}}, |
4737 {"var name = 'var'; var a = { val: 1 }; return ++a[name];", | 4747 {"var name = 'var'; var a = { val: 1 }; return ++a[name];", |
4738 4 * kPointerSize, | 4748 4 * kPointerSize, |
4739 1, | 4749 1, |
4740 26, | 4750 28, |
4741 { | 4751 { |
4742 B(LdaConstant), U8(0), // | 4752 B(LdaConstant), U8(0), // |
4743 B(Star), R(0), // | 4753 B(Star), R(0), // |
4744 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // | 4754 B(CreateObjectLiteral), U8(1), U8(0), U8(object_literal_flags), // |
| 4755 B(Star), R(2), // |
4745 B(Star), R(1), // | 4756 B(Star), R(1), // |
4746 B(Star), R(2), // | 4757 B(Star), R(2), // |
4747 B(Ldar), R(0), // | 4758 B(Ldar), R(0), // |
4748 B(Star), R(3), // | 4759 B(Star), R(3), // |
4749 B(KeyedLoadICSloppy), R(2), U8(vector->GetIndex(slot1)), // | 4760 B(KeyedLoadICSloppy), R(2), U8(vector->GetIndex(slot1)), // |
4750 B(ToNumber), // | 4761 B(ToNumber), // |
4751 B(Inc), // | 4762 B(Inc), // |
4752 B(KeyedStoreICSloppy), R(2), R(3), U8(vector->GetIndex(slot2)), // | 4763 B(KeyedStoreICSloppy), R(2), R(3), U8(vector->GetIndex(slot2)), // |
4753 B(Return), // | 4764 B(Return), // |
4754 }, | 4765 }, |
4755 2, | 4766 2, |
4756 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, | 4767 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE, |
4757 InstanceType::FIXED_ARRAY_TYPE}}, | 4768 InstanceType::FIXED_ARRAY_TYPE}}, |
4758 {"var a = 1; var b = function() { return a }; return ++a;", | 4769 {"var a = 1; var b = function() { return a }; return ++a;", |
4759 2 * kPointerSize, | 4770 2 * kPointerSize, |
4760 1, | 4771 1, |
4761 26, | 4772 26, |
4762 { | 4773 { |
4763 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // | 4774 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // |
4764 U8(1), // | 4775 U8(1), // |
4765 B(PushContext), R(1), // | 4776 B(PushContext), R(1), // |
4766 B(LdaSmi8), U8(1), // | 4777 B(LdaSmi8), U8(1), // |
4767 B(StaContextSlot), R(1), U8(first_context_slot), // | 4778 B(StaContextSlot), R(1), U8(first_context_slot), // |
4768 B(CreateClosure), U8(0), U8(0), // | 4779 B(CreateClosure), U8(0), U8(0), // |
4769 B(Star), R(0), // | 4780 B(Star), R(0), // |
4770 B(LdaContextSlot), R(1), U8(first_context_slot), // | 4781 B(LdaContextSlot), R(1), U8(first_context_slot), // |
4771 B(ToNumber), // | 4782 B(ToNumber), // |
4772 B(Inc), // | 4783 B(Inc), // |
4773 B(StaContextSlot), R(1), U8(first_context_slot), // | 4784 B(StaContextSlot), R(1), U8(first_context_slot), // |
4774 B(Return), // | 4785 B(Return), // |
4775 }, | 4786 }, |
4776 1, | 4787 1, |
4777 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 4788 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
4778 {"var a = 1; var b = function() { return a }; return a--;", | 4789 {"var a = 1; var b = function() { return a }; return a--;", |
4779 3 * kPointerSize, | 4790 3 * kPointerSize, |
4780 1, | 4791 1, |
4781 30, | 4792 30, |
4782 { | 4793 { |
4783 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // | 4794 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // |
4784 U8(1), // | 4795 U8(1), // |
4785 B(PushContext), R(1), // | 4796 B(PushContext), R(1), // |
4786 B(LdaSmi8), U8(1), // | 4797 B(LdaSmi8), U8(1), // |
4787 B(StaContextSlot), R(1), U8(first_context_slot), // | 4798 B(StaContextSlot), R(1), U8(first_context_slot), // |
4788 B(CreateClosure), U8(0), U8(0), // | 4799 B(CreateClosure), U8(0), U8(0), // |
4789 B(Star), R(0), // | 4800 B(Star), R(0), // |
4790 B(LdaContextSlot), R(1), U8(first_context_slot), // | 4801 B(LdaContextSlot), R(1), U8(first_context_slot), // |
4791 B(ToNumber), // | 4802 B(ToNumber), // |
4792 B(Star), R(2), // | 4803 B(Star), R(2), // |
4793 B(Dec), // | 4804 B(Dec), // |
4794 B(StaContextSlot), R(1), U8(first_context_slot), // | 4805 B(StaContextSlot), R(1), U8(first_context_slot), // |
4795 B(Ldar), R(2), // | 4806 B(Ldar), R(2), // |
4796 B(Return), // | 4807 B(Return), // |
4797 }, | 4808 }, |
4798 1, | 4809 1, |
4799 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 4810 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
4800 {"var idx = 1; var a = [1, 2]; return a[idx++] = 2;", | 4811 {"var idx = 1; var a = [1, 2]; return a[idx++] = 2;", |
4801 4 * kPointerSize, | 4812 4 * kPointerSize, |
4802 1, | 4813 1, |
4803 27, | 4814 27, |
4804 { | 4815 { |
4805 B(LdaSmi8), U8(1), // | 4816 B(LdaSmi8), U8(1), // |
4806 B(Star), R(0), // | 4817 B(Star), R(0), // |
4807 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), // | 4818 B(CreateArrayLiteral), U8(0), U8(0), U8(array_literal_flags), // |
4808 B(Star), R(1), // | 4819 B(Star), R(1), // |
4809 B(Star), R(2), // | 4820 B(Star), R(2), // |
4810 B(Ldar), R(0), // | 4821 B(Ldar), R(0), // |
4811 B(ToNumber), // | 4822 B(ToNumber), // |
4812 B(Star), R(3), // | 4823 B(Star), R(3), // |
4813 B(Inc), // | 4824 B(Inc), // |
4814 B(Star), R(0), // | 4825 B(Star), R(0), // |
4815 B(LdaSmi8), U8(2), // | 4826 B(LdaSmi8), U8(2), // |
4816 B(KeyedStoreICSloppy), R(2), R(3), // | 4827 B(KeyedStoreICSloppy), R(2), R(3), // |
4817 U8(store_vector->GetIndex(store_slot)), // | 4828 U8(store_vector->GetIndex(store_slot)), // |
4818 B(Return), // | 4829 B(Return), // |
4819 }, | 4830 }, |
4820 1, | 4831 1, |
4821 {InstanceType::FIXED_ARRAY_TYPE}}, | 4832 {InstanceType::FIXED_ARRAY_TYPE}}, |
4822 }; | 4833 }; |
4823 | 4834 |
4824 for (size_t i = 0; i < arraysize(snippets); i++) { | 4835 for (size_t i = 0; i < arraysize(snippets); i++) { |
4825 Handle<BytecodeArray> bytecode_array = | 4836 Handle<BytecodeArray> bytecode_array = |
4826 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4837 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
4827 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4838 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
4828 } | 4839 } |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4951 B(Star), R(1), // | 4962 B(Star), R(1), // |
4952 B(LdaSmi8), U8(2), // | 4963 B(LdaSmi8), U8(2), // |
4953 B(Div), R(1), // | 4964 B(Div), R(1), // |
4954 B(Star), R(0), // | 4965 B(Star), R(0), // |
4955 B(LdaUndefined), // | 4966 B(LdaUndefined), // |
4956 B(Return), // | 4967 B(Return), // |
4957 }}, | 4968 }}, |
4958 {"var a = { val: 2 }; a.name *= 2;", | 4969 {"var a = { val: 2 }; a.name *= 2;", |
4959 3 * kPointerSize, | 4970 3 * kPointerSize, |
4960 1, | 4971 1, |
4961 24, | 4972 26, |
4962 { | 4973 { |
4963 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // | 4974 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
| 4975 B(Star), R(1), // |
4964 B(Star), R(0), // | 4976 B(Star), R(0), // |
4965 B(Star), R(1), // | 4977 B(Star), R(1), // |
4966 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // | 4978 B(LoadICSloppy), R(1), U8(1), U8(vector->GetIndex(slot1)), // |
4967 B(Star), R(2), // | 4979 B(Star), R(2), // |
4968 B(LdaSmi8), U8(2), // | 4980 B(LdaSmi8), U8(2), // |
4969 B(Mul), R(2), // | 4981 B(Mul), R(2), // |
4970 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // | 4982 B(StoreICSloppy), R(1), U8(1), U8(vector->GetIndex(slot2)), // |
4971 B(LdaUndefined), // | 4983 B(LdaUndefined), // |
4972 B(Return), // | 4984 B(Return), // |
4973 }, | 4985 }, |
4974 2, | 4986 2, |
4975 {InstanceType::FIXED_ARRAY_TYPE, | 4987 {InstanceType::FIXED_ARRAY_TYPE, |
4976 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4988 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
4977 {"var a = { 1: 2 }; a[1] ^= 2;", | 4989 {"var a = { 1: 2 }; a[1] ^= 2;", |
4978 4 * kPointerSize, | 4990 4 * kPointerSize, |
4979 1, | 4991 1, |
4980 27, | 4992 29, |
4981 { | 4993 { |
4982 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // | 4994 B(CreateObjectLiteral), U8(0), U8(0), U8(object_literal_flags), // |
| 4995 B(Star), R(1), // |
4983 B(Star), R(0), // | 4996 B(Star), R(0), // |
4984 B(Star), R(1), // | 4997 B(Star), R(1), // |
4985 B(LdaSmi8), U8(1), // | 4998 B(LdaSmi8), U8(1), // |
4986 B(Star), R(2), // | 4999 B(Star), R(2), // |
4987 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // | 5000 B(KeyedLoadICSloppy), R(1), U8(vector->GetIndex(slot1)), // |
4988 B(Star), R(3), // | 5001 B(Star), R(3), // |
4989 B(LdaSmi8), U8(2), // | 5002 B(LdaSmi8), U8(2), // |
4990 B(BitwiseXor), R(3), // | 5003 B(BitwiseXor), R(3), // |
4991 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // | 5004 B(KeyedStoreICSloppy), R(1), R(2), U8(vector->GetIndex(slot2)), // |
4992 B(LdaUndefined), // | 5005 B(LdaUndefined), // |
4993 B(Return), // | 5006 B(Return), // |
4994 }, | 5007 }, |
4995 1, | 5008 1, |
4996 {InstanceType::FIXED_ARRAY_TYPE}}, | 5009 {InstanceType::FIXED_ARRAY_TYPE}}, |
4997 {"var a = 1; (function f() { return a; }); a |= 24;", | 5010 {"var a = 1; (function f() { return a; }); a |= 24;", |
4998 2 * kPointerSize, | 5011 2 * kPointerSize, |
4999 1, | 5012 1, |
5000 29, | 5013 29, |
5001 { | 5014 { |
5002 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // | 5015 B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), // |
5003 U8(1), // | 5016 U8(1), // |
5004 B(PushContext), R(0), // | 5017 B(PushContext), R(0), // |
5005 B(LdaSmi8), U8(1), // | 5018 B(LdaSmi8), U8(1), // |
5006 B(StaContextSlot), R(0), U8(first_context_slot), // | 5019 B(StaContextSlot), R(0), U8(first_context_slot), // |
5007 B(CreateClosure), U8(0), U8(0), // | 5020 B(CreateClosure), U8(0), U8(0), // |
5008 B(LdaContextSlot), R(0), U8(first_context_slot), // | 5021 B(LdaContextSlot), R(0), U8(first_context_slot), // |
5009 B(Star), R(1), // | 5022 B(Star), R(1), // |
5010 B(LdaSmi8), U8(24), // | 5023 B(LdaSmi8), U8(24), // |
5011 B(BitwiseOr), R(1), // | 5024 B(BitwiseOr), R(1), // |
5012 B(StaContextSlot), R(0), U8(first_context_slot), // | 5025 B(StaContextSlot), R(0), U8(first_context_slot), // |
5013 B(LdaUndefined), // | 5026 B(LdaUndefined), // |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5312 }, | 5325 }, |
5313 1, | 5326 1, |
5314 {InstanceType::FIXED_ARRAY_TYPE}}, | 5327 {InstanceType::FIXED_ARRAY_TYPE}}, |
5315 {"var x = { 'a': 1, 'b': 2 };\n" | 5328 {"var x = { 'a': 1, 'b': 2 };\n" |
5316 "for (x['a'] in [10, 20, 30]) {\n" | 5329 "for (x['a'] in [10, 20, 30]) {\n" |
5317 " if (x['a'] == 10) continue;\n" | 5330 " if (x['a'] == 10) continue;\n" |
5318 " if (x['a'] == 20) break;\n" | 5331 " if (x['a'] == 20) break;\n" |
5319 "}", | 5332 "}", |
5320 8 * kPointerSize, | 5333 8 * kPointerSize, |
5321 1, | 5334 1, |
5322 91, | 5335 93, |
5323 { | 5336 { |
5324 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 5337 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 5338 B(Star), R(1), // |
5325 B(Star), R(0), // | 5339 B(Star), R(0), // |
5326 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // | 5340 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // |
5327 B(JumpIfUndefined), U8(79), // | 5341 B(JumpIfUndefined), U8(79), // |
5328 B(JumpIfNull), U8(77), // | 5342 B(JumpIfNull), U8(77), // |
5329 B(ToObject), // | 5343 B(ToObject), // |
5330 B(JumpIfNull), U8(74), // | 5344 B(JumpIfNull), U8(74), // |
5331 B(Star), R(1), // | 5345 B(Star), R(1), // |
5332 B(ForInPrepare), R(2), // | 5346 B(ForInPrepare), R(2), // |
5333 B(LdaZero), // | 5347 B(LdaZero), // |
5334 B(Star), R(5), // | 5348 B(Star), R(5), // |
(...skipping 1378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6713 std::string(function_epilogue); | 6727 std::string(function_epilogue); |
6714 Handle<BytecodeArray> bytecode_array = | 6728 Handle<BytecodeArray> bytecode_array = |
6715 helper.MakeBytecode(script.c_str(), "*", "f"); | 6729 helper.MakeBytecode(script.c_str(), "*", "f"); |
6716 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 6730 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
6717 } | 6731 } |
6718 } | 6732 } |
6719 | 6733 |
6720 } // namespace interpreter | 6734 } // namespace interpreter |
6721 } // namespace internal | 6735 } // namespace internal |
6722 } // namespace v8 | 6736 } // namespace v8 |
OLD | NEW |