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

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: Rationalize jumps in bytecode-graph-builder.cc. Created 5 years 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 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 1175
1176 // Jump <imm8> 1176 // Jump <imm8>
1177 // 1177 //
1178 // Jump by number of bytes represented by the immediate operand |imm8|. 1178 // Jump by number of bytes represented by the immediate operand |imm8|.
1179 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) { 1179 void Interpreter::DoJump(compiler::InterpreterAssembler* assembler) {
1180 Node* relative_jump = __ BytecodeOperandImm(0); 1180 Node* relative_jump = __ BytecodeOperandImm(0);
1181 __ Jump(relative_jump); 1181 __ Jump(relative_jump);
1182 } 1182 }
1183 1183
1184 1184
1185 // JumpConstant <idx> 1185 // JumpConstant <idx8>
1186 // 1186 //
1187 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool. 1187 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool.
1188 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) { 1188 void Interpreter::DoJumpConstant(compiler::InterpreterAssembler* assembler) {
1189 Node* index = __ BytecodeOperandIdx(0); 1189 Node* index = __ BytecodeOperandIdx(0);
1190 Node* constant = __ LoadConstantPoolEntry(index); 1190 Node* constant = __ LoadConstantPoolEntry(index);
1191 Node* relative_jump = __ SmiUntag(constant); 1191 Node* relative_jump = __ SmiUntag(constant);
1192 __ Jump(relative_jump); 1192 __ Jump(relative_jump);
1193 } 1193 }
1194 1194
1195 1195
1196 // JumpConstantWide <idx16>
1197 //
1198 // Jump by number of bytes in the Smi in the |idx16| entry in the
1199 // constant pool.
1200 void Interpreter::DoJumpConstantWide(
1201 compiler::InterpreterAssembler* assembler) {
1202 DoJumpConstant(assembler);
1203 }
1204
1205
1196 // JumpIfTrue <imm8> 1206 // JumpIfTrue <imm8>
1197 // 1207 //
1198 // Jump by number of bytes represented by an immediate operand if the 1208 // Jump by number of bytes represented by an immediate operand if the
1199 // accumulator contains true. 1209 // accumulator contains true.
1200 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) { 1210 void Interpreter::DoJumpIfTrue(compiler::InterpreterAssembler* assembler) {
1201 Node* accumulator = __ GetAccumulator(); 1211 Node* accumulator = __ GetAccumulator();
1202 Node* relative_jump = __ BytecodeOperandImm(0); 1212 Node* relative_jump = __ BytecodeOperandImm(0);
1203 Node* true_value = __ BooleanConstant(true); 1213 Node* true_value = __ BooleanConstant(true);
1204 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 1214 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
1205 } 1215 }
1206 1216
1207 1217
1208 // JumpIfTrueConstant <idx> 1218 // JumpIfTrueConstant <idx8>
1209 // 1219 //
1210 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1220 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1211 // if the accumulator contains true. 1221 // if the accumulator contains true.
1212 void Interpreter::DoJumpIfTrueConstant( 1222 void Interpreter::DoJumpIfTrueConstant(
1213 compiler::InterpreterAssembler* assembler) { 1223 compiler::InterpreterAssembler* assembler) {
1214 Node* accumulator = __ GetAccumulator(); 1224 Node* accumulator = __ GetAccumulator();
1215 Node* index = __ BytecodeOperandIdx(0); 1225 Node* index = __ BytecodeOperandIdx(0);
1216 Node* constant = __ LoadConstantPoolEntry(index); 1226 Node* constant = __ LoadConstantPoolEntry(index);
1217 Node* relative_jump = __ SmiUntag(constant); 1227 Node* relative_jump = __ SmiUntag(constant);
1218 Node* true_value = __ BooleanConstant(true); 1228 Node* true_value = __ BooleanConstant(true);
1219 __ JumpIfWordEqual(accumulator, true_value, relative_jump); 1229 __ JumpIfWordEqual(accumulator, true_value, relative_jump);
1220 } 1230 }
1221 1231
1222 1232
1233 // JumpIfTrueConstantWide <idx16>
1234 //
1235 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1236 // if the accumulator contains true.
1237 void Interpreter::DoJumpIfTrueConstantWide(
1238 compiler::InterpreterAssembler* assembler) {
1239 DoJumpIfTrueConstant(assembler);
1240 }
1241
1242
1223 // JumpIfFalse <imm8> 1243 // JumpIfFalse <imm8>
1224 // 1244 //
1225 // Jump by number of bytes represented by an immediate operand if the 1245 // Jump by number of bytes represented by an immediate operand if the
1226 // accumulator contains false. 1246 // accumulator contains false.
1227 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) { 1247 void Interpreter::DoJumpIfFalse(compiler::InterpreterAssembler* assembler) {
1228 Node* accumulator = __ GetAccumulator(); 1248 Node* accumulator = __ GetAccumulator();
1229 Node* relative_jump = __ BytecodeOperandImm(0); 1249 Node* relative_jump = __ BytecodeOperandImm(0);
1230 Node* false_value = __ BooleanConstant(false); 1250 Node* false_value = __ BooleanConstant(false);
1231 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 1251 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
1232 } 1252 }
1233 1253
1234 1254
1235 // JumpIfFalseConstant <idx> 1255 // JumpIfFalseConstant <idx8>
1236 // 1256 //
1237 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1257 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1238 // if the accumulator contains false. 1258 // if the accumulator contains false.
1239 void Interpreter::DoJumpIfFalseConstant( 1259 void Interpreter::DoJumpIfFalseConstant(
1240 compiler::InterpreterAssembler* assembler) { 1260 compiler::InterpreterAssembler* assembler) {
1241 Node* accumulator = __ GetAccumulator(); 1261 Node* accumulator = __ GetAccumulator();
1242 Node* index = __ BytecodeOperandIdx(0); 1262 Node* index = __ BytecodeOperandIdx(0);
1243 Node* constant = __ LoadConstantPoolEntry(index); 1263 Node* constant = __ LoadConstantPoolEntry(index);
1244 Node* relative_jump = __ SmiUntag(constant); 1264 Node* relative_jump = __ SmiUntag(constant);
1245 Node* false_value = __ BooleanConstant(false); 1265 Node* false_value = __ BooleanConstant(false);
1246 __ JumpIfWordEqual(accumulator, false_value, relative_jump); 1266 __ JumpIfWordEqual(accumulator, false_value, relative_jump);
1247 } 1267 }
1248 1268
1249 1269
1270 // JumpIfFalseConstant <idx16>
1271 //
1272 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1273 // if the accumulator contains false.
1274 void Interpreter::DoJumpIfFalseConstantWide(
1275 compiler::InterpreterAssembler* assembler) {
1276 DoJumpIfFalseConstant(assembler);
1277 }
1278
1279
1250 // JumpIfToBooleanTrue <imm8> 1280 // JumpIfToBooleanTrue <imm8>
1251 // 1281 //
1252 // Jump by number of bytes represented by an immediate operand if the object 1282 // Jump by number of bytes represented by an immediate operand if the object
1253 // referenced by the accumulator is true when the object is cast to boolean. 1283 // referenced by the accumulator is true when the object is cast to boolean.
1254 void Interpreter::DoJumpIfToBooleanTrue( 1284 void Interpreter::DoJumpIfToBooleanTrue(
1255 compiler::InterpreterAssembler* assembler) { 1285 compiler::InterpreterAssembler* assembler) {
1256 Node* accumulator = __ GetAccumulator(); 1286 Node* accumulator = __ GetAccumulator();
1257 Node* to_boolean_value = 1287 Node* to_boolean_value =
1258 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1288 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1259 Node* relative_jump = __ BytecodeOperandImm(0); 1289 Node* relative_jump = __ BytecodeOperandImm(0);
1260 Node* true_value = __ BooleanConstant(true); 1290 Node* true_value = __ BooleanConstant(true);
1261 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); 1291 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump);
1262 } 1292 }
1263 1293
1264 1294
1265 // JumpIfToBooleanTrueConstant <idx> 1295 // JumpIfToBooleanTrueConstant <idx8>
1266 // 1296 //
1267 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1297 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1268 // if the object referenced by the accumulator is true when the object is cast 1298 // if the object referenced by the accumulator is true when the object is cast
1269 // to boolean. 1299 // to boolean.
1270 void Interpreter::DoJumpIfToBooleanTrueConstant( 1300 void Interpreter::DoJumpIfToBooleanTrueConstant(
1271 compiler::InterpreterAssembler* assembler) { 1301 compiler::InterpreterAssembler* assembler) {
1272 Node* accumulator = __ GetAccumulator(); 1302 Node* accumulator = __ GetAccumulator();
1273 Node* to_boolean_value = 1303 Node* to_boolean_value =
1274 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1304 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1275 Node* index = __ BytecodeOperandIdx(0); 1305 Node* index = __ BytecodeOperandIdx(0);
1276 Node* constant = __ LoadConstantPoolEntry(index); 1306 Node* constant = __ LoadConstantPoolEntry(index);
1277 Node* relative_jump = __ SmiUntag(constant); 1307 Node* relative_jump = __ SmiUntag(constant);
1278 Node* true_value = __ BooleanConstant(true); 1308 Node* true_value = __ BooleanConstant(true);
1279 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump); 1309 __ JumpIfWordEqual(to_boolean_value, true_value, relative_jump);
1280 } 1310 }
1281 1311
1282 1312
1313 // JumpIfToBooleanTrueConstantWide <idx16>
1314 //
1315 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1316 // if the object referenced by the accumulator is true when the object is cast
1317 // to boolean.
1318 void Interpreter::DoJumpIfToBooleanTrueConstantWide(
1319 compiler::InterpreterAssembler* assembler) {
1320 DoJumpIfToBooleanTrueConstant(assembler);
1321 }
1322
1323
1283 // JumpIfToBooleanFalse <imm8> 1324 // JumpIfToBooleanFalse <imm8>
1284 // 1325 //
1285 // Jump by number of bytes represented by an immediate operand if the object 1326 // Jump by number of bytes represented by an immediate operand if the object
1286 // referenced by the accumulator is false when the object is cast to boolean. 1327 // referenced by the accumulator is false when the object is cast to boolean.
1287 void Interpreter::DoJumpIfToBooleanFalse( 1328 void Interpreter::DoJumpIfToBooleanFalse(
1288 compiler::InterpreterAssembler* assembler) { 1329 compiler::InterpreterAssembler* assembler) {
1289 Node* accumulator = __ GetAccumulator(); 1330 Node* accumulator = __ GetAccumulator();
1290 Node* to_boolean_value = 1331 Node* to_boolean_value =
1291 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1332 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1292 Node* relative_jump = __ BytecodeOperandImm(0); 1333 Node* relative_jump = __ BytecodeOperandImm(0);
1293 Node* false_value = __ BooleanConstant(false); 1334 Node* false_value = __ BooleanConstant(false);
1294 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); 1335 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump);
1295 } 1336 }
1296 1337
1297 1338
1298 // JumpIfToBooleanFalseConstant <idx> 1339 // JumpIfToBooleanFalseConstant <idx8>
1299 // 1340 //
1300 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1341 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1301 // if the object referenced by the accumulator is false when the object is cast 1342 // if the object referenced by the accumulator is false when the object is cast
1302 // to boolean. 1343 // to boolean.
1303 void Interpreter::DoJumpIfToBooleanFalseConstant( 1344 void Interpreter::DoJumpIfToBooleanFalseConstant(
1304 compiler::InterpreterAssembler* assembler) { 1345 compiler::InterpreterAssembler* assembler) {
1305 Node* accumulator = __ GetAccumulator(); 1346 Node* accumulator = __ GetAccumulator();
1306 Node* to_boolean_value = 1347 Node* to_boolean_value =
1307 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator); 1348 __ CallRuntime(Runtime::kInterpreterToBoolean, accumulator);
1308 Node* index = __ BytecodeOperandIdx(0); 1349 Node* index = __ BytecodeOperandIdx(0);
1309 Node* constant = __ LoadConstantPoolEntry(index); 1350 Node* constant = __ LoadConstantPoolEntry(index);
1310 Node* relative_jump = __ SmiUntag(constant); 1351 Node* relative_jump = __ SmiUntag(constant);
1311 Node* false_value = __ BooleanConstant(false); 1352 Node* false_value = __ BooleanConstant(false);
1312 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump); 1353 __ JumpIfWordEqual(to_boolean_value, false_value, relative_jump);
1313 } 1354 }
1314 1355
1315 1356
1357 // JumpIfToBooleanFalseConstantWide <idx16>
1358 //
1359 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1360 // if the object referenced by the accumulator is false when the object is cast
1361 // to boolean.
1362 void Interpreter::DoJumpIfToBooleanFalseConstantWide(
1363 compiler::InterpreterAssembler* assembler) {
1364 DoJumpIfToBooleanFalseConstant(assembler);
1365 }
1366
1367
1316 // JumpIfNull <imm8> 1368 // JumpIfNull <imm8>
1317 // 1369 //
1318 // Jump by number of bytes represented by an immediate operand if the object 1370 // Jump by number of bytes represented by an immediate operand if the object
1319 // referenced by the accumulator is the null constant. 1371 // referenced by the accumulator is the null constant.
1320 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) { 1372 void Interpreter::DoJumpIfNull(compiler::InterpreterAssembler* assembler) {
1321 Node* accumulator = __ GetAccumulator(); 1373 Node* accumulator = __ GetAccumulator();
1322 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 1374 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
1323 Node* relative_jump = __ BytecodeOperandImm(0); 1375 Node* relative_jump = __ BytecodeOperandImm(0);
1324 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 1376 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
1325 } 1377 }
1326 1378
1327 1379
1328 // JumpIfNullConstant <idx> 1380 // JumpIfNullConstant <idx8>
1329 // 1381 //
1330 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1382 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1331 // if the object referenced by the accumulator is the null constant. 1383 // if the object referenced by the accumulator is the null constant.
1332 void Interpreter::DoJumpIfNullConstant( 1384 void Interpreter::DoJumpIfNullConstant(
1333 compiler::InterpreterAssembler* assembler) { 1385 compiler::InterpreterAssembler* assembler) {
1334 Node* accumulator = __ GetAccumulator(); 1386 Node* accumulator = __ GetAccumulator();
1335 Node* null_value = __ HeapConstant(isolate_->factory()->null_value()); 1387 Node* null_value = __ HeapConstant(isolate_->factory()->null_value());
1336 Node* index = __ BytecodeOperandIdx(0); 1388 Node* index = __ BytecodeOperandIdx(0);
1337 Node* constant = __ LoadConstantPoolEntry(index); 1389 Node* constant = __ LoadConstantPoolEntry(index);
1338 Node* relative_jump = __ SmiUntag(constant); 1390 Node* relative_jump = __ SmiUntag(constant);
1339 __ JumpIfWordEqual(accumulator, null_value, relative_jump); 1391 __ JumpIfWordEqual(accumulator, null_value, relative_jump);
1340 } 1392 }
1341 1393
1342 1394
1343 // JumpIfUndefined <imm8> 1395 // JumpIfNullConstantWide <idx16>
1396 //
1397 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1398 // if the object referenced by the accumulator is the null constant.
1399 void Interpreter::DoJumpIfNullConstantWide(
1400 compiler::InterpreterAssembler* assembler) {
1401 DoJumpIfNullConstant(assembler);
1402 }
1403
1404
1405 // jumpifundefined <imm8>
1344 // 1406 //
1345 // Jump by number of bytes represented by an immediate operand if the object 1407 // Jump by number of bytes represented by an immediate operand if the object
1346 // referenced by the accumulator is the undefined constant. 1408 // referenced by the accumulator is the undefined constant.
1347 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) { 1409 void Interpreter::DoJumpIfUndefined(compiler::InterpreterAssembler* assembler) {
1348 Node* accumulator = __ GetAccumulator(); 1410 Node* accumulator = __ GetAccumulator();
1349 Node* undefined_value = 1411 Node* undefined_value =
1350 __ HeapConstant(isolate_->factory()->undefined_value()); 1412 __ HeapConstant(isolate_->factory()->undefined_value());
1351 Node* relative_jump = __ BytecodeOperandImm(0); 1413 Node* relative_jump = __ BytecodeOperandImm(0);
1352 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 1414 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
1353 } 1415 }
1354 1416
1355 1417
1356 // JumpIfUndefinedConstant <idx> 1418 // JumpIfUndefinedConstant <idx8>
1357 // 1419 //
1358 // Jump by number of bytes in the Smi in the |idx| entry in the constant pool 1420 // Jump by number of bytes in the Smi in the |idx8| entry in the constant pool
1359 // if the object referenced by the accumulator is the undefined constant. 1421 // if the object referenced by the accumulator is the undefined constant.
1360 void Interpreter::DoJumpIfUndefinedConstant( 1422 void Interpreter::DoJumpIfUndefinedConstant(
1361 compiler::InterpreterAssembler* assembler) { 1423 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* index = __ BytecodeOperandIdx(0); 1427 Node* index = __ BytecodeOperandIdx(0);
1366 Node* constant = __ LoadConstantPoolEntry(index); 1428 Node* constant = __ LoadConstantPoolEntry(index);
1367 Node* relative_jump = __ SmiUntag(constant); 1429 Node* relative_jump = __ SmiUntag(constant);
1368 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump); 1430 __ JumpIfWordEqual(accumulator, undefined_value, relative_jump);
1369 } 1431 }
1370 1432
1371 1433
1434 // JumpIfUndefinedConstantWide <idx16>
1435 //
1436 // Jump by number of bytes in the Smi in the |idx16| entry in the constant pool
1437 // if the object referenced by the accumulator is the undefined constant.
1438 void Interpreter::DoJumpIfUndefinedConstantWide(
1439 compiler::InterpreterAssembler* assembler) {
1440 DoJumpIfUndefinedConstant(assembler);
1441 }
1442
1443
1372 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id, 1444 void Interpreter::DoCreateLiteral(Runtime::FunctionId function_id,
1373 compiler::InterpreterAssembler* assembler) { 1445 compiler::InterpreterAssembler* assembler) {
1374 Node* index = __ BytecodeOperandIdx(0); 1446 Node* index = __ BytecodeOperandIdx(0);
1375 Node* constant_elements = __ LoadConstantPoolEntry(index); 1447 Node* constant_elements = __ LoadConstantPoolEntry(index);
1376 Node* literal_index_raw = __ BytecodeOperandIdx(1); 1448 Node* literal_index_raw = __ BytecodeOperandIdx(1);
1377 Node* literal_index = __ SmiTag(literal_index_raw); 1449 Node* literal_index = __ SmiTag(literal_index_raw);
1378 Node* flags_raw = __ BytecodeOperandImm(2); 1450 Node* flags_raw = __ BytecodeOperandImm(2);
1379 Node* flags = __ SmiTag(flags_raw); 1451 Node* flags = __ SmiTag(flags_raw);
1380 Node* closure = __ LoadRegister(Register::function_closure()); 1452 Node* closure = __ LoadRegister(Register::function_closure());
1381 Node* result = __ CallRuntime(function_id, closure, literal_index, 1453 Node* result = __ CallRuntime(function_id, closure, literal_index,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 Node* index_reg = __ BytecodeOperandReg(0); 1650 Node* index_reg = __ BytecodeOperandReg(0);
1579 Node* index = __ LoadRegister(index_reg); 1651 Node* index = __ LoadRegister(index_reg);
1580 Node* result = __ CallRuntime(Runtime::kForInStep, index); 1652 Node* result = __ CallRuntime(Runtime::kForInStep, index);
1581 __ SetAccumulator(result); 1653 __ SetAccumulator(result);
1582 __ Dispatch(); 1654 __ Dispatch();
1583 } 1655 }
1584 1656
1585 } // namespace interpreter 1657 } // namespace interpreter
1586 } // namespace internal 1658 } // namespace internal
1587 } // namespace v8 1659 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698