| 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 4886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4897 {"for (var p in undefined) {}", | 4897 {"for (var p in undefined) {}", |
| 4898 2 * kPointerSize, | 4898 2 * kPointerSize, |
| 4899 1, | 4899 1, |
| 4900 2, | 4900 2, |
| 4901 {B(LdaUndefined), B(Return)}, | 4901 {B(LdaUndefined), B(Return)}, |
| 4902 0}, | 4902 0}, |
| 4903 {"var x = 'potatoes';\n" | 4903 {"var x = 'potatoes';\n" |
| 4904 "for (var p in x) { return p; }", | 4904 "for (var p in x) { return p; }", |
| 4905 8 * kPointerSize, | 4905 8 * kPointerSize, |
| 4906 1, | 4906 1, |
| 4907 45, | 4907 42, |
| 4908 { | 4908 { |
| 4909 B(LdaConstant), U8(0), // | 4909 B(LdaConstant), U8(0), // |
| 4910 B(Star), R(1), // | 4910 B(Star), R(1), // |
| 4911 B(JumpIfUndefined), U8(39), // | 4911 B(JumpIfUndefined), U8(36), // |
| 4912 B(JumpIfNull), U8(37), // | 4912 B(JumpIfNull), U8(34), // |
| 4913 B(ToObject), // | 4913 B(ToObject), // |
| 4914 B(JumpIfNull), U8(34), // | 4914 B(JumpIfNull), U8(31), // |
| 4915 B(Star), R(3), // | 4915 B(Star), R(3), // |
| 4916 B(ForInPrepare), R(4), R(5), R(6), // | 4916 B(ForInPrepare), R(4), // |
| 4917 B(LdaZero), // | 4917 B(LdaZero), // |
| 4918 B(Star), R(7), // | 4918 B(Star), R(7), // |
| 4919 B(ForInDone), R(7), R(6), // | 4919 B(ForInDone), R(7), R(6), // |
| 4920 B(JumpIfTrue), U8(20), // | 4920 B(JumpIfTrue), U8(19), // |
| 4921 B(ForInNext), R(3), R(4), R(5), R(7), // | 4921 B(ForInNext), R(3), R(7), R(4), // |
| 4922 B(JumpIfUndefined), U8(7), // | 4922 B(JumpIfUndefined), U8(7), // |
| 4923 B(Star), R(0), // | 4923 B(Star), R(0), // |
| 4924 B(Star), R(2), // | 4924 B(Star), R(2), // |
| 4925 B(Return), // | 4925 B(Return), // |
| 4926 B(ForInStep), R(7), // | 4926 B(ForInStep), R(7), // |
| 4927 B(Star), R(7), // | 4927 B(Star), R(7), // |
| 4928 B(Jump), U8(-21), // | 4928 B(Jump), U8(-20), // |
| 4929 B(LdaUndefined), // | 4929 B(LdaUndefined), // |
| 4930 B(Return), // | 4930 B(Return), // |
| 4931 }, | 4931 }, |
| 4932 1, | 4932 1, |
| 4933 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 4933 {InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 4934 {"var x = 0;\n" | 4934 {"var x = 0;\n" |
| 4935 "for (var p in [1,2,3]) { x += p; }", | 4935 "for (var p in [1,2,3]) { x += p; }", |
| 4936 8 * kPointerSize, | 4936 8 * kPointerSize, |
| 4937 1, | 4937 1, |
| 4938 51, | 4938 48, |
| 4939 { | 4939 { |
| 4940 B(LdaZero), // | 4940 B(LdaZero), // |
| 4941 B(Star), R(1), // | 4941 B(Star), R(1), // |
| 4942 B(CreateArrayLiteral), U8(0), U8(0), U8(3), // | 4942 B(CreateArrayLiteral), U8(0), U8(0), U8(3), // |
| 4943 B(JumpIfUndefined), U8(42), // | 4943 B(JumpIfUndefined), U8(39), // |
| 4944 B(JumpIfNull), U8(40), // | 4944 B(JumpIfNull), U8(37), // |
| 4945 B(ToObject), // | 4945 B(ToObject), // |
| 4946 B(JumpIfNull), U8(37), // | 4946 B(JumpIfNull), U8(34), // |
| 4947 B(Star), R(3), // | 4947 B(Star), R(3), // |
| 4948 B(ForInPrepare), R(4), R(5), R(6), // | 4948 B(ForInPrepare), R(4), // |
| 4949 B(LdaZero), // | 4949 B(LdaZero), // |
| 4950 B(Star), R(7), // | 4950 B(Star), R(7), // |
| 4951 B(ForInDone), R(7), R(6), // | 4951 B(ForInDone), R(7), R(6), // |
| 4952 B(JumpIfTrue), U8(23), // | 4952 B(JumpIfTrue), U8(22), // |
| 4953 B(ForInNext), R(3), R(4), R(5), R(7), // | 4953 B(ForInNext), R(3), R(7), R(4), // |
| 4954 B(JumpIfUndefined), U8(10), // | 4954 B(JumpIfUndefined), U8(10), // |
| 4955 B(Star), R(0), // | 4955 B(Star), R(0), // |
| 4956 B(Star), R(2), // | 4956 B(Star), R(2), // |
| 4957 B(Add), R(1), // | 4957 B(Add), R(1), // |
| 4958 B(Star), R(1), // | 4958 B(Star), R(1), // |
| 4959 B(ForInStep), R(7), // | 4959 B(ForInStep), R(7), // |
| 4960 B(Star), R(7), // | 4960 B(Star), R(7), // |
| 4961 B(Jump), U8(-24), // | 4961 B(Jump), U8(-23), // |
| 4962 B(LdaUndefined), // | 4962 B(LdaUndefined), // |
| 4963 B(Return), // | 4963 B(Return), // |
| 4964 }, | 4964 }, |
| 4965 1, | 4965 1, |
| 4966 {InstanceType::FIXED_ARRAY_TYPE}}, | 4966 {InstanceType::FIXED_ARRAY_TYPE}}, |
| 4967 {"var x = { 'a': 1, 'b': 2 };\n" | 4967 {"var x = { 'a': 1, 'b': 2 };\n" |
| 4968 "for (x['a'] in [10, 20, 30]) {\n" | 4968 "for (x['a'] in [10, 20, 30]) {\n" |
| 4969 " if (x['a'] == 10) continue;\n" | 4969 " if (x['a'] == 10) continue;\n" |
| 4970 " if (x['a'] == 20) break;\n" | 4970 " if (x['a'] == 20) break;\n" |
| 4971 "}", | 4971 "}", |
| 4972 7 * kPointerSize, | 4972 7 * kPointerSize, |
| 4973 1, | 4973 1, |
| 4974 80, | 4974 77, |
| 4975 { | 4975 { |
| 4976 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // | 4976 B(CreateObjectLiteral), U8(0), U8(0), U8(deep_elements_flags), // |
| 4977 B(Star), R(0), // | 4977 B(Star), R(0), // |
| 4978 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // | 4978 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // |
| 4979 B(JumpIfUndefined), U8(68), // | 4979 B(JumpIfUndefined), U8(65), // |
| 4980 B(JumpIfNull), U8(66), // | 4980 B(JumpIfNull), U8(63), // |
| 4981 B(ToObject), // | 4981 B(ToObject), // |
| 4982 B(JumpIfNull), U8(63), // | 4982 B(JumpIfNull), U8(60), // |
| 4983 B(Star), R(1), // | 4983 B(Star), R(1), // |
| 4984 B(ForInPrepare), R(2), R(3), R(4), // | 4984 B(ForInPrepare), R(2), // |
| 4985 B(LdaZero), // | 4985 B(LdaZero), // |
| 4986 B(Star), R(5), // | 4986 B(Star), R(5), // |
| 4987 B(ForInDone), R(5), R(4), // | 4987 B(ForInDone), R(5), R(4), // |
| 4988 B(JumpIfTrue), U8(49), // | 4988 B(JumpIfTrue), U8(48), // |
| 4989 B(ForInNext), R(1), R(2), R(3), R(5), // | 4989 B(ForInNext), R(1), R(5), R(2), // |
| 4990 B(JumpIfUndefined), U8(36), // | 4990 B(JumpIfUndefined), U8(36), // |
| 4991 B(Star), R(6), // | 4991 B(Star), R(6), // |
| 4992 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot4)), // | 4992 B(StoreICSloppy), R(0), U8(2), U8(vector->GetIndex(slot4)), // |
| 4993 B(LoadICSloppy), R(0), U8(2), U8(vector->GetIndex(slot2)), // | 4993 B(LoadICSloppy), R(0), U8(2), U8(vector->GetIndex(slot2)), // |
| 4994 B(Star), R(6), // | 4994 B(Star), R(6), // |
| 4995 B(LdaSmi8), U8(10), // | 4995 B(LdaSmi8), U8(10), // |
| 4996 B(TestEqual), R(6), // | 4996 B(TestEqual), R(6), // |
| 4997 B(JumpIfFalse), U8(4), // | 4997 B(JumpIfFalse), U8(4), // |
| 4998 B(Jump), U8(16), // | 4998 B(Jump), U8(16), // |
| 4999 B(LoadICSloppy), R(0), U8(2), U8(vector->GetIndex(slot3)), // | 4999 B(LoadICSloppy), R(0), U8(2), U8(vector->GetIndex(slot3)), // |
| 5000 B(Star), R(6), // | 5000 B(Star), R(6), // |
| 5001 B(LdaSmi8), U8(20), // | 5001 B(LdaSmi8), U8(20), // |
| 5002 B(TestEqual), R(6), // | 5002 B(TestEqual), R(6), // |
| 5003 B(JumpIfFalse), U8(4), // | 5003 B(JumpIfFalse), U8(4), // |
| 5004 B(Jump), U8(8), // | 5004 B(Jump), U8(8), // |
| 5005 B(ForInStep), R(5), // | 5005 B(ForInStep), R(5), // |
| 5006 B(Star), R(5), // | 5006 B(Star), R(5), // |
| 5007 B(Jump), U8(-50), // | 5007 B(Jump), U8(-49), // |
| 5008 B(LdaUndefined), // | 5008 B(LdaUndefined), // |
| 5009 B(Return), // | 5009 B(Return), // |
| 5010 }, | 5010 }, |
| 5011 3, | 5011 3, |
| 5012 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, | 5012 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE, |
| 5013 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, | 5013 InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE}}, |
| 5014 {"var x = [ 10, 11, 12 ] ;\n" | 5014 {"var x = [ 10, 11, 12 ] ;\n" |
| 5015 "for (x[0] in [1,2,3]) { return x[3]; }", | 5015 "for (x[0] in [1,2,3]) { return x[3]; }", |
| 5016 8 * kPointerSize, | 5016 8 * kPointerSize, |
| 5017 1, | 5017 1, |
| 5018 63, | 5018 60, |
| 5019 { | 5019 { |
| 5020 B(CreateArrayLiteral), U8(0), U8(0), U8(simple_flags), // | 5020 B(CreateArrayLiteral), U8(0), U8(0), U8(simple_flags), // |
| 5021 B(Star), R(0), // | 5021 B(Star), R(0), // |
| 5022 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // | 5022 B(CreateArrayLiteral), U8(1), U8(1), U8(simple_flags), // |
| 5023 B(JumpIfUndefined), U8(51), // | 5023 B(JumpIfUndefined), U8(48), // |
| 5024 B(JumpIfNull), U8(49), // | 5024 B(JumpIfNull), U8(46), // |
| 5025 B(ToObject), // | 5025 B(ToObject), // |
| 5026 B(JumpIfNull), U8(46), // | 5026 B(JumpIfNull), U8(43), // |
| 5027 B(Star), R(1), // | 5027 B(Star), R(1), // |
| 5028 B(ForInPrepare), R(2), R(3), R(4), // | 5028 B(ForInPrepare), R(2), // |
| 5029 B(LdaZero), // | 5029 B(LdaZero), // |
| 5030 B(Star), R(5), // | 5030 B(Star), R(5), // |
| 5031 B(ForInDone), R(5), R(4), // | 5031 B(ForInDone), R(5), R(4), // |
| 5032 B(JumpIfTrue), U8(32), // | 5032 B(JumpIfTrue), U8(31), // |
| 5033 B(ForInNext), R(1), R(2), R(3), R(5), // | 5033 B(ForInNext), R(1), R(5), R(2), // |
| 5034 B(JumpIfUndefined), U8(19), // | 5034 B(JumpIfUndefined), U8(19), // |
| 5035 B(Star), R(6), // | 5035 B(Star), R(6), // |
| 5036 B(LdaZero), // | 5036 B(LdaZero), // |
| 5037 B(Star), R(7), // | 5037 B(Star), R(7), // |
| 5038 B(Ldar), R(6), // | 5038 B(Ldar), R(6), // |
| 5039 B(KeyedStoreICSloppy), R(0), R(7), U8(vector->GetIndex(slot3)), // | 5039 B(KeyedStoreICSloppy), R(0), R(7), U8(vector->GetIndex(slot3)), // |
| 5040 B(LdaSmi8), U8(3), // | 5040 B(LdaSmi8), U8(3), // |
| 5041 B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot2)), // | 5041 B(KeyedLoadICSloppy), R(0), U8(vector->GetIndex(slot2)), // |
| 5042 B(Return), // | 5042 B(Return), // |
| 5043 B(ForInStep), R(5), // | 5043 B(ForInStep), R(5), // |
| 5044 B(Star), R(5), // | 5044 B(Star), R(5), // |
| 5045 B(Jump), U8(-33), // | 5045 B(Jump), U8(-32), // |
| 5046 B(LdaUndefined), // | 5046 B(LdaUndefined), // |
| 5047 B(Return), // | 5047 B(Return), // |
| 5048 }, | 5048 }, |
| 5049 2, | 5049 2, |
| 5050 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE}}, | 5050 {InstanceType::FIXED_ARRAY_TYPE, InstanceType::FIXED_ARRAY_TYPE}}, |
| 5051 }; | 5051 }; |
| 5052 | 5052 |
| 5053 for (size_t i = 0; i < arraysize(snippets); i++) { | 5053 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 5054 Handle<BytecodeArray> bytecode_array = | 5054 Handle<BytecodeArray> bytecode_array = |
| 5055 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 5055 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| (...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6266 std::string(function_epilogue); | 6266 std::string(function_epilogue); |
| 6267 Handle<BytecodeArray> bytecode_array = | 6267 Handle<BytecodeArray> bytecode_array = |
| 6268 helper.MakeBytecode(script.c_str(), "t", "f"); | 6268 helper.MakeBytecode(script.c_str(), "t", "f"); |
| 6269 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 6269 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 6270 } | 6270 } |
| 6271 } | 6271 } |
| 6272 | 6272 |
| 6273 } // namespace interpreter | 6273 } // namespace interpreter |
| 6274 } // namespace internal | 6274 } // namespace internal |
| 6275 } // namespace v8 | 6275 } // namespace v8 |
| OLD | NEW |