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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 1546683002: [Interpreter] Add support for jumps using constants with wide operands. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tweak constant-array-builder-unittest.cc. Created 4 years, 11 months 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 #include "src/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/compiler/interpreter-assembler.h" 9 #include "src/compiler/interpreter-assembler.h"
10 #include "src/factory.h" 10 #include "src/factory.h"
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 1189
1190 // Jump <imm8> 1190 // Jump <imm8>
1191 // 1191 //
1192 // Jump by number of bytes represented by the immediate operand |imm8|. 1192 // Jump by number of bytes represented by the immediate operand |imm8|.
1193 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) { 1193 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) {
1194 Node* relative_jump = __ BytecodeOperandImm(0); 1194 Node* relative_jump = __ BytecodeOperandImm(0);
1195 __ Jump(relative_jump); 1195 __ Jump(relative_jump);
1196 } 1196 }
1197 1197
1198 1198
1199 // JumpConstant <idx> 1199 // JumpConstant <idx8>
1200 // 1200 //
1201 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. 1201 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool.
1202 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) { 1202 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) {
1203 Node* index = __ BytecodeOperandIdx(0); 1203 Node* index = __ BytecodeOperandIdx(0);
1204 Node* constant = __ LoadConstantPoolEntry(index); 1204 Node* constant = __ LoadConstantPoolEntry(index);
1205 Node* relative_jump = __ SmiUntag(constant); 1205 Node* relative_jump = __ SmiUntag(constant);
1206 __ Jump(relative_jump); 1206 __ Jump(relative_jump);
1207 } 1207 }
1208 1208
1209 1209
1210 // JumpConstantWide <idx16>
1211 //
1212 // Jump by number of bytes in the Smi in the |idx16| entry in the
1213 // constant pool.
1214 void Interpreter::DoJumpConstantWide(
1215 compiler::InterpreterAssembler* assembler) {
1216 DoJumpConstant(assembler);
1217 }
1218
1219
1210 // JumpIfTrue <imm8> 1220 // JumpIfTrue <imm8>
1211 // 1221 //
1212 // Jump by number of bytes represented by an immediate operand if the 1222 // Jump by number of bytes represented by an immediate operand if the
1213 // accumulator contains true. 1223 // accumulator contains true.
1214 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) { 1224 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) {
1215 Node* accumulator = __ GetAccumulator(); 1225 Node* accumulator = __ GetAccumulator();
1216 Node* relative_jump = __ BytecodeOperandImm(0); 1226 Node* relative_jump = __ BytecodeOperandImm(0);
1217 Node* true_value = __ BooleanConstant(true); 1227 Node* true_value = __ BooleanConstant(true);
1218 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 1228 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
1219 } 1229 }
1220 1230
1221 1231
1222 // JumpIfTrueConstant <idx> 1232 // JumpIfTrueConstant <idx8>
1223 // 1233 //
1224 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1234 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1225 // if the accumulator contains true. 1235 // if the accumulator contains true.
1226 void Interpreter::DoJumpIfTrueConstant( 1236 void Interpreter::DoJumpIfTrueConstant(
1227 compiler::InterpreterAssembler* assembler) { 1237 compiler::InterpreterAssembler* assembler) {
1228 Node* accumulator = __ GetAccumulator(); 1238 Node* accumulator = __ GetAccumulator();
1229 Node* index = __ BytecodeOperandIdx(0); 1239 Node* index = __ BytecodeOperandIdx(0);
1230 Node* constant = __ LoadConstantPoolEntry(index); 1240 Node* constant = __ LoadConstantPoolEntry(index);
1231 Node* relative_jump = __ SmiUntag(constant); 1241 Node* relative_jump = __ SmiUntag(constant);
1232 Node* true_value = __ BooleanConstant(true); 1242 Node* true_value = __ BooleanConstant(true);
1233 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 1243 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
1234 } 1244 }
1235 1245
1236 1246
1247 // JumpIfTrueConstantWide <idx16>
1248 //
1249 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1250 // if the accumulator contains true.
1251 void Interpreter::DoJumpIfTrueConstantWide(
1252 compiler::InterpreterAssembler* assembler) {
1253 DoJumpIfTrueConstant(assembler);
1254 }
1255
1256
1237 // JumpIfFalse <imm8> 1257 // JumpIfFalse <imm8>
1238 // 1258 //
1239 // Jump by number of bytes represented by an immediate operand if the 1259 // Jump by number of bytes represented by an immediate operand if the
1240 // accumulator contains false. 1260 // accumulator contains false.
1241 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) { 1261 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) {
1242 Node* accumulator = __ GetAccumulator(); 1262 Node* accumulator = __ GetAccumulator();
1243 Node* relative_jump = __ BytecodeOperandImm(0); 1263 Node* relative_jump = __ BytecodeOperandImm(0);
1244 Node* false_value = __ BooleanConstant(false); 1264 Node* false_value = __ BooleanConstant(false);
1245 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 1265 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
1246 } 1266 }
1247 1267
1248 1268
1249 // JumpIfFalseConstant <idx> 1269 // JumpIfFalseConstant <idx8>
1250 // 1270 //
1251 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1271 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1252 // if the accumulator contains false. 1272 // if the accumulator contains false.
1253 void Interpreter::DoJumpIfFalseConstant( 1273 void Interpreter::DoJumpIfFalseConstant(
1254 compiler::InterpreterAssembler* assembler) { 1274 compiler::InterpreterAssembler* assembler) {
1255 Node* accumulator = __ GetAccumulator(); 1275 Node* accumulator = __ GetAccumulator();
1256 Node* index = __ BytecodeOperandIdx(0); 1276 Node* index = __ BytecodeOperandIdx(0);
1257 Node* constant = __ LoadConstantPoolEntry(index); 1277 Node* constant = __ LoadConstantPoolEntry(index);
1258 Node* relative_jump = __ SmiUntag(constant); 1278 Node* relative_jump = __ SmiUntag(constant);
1259 Node* false_value = __ BooleanConstant(false); 1279 Node* false_value = __ BooleanConstant(false);
1260 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 1280 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
1261 } 1281 }
1262 1282
1263 1283
1284 // JumpIfFalseConstant <idx16>
1285 //
1286 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1287 // if the accumulator contains false.
1288 void Interpreter::DoJumpIfFalseConstantWide(
1289 compiler::InterpreterAssembler* assembler) {
1290 DoJumpIfFalseConstant(assembler);
1291 }
1292
1293
1264 // JumpIfToBooleanTrue <imm8> 1294 // JumpIfToBooleanTrue <imm8>
1265 // 1295 //
1266 // Jump by number of bytes represented by an immediate operand if the object 1296 // Jump by number of bytes represented by an immediate operand if the object
1267 // referenced by the accumulator is true when the object is cast to boolean. 1297 // referenced by the accumulator is true when the object is cast to boolean.
1268 void Interpreter::DoJumpIfToBooleanTrue( 1298 void Interpreter::DoJumpIfToBooleanTrue(
1269 compiler::InterpreterAssembler* assembler) { 1299 compiler::InterpreterAssembler* assembler) {
1270 Node* accumulator = __ GetAccumulator(); 1300 Node* accumulator = __ GetAccumulator();
1271 Node* to_boolean_value = 1301 Node* to_boolean_value =
1272 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1302 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1273 Node* relative_jump = __ BytecodeOperandImm(0); 1303 Node* relative_jump = __ BytecodeOperandImm(0);
1274 Node* true_value = __ BooleanConstant(true); 1304 Node* true_value = __ BooleanConstant(true);
1275 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); 1305 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump);
1276 } 1306 }
1277 1307
1278 1308
1279 // JumpIfToBooleanTrueConstant <idx> 1309 // JumpIfToBooleanTrueConstant <idx8>
1280 // 1310 //
1281 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1311 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1282 // if the object referenced by the accumulator is true when the object is cast 1312 // if the object referenced by the accumulator is true when the object is cast
1283 // to boolean. 1313 // to boolean.
1284 void Interpreter::DoJumpIfToBooleanTrueConstant( 1314 void Interpreter::DoJumpIfToBooleanTrueConstant(
1285 compiler::InterpreterAssembler* assembler) { 1315 compiler::InterpreterAssembler* assembler) {
1286 Node* accumulator = __ GetAccumulator(); 1316 Node* accumulator = __ GetAccumulator();
1287 Node* to_boolean_value = 1317 Node* to_boolean_value =
1288 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1318 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1289 Node* index = __ BytecodeOperandIdx(0); 1319 Node* index = __ BytecodeOperandIdx(0);
1290 Node* constant = __ LoadConstantPoolEntry(index); 1320 Node* constant = __ LoadConstantPoolEntry(index);
1291 Node* relative_jump = __ SmiUntag(constant); 1321 Node* relative_jump = __ SmiUntag(constant);
1292 Node* true_value = __ BooleanConstant(true); 1322 Node* true_value = __ BooleanConstant(true);
1293 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); 1323 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump);
1294 } 1324 }
1295 1325
1296 1326
1327 // JumpIfToBooleanTrueConstantWide <idx16>
1328 //
1329 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1330 // if the object referenced by the accumulator is true when the object is cast
1331 // to boolean.
1332 void Interpreter::DoJumpIfToBooleanTrueConstantWide(
1333 compiler::InterpreterAssembler* assembler) {
1334 DoJumpIfToBooleanTrueConstant(assembler);
1335 }
1336
1337
1297 // JumpIfToBooleanFalse <imm8> 1338 // JumpIfToBooleanFalse <imm8>
1298 // 1339 //
1299 // Jump by number of bytes represented by an immediate operand if the object 1340 // Jump by number of bytes represented by an immediate operand if the object
1300 // referenced by the accumulator is false when the object is cast to boolean. 1341 // referenced by the accumulator is false when the object is cast to boolean.
1301 void Interpreter::DoJumpIfToBooleanFalse( 1342 void Interpreter::DoJumpIfToBooleanFalse(
1302 compiler::InterpreterAssembler* assembler) { 1343 compiler::InterpreterAssembler* assembler) {
1303 Node* accumulator = __ GetAccumulator(); 1344 Node* accumulator = __ GetAccumulator();
1304 Node* to_boolean_value = 1345 Node* to_boolean_value =
1305 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1346 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1306 Node* relative_jump = __ BytecodeOperandImm(0); 1347 Node* relative_jump = __ BytecodeOperandImm(0);
1307 Node* false_value = __ BooleanConstant(false); 1348 Node* false_value = __ BooleanConstant(false);
1308 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); 1349 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump);
1309 } 1350 }
1310 1351
1311 1352
1312 // JumpIfToBooleanFalseConstant <idx> 1353 // JumpIfToBooleanFalseConstant <idx8>
1313 // 1354 //
1314 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1355 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1315 // if the object referenced by the accumulator is false when the object is cast 1356 // if the object referenced by the accumulator is false when the object is cast
1316 // to boolean. 1357 // to boolean.
1317 void Interpreter::DoJumpIfToBooleanFalseConstant( 1358 void Interpreter::DoJumpIfToBooleanFalseConstant(
1318 compiler::InterpreterAssembler* assembler) { 1359 compiler::InterpreterAssembler* assembler) {
1319 Node* accumulator = __ GetAccumulator(); 1360 Node* accumulator = __ GetAccumulator();
1320 Node* to_boolean_value = 1361 Node* to_boolean_value =
1321 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1362 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1322 Node* index = __ BytecodeOperandIdx(0); 1363 Node* index = __ BytecodeOperandIdx(0);
1323 Node* constant = __ LoadConstantPoolEntry(index); 1364 Node* constant = __ LoadConstantPoolEntry(index);
1324 Node* relative_jump = __ SmiUntag(constant); 1365 Node* relative_jump = __ SmiUntag(constant);
1325 Node* false_value = __ BooleanConstant(false); 1366 Node* false_value = __ BooleanConstant(false);
1326 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); 1367 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump);
1327 } 1368 }
1328 1369
1329 1370
1371 // JumpIfToBooleanFalseConstantWide <idx16>
1372 //
1373 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1374 // if the object referenced by the accumulator is false when the object is cast
1375 // to boolean.
1376 void Interpreter::DoJumpIfToBooleanFalseConstantWide(
1377 compiler::InterpreterAssembler* assembler) {
1378 DoJumpIfToBooleanFalseConstant(assembler);
1379 }
1380
1381
1330 // JumpIfNull <imm8> 1382 // JumpIfNull <imm8>
1331 // 1383 //
1332 // Jump by number of bytes represented by an immediate operand if the object 1384 // Jump by number of bytes represented by an immediate operand if the object
1333 // referenced by the accumulator is the null constant. 1385 // referenced by the accumulator is the null constant.
1334 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) { 1386 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) {
1335 Node* accumulator = __ GetAccumulator(); 1387 Node* accumulator = __ GetAccumulator();
1336 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 1388 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
1337 Node* relative_jump = __ BytecodeOperandImm(0); 1389 Node* relative_jump = __ BytecodeOperandImm(0);
1338 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 1390 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
1339 } 1391 }
1340 1392
1341 1393
1342 // JumpIfNullConstant <idx> 1394 // JumpIfNullConstant <idx8>
1343 // 1395 //
1344 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1396 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1345 // if the object referenced by the accumulator is the null constant. 1397 // if the object referenced by the accumulator is the null constant.
1346 void Interpreter::DoJumpIfNullConstant( 1398 void Interpreter::DoJumpIfNullConstant(
1347 compiler::InterpreterAssembler* assembler) { 1399 compiler::InterpreterAssembler* assembler) {
1348 Node* accumulator = __ GetAccumulator(); 1400 Node* accumulator = __ GetAccumulator();
1349 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 1401 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
1350 Node* index = __ BytecodeOperandIdx(0); 1402 Node* index = __ BytecodeOperandIdx(0);
1351 Node* constant = __ LoadConstantPoolEntry(index); 1403 Node* constant = __ LoadConstantPoolEntry(index);
1352 Node* relative_jump = __ SmiUntag(constant); 1404 Node* relative_jump = __ SmiUntag(constant);
1353 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 1405 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
1354 } 1406 }
1355 1407
1356 1408
1357 // JumpIfUndefined <imm8> 1409 // JumpIfNullConstantWide <idx16>
1410 //
1411 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1412 // if the object referenced by the accumulator is the null constant.
1413 void Interpreter::DoJumpIfNullConstantWide(
1414 compiler::InterpreterAssembler* assembler) {
1415 DoJumpIfNullConstant(assembler);
1416 }
1417
1418
1419 // jumpifundefined <imm8>
1358 // 1420 //
1359 // Jump by number of bytes represented by an immediate operand if the object 1421 // Jump by number of bytes represented by an immediate operand if the object
1360 // referenced by the accumulator is the undefined constant. 1422 // referenced by the accumulator is the undefined constant.
1361 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) { 1423 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) {
1362 Node* accumulator = __ GetAccumulator(); 1424 Node* accumulator = __ GetAccumulator();
1363 Node* undefined_value = 1425 Node* undefined_value =
1364 __ HeapConstant(isolate_->factory()->undefined_value()); 1426 __ HeapConstant(isolate_->factory()->undefined_value());
1365 Node* relative_jump = __ BytecodeOperandImm(0); 1427 Node* relative_jump = __ BytecodeOperandImm(0);
1366 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 1428 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
1367 } 1429 }
1368 1430
1369 1431
1370 // JumpIfUndefinedConstant <idx> 1432 // JumpIfUndefinedConstant <idx8>
1371 // 1433 //
1372 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1434 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1373 // if the object referenced by the accumulator is the undefined constant. 1435 // if the object referenced by the accumulator is the undefined constant.
1374 void Interpreter::DoJumpIfUndefinedConstant( 1436 void Interpreter::DoJumpIfUndefinedConstant(
1375 compiler::InterpreterAssembler* assembler) { 1437 compiler::InterpreterAssembler* assembler) {
1376 Node* accumulator = __ GetAccumulator(); 1438 Node* accumulator = __ GetAccumulator();
1377 Node* undefined_value = 1439 Node* undefined_value =
1378 __ HeapConstant(isolate_->factory()->undefined_value()); 1440 __ HeapConstant(isolate_->factory()->undefined_value());
1379 Node* index = __ BytecodeOperandIdx(0); 1441 Node* index = __ BytecodeOperandIdx(0);
1380 Node* constant = __ LoadConstantPoolEntry(index); 1442 Node* constant = __ LoadConstantPoolEntry(index);
1381 Node* relative_jump = __ SmiUntag(constant); 1443 Node* relative_jump = __ SmiUntag(constant);
1382 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 1444 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
1383 } 1445 }
1384 1446
1385 1447
1448 // JumpIfUndefinedConstantWide <idx16>
1449 //
1450 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1451 // if the object referenced by the accumulator is the undefined constant.
1452 void Interpreter::DoJumpIfUndefinedConstantWide(
1453 compiler::InterpreterAssembler* assembler) {
1454 DoJumpIfUndefinedConstant(assembler);
1455 }
1456
1457
1386 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id, 1458 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id,
1387 compiler::InterpreterAssembler* assembler) { 1459 compiler::InterpreterAssembler* assembler) {
1388 Node* index = __ BytecodeOperandIdx(0); 1460 Node* index = __ BytecodeOperandIdx(0);
1389 Node* constant_elements = __ LoadConstantPoolEntry(index); 1461 Node* constant_elements = __ LoadConstantPoolEntry(index);
1390 Node* literal_index_raw = __ BytecodeOperandIdx(1); 1462 Node* literal_index_raw = __ BytecodeOperandIdx(1);
1391 Node* literal_index = __ SmiTag(literal_index_raw); 1463 Node* literal_index = __ SmiTag(literal_index_raw);
1392 Node* flags_raw = __ BytecodeOperandImm(2); 1464 Node* flags_raw = __ BytecodeOperandImm(2);
1393 Node* flags = __ SmiTag(flags_raw); 1465 Node* flags = __ SmiTag(flags_raw);
1394 Node* closure = __ LoadRegister(Register::function_closure()); 1466 Node* closure = __ LoadRegister(Register::function_closure());
1395 Node* result = __ CallRuntime(function_id, closure, literal_index, 1467 Node* result = __ CallRuntime(function_id, closure, literal_index,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1592 Node* index_reg = __ BytecodeOperandReg(0); 1664 Node* index_reg = __ BytecodeOperandReg(0);
1593 Node* index = __ LoadRegister(index_reg); 1665 Node* index = __ LoadRegister(index_reg);
1594 Node* result = __ CallRuntime(Runtime::kForInStep, index); 1666 Node* result = __ CallRuntime(Runtime::kForInStep, index);
1595 __ SetAccumulator(result); 1667 __ SetAccumulator(result);
1596 __ Dispatch(); 1668 __ Dispatch();
1597 } 1669 }
1598 1670
1599 } // namespace interpreter 1671 } // namespace interpreter
1600 } // namespace internal 1672 } // namespace internal
1601 } // namespace v8 1673 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698