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

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: Move AssignmentHazardHelper to be an inner class of BytecodeGenerator. 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 5196 matching lines...) Expand 10 before | Expand all | Expand 10 after
5207 }}, 5207 }},
5208 }; 5208 };
5209 5209
5210 for (size_t i = 0; i < arraysize(snippets); i++) { 5210 for (size_t i = 0; i < arraysize(snippets); i++) {
5211 Handle<BytecodeArray> bytecode_array = 5211 Handle<BytecodeArray> bytecode_array =
5212 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 5212 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
5213 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 5213 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
5214 } 5214 }
5215 } 5215 }
5216 5216
5217
5218 TEST(AssignmentsInBinaryExpression) {
5219 InitializedHandleScope handle_scope;
5220 BytecodeGeneratorHelper helper;
5221
5222 ExpectedSnippet<const char*> snippets[] = {
5223 {"var x = 0, y = 1;\n"
5224 "return (x = 2, y = 3, x = 4, y = 5)",
5225 2 * kPointerSize,
5226 1,
5227 24,
5228 {
5229 B(LdaZero), B(Star), R(0), //
5230 B(LdaSmi8), U8(1), //
5231 B(Star), R(1), //
5232 B(LdaSmi8), U8(2), //
5233 B(Star), R(0), //
5234 B(LdaSmi8), U8(3), //
5235 B(Star), R(1), //
5236 B(LdaSmi8), U8(4), //
5237 B(Star), R(0), //
5238 B(LdaSmi8), U8(5), //
5239 B(Star), R(1), //
5240 B(Return), //
5241 },
5242 0},
5243 {"var x = 55;\n"
5244 "var y = (x = 100);\n"
5245 "return y",
5246 2 * kPointerSize,
5247 1,
5248 13,
5249 {
5250 B(LdaSmi8), U8(55), //
5251 B(Star), R(0), //
5252 B(LdaSmi8), U8(100), //
5253 B(Star), R(0), //
5254 B(Star), R(1), //
5255 B(Ldar), R(1), //
5256 B(Return), //
5257 },
5258 0},
5259 {"var x = 55;\n"
5260 "x = x + (x = 100) + (x = 101);\n"
5261 "return x;",
5262 4 * kPointerSize,
5263 1,
5264 26,
5265 {
5266 B(LdaSmi8), U8(55), //
5267 B(Star), R(0), //
5268 B(LdaSmi8), U8(100), //
5269 B(Star), R(1), //
5270 B(Add), R(0), //
5271 B(Star), R(2), //
5272 B(LdaSmi8), U8(101), //
5273 B(Star), R(3), //
5274 B(Add), R(2), //
5275 B(Mov), R(3), R(0), //
5276 B(Star), R(0), //
5277 B(Ldar), R(0), //
5278 B(Return), //
5279 },
5280 0},
5281 {"var x = 55;\n"
5282 "x = (x = 56) - x + (x = 57);\n"
5283 "x++;\n"
5284 "return x;",
5285 3 * kPointerSize,
5286 1,
5287 38,
5288 {
5289 B(LdaSmi8), U8(55), //
5290 B(Star), R(0), //
5291 B(LdaSmi8), U8(56), //
5292 B(Star), R(0), //
5293 B(Star), R(1), //
5294 B(Ldar), R(0), //
5295 B(Sub), R(1), //
5296 B(Star), R(2), //
5297 B(LdaSmi8), U8(57), //
5298 B(Star), R(1), //
5299 B(Add), R(2), //
5300 B(Mov), R(1), R(0), //
5301 B(Star), R(0), //
5302 B(Ldar), R(0), //
5303 B(ToNumber), //
5304 B(Star), R(1), //
5305 B(Inc), //
5306 B(Star), R(0), //
5307 B(Ldar), R(0), //
5308 B(Return), //
5309 },
5310 0},
5311 {"var x = 55;\n"
5312 "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
5313 "return y;",
5314 6 * kPointerSize,
5315 1,
5316 34,
5317 {
5318 B(LdaSmi8), U8(55), //
5319 B(Star), R(0), //
5320 B(LdaSmi8), U8(1), //
5321 B(Star), R(2), //
5322 B(Add), R(0), //
5323 B(Star), R(3), //
5324 B(LdaSmi8), U8(2), //
5325 B(Star), R(4), //
5326 B(Add), R(3), //
5327 B(Star), R(5), //
5328 B(LdaSmi8), U8(3), //
5329 B(Star), R(3), //
5330 B(Add), R(5), //
5331 B(Mov), R(3), R(0), //
5332 B(Star), R(1), //
5333 B(Ldar), R(1), //
5334 B(Return), //
5335 },
5336 0},
5337 {"var x = 55;\n"
5338 "var x = x + (x = 1) + (x = 2) + (x = 3);\n"
5339 "return x;",
5340 5 * kPointerSize,
5341 1,
5342 34,
5343 {
5344 B(LdaSmi8), U8(55), //
5345 B(Star), R(0), //
5346 B(LdaSmi8), U8(1), //
5347 B(Star), R(1), //
5348 B(Add), R(0), //
5349 B(Star), R(2), //
5350 B(LdaSmi8), U8(2), //
5351 B(Star), R(3), //
5352 B(Add), R(2), //
5353 B(Star), R(4), //
5354 B(LdaSmi8), U8(3), //
5355 B(Star), R(2), //
5356 B(Add), R(4), //
5357 B(Mov), R(2), R(0), //
5358 B(Star), R(0), //
5359 B(Ldar), R(0), //
5360 B(Return), //
5361 },
5362 0},
5363 {"var x = 10, y = 20;\n"
5364 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + "
5365 "y;\n",
5366 6 * kPointerSize,
5367 1,
5368 64,
5369 {
5370 B(LdaSmi8), U8(10), //
5371 B(Star), R(0), //
5372 B(LdaSmi8), U8(20), //
5373 B(Star), R(1), //
5374 B(LdaSmi8), U8(1), //
5375 B(Star), R(2), //
5376 B(Add), R(0), //
5377 B(Star), R(3), //
5378 B(LdaSmi8), U8(1), //
5379 B(Add), R(2), //
5380 B(Star), R(4), //
5381 B(LdaSmi8), U8(2), //
5382 B(Star), R(1), //
5383 B(Mul), R(4), //
5384 B(Add), R(3), //
5385 B(Star), R(4), //
5386 B(LdaSmi8), U8(3), //
5387 B(Star), R(1), //
5388 B(Add), R(4), //
5389 B(Star), R(3), //
5390 B(LdaSmi8), U8(4), //
5391 B(Star), R(4), //
5392 B(Add), R(3), //
5393 B(Star), R(5), //
5394 B(LdaSmi8), U8(5), //
5395 B(Star), R(1), //
5396 B(Add), R(5), //
5397 B(Star), R(3), //
5398 B(Ldar), R(1), //
5399 B(Add), R(3), //
5400 B(Mov), R(4), R(0), //
5401 B(Return), //
5402 },
5403 0},
5404 {"var x = 17;\n"
5405 "return 1 + x + (x++) + (++x);\n",
5406 5 * kPointerSize,
5407 1,
5408 40,
5409 {
5410 B(LdaSmi8), U8(17), //
5411 B(Star), R(0), //
5412 B(LdaSmi8), U8(1), //
5413 B(Star), R(1), //
5414 B(Ldar), R(0), //
5415 B(Add), R(1), //
5416 B(Star), R(2), //
5417 B(Ldar), R(0), //
5418 B(ToNumber), //
5419 B(Star), R(1), //
5420 B(Inc), //
5421 B(Star), R(3), //
5422 B(Ldar), R(1), //
5423 B(Add), R(2), //
5424 B(Star), R(4), //
5425 B(Ldar), R(3), //
5426 B(ToNumber), //
5427 B(Inc), //
5428 B(Star), R(1), //
5429 B(Add), R(4), //
5430 B(Mov), R(1), R(0), //
5431 B(Return), //
5432 },
5433 0}};
5434
5435 for (size_t i = 0; i < arraysize(snippets); i++) {
5436 Handle<BytecodeArray> bytecode_array =
5437 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
5438 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
5439 }
5440 }
5441
5217 } // namespace interpreter 5442 } // namespace interpreter
5218 } // namespace internal 5443 } // namespace internal
5219 } // namespace v8 5444 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698