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

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

Issue 1412683011: [Interpreter] Enable assignments in expressions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 5 years, 1 month 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
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 // 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 5129 matching lines...) Expand 10 before | Expand all | Expand 10 after
5140 }}, 5140 }},
5141 }; 5141 };
5142 5142
5143 for (size_t i = 0; i < arraysize(snippets); i++) { 5143 for (size_t i = 0; i < arraysize(snippets); i++) {
5144 Handle<BytecodeArray> bytecode_array = 5144 Handle<BytecodeArray> bytecode_array =
5145 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 5145 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
5146 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 5146 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
5147 } 5147 }
5148 } 5148 }
5149 5149
5150
5151 TEST(AssignmentsInBinaryExpression) {
5152 InitializedHandleScope handle_scope;
5153 BytecodeGeneratorHelper helper;
5154
5155 ExpectedSnippet<const char*> snippets[] = {
5156 {"var x = 0, y = 1;\n"
5157 "return (x = 2, y = 3, x = 4, y = 5)",
5158 2 * kPointerSize,
5159 1,
5160 24,
5161 {
5162 B(LdaZero), B(Star), R(0), //
5163 B(LdaSmi8), U8(1), //
5164 B(Star), R(1), //
5165 B(LdaSmi8), U8(2), //
5166 B(Star), R(0), //
5167 B(LdaSmi8), U8(3), //
5168 B(Star), R(1), //
5169 B(LdaSmi8), U8(4), //
5170 B(Star), R(0), //
5171 B(LdaSmi8), U8(5), //
5172 B(Star), R(1), //
5173 B(Return), //
5174 },
5175 0},
5176 {"var x = 55;\n"
5177 "var y = (x = 100);\n"
5178 "return y",
5179 2 * kPointerSize,
5180 1,
5181 13,
5182 {
5183 B(LdaSmi8), U8(55), //
5184 B(Star), R(0), //
5185 B(LdaSmi8), U8(100), //
5186 B(Star), R(0), //
5187 B(Star), R(1), //
5188 B(Ldar), R(1), //
5189 B(Return), //
5190 },
5191 0},
5192 {"var x = 55;\n"
5193 "x = x + (x = 100) + (x = 101);\n"
5194 "return x;",
5195 4 * kPointerSize,
5196 1,
5197 26,
5198 {
5199 B(LdaSmi8), U8(55), //
5200 B(Star), R(0), //
5201 B(LdaSmi8), U8(100), //
5202 B(Star), R(1), //
5203 B(Add), R(0), //
5204 B(Star), R(2), //
5205 B(LdaSmi8), U8(101), //
5206 B(Star), R(3), //
5207 B(Add), R(2), //
5208 B(Mov), R(3), R(0), //
5209 B(Star), R(0), //
5210 B(Ldar), R(0), //
5211 B(Return), //
5212 },
5213 0},
5214 {"var x = 55;\n"
5215 "x = (x = 56) - x + (x = 57);\n"
5216 "x++;\n"
5217 "return x;",
5218 3 * kPointerSize,
5219 1,
5220 38,
5221 {
5222 B(LdaSmi8), U8(55), //
5223 B(Star), R(0), //
5224 B(LdaSmi8), U8(56), //
5225 B(Star), R(0), //
5226 B(Star), R(1), //
5227 B(Ldar), R(0), //
5228 B(Sub), R(1), //
5229 B(Star), R(2), //
5230 B(LdaSmi8), U8(57), //
5231 B(Star), R(1), //
5232 B(Add), R(2), //
5233 B(Mov), R(1), R(0), //
5234 B(Star), R(0), //
5235 B(Ldar), R(0), //
5236 B(ToNumber), //
5237 B(Star), R(1), //
5238 B(Inc), //
5239 B(Star), R(0), //
5240 B(Ldar), R(0), //
5241 B(Return), //
5242 },
5243 0},
5244 {"var x = 55;\n"
5245 "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
5246 "return y;",
5247 6 * kPointerSize,
5248 1,
5249 34,
5250 {
5251 B(LdaSmi8), U8(55), //
5252 B(Star), R(0), //
5253 B(LdaSmi8), U8(1), //
5254 B(Star), R(2), //
5255 B(Add), R(0), //
5256 B(Star), R(3), //
5257 B(LdaSmi8), U8(2), //
5258 B(Star), R(4), //
5259 B(Add), R(3), //
5260 B(Star), R(5), //
5261 B(LdaSmi8), U8(3), //
5262 B(Star), R(3), //
5263 B(Add), R(5), //
5264 B(Mov), R(3), R(0), //
5265 B(Star), R(1), //
5266 B(Ldar), R(1), //
5267 B(Return), //
5268 },
5269 0},
5270 {"var x = 55;\n"
5271 "var x = x + (x = 1) + (x = 2) + (x = 3);\n"
5272 "return x;",
5273 5 * kPointerSize,
5274 1,
5275 34,
5276 {
5277 B(LdaSmi8), U8(55), //
5278 B(Star), R(0), //
5279 B(LdaSmi8), U8(1), //
5280 B(Star), R(1), //
5281 B(Add), R(0), //
5282 B(Star), R(2), //
5283 B(LdaSmi8), U8(2), //
5284 B(Star), R(3), //
5285 B(Add), R(2), //
5286 B(Star), R(4), //
5287 B(LdaSmi8), U8(3), //
5288 B(Star), R(2), //
5289 B(Add), R(4), //
5290 B(Mov), R(2), R(0), //
5291 B(Star), R(0), //
5292 B(Ldar), R(0), //
5293 B(Return), //
5294 },
5295 0},
5296 {"var x = 10, y = 20;\n"
5297 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + "
5298 "y;\n",
5299 6 * kPointerSize,
5300 1,
5301 64,
5302 {
5303 B(LdaSmi8), U8(10), //
5304 B(Star), R(0), //
5305 B(LdaSmi8), U8(20), //
5306 B(Star), R(1), //
5307 B(LdaSmi8), U8(1), //
5308 B(Star), R(2), //
5309 B(Add), R(0), //
5310 B(Star), R(3), //
5311 B(LdaSmi8), U8(1), //
5312 B(Add), R(2), //
5313 B(Star), R(4), //
5314 B(LdaSmi8), U8(2), //
5315 B(Star), R(1), //
5316 B(Mul), R(4), //
5317 B(Add), R(3), //
5318 B(Star), R(4), //
5319 B(LdaSmi8), U8(3), //
5320 B(Star), R(1), //
5321 B(Add), R(4), //
5322 B(Star), R(3), //
5323 B(LdaSmi8), U8(4), //
5324 B(Star), R(4), //
5325 B(Add), R(3), //
5326 B(Star), R(5), //
5327 B(LdaSmi8), U8(5), //
5328 B(Star), R(1), //
5329 B(Add), R(5), //
5330 B(Star), R(3), //
5331 B(Ldar), R(1), //
5332 B(Add), R(3), //
5333 B(Mov), R(4), R(0), //
5334 B(Return), //
5335 },
5336 0},
5337 {"var x = 17;\n"
5338 "return 1 + x + (x++) + (++x);\n",
5339 5 * kPointerSize,
5340 1,
5341 40,
5342 {
5343 B(LdaSmi8), U8(17), //
5344 B(Star), R(0), //
5345 B(LdaSmi8), U8(1), //
5346 B(Star), R(1), //
5347 B(Ldar), R(0), //
5348 B(Add), R(1), //
5349 B(Star), R(2), //
5350 B(Ldar), R(0), //
5351 B(ToNumber), //
5352 B(Star), R(1), //
5353 B(Inc), //
5354 B(Star), R(3), //
5355 B(Ldar), R(1), //
5356 B(Add), R(2), //
5357 B(Star), R(4), //
5358 B(Ldar), R(3), //
5359 B(ToNumber), //
5360 B(Inc), //
5361 B(Star), R(1), //
5362 B(Add), R(4), //
5363 B(Mov), R(1), R(0), //
5364 B(Return), //
5365 },
5366 0}};
5367
5368 for (size_t i = 0; i < arraysize(snippets); i++) {
5369 Handle<BytecodeArray> bytecode_array =
5370 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
5371 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
5372 }
5373 }
5374
5150 } // namespace interpreter 5375 } // namespace interpreter
5151 } // namespace internal 5376 } // namespace internal
5152 } // namespace v8 5377 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698