Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1588903002: [Interpreter] Fixes VisitObjectLiteral to reserve consecutive registers in innerscope. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased the patch. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698