Chromium Code Reviews| 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 |