Changeset 38249 in webkit for trunk/JavaScriptCore/parser/Nodes.cpp
- Timestamp:
- Nov 9, 2008, 5:28:10 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Nodes.cpp
r38247 r38249 233 233 RegisterID* ThrowableExpressionData::emitThrowError(CodeGenerator& generator, ErrorType e, const char* msg) 234 234 { 235 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);235 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 236 236 RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), msg)); 237 237 generator.emitThrow(exception); … … 243 243 UString message = msg; 244 244 substitute(message, label.ustring()); 245 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);245 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 246 246 RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), message)); 247 247 generator.emitThrow(exception); … … 499 499 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base.get(), m_subscriptHasAssignments, m_subscript->isPure(generator)); 500 500 RegisterID* property = generator.emitNode(m_subscript.get()); 501 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);501 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 502 502 return generator.emitGetByVal(generator.finalDestination(dst), base.get(), property); 503 503 } … … 518 518 { 519 519 RegisterID* base = generator.emitNode(m_base.get()); 520 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);520 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 521 521 return generator.emitGetById(generator.finalDestination(dst), base, m_ident); 522 522 } … … 569 569 { 570 570 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 571 return generator.emitConstruct(generator.finalDestination(dst), func.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);571 return generator.emitConstruct(generator.finalDestination(dst), func.get(), m_args.get(), divot(), startOffset(), endOffset()); 572 572 } 573 573 … … 589 589 RefPtr<RegisterID> func = generator.newTemporary(); 590 590 generator.emitResolveWithBase(base.get(), func.get(), generator.propertyNames().eval); 591 return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);591 return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 592 592 } 593 593 … … 608 608 { 609 609 RefPtr<RegisterID> func = generator.emitNode(m_expr.get()); 610 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);610 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 611 611 } 612 612 … … 626 626 { 627 627 if (RefPtr<RegisterID> local = generator.registerFor(m_ident)) 628 return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);628 return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 629 629 630 630 int index = 0; … … 633 633 if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) { 634 634 RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject); 635 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);635 return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset()); 636 636 } 637 637 638 638 RefPtr<RegisterID> base = generator.tempDestination(dst); 639 639 RefPtr<RegisterID> func = generator.newTemporary(); 640 int identifierStart = m_divot - m_startOffset;640 int identifierStart = divot() - startOffset(); 641 641 generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size(), 0); 642 642 generator.emitResolveFunction(base.get(), func.get(), m_ident); 643 return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);643 return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 644 644 } 645 645 … … 662 662 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 663 663 RegisterID* property = generator.emitNode(m_subscript.get()); 664 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);664 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 665 665 RefPtr<RegisterID> function = generator.emitGetByVal(generator.newTemporary(), base.get(), property); 666 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);666 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 667 667 } 668 668 … … 683 683 { 684 684 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 685 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);685 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 686 686 RefPtr<RegisterID> function = generator.emitGetById(generator.newTemporary(), base.get(), m_ident); 687 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);687 return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset()); 688 688 } 689 689 … … 730 730 } 731 731 732 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);732 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 733 733 RefPtr<RegisterID> value = generator.newTemporary(); 734 734 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), value.get(), m_ident); … … 762 762 RefPtr<RegisterID> property = generator.emitNode(m_subscript.get()); 763 763 764 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);764 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 765 765 RefPtr<RegisterID> value = generator.emitGetByVal(generator.newTemporary(), base.get(), property.get()); 766 766 RegisterID* oldValue; … … 774 774 oldValue = (m_operator == OpPlusPlus) ? generator.emitPostInc(generator.finalDestination(dst), value.get()) : generator.emitPostDec(generator.finalDestination(dst), value.get()); 775 775 } 776 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);776 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 777 777 generator.emitPutByVal(base.get(), property.get(), value.get()); 778 778 return oldValue; … … 795 795 RefPtr<RegisterID> base = generator.emitNode(m_base.get()); 796 796 797 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);797 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 798 798 RefPtr<RegisterID> value = generator.emitGetById(generator.newTemporary(), base.get(), m_ident); 799 799 RegisterID* oldValue; … … 807 807 oldValue = (m_operator == OpPlusPlus) ? generator.emitPostInc(generator.finalDestination(dst), value.get()) : generator.emitPostDec(generator.finalDestination(dst), value.get()); 808 808 } 809 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);809 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 810 810 generator.emitPutById(base.get(), m_ident, value.get()); 811 811 return oldValue; … … 836 836 return generator.emitUnexpectedLoad(generator.finalDestination(dst), false); 837 837 838 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);838 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 839 839 RegisterID* base = generator.emitResolveBase(generator.tempDestination(dst), m_ident); 840 840 return generator.emitDeleteById(generator.finalDestination(dst, base), base, m_ident); … … 859 859 RegisterID* r1 = generator.emitNode(m_subscript.get()); 860 860 861 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);861 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 862 862 return generator.emitDeleteByVal(generator.finalDestination(dst), r0.get(), r1); 863 863 } … … 879 879 RegisterID* r0 = generator.emitNode(m_base.get()); 880 880 881 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);881 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 882 882 return generator.emitDeleteById(generator.finalDestination(dst), r0, m_ident); 883 883 } … … 990 990 } 991 991 992 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);992 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 993 993 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 994 994 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), propDst.get(), m_ident); … … 1017 1017 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 1018 1018 1019 generator.emitExpressionInfo( m_divot + m_subexpressionDivotOffset, m_subexpressionStartOffset, m_endOffset- m_subexpressionDivotOffset);1019 generator.emitExpressionInfo(divot() + m_subexpressionDivotOffset, m_subexpressionStartOffset, endOffset() - m_subexpressionDivotOffset); 1020 1020 RegisterID* value = generator.emitGetByVal(propDst.get(), base.get(), property.get()); 1021 1021 if (m_operator == OpPlusPlus) … … 1023 1023 else 1024 1024 generator.emitPreDec(value); 1025 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1025 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1026 1026 generator.emitPutByVal(base.get(), property.get(), value); 1027 1027 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 1045 1045 RefPtr<RegisterID> propDst = generator.tempDestination(dst); 1046 1046 1047 generator.emitExpressionInfo( m_divot + m_subexpressionDivotOffset, m_subexpressionStartOffset, m_endOffset- m_subexpressionDivotOffset);1047 generator.emitExpressionInfo(divot() + m_subexpressionDivotOffset, m_subexpressionStartOffset, endOffset() - m_subexpressionDivotOffset); 1048 1048 RegisterID* value = generator.emitGetById(propDst.get(), base.get(), m_ident); 1049 1049 if (m_operator == OpPlusPlus) … … 1051 1051 else 1052 1052 generator.emitPreDec(value); 1053 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1053 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1054 1054 generator.emitPutById(base.get(), m_ident, value); 1055 1055 return generator.moveToDestinationIfNeeded(dst, propDst.get()); … … 1149 1149 RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1.get(), m_rightHasAssignments, m_expr2->isPure(generator)); 1150 1150 RegisterID* src2 = generator.emitNode(m_expr2.get()); 1151 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1151 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1152 1152 return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor())); 1153 1153 } … … 1158 1158 RefPtr<RegisterID> src2 = generator.emitNode(m_expr2.get()); 1159 1159 1160 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1160 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1161 1161 RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalData()->propertyNames->prototype); 1162 1162 1163 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1163 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1164 1164 return generator.emitInstanceOf(generator.finalDestination(dst, src1.get()), src1.get(), src2.get(), src2Prototype); 1165 1165 } … … 1320 1320 1321 1321 RefPtr<RegisterID> src1 = generator.tempDestination(dst); 1322 generator.emitExpressionInfo( m_divot - m_startOffset+ m_ident.size(), m_ident.size(), 0);1322 generator.emitExpressionInfo(divot() - startOffset() + m_ident.size(), m_ident.size(), 0); 1323 1323 RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), src1.get(), m_ident); 1324 1324 RegisterID* src2 = generator.emitNode(m_right.get()); 1325 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1325 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1326 1326 RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 1327 1327 return generator.emitPutById(base.get(), m_ident, result); … … 1365 1365 dst = 0; 1366 1366 RegisterID* value = generator.emitNode(dst, m_right.get()); 1367 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1367 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1368 1368 return generator.emitPutById(base.get(), m_ident, value); 1369 1369 } … … 1387 1387 RefPtr<RegisterID> value = generator.destinationForAssignResult(dst); 1388 1388 RegisterID* result = generator.emitNode(value.get(), m_right.get()); 1389 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1389 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1390 1390 generator.emitPutById(base.get(), m_ident, result); 1391 1391 return generator.moveToDestinationIfNeeded(dst, result); … … 1409 1409 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base.get(), m_rightHasAssignments, m_right->isPure(generator)); 1410 1410 1411 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);1411 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 1412 1412 RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident); 1413 1413 RegisterID* change = generator.emitNode(m_right.get()); 1414 1414 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 1415 1415 1416 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1416 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1417 1417 return generator.emitPutById(base.get(), m_ident, updatedValue); 1418 1418 } … … 1457 1457 RegisterID* result = generator.emitNode(value.get(), m_right.get()); 1458 1458 1459 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1459 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1460 1460 generator.emitPutByVal(base.get(), property.get(), result); 1461 1461 return generator.moveToDestinationIfNeeded(dst, result); … … 1481 1481 RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(m_subscript.get(), m_rightHasAssignments, m_right->isPure(generator)); 1482 1482 1483 generator.emitExpressionInfo( m_divot - m_subexpressionDivotOffset, m_startOffset- m_subexpressionDivotOffset, m_subexpressionEndOffset);1483 generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset); 1484 1484 RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get()); 1485 1485 RegisterID* change = generator.emitNode(m_right.get()); 1486 1486 RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor())); 1487 1487 1488 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1488 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1489 1489 generator.emitPutByVal(base.get(), property.get(), updatedValue); 1490 1490 … … 1575 1575 // ------------------------------ Helper functions for handling Vectors of StatementNode ------------------------------- 1576 1576 1577 static inline RegisterID* statementListEmitCode( StatementVector& statements, CodeGenerator& generator, RegisterID* dst)1578 { 1579 StatementVector:: iterator end = statements.end();1580 for (StatementVector:: iterator it = statements.begin(); it != end; ++it) {1577 static inline RegisterID* statementListEmitCode(const StatementVector& statements, CodeGenerator& generator, RegisterID* dst) 1578 { 1579 StatementVector::const_iterator end = statements.end(); 1580 for (StatementVector::const_iterator it = statements.begin(); it != end; ++it) { 1581 1581 StatementNode* n = it->get(); 1582 1582 if (!n->isLoop()) … … 1585 1585 } 1586 1586 return 0; 1587 }1588 1589 static inline void statementListPushFIFO(StatementVector& statements, DeclarationStacks::NodeStack& stack)1590 {1591 StatementVector::iterator it = statements.end();1592 StatementVector::iterator begin = statements.begin();1593 while (it != begin) {1594 --it;1595 stack.append((*it).get());1596 }1597 1587 } 1598 1588 … … 1930 1920 RegisterID* base = generator.emitResolveBase(generator.newTemporary(), ident); 1931 1921 1932 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);1922 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 1933 1923 generator.emitPutById(base, ident, propertyName); 1934 1924 } … … 2293 2283 dst = 0; 2294 2284 RefPtr<RegisterID> expr = generator.emitNode(dst, m_expr.get()); 2295 generator.emitExpressionInfo( m_divot, m_startOffset, m_endOffset);2285 generator.emitExpressionInfo(divot(), startOffset(), endOffset()); 2296 2286 generator.emitThrow(expr.get()); 2297 2287 return dst; … … 2424 2414 RefPtr<RegisterID> dstRegister = generator.newTemporary(); 2425 2415 generator.emitLoad(dstRegister.get(), jsUndefined()); 2426 statementListEmitCode( m_children, generator, dstRegister.get());2416 statementListEmitCode(children(), generator, dstRegister.get()); 2427 2417 2428 2418 generator.emitDebugHook(DidExecuteProgram, firstLine(), lastLine()); … … 2512 2502 { 2513 2503 generator.emitDebugHook(DidEnterCallFrame, firstLine(), lastLine()); 2514 statementListEmitCode( m_children, generator, ignoredResult());2515 if (! m_children.size() || !m_children.last()->isReturnNode()) {2504 statementListEmitCode(children(), generator, ignoredResult()); 2505 if (!children().size() || !children().last()->isReturnNode()) { 2516 2506 RegisterID* r0 = generator.emitLoad(0, jsUndefined()); 2517 2507 generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine()); … … 2527 2517 RefPtr<RegisterID> dstRegister = generator.newTemporary(); 2528 2518 generator.emitLoad(dstRegister.get(), jsUndefined()); 2529 statementListEmitCode( m_children, generator, dstRegister.get());2519 statementListEmitCode(children(), generator, dstRegister.get()); 2530 2520 2531 2521 generator.emitDebugHook(DidExecuteProgram, firstLine(), lastLine());
Note:
See TracChangeset
for help on using the changeset viewer.