Changeset 153477 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Jul 30, 2013, 10:01:40 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r153221 r153477 88 88 RegisterID* ThrowableExpressionData::emitThrowReferenceError(BytecodeGenerator& generator, const String& message) 89 89 { 90 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());90 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 91 91 generator.emitThrowReferenceError(message); 92 92 return generator.newTemporary(); … … 153 153 } 154 154 155 unsigned divot = m_startOffset + m_ident.length();156 generator.emitExpressionInfo(divot, m_ ident.length(), 0, m_divotLine, m_divotLineStart);155 JSTextPosition divot = m_start + m_ident.length(); 156 generator.emitExpressionInfo(divot, m_start, divot); 157 157 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.tempDestination(dst), m_ident); 158 158 return generator.emitGetFromScope(generator.finalDestination(dst), scope.get(), m_ident, ThrowIfNotFound); … … 326 326 && !generator.symbolTable().slowArguments()) { 327 327 RegisterID* property = generator.emitNode(m_subscript); 328 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());328 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 329 329 return generator.emitGetArgumentByVal(generator.finalDestination(dst), generator.uncheckedRegisterForArguments(), property); 330 330 } … … 332 332 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_subscriptHasAssignments, m_subscript->isPure(generator)); 333 333 RegisterID* property = generator.emitNode(m_subscript); 334 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());334 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 335 335 return generator.emitGetByVal(generator.finalDestination(dst), base.get(), property); 336 336 } … … 346 346 if (!generator.willResolveToArguments(resolveNode->identifier())) 347 347 goto nonArgumentsPath; 348 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());348 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 349 349 return generator.emitGetArgumentsLength(generator.finalDestination(dst), generator.uncheckedRegisterForArguments()); 350 350 } … … 352 352 nonArgumentsPath: 353 353 RegisterID* base = generator.emitNode(m_base); 354 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());354 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 355 355 return generator.emitGetById(generator.finalDestination(dst), base, m_ident); 356 356 } … … 376 376 RefPtr<RegisterID> returnValue = generator.finalDestination(dst, func.get()); 377 377 CallArguments callArguments(generator, m_args); 378 return generator.emitConstruct(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());378 return generator.emitConstruct(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd()); 379 379 } 380 380 … … 413 413 CallArguments callArguments(generator, m_args); 414 414 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 415 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), startOffset(), divotEndOffset(), divotLine(), divotLineStart());415 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), divotStart(), divotEnd()); 416 416 } 417 417 418 418 RefPtr<RegisterID> func = generator.newTemporary(); 419 419 CallArguments callArguments(generator, m_args); 420 generator.emitExpressionInfo(divot() - divotStartOffset() + 4, 4, 0, divotLine(), divotLineStart()); 420 JSTextPosition newDivot = divotStart() + 4; 421 generator.emitExpressionInfo(newDivot, divotStart(), newDivot); 421 422 generator.emitResolveScope(callArguments.thisRegister(), generator.propertyNames().eval); 422 423 generator.emitGetFromScope(func.get(), callArguments.thisRegister(), generator.propertyNames().eval, ThrowIfNotFound); 423 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), startOffset(), divotEndOffset(), divotLine(), divotLineStart());424 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), divotStart(), divotEnd()); 424 425 } 425 426 … … 432 433 CallArguments callArguments(generator, m_args); 433 434 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 434 return generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());435 return generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 435 436 } 436 437 … … 448 449 // This passes NoExpectedFunction because we expect that if the function is in a 449 450 // local variable, then it's not one of our built-in constructors. 450 return generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());451 return generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 451 452 } 452 453 … … 454 455 RefPtr<RegisterID> returnValue = generator.finalDestination(dst, func.get()); 455 456 CallArguments callArguments(generator, m_args); 456 int identifierStart = divot() - divotStartOffset(); 457 458 generator.emitExpressionInfo( identifierStart + m_ident.length(), m_ident.length(), 0, divotLine(), divotLineStart());457 458 JSTextPosition newDivot = divotStart() + m_ident.length(); 459 generator.emitExpressionInfo(newDivot, divotStart(), newDivot); 459 460 generator.emitResolveScope(callArguments.thisRegister(), m_ident); 460 461 generator.emitGetFromScope(func.get(), callArguments.thisRegister(), m_ident, ThrowIfNotFound); 461 return generator.emitCall(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());462 return generator.emitCall(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd()); 462 463 } 463 464 … … 468 469 RefPtr<RegisterID> base = generator.emitNode(m_base); 469 470 RegisterID* property = generator.emitNode(m_subscript); 470 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());471 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 471 472 RefPtr<RegisterID> function = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property); 472 473 RefPtr<RegisterID> returnValue = generator.finalDestination(dst, function.get()); 473 474 CallArguments callArguments(generator, m_args); 474 475 generator.emitMove(callArguments.thisRegister(), base.get()); 475 return generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());476 return generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 476 477 } 477 478 … … 484 485 CallArguments callArguments(generator, m_args); 485 486 generator.emitNode(callArguments.thisRegister(), m_base); 486 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());487 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 487 488 generator.emitGetById(function.get(), callArguments.thisRegister(), m_ident); 488 return generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());489 return generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 489 490 } 490 491 … … 494 495 RefPtr<Label> end = generator.newLabel(); 495 496 RefPtr<RegisterID> base = generator.emitNode(m_base); 496 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());497 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 497 498 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 498 499 RefPtr<RegisterID> returnValue = generator.finalDestination(dst, function.get()); … … 506 507 CallArguments callArguments(generator, m_args); 507 508 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 508 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());509 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 509 510 generator.emitJump(end.get()); 510 511 … … 514 515 CallArguments callArguments(generator, m_args); 515 516 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 516 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());517 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 517 518 generator.emitJump(end.get()); 518 519 } … … 522 523 CallArguments callArguments(generator, m_args); 523 524 generator.emitMove(callArguments.thisRegister(), base.get()); 524 generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());525 generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 525 526 } 526 527 generator.emitLabel(end.get()); … … 544 545 RefPtr<Label> end = generator.newLabel(); 545 546 RefPtr<RegisterID> base = generator.emitNode(m_base); 546 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());547 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 547 548 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 548 549 RefPtr<RegisterID> returnValue = generator.finalDestination(dst, function.get()); … … 559 560 CallArguments callArguments(generator, m_args); 560 561 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 561 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());562 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 562 563 } else { 563 564 m_args->m_listNode = m_args->m_listNode->m_next; … … 565 566 CallArguments callArguments(generator, m_args); 566 567 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 567 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());568 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 568 569 } 569 570 m_args->m_listNode = oldList; … … 572 573 CallArguments callArguments(generator, m_args); 573 574 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 574 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());575 generator.emitCall(returnValue.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 575 576 } 576 577 } else { … … 593 594 generator.emitNode(args->m_expr); 594 595 595 generator.emitCallVarargs(returnValue.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), profileHookRegister.get(), divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());596 generator.emitCallVarargs(returnValue.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), profileHookRegister.get(), divot(), divotStart(), divotEnd()); 596 597 } 597 598 generator.emitJump(end.get()); … … 601 602 CallArguments callArguments(generator, m_args); 602 603 generator.emitMove(callArguments.thisRegister(), base.get()); 603 generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());604 generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 604 605 } 605 606 generator.emitLabel(end.get()); … … 640 641 } 641 642 642 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());643 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 643 644 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.newTemporary(), ident); 644 645 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound); … … 661 662 RefPtr<RegisterID> property = generator.emitNode(subscript); 662 663 663 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStart Offset(), bracketAccessor->divotEndOffset(), bracketAccessor->divotLine(), bracketAccessor->divotLineStart());664 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStart(), bracketAccessor->divotEnd()); 664 665 RefPtr<RegisterID> value = generator.emitGetByVal(generator.newTemporary(), base.get(), property.get()); 665 666 RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator); 666 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());667 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 667 668 generator.emitPutByVal(base.get(), property.get(), value.get()); 668 669 return generator.moveToDestinationIfNeeded(dst, oldValue); … … 681 682 RefPtr<RegisterID> base = generator.emitNode(baseNode); 682 683 683 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStart Offset(), dotAccessor->divotEndOffset(), dotAccessor->divotLine(), dotAccessor->divotLineStart());684 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStart(), dotAccessor->divotEnd()); 684 685 RefPtr<RegisterID> value = generator.emitGetById(generator.newTemporary(), base.get(), ident); 685 686 RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator); 686 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());687 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 687 688 generator.emitPutById(base.get(), ident, value.get()); 688 689 return generator.moveToDestinationIfNeeded(dst, oldValue); … … 712 713 return generator.emitLoad(generator.finalDestination(dst), false); 713 714 714 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());715 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 715 716 RefPtr<RegisterID> base = generator.emitResolveScope(generator.tempDestination(dst), m_ident); 716 717 return generator.emitDeleteById(generator.finalDestination(dst, base.get()), base.get(), m_ident); … … 724 725 RegisterID* r1 = generator.emitNode(m_subscript); 725 726 726 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());727 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 727 728 return generator.emitDeleteByVal(generator.finalDestination(dst), r0.get(), r1); 728 729 } … … 734 735 RegisterID* r0 = generator.emitNode(m_base); 735 736 736 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());737 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 737 738 return generator.emitDeleteById(generator.finalDestination(dst), r0, m_ident); 738 739 } … … 806 807 } 807 808 808 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());809 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 809 810 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.tempDestination(dst), ident); 810 811 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound); … … 825 826 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 826 827 827 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStart Offset(), bracketAccessor->divotEndOffset(), bracketAccessor->divotLine(), bracketAccessor->divotLineStart());828 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStart(), bracketAccessor->divotEnd()); 828 829 RegisterID* value = generator.emitGetByVal(propDst.get(), base.get(), property.get()); 829 830 emitIncOrDec(generator, value, m_operator); 830 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());831 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 831 832 generator.emitPutByVal(base.get(), property.get(), value); 832 833 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 843 844 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 844 845 845 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStart Offset(), dotAccessor->divotEndOffset(), dotAccessor->divotLine(), dotAccessor->divotLineStart());846 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStart(), dotAccessor->divotEnd()); 846 847 RegisterID* value = generator.emitGetById(propDst.get(), base.get(), ident); 847 848 emitIncOrDec(generator, value, m_operator); 848 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());849 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 849 850 generator.emitPutById(base.get(), ident, value); 850 851 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 872 873 { 873 874 RegisterID* src = generator.emitNode(m_expr); 874 generator.emitExpressionInfo( startOffset(), 0, 0, lineNo(), lineStartOffset());875 generator.emitExpressionInfo(position(), position(), position()); 875 876 return generator.emitUnaryOp(opcodeID(), generator.finalDestination(dst), src); 876 877 } … … 1004 1005 // If this is required the node is passed as 'emitExpressionInfoForMe'; do so now. 1005 1006 if (emitExpressionInfoForMe) 1006 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStartOffset(), emitExpressionInfoForMe->divotEndOffset(), emitExpressionInfoForMe->divotLine(), emitExpressionInfoForMe->divotLineStart()); 1007 1007 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStart(), emitExpressionInfoForMe->divotEnd()); 1008 1008 // If there is an assignment convert the lhs now. This will also copy lhs to 1009 1009 // the temporary register we allocated for it. … … 1077 1077 1078 1078 if (opcodeID == op_add && m_expr1->isAdd() && m_expr1->resultDescriptor().definitelyIsString()) { 1079 generator.emitExpressionInfo( startOffset(), 0, 0, lineNo(), lineStartOffset());1079 generator.emitExpressionInfo(position(), position(), position()); 1080 1080 return emitStrcat(generator, dst); 1081 1081 } … … 1099 1099 bool wasTypeof = generator.m_lastOpcodeID == op_typeof; 1100 1100 RegisterID* src2 = generator.emitNode(right); 1101 generator.emitExpressionInfo( startOffset(), 0, 0, lineNo(), lineStartOffset());1101 generator.emitExpressionInfo(position(), position(), position()); 1102 1102 if (wasTypeof && (opcodeID == op_neq || opcodeID == op_nstricteq)) { 1103 1103 RefPtr<RegisterID> tmp = generator.tempDestination(dst); … … 1147 1147 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator)); 1148 1148 RegisterID* src2 = generator.emitNode(m_expr2); 1149 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1149 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1150 1150 return generator.emitBinaryOp(opcodeID(), generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor())); 1151 1151 } … … 1159 1159 RefPtr<Label> target = generator.newLabel(); 1160 1160 1161 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1161 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1162 1162 generator.emitCheckHasInstance(dstReg.get(), src1.get(), src2.get(), target.get()); 1163 1163 1164 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1164 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1165 1165 generator.emitGetById(prototype.get(), src2.get(), generator.vm()->propertyNames->prototype); 1166 1166 1167 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1167 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1168 1168 RegisterID* result = generator.emitInstanceOf(dstReg.get(), src1.get(), prototype.get()); 1169 1169 generator.emitLabel(target.get()); … … 1276 1276 // If this is required the node is passed as 'emitExpressionInfoForMe'; do so now. 1277 1277 if (emitExpressionInfoForMe) 1278 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStartOffset(), emitExpressionInfoForMe->divotEndOffset(), emitExpressionInfoForMe->divotLine(), emitExpressionInfoForMe->divotLineStart()); 1279 1278 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStart(), emitExpressionInfoForMe->divotEnd()); 1280 1279 return generator.emitBinaryOp(opcodeID, dst, src1, src2, types); 1281 1280 } … … 1301 1300 } 1302 1301 1303 generator.emitExpressionInfo(divot() - divotStartOffset() + m_ident.length(), m_ident.length(), 0, divotLine(), divotLineStart()); 1302 JSTextPosition newDivot = divotStart() + m_ident.length(); 1303 generator.emitExpressionInfo(newDivot, divotStart(), newDivot); 1304 1304 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.newTemporary(), m_ident); 1305 1305 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), m_ident, ThrowIfNotFound); … … 1321 1321 } 1322 1322 1323 if (generator.isStrictMode()) 1324 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1323 1325 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.newTemporary(), m_ident); 1324 1326 if (dst == generator.ignoredResult()) 1325 1327 dst = 0; 1326 1328 RefPtr<RegisterID> result = generator.emitNode(dst, m_right); 1327 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1329 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1328 1330 return generator.emitPutToScope(scope.get(), m_ident, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 1329 1331 } … … 1336 1338 RefPtr<RegisterID> value = generator.destinationForAssignResult(dst); 1337 1339 RegisterID* result = generator.emitNode(value.get(), m_right); 1338 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1340 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1339 1341 RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result); 1340 1342 generator.emitPutById(base.get(), m_ident, forwardResult); … … 1348 1350 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_rightHasAssignments, m_right->isPure(generator)); 1349 1351 1350 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());1352 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 1351 1353 RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 1352 1354 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1353 1355 1354 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1356 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1355 1357 return generator.emitPutById(base.get(), m_ident, updatedValue); 1356 1358 } … … 1372 1374 RegisterID* result = generator.emitNode(value.get(), m_right); 1373 1375 1374 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1376 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1375 1377 RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result); 1376 1378 generator.emitPutByVal(base.get(), property.get(), forwardResult); … … 1385 1387 RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(m_subscript, m_rightHasAssignments, m_right->isPure(generator)); 1386 1388 1387 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart Offset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart());1389 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 1388 1390 RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get()); 1389 1391 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1390 1392 1391 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1393 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1392 1394 generator.emitPutByVal(base.get(), property.get(), updatedValue); 1393 1395 … … 1696 1698 propertyName = generator.newTemporary(); 1697 1699 RefPtr<RegisterID> protect = propertyName; 1700 if (generator.isStrictMode()) 1701 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1698 1702 RegisterID* scope = generator.emitResolveScope(generator.newTemporary(), ident); 1699 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());1703 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1700 1704 generator.emitPutToScope(scope, ident, propertyName, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 1701 1705 } else { … … 1711 1715 RegisterID* base = generator.emitNode(assignNode->base()); 1712 1716 1713 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart Offset(), assignNode->divotEndOffset(), assignNode->divotLine(), assignNode->divotLineStart());1717 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 1714 1718 generator.emitPutById(base, ident, propertyName); 1715 1719 } else { … … 1721 1725 RegisterID* subscript = generator.emitNode(assignNode->subscript()); 1722 1726 1723 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart Offset(), assignNode->divotEndOffset(), assignNode->divotLine(), assignNode->divotLineStart());1727 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 1724 1728 generator.emitPutByVal(base.get(), subscript, propertyName); 1725 1729 } … … 1817 1821 1818 1822 RefPtr<RegisterID> scope = generator.emitNode(m_expr); 1819 generator.emitExpressionInfo(m_divot, m_ expressionLength, 0, m_divotLine, m_divotLineStart);1823 generator.emitExpressionInfo(m_divot, m_divot - m_expressionLength, m_divot); 1820 1824 generator.emitPushWithScope(scope.get()); 1821 1825 generator.emitNode(dst, m_statement); … … 2021 2025 dst = 0; 2022 2026 RefPtr<RegisterID> expr = generator.emitNode(m_expr); 2023 generator.emitExpressionInfo(divot(), divotStart Offset(), divotEndOffset(), divotLine(), divotLineStart());2027 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 2024 2028 generator.emitThrow(expr.get()); 2025 2029 }
Note:
See TracChangeset
for help on using the changeset viewer.