OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // TODO(rmcilroy): Remove this define after this flag is turned on globally | 5 // TODO(rmcilroy): Remove this define after this flag is turned on globally |
6 #define V8_IMMINENT_DEPRECATION_WARNINGS | 6 #define V8_IMMINENT_DEPRECATION_WARNINGS |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/compiler.h" | 10 #include "src/compiler.h" |
(...skipping 4913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4924 }}, | 4924 }}, |
4925 }; | 4925 }; |
4926 | 4926 |
4927 for (size_t i = 0; i < arraysize(snippets); i++) { | 4927 for (size_t i = 0; i < arraysize(snippets); i++) { |
4928 Handle<BytecodeArray> bytecode_array = | 4928 Handle<BytecodeArray> bytecode_array = |
4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
4931 } | 4931 } |
4932 } | 4932 } |
4933 | 4933 |
4934 | |
4935 TEST(AssignmentsInBinaryExpression) { | |
4936 InitializedHandleScope handle_scope; | |
4937 BytecodeGeneratorHelper helper; | |
4938 | |
4939 ExpectedSnippet<const char*> snippets[] = { | |
4940 {"var x = 0, y = 1;\n" | |
4941 "return (x = 2, y = 3, x = 4, y = 5)", | |
4942 2 * kPointerSize, | |
4943 1, | |
4944 24, | |
4945 { | |
4946 B(LdaZero), B(Star), R(0), // | |
4947 B(LdaSmi8), U8(1), // | |
4948 B(Star), R(1), // | |
4949 B(LdaSmi8), U8(2), // | |
4950 B(Star), R(0), // | |
4951 B(LdaSmi8), U8(3), // | |
4952 B(Star), R(1), // | |
4953 B(LdaSmi8), U8(4), // | |
4954 B(Star), R(0), // | |
4955 B(LdaSmi8), U8(5), // | |
4956 B(Star), R(1), // | |
4957 B(Return), // | |
4958 }, | |
4959 0}, | |
4960 {"var x = 55;\n" | |
4961 "var y = (x = 100);\n" | |
4962 "return y", | |
4963 2 * kPointerSize, | |
4964 1, | |
4965 13, | |
4966 { | |
4967 B(LdaSmi8), U8(55), // | |
4968 B(Star), R(0), // | |
4969 B(LdaSmi8), U8(100), // | |
4970 B(Star), R(0), // | |
4971 B(Star), R(1), // | |
4972 B(Ldar), R(1), // | |
4973 B(Return), // | |
4974 }, | |
4975 0}, | |
4976 {"var x = 55;\n" | |
4977 "x = x + (x = 100) + (x = 101);\n" | |
4978 "return x;", | |
4979 4 * kPointerSize, | |
4980 1, | |
4981 26, | |
4982 { | |
4983 B(LdaSmi8), U8(55), // | |
4984 B(Star), R(0), // | |
4985 B(LdaSmi8), U8(100), // | |
4986 B(Star), R(1), // | |
4987 B(Add), R(0), // | |
4988 B(Star), R(2), // | |
4989 B(LdaSmi8), U8(101), // | |
4990 B(Star), R(3), // | |
4991 B(Add), R(2), // | |
4992 B(Mov), R(3), R(0), // | |
4993 B(Star), R(0), // | |
4994 B(Ldar), R(0), // | |
4995 B(Return), // | |
4996 }, | |
4997 0}, | |
4998 // TODO(oth): Add return x + (x++) + (++x); | |
rmcilroy
2015/11/03 14:17:52
Add this?
oth
2015/11/04 10:03:37
Done.
| |
4999 {"var x = 55;\n" | |
5000 "x = (x = 56) - x + (x = 57);\n" | |
5001 "x++;\n" | |
5002 "return x;", | |
5003 3 * kPointerSize, | |
5004 1, | |
5005 38, | |
5006 { | |
5007 B(LdaSmi8), U8(55), // | |
5008 B(Star), R(0), // | |
5009 B(LdaSmi8), U8(56), // | |
5010 B(Star), R(0), // | |
5011 B(Star), R(1), // | |
5012 B(Ldar), R(0), // | |
5013 B(Sub), R(1), // | |
5014 B(Star), R(2), // | |
5015 B(LdaSmi8), U8(57), // | |
5016 B(Star), R(1), // | |
5017 B(Add), R(2), // | |
5018 B(Mov), R(1), R(0), // | |
5019 B(Star), R(0), // | |
5020 B(Ldar), R(0), // | |
5021 B(ToNumber), // | |
5022 B(Star), R(1), // | |
5023 B(Inc), // | |
5024 B(Star), R(0), // | |
5025 B(Ldar), R(0), // | |
5026 B(Return), // | |
5027 }, | |
5028 0}, | |
5029 {"var x = 55;\n" | |
5030 "var y = x + (x = 1) + (x = 2) + (x = 3);\n" | |
5031 "return y;", | |
5032 6 * kPointerSize, | |
5033 1, | |
5034 34, | |
5035 { | |
5036 B(LdaSmi8), U8(55), // | |
5037 B(Star), R(0), // | |
5038 B(LdaSmi8), U8(1), // | |
5039 B(Star), R(2), // | |
5040 B(Add), R(0), // | |
5041 B(Star), R(3), // | |
5042 B(LdaSmi8), U8(2), // | |
5043 B(Star), R(4), // | |
5044 B(Add), R(3), // | |
5045 B(Star), R(5), // | |
5046 B(LdaSmi8), U8(3), // | |
5047 B(Star), R(3), // | |
5048 B(Add), R(5), // | |
5049 B(Mov), R(3), R(0), // | |
5050 B(Star), R(1), // | |
5051 B(Ldar), R(1), // | |
5052 B(Return), // | |
5053 }, | |
5054 0}, | |
5055 {"var x = 55;\n" | |
5056 "var x = x + (x = 1) + (x = 2) + (x = 3);\n" | |
5057 "return x;", | |
5058 5 * kPointerSize, | |
5059 1, | |
5060 34, | |
5061 { | |
5062 B(LdaSmi8), U8(55), // | |
5063 B(Star), R(0), // | |
5064 B(LdaSmi8), U8(1), // | |
5065 B(Star), R(1), // | |
5066 B(Add), R(0), // | |
5067 B(Star), R(2), // | |
5068 B(LdaSmi8), U8(2), // | |
5069 B(Star), R(3), // | |
5070 B(Add), R(2), // | |
5071 B(Star), R(4), // | |
5072 B(LdaSmi8), U8(3), // | |
5073 B(Star), R(2), // | |
5074 B(Add), R(4), // | |
5075 B(Mov), R(2), R(0), // | |
5076 B(Star), R(0), // | |
5077 B(Ldar), R(0), // | |
5078 B(Return), // | |
5079 }, | |
5080 0}, | |
5081 {"var x = 10, y = 20;\n" | |
5082 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + " | |
5083 "y;\n", | |
5084 6 * kPointerSize, | |
5085 1, | |
5086 64, | |
5087 { | |
5088 B(LdaSmi8), U8(10), // | |
5089 B(Star), R(0), // | |
5090 B(LdaSmi8), U8(20), // | |
5091 B(Star), R(1), // | |
5092 B(LdaSmi8), U8(1), // | |
5093 B(Star), R(2), // | |
5094 B(Add), R(0), // | |
5095 B(Star), R(3), // | |
5096 B(LdaSmi8), U8(1), // | |
5097 B(Add), R(2), // | |
5098 B(Star), R(4), // | |
5099 B(LdaSmi8), U8(2), // | |
5100 B(Star), R(1), // | |
5101 B(Mul), R(4), // | |
5102 B(Add), R(3), // | |
5103 B(Star), R(4), // | |
5104 B(LdaSmi8), U8(3), // | |
5105 B(Star), R(1), // | |
5106 B(Add), R(4), // | |
5107 B(Star), R(3), // | |
5108 B(LdaSmi8), U8(4), // | |
5109 B(Star), R(4), // | |
5110 B(Add), R(3), // | |
5111 B(Star), R(5), // | |
5112 B(LdaSmi8), U8(5), // | |
5113 B(Star), R(1), // | |
5114 B(Add), R(5), // | |
5115 B(Star), R(3), // | |
5116 B(Ldar), R(1), // | |
5117 B(Add), R(3), // | |
5118 B(Mov), R(4), R(0), // | |
5119 B(Return), // | |
5120 }, | |
5121 0}, | |
5122 }; | |
5123 | |
5124 for (size_t i = 0; i < arraysize(snippets); i++) { | |
5125 Handle<BytecodeArray> bytecode_array = | |
5126 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | |
5127 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | |
5128 } | |
5129 } | |
5130 | |
4934 } // namespace interpreter | 5131 } // namespace interpreter |
4935 } // namespace internal | 5132 } // namespace internal |
4936 } // namespace v8 | 5133 } // namespace v8 |
OLD | NEW |