Changeset 152494 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Jul 9, 2013, 9:15:12 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r149247 r152494 88 88 RegisterID* ThrowableExpressionData::emitThrowReferenceError(BytecodeGenerator& generator, const String& message) 89 89 { 90 generator.emitExpressionInfo(divot(), startOffset(), endOffset());90 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 91 91 generator.emitThrowReferenceError(message); 92 92 return generator.newTemporary(); … … 154 154 } 155 155 156 generator.emitExpressionInfo(m_startOffset + m_ident.length(), m_ident.length(), 0); 156 unsigned divot = m_startOffset + m_ident.length(); 157 generator.emitExpressionInfo(divot, m_ident.length(), 0, m_divotLine, m_divotLineStart); 157 158 return generator.emitResolve(generator.finalDestination(dst), resolveResult, m_ident); 158 159 } … … 202 203 } 203 204 204 ArgumentListNode* ArrayNode::toArgumentList(VM* vm, int lineNumber, int charPosition) const205 ArgumentListNode* ArrayNode::toArgumentList(VM* vm, int lineNumber, int startPosition, unsigned sourceOffset) const 205 206 { 206 207 ASSERT(!m_elision && !m_optional); … … 208 209 if (!ptr) 209 210 return 0; 210 JSTokenLocation location ;211 JSTokenLocation location(sourceOffset); 211 212 location.line = lineNumber; 212 location.charPosition = charPosition; 213 location.startOffset = startPosition; 214 location.sourceOffset = sourceOffset; 213 215 ArgumentListNode* head = new (vm) ArgumentListNode(location, ptr->value()); 214 216 ArgumentListNode* tail = head; … … 325 327 && !generator.symbolTable().slowArguments()) { 326 328 RegisterID* property = generator.emitNode(m_subscript); 327 generator.emitExpressionInfo(divot(), startOffset(), endOffset());329 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 328 330 return generator.emitGetArgumentByVal(generator.finalDestination(dst), generator.uncheckedRegisterForArguments(), property); 329 331 } … … 331 333 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_subscriptHasAssignments, m_subscript->isPure(generator)); 332 334 RegisterID* property = generator.emitNode(m_subscript); 333 generator.emitExpressionInfo(divot(), startOffset(), endOffset());335 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 334 336 return generator.emitGetByVal(generator.finalDestination(dst), base.get(), property); 335 337 } … … 345 347 if (!generator.willResolveToArguments(resolveNode->identifier())) 346 348 goto nonArgumentsPath; 347 generator.emitExpressionInfo(divot(), startOffset(), endOffset());349 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 348 350 return generator.emitGetArgumentsLength(generator.finalDestination(dst), generator.uncheckedRegisterForArguments()); 349 351 } … … 351 353 nonArgumentsPath: 352 354 RegisterID* base = generator.emitNode(m_base); 353 generator.emitExpressionInfo(divot(), startOffset(), endOffset());355 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 354 356 return generator.emitGetById(generator.finalDestination(dst), base, m_ident); 355 357 } … … 374 376 RefPtr<RegisterID> func = generator.emitNode(m_expr); 375 377 CallArguments callArguments(generator, m_args); 376 return generator.emitConstruct(generator.finalDestinationOrIgnored(dst), func.get(), expectedFunction, callArguments, divot(), startOffset(), endOffset());378 return generator.emitConstruct(generator.finalDestinationOrIgnored(dst), func.get(), expectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 377 379 } 378 380 … … 409 411 RefPtr<RegisterID> func = generator.tempDestination(dst); 410 412 CallArguments callArguments(generator, m_args); 411 generator.emitExpressionInfo(divot() - startOffset() + 4, 4, 0);413 generator.emitExpressionInfo(divot() - divotStartOffset() + 4, 4, 0, divotLine(), divotLineStart()); 412 414 generator.emitResolveWithThis(callArguments.thisRegister(), func.get(), generator.resolve(generator.propertyNames().eval), generator.propertyNames().eval); 413 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), startOffset(), endOffset());415 return generator.emitCallEval(generator.finalDestination(dst, func.get()), func.get(), callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 414 416 } 415 417 … … 421 423 CallArguments callArguments(generator, m_args); 422 424 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 423 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());425 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 424 426 } 425 427 … … 437 439 // This passes NoExpectedFunction because we expect that if the function is in a 438 440 // local variable, then it's not one of our built-in constructors. 439 return generator.emitCall(generator.finalDestinationOrIgnored(dst, callArguments.thisRegister()), func.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());441 return generator.emitCall(generator.finalDestinationOrIgnored(dst, callArguments.thisRegister()), func.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 440 442 } 441 443 … … 445 447 generator.emitGetStaticVar(func.get(), resolveResult, m_ident); 446 448 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 447 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), expectedFunction, callArguments, divot(), startOffset(), endOffset());449 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), expectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 448 450 } 449 451 450 452 RefPtr<RegisterID> func = generator.newTemporary(); 451 453 CallArguments callArguments(generator, m_args); 452 int identifierStart = divot() - startOffset();453 454 generator.emitExpressionInfo(identifierStart + m_ident.length(), m_ident.length(), 0 );454 int identifierStart = divot() - divotStartOffset(); 455 456 generator.emitExpressionInfo(identifierStart + m_ident.length(), m_ident.length(), 0, divotLine(), divotLineStart()); 455 457 generator.emitResolveWithThis(callArguments.thisRegister(), func.get(), resolveResult, m_ident); 456 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), expectedFunction, callArguments, divot(), startOffset(), endOffset());458 return generator.emitCall(generator.finalDestinationOrIgnored(dst, func.get()), func.get(), expectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 457 459 } 458 460 … … 463 465 RefPtr<RegisterID> base = generator.emitNode(m_base); 464 466 RegisterID* property = generator.emitNode(m_subscript); 465 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);467 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 466 468 RefPtr<RegisterID> function = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property); 467 469 CallArguments callArguments(generator, m_args); 468 470 generator.emitMove(callArguments.thisRegister(), base.get()); 469 return generator.emitCall(generator.finalDestinationOrIgnored(dst, function.get()), function.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());471 return generator.emitCall(generator.finalDestinationOrIgnored(dst, function.get()), function.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 470 472 } 471 473 … … 477 479 CallArguments callArguments(generator, m_args); 478 480 generator.emitNode(callArguments.thisRegister(), m_base); 479 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);481 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 480 482 generator.emitGetById(function.get(), callArguments.thisRegister(), m_ident); 481 return generator.emitCall(generator.finalDestinationOrIgnored(dst, function.get()), function.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());483 return generator.emitCall(generator.finalDestinationOrIgnored(dst, function.get()), function.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 482 484 } 483 485 … … 487 489 RefPtr<Label> end = generator.newLabel(); 488 490 RefPtr<RegisterID> base = generator.emitNode(m_base); 489 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);491 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 490 492 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 491 493 RefPtr<RegisterID> finalDestinationOrIgnored = generator.finalDestinationOrIgnored(dst, function.get()); … … 499 501 CallArguments callArguments(generator, m_args); 500 502 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 501 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());503 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 502 504 generator.emitJump(end.get()); 503 505 … … 507 509 CallArguments callArguments(generator, m_args); 508 510 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 509 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());511 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 510 512 generator.emitJump(end.get()); 511 513 } … … 515 517 CallArguments callArguments(generator, m_args); 516 518 generator.emitMove(callArguments.thisRegister(), base.get()); 517 generator.emitCall(finalDestinationOrIgnored.get(), function.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());519 generator.emitCall(finalDestinationOrIgnored.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 518 520 } 519 521 generator.emitLabel(end.get()); … … 537 539 RefPtr<Label> end = generator.newLabel(); 538 540 RefPtr<RegisterID> base = generator.emitNode(m_base); 539 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);541 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 540 542 RefPtr<RegisterID> function = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 541 543 RefPtr<RegisterID> finalDestinationOrIgnored = generator.finalDestinationOrIgnored(dst, function.get()); … … 548 550 ASSERT(m_args->m_listNode->m_next->m_expr->isSimpleArray()); 549 551 ASSERT(!m_args->m_listNode->m_next->m_next); 550 m_args->m_listNode = static_cast<ArrayNode*>(m_args->m_listNode->m_next->m_expr)->toArgumentList(generator.vm(), 0, 0 );552 m_args->m_listNode = static_cast<ArrayNode*>(m_args->m_listNode->m_next->m_expr)->toArgumentList(generator.vm(), 0, 0, 0); 551 553 RefPtr<RegisterID> realFunction = generator.emitMove(generator.tempDestination(dst), base.get()); 552 554 CallArguments callArguments(generator, m_args); 553 555 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 554 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());556 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 555 557 } else { 556 558 m_args->m_listNode = m_args->m_listNode->m_next; … … 558 560 CallArguments callArguments(generator, m_args); 559 561 generator.emitNode(callArguments.thisRegister(), oldList->m_expr); 560 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());562 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 561 563 } 562 564 m_args->m_listNode = oldList; … … 565 567 CallArguments callArguments(generator, m_args); 566 568 generator.emitLoad(callArguments.thisRegister(), jsUndefined()); 567 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());569 generator.emitCall(finalDestinationOrIgnored.get(), realFunction.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 568 570 } 569 571 } else { … … 586 588 generator.emitNode(args->m_expr); 587 589 588 generator.emitCallVarargs(finalDestinationOrIgnored.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), profileHookRegister.get(), divot(), startOffset(), endOffset());590 generator.emitCallVarargs(finalDestinationOrIgnored.get(), realFunction.get(), thisRegister.get(), argsRegister.get(), generator.newTemporary(), profileHookRegister.get(), divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 589 591 } 590 592 generator.emitJump(end.get()); … … 594 596 CallArguments callArguments(generator, m_args); 595 597 generator.emitMove(callArguments.thisRegister(), base.get()); 596 generator.emitCall(finalDestinationOrIgnored.get(), function.get(), NoExpectedFunction, callArguments, divot(), startOffset(), endOffset());598 generator.emitCall(finalDestinationOrIgnored.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 597 599 } 598 600 generator.emitLabel(end.get()); … … 642 644 } 643 645 644 generator.emitExpressionInfo(divot(), startOffset(), endOffset());646 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 645 647 RefPtr<RegisterID> value = generator.newTemporary(); 646 648 NonlocalResolveInfo resolveInfo; … … 664 666 RefPtr<RegisterID> property = generator.emitNode(subscript); 665 667 666 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor-> startOffset(), bracketAccessor->endOffset());668 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStartOffset(), bracketAccessor->divotEndOffset(), bracketAccessor->divotLine(), bracketAccessor->divotLineStart()); 667 669 RefPtr<RegisterID> value = generator.emitGetByVal(generator.newTemporary(), base.get(), property.get()); 668 670 RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator); 669 generator.emitExpressionInfo(divot(), startOffset(), endOffset());671 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 670 672 generator.emitPutByVal(base.get(), property.get(), value.get()); 671 673 return generator.moveToDestinationIfNeeded(dst, oldValue); … … 684 686 RefPtr<RegisterID> base = generator.emitNode(baseNode); 685 687 686 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor-> startOffset(), dotAccessor->endOffset());688 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStartOffset(), dotAccessor->divotEndOffset(), dotAccessor->divotLine(), dotAccessor->divotLineStart()); 687 689 RefPtr<RegisterID> value = generator.emitGetById(generator.newTemporary(), base.get(), ident); 688 690 RegisterID* oldValue = emitPostIncOrDec(generator, generator.tempDestination(dst), value.get(), m_operator); 689 generator.emitExpressionInfo(divot(), startOffset(), endOffset());691 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 690 692 generator.emitPutById(base.get(), ident, value.get()); 691 693 return generator.moveToDestinationIfNeeded(dst, oldValue); … … 716 718 return generator.emitLoad(generator.finalDestination(dst), false); 717 719 718 generator.emitExpressionInfo(divot(), startOffset(), endOffset());720 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 719 721 RegisterID* base = generator.emitResolveBase(generator.tempDestination(dst), resolveResult, m_ident); 720 722 return generator.emitDeleteById(generator.finalDestination(dst, base), base, m_ident); … … 728 730 RegisterID* r1 = generator.emitNode(m_subscript); 729 731 730 generator.emitExpressionInfo(divot(), startOffset(), endOffset());732 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 731 733 return generator.emitDeleteByVal(generator.finalDestination(dst), r0.get(), r1); 732 734 } … … 738 740 RegisterID* r0 = generator.emitNode(m_base); 739 741 740 generator.emitExpressionInfo(divot(), startOffset(), endOffset());742 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 741 743 return generator.emitDeleteById(generator.finalDestination(dst), r0, m_ident); 742 744 } … … 824 826 } 825 827 826 generator.emitExpressionInfo(divot(), startOffset(), endOffset());828 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 827 829 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 828 830 NonlocalResolveInfo resolveVerifier; … … 844 846 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 845 847 846 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor-> startOffset(), bracketAccessor->endOffset());848 generator.emitExpressionInfo(bracketAccessor->divot(), bracketAccessor->divotStartOffset(), bracketAccessor->divotEndOffset(), bracketAccessor->divotLine(), bracketAccessor->divotLineStart()); 847 849 RegisterID* value = generator.emitGetByVal(propDst.get(), base.get(), property.get()); 848 850 emitIncOrDec(generator, value, m_operator); 849 generator.emitExpressionInfo(divot(), startOffset(), endOffset());851 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 850 852 generator.emitPutByVal(base.get(), property.get(), value); 851 853 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 862 864 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 863 865 864 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor-> startOffset(), dotAccessor->endOffset());866 generator.emitExpressionInfo(dotAccessor->divot(), dotAccessor->divotStartOffset(), dotAccessor->divotEndOffset(), dotAccessor->divotLine(), dotAccessor->divotLineStart()); 865 867 RegisterID* value = generator.emitGetById(propDst.get(), base.get(), ident); 866 868 emitIncOrDec(generator, value, m_operator); 867 generator.emitExpressionInfo(divot(), startOffset(), endOffset());869 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 868 870 generator.emitPutById(base.get(), ident, value); 869 871 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 891 893 { 892 894 RegisterID* src = generator.emitNode(m_expr); 895 generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset()); 893 896 return generator.emitUnaryOp(opcodeID(), generator.finalDestination(dst), src); 894 897 } … … 1022 1025 // If this is required the node is passed as 'emitExpressionInfoForMe'; do so now. 1023 1026 if (emitExpressionInfoForMe) 1024 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe-> startOffset(), emitExpressionInfoForMe->endOffset());1027 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStartOffset(), emitExpressionInfoForMe->divotEndOffset(), emitExpressionInfoForMe->divotLine(), emitExpressionInfoForMe->divotLineStart()); 1025 1028 1026 1029 // If there is an assignment convert the lhs now. This will also copy lhs to … … 1162 1165 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator)); 1163 1166 RegisterID* src2 = generator.emitNode(m_expr2); 1164 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1167 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1165 1168 return generator.emitBinaryOp(opcodeID(), generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor())); 1166 1169 } … … 1174 1177 RefPtr<Label> target = generator.newLabel(); 1175 1178 1176 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1179 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1177 1180 generator.emitCheckHasInstance(dstReg.get(), src1.get(), src2.get(), target.get()); 1178 1181 1179 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1182 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1180 1183 generator.emitGetById(prototype.get(), src2.get(), generator.vm()->propertyNames->prototype); 1181 1184 1182 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1185 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1183 1186 RegisterID* result = generator.emitInstanceOf(dstReg.get(), src1.get(), prototype.get()); 1184 1187 generator.emitLabel(target.get()); … … 1291 1294 // If this is required the node is passed as 'emitExpressionInfoForMe'; do so now. 1292 1295 if (emitExpressionInfoForMe) 1293 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe-> startOffset(), emitExpressionInfoForMe->endOffset());1296 generator.emitExpressionInfo(emitExpressionInfoForMe->divot(), emitExpressionInfoForMe->divotStartOffset(), emitExpressionInfoForMe->divotEndOffset(), emitExpressionInfoForMe->divotLine(), emitExpressionInfoForMe->divotLineStart()); 1294 1297 1295 1298 return generator.emitBinaryOp(opcodeID, dst, src1, src2, types); … … 1326 1329 1327 1330 RefPtr<RegisterID> src1 = generator.tempDestination(dst); 1328 generator.emitExpressionInfo(divot() - startOffset() + m_ident.length(), m_ident.length(), 0);1331 generator.emitExpressionInfo(divot() - divotStartOffset() + m_ident.length(), m_ident.length(), 0, divotLine(), divotLineStart()); 1329 1332 NonlocalResolveInfo resolveVerifier; 1330 1333 RefPtr<RegisterID> base = generator.emitResolveWithBaseForPut(generator.newTemporary(), src1.get(), resolveResult, m_ident, resolveVerifier); … … 1361 1364 dst = 0; 1362 1365 RegisterID* value = generator.emitNode(dst, m_right); 1363 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1366 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1364 1367 return generator.emitPutToBase(base.get(), m_ident, value, resolveVerifier); 1365 1368 } … … 1372 1375 RefPtr<RegisterID> value = generator.destinationForAssignResult(dst); 1373 1376 RegisterID* result = generator.emitNode(value.get(), m_right); 1374 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1377 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1375 1378 RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result); 1376 1379 generator.emitPutById(base.get(), m_ident, forwardResult); … … 1384 1387 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_rightHasAssignments, m_right->isPure(generator)); 1385 1388 1386 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);1389 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 1387 1390 RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 1388 1391 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1389 1392 1390 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1393 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1391 1394 return generator.emitPutById(base.get(), m_ident, updatedValue); 1392 1395 } … … 1408 1411 RegisterID* result = generator.emitNode(value.get(), m_right); 1409 1412 1410 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1413 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1411 1414 RegisterID* forwardResult = (dst == generator.ignoredResult()) ? result : generator.moveToDestinationIfNeeded(generator.tempDestination(result), result); 1412 1415 generator.emitPutByVal(base.get(), property.get(), forwardResult); … … 1421 1424 RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(m_subscript, m_rightHasAssignments, m_right->isPure(generator)); 1422 1425 1423 generator.emitExpressionInfo( divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);1426 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStartOffset(), subexpressionEndOffset(), subexpressionLine(), subexpressionLineStart()); 1424 1427 RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get()); 1425 1428 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor())); 1426 1429 1427 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1430 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1428 1431 generator.emitPutByVal(base.get(), property.get(), updatedValue); 1429 1432 … … 1481 1484 void ConstStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1482 1485 { 1483 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1486 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1484 1487 generator.emitNode(m_next); 1485 1488 } … … 1524 1527 void EmptyStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1525 1528 { 1526 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1529 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1527 1530 } 1528 1531 … … 1531 1534 void DebuggerStatementNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1532 1535 { 1533 generator.emitDebugHook(DidReachBreakpoint, firstLine(), lastLine(), charPosition());1536 generator.emitDebugHook(DidReachBreakpoint, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1534 1537 } 1535 1538 … … 1539 1542 { 1540 1543 ASSERT(m_expr); 1541 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1544 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1542 1545 generator.emitNode(dst, m_expr); 1543 1546 } … … 1548 1551 { 1549 1552 ASSERT(m_expr); 1550 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1553 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1551 1554 generator.emitNode(m_expr); 1552 1555 } … … 1593 1596 void IfElseNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1594 1597 { 1595 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1598 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1596 1599 1597 1600 RefPtr<Label> beforeThen = generator.newLabel(); … … 1630 1633 generator.emitLabel(topOfLoop.get()); 1631 1634 generator.emitLoopHint(); 1632 generator.emitDebugHook(WillExecuteStatement, lastLine(), lastLine(), charPosition());1635 generator.emitDebugHook(WillExecuteStatement, lastLine(), lastLine(), startOffset(), lineStartOffset()); 1633 1636 1634 1637 generator.emitNode(dst, m_statement); 1635 1638 1636 1639 generator.emitLabel(scope->continueTarget()); 1637 generator.emitDebugHook(WillExecuteStatement, lastLine(), lastLine(), charPosition());1640 generator.emitDebugHook(WillExecuteStatement, lastLine(), lastLine(), startOffset(), lineStartOffset()); 1638 1641 generator.emitNodeInConditionContext(m_expr, topOfLoop.get(), scope->breakTarget(), FallThroughMeansFalse); 1639 1642 … … 1648 1651 RefPtr<Label> topOfLoop = generator.newLabel(); 1649 1652 1650 generator.emitDebugHook(WillExecuteStatement, m_expr->lineNo(), m_expr->lineNo(), m_expr-> charPosition());1653 generator.emitDebugHook(WillExecuteStatement, m_expr->lineNo(), m_expr->lineNo(), m_expr->startOffset(), m_expr->lineStartOffset()); 1651 1654 generator.emitNodeInConditionContext(m_expr, topOfLoop.get(), scope->breakTarget(), FallThroughMeansTrue); 1652 1655 … … 1657 1660 1658 1661 generator.emitLabel(scope->continueTarget()); 1659 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1662 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1660 1663 1661 1664 generator.emitNodeInConditionContext(m_expr, topOfLoop.get(), scope->breakTarget(), FallThroughMeansFalse); … … 1670 1673 LabelScopePtr scope = generator.newLabelScope(LabelScope::Loop); 1671 1674 1672 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1675 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1673 1676 1674 1677 if (m_expr1) … … 1685 1688 1686 1689 generator.emitLabel(scope->continueTarget()); 1687 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1690 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1688 1691 if (m_expr3) 1689 1692 generator.emitNode(generator.ignoredResult(), m_expr3); … … 1708 1711 } 1709 1712 1710 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1713 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1711 1714 1712 1715 if (m_init) … … 1737 1740 RegisterID* base = generator.emitResolveBaseForPut(generator.newTemporary(), resolveResult, ident, resolveVerifier); 1738 1741 1739 generator.emitExpressionInfo(divot(), startOffset(), endOffset());1742 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 1740 1743 generator.emitPutToBase(base, ident, propertyName, resolveVerifier); 1741 1744 } else { … … 1751 1754 RegisterID* base = generator.emitNode(assignNode->base()); 1752 1755 1753 generator.emitExpressionInfo(assignNode->divot(), assignNode-> startOffset(), assignNode->endOffset());1756 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStartOffset(), assignNode->divotEndOffset(), assignNode->divotLine(), assignNode->divotLineStart()); 1754 1757 generator.emitPutById(base, ident, propertyName); 1755 1758 } else { … … 1761 1764 RegisterID* subscript = generator.emitNode(assignNode->subscript()); 1762 1765 1763 generator.emitExpressionInfo(assignNode->divot(), assignNode-> startOffset(), assignNode->endOffset());1766 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStartOffset(), assignNode->divotEndOffset(), assignNode->divotLine(), assignNode->divotLineStart()); 1764 1767 generator.emitPutByVal(base.get(), subscript, propertyName); 1765 1768 } … … 1772 1775 generator.emitLabel(scope->continueTarget()); 1773 1776 generator.emitNextPropertyName(propertyName, base.get(), i.get(), size.get(), iter.get(), loopStart.get()); 1774 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1777 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1775 1778 generator.emitLabel(scope->breakTarget()); 1776 1779 } … … 1794 1797 void ContinueNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1795 1798 { 1796 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1799 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1797 1800 1798 1801 LabelScope* scope = generator.continueTarget(m_ident); … … 1821 1824 void BreakNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 1822 1825 { 1823 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1826 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1824 1827 1825 1828 LabelScope* scope = generator.breakTarget(m_ident); … … 1834 1837 void ReturnNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1835 1838 { 1836 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1839 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1837 1840 ASSERT(generator.codeType() == FunctionCode); 1838 1841 … … 1846 1849 } 1847 1850 1848 generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine(), charPosition());1851 generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1849 1852 generator.emitReturn(returnRegister.get()); 1850 1853 } … … 1854 1857 void WithNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1855 1858 { 1856 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());1859 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 1857 1860 1858 1861 RefPtr<RegisterID> scope = generator.emitNode(m_expr); 1859 generator.emitExpressionInfo(m_divot, m_expressionLength, 0 );1862 generator.emitExpressionInfo(m_divot, m_expressionLength, 0, m_divotLine, m_divotLineStart); 1860 1863 generator.emitPushWithScope(scope.get()); 1861 1864 generator.emitNode(dst, m_statement); … … 2028 2031 void SwitchNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2029 2032 { 2030 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());2033 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 2031 2034 2032 2035 LabelScopePtr scope = generator.newLabelScope(LabelScope::Switch); … … 2042 2045 void LabelNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2043 2046 { 2044 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());2047 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 2045 2048 2046 2049 ASSERT(!generator.breakTarget(m_name)); … … 2056 2059 void ThrowNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2057 2060 { 2058 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());2061 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 2059 2062 2060 2063 if (dst == generator.ignoredResult()) 2061 2064 dst = 0; 2062 2065 RefPtr<RegisterID> expr = generator.emitNode(m_expr); 2063 generator.emitExpressionInfo(divot(), startOffset(), endOffset());2066 generator.emitExpressionInfo(divot(), divotStartOffset(), divotEndOffset(), divotLine(), divotLineStart()); 2064 2067 generator.emitThrow(expr.get()); 2065 2068 } … … 2072 2075 // optimizer knows they may be jumped to from anywhere. 2073 2076 2074 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), charPosition());2077 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), startOffset(), lineStartOffset()); 2075 2078 2076 2079 ASSERT(m_catchBlock || m_finallyBlock); … … 2140 2143 void ProgramNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2141 2144 { 2142 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), start CharPosition());2145 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), startStartOffset(), startLineStartOffset()); 2143 2146 2144 2147 RefPtr<RegisterID> dstRegister = generator.newTemporary(); … … 2146 2149 emitStatementsBytecode(generator, dstRegister.get()); 2147 2150 2148 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), charPosition() - 1);2151 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), startOffset(), lineStartOffset()); 2149 2152 generator.emitEnd(dstRegister.get()); 2150 2153 } … … 2154 2157 void EvalNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2155 2158 { 2156 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), start CharPosition());2159 generator.emitDebugHook(WillExecuteProgram, startLine(), startLine(), startStartOffset(), startLineStartOffset()); 2157 2160 2158 2161 RefPtr<RegisterID> dstRegister = generator.newTemporary(); … … 2160 2163 emitStatementsBytecode(generator, dstRegister.get()); 2161 2164 2162 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), charPosition() - 1);2165 generator.emitDebugHook(DidExecuteProgram, lastLine(), lastLine(), startOffset(), lineStartOffset()); 2163 2166 generator.emitEnd(dstRegister.get()); 2164 2167 } … … 2168 2171 void FunctionBodyNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2169 2172 { 2170 generator.emitDebugHook(DidEnterCallFrame, startLine(), startLine(), start CharPosition());2173 generator.emitDebugHook(DidEnterCallFrame, startLine(), startLine(), startStartOffset(), startLineStartOffset()); 2171 2174 emitStatementsBytecode(generator, generator.ignoredResult()); 2172 2175 … … 2184 2187 if (!returnNode) { 2185 2188 RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined()); 2186 ASSERT(( charPosition() - 1) >= 0);2187 generator.emitDebugHook(WillLeaveCallFrame, lastLine(), lastLine(), charPosition() - 1);2189 ASSERT((startOffset() - 1) >= lineStartOffset()); 2190 generator.emitDebugHook(WillLeaveCallFrame, lastLine(), lastLine(), startOffset() - 1, lineStartOffset()); 2188 2191 generator.emitReturn(r0); 2189 2192 return;
Note:
See TracChangeset
for help on using the changeset viewer.