| 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 |