Changeset 127654 in webkit for trunk/Source/JavaScriptCore/parser
- Timestamp:
- Sep 5, 2012, 4:00:29 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore/parser
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/ASTBuilder.h
r124729 r127654 944 944 ExpressionNode* ASTBuilder::makePrefixNode(const JSTokenLocation& location, ExpressionNode* expr, Operator op, int start, int divot, int end) 945 945 { 946 if (!expr->isLocation()) 947 return new (m_globalData) PrefixErrorNode(location, op, divot, divot - start, end - divot); 948 949 if (expr->isResolveNode()) { 950 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 951 return new (m_globalData) PrefixResolveNode(location, resolve->identifier(), op, divot, divot - start, end - divot); 952 } 953 if (expr->isBracketAccessorNode()) { 954 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr); 955 PrefixBracketNode* node = new (m_globalData) PrefixBracketNode(location, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot); 956 node->setSubexpressionInfo(bracket->divot(), bracket->startOffset()); 957 return node; 958 } 959 ASSERT(expr->isDotAccessorNode()); 960 DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr); 961 PrefixDotNode* node = new (m_globalData) PrefixDotNode(location, dot->base(), dot->identifier(), op, divot, divot - start, end - divot); 962 node->setSubexpressionInfo(dot->divot(), dot->startOffset()); 963 return node; 946 return new (m_globalData) PrefixNode(location, expr, op, divot, divot - start, end - divot); 964 947 } 965 948 966 949 ExpressionNode* ASTBuilder::makePostfixNode(const JSTokenLocation& location, ExpressionNode* expr, Operator op, int start, int divot, int end) 967 950 { 968 if (!expr->isLocation()) 969 return new (m_globalData) PostfixErrorNode(location, op, divot, divot - start, end - divot); 970 971 if (expr->isResolveNode()) { 972 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 973 return new (m_globalData) PostfixResolveNode(location, resolve->identifier(), op, divot, divot - start, end - divot); 974 } 975 if (expr->isBracketAccessorNode()) { 976 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr); 977 PostfixBracketNode* node = new (m_globalData) PostfixBracketNode(location, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot); 978 node->setSubexpressionInfo(bracket->divot(), bracket->endOffset()); 979 return node; 980 981 } 982 ASSERT(expr->isDotAccessorNode()); 983 DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr); 984 PostfixDotNode* node = new (m_globalData) PostfixDotNode(location, dot->base(), dot->identifier(), op, divot, divot - start, end - divot); 985 node->setSubexpressionInfo(dot->divot(), dot->endOffset()); 986 return node; 951 return new (m_globalData) PostfixNode(location, expr, op, divot, divot - start, end - divot); 987 952 } 988 953 -
trunk/Source/JavaScriptCore/parser/NodeConstructors.h
r124729 r127654 288 288 } 289 289 290 inline PrePostResolveNode::PrePostResolveNode(const JSTokenLocation& location, const Identifier& ident, unsigned divot, unsigned startOffset, unsigned endOffset) 291 : ExpressionNode(location, ResultType::numberType()) // could be reusable for pre? 292 , ThrowableExpressionData(divot, startOffset, endOffset) 293 , m_ident(ident) 294 { 295 } 296 297 inline PostfixResolveNode::PostfixResolveNode(const JSTokenLocation& location, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 298 : PrePostResolveNode(location, ident, divot, startOffset, endOffset) 299 , m_operator(oper) 300 { 301 } 302 303 inline PostfixBracketNode::PostfixBracketNode(const JSTokenLocation& location, ExpressionNode* base, ExpressionNode* subscript, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 304 : ExpressionNode(location) 305 , ThrowableSubExpressionData(divot, startOffset, endOffset) 306 , m_base(base) 307 , m_subscript(subscript) 308 , m_operator(oper) 309 { 310 } 311 312 inline PostfixDotNode::PostfixDotNode(const JSTokenLocation& location, ExpressionNode* base, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 313 : ExpressionNode(location) 314 , ThrowableSubExpressionData(divot, startOffset, endOffset) 315 , m_base(base) 316 , m_ident(ident) 317 , m_operator(oper) 318 { 319 } 320 321 inline PostfixErrorNode::PostfixErrorNode(const JSTokenLocation& location, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 322 : ExpressionNode(location) 323 , ThrowableSubExpressionData(divot, startOffset, endOffset) 290 inline PostfixNode::PostfixNode(const JSTokenLocation& location, ExpressionNode* expr, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 291 : ExpressionNode(location) 292 , ThrowableExpressionData(divot, startOffset, endOffset) 293 , m_expr(expr) 324 294 , m_operator(oper) 325 295 { … … 373 343 } 374 344 375 inline PrefixResolveNode::PrefixResolveNode(const JSTokenLocation& location, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 376 : PrePostResolveNode(location, ident, divot, startOffset, endOffset) 377 , m_operator(oper) 378 { 379 } 380 381 inline PrefixBracketNode::PrefixBracketNode(const JSTokenLocation& location, ExpressionNode* base, ExpressionNode* subscript, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 345 inline PrefixNode::PrefixNode(const JSTokenLocation& location, ExpressionNode* expr, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 382 346 : ExpressionNode(location) 383 347 , ThrowablePrefixedSubExpressionData(divot, startOffset, endOffset) 384 , m_base(base) 385 , m_subscript(subscript) 386 , m_operator(oper) 387 { 388 } 389 390 inline PrefixDotNode::PrefixDotNode(const JSTokenLocation& location, ExpressionNode* base, const Identifier& ident, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 391 : ExpressionNode(location) 392 , ThrowablePrefixedSubExpressionData(divot, startOffset, endOffset) 393 , m_base(base) 394 , m_ident(ident) 395 , m_operator(oper) 396 { 397 } 398 399 inline PrefixErrorNode::PrefixErrorNode(const JSTokenLocation& location, Operator oper, unsigned divot, unsigned startOffset, unsigned endOffset) 400 : ExpressionNode(location) 401 , ThrowableExpressionData(divot, startOffset, endOffset) 348 , m_expr(expr) 402 349 , m_operator(oper) 403 350 { -
trunk/Source/JavaScriptCore/parser/Nodes.h
r127202 r127654 595 595 }; 596 596 597 class PrePostResolveNode : public ExpressionNode, public ThrowableExpressionData { 598 public: 599 PrePostResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset); 600 601 protected: 597 class PostfixNode : public ExpressionNode, public ThrowableExpressionData { 598 public: 599 PostfixNode(const JSTokenLocation&, ExpressionNode*, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 600 601 private: 602 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 603 virtual RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = 0); 604 virtual RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = 0); 605 virtual RegisterID* emitDot(BytecodeGenerator&, RegisterID* = 0); 606 607 ExpressionNode* m_expr; 608 Operator m_operator; 609 }; 610 611 class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData { 612 public: 613 DeleteResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset); 614 615 private: 616 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 617 602 618 const Identifier& m_ident; 603 619 }; 604 620 605 class PostfixResolveNode : public PrePostResolveNode { 606 public: 607 PostfixResolveNode(const JSTokenLocation&, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 608 609 private: 610 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 611 612 Operator m_operator; 613 }; 614 615 class PostfixBracketNode : public ExpressionNode, public ThrowableSubExpressionData { 616 public: 617 PostfixBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 621 class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData { 622 public: 623 DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, unsigned divot, unsigned startOffset, unsigned endOffset); 618 624 619 625 private: … … 622 628 ExpressionNode* m_base; 623 629 ExpressionNode* m_subscript; 624 Operator m_operator; 625 }; 626 627 class PostfixDotNode : public ExpressionNode, public ThrowableSubExpressionData { 628 public: 629 PostfixDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 630 }; 631 632 class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData { 633 public: 634 DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset); 630 635 631 636 private: … … 634 639 ExpressionNode* m_base; 635 640 const Identifier& m_ident; 636 Operator m_operator; 637 }; 638 639 class PostfixErrorNode : public ExpressionNode, public ThrowableSubExpressionData { 640 public: 641 PostfixErrorNode(const JSTokenLocation&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 642 643 private: 644 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 645 646 Operator m_operator; 647 }; 648 649 class DeleteResolveNode : public ExpressionNode, public ThrowableExpressionData { 650 public: 651 DeleteResolveNode(const JSTokenLocation&, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset); 641 }; 642 643 class DeleteValueNode : public ExpressionNode { 644 public: 645 DeleteValueNode(const JSTokenLocation&, ExpressionNode*); 646 647 private: 648 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 649 650 ExpressionNode* m_expr; 651 }; 652 653 class VoidNode : public ExpressionNode { 654 public: 655 VoidNode(const JSTokenLocation&, ExpressionNode*); 656 657 private: 658 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 659 660 ExpressionNode* m_expr; 661 }; 662 663 class TypeOfResolveNode : public ExpressionNode { 664 public: 665 TypeOfResolveNode(const JSTokenLocation&, const Identifier&); 666 667 const Identifier& identifier() const { return m_ident; } 652 668 653 669 private: … … 657 673 }; 658 674 659 class DeleteBracketNode : public ExpressionNode, public ThrowableExpressionData {660 public:661 DeleteBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, unsigned divot, unsigned startOffset, unsigned endOffset);662 663 private:664 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);665 666 ExpressionNode* m_base;667 ExpressionNode* m_subscript;668 };669 670 class DeleteDotNode : public ExpressionNode, public ThrowableExpressionData {671 public:672 DeleteDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, unsigned divot, unsigned startOffset, unsigned endOffset);673 674 private:675 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);676 677 ExpressionNode* m_base;678 const Identifier& m_ident;679 };680 681 class DeleteValueNode : public ExpressionNode {682 public:683 DeleteValueNode(const JSTokenLocation&, ExpressionNode*);684 685 private:686 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);687 688 ExpressionNode* m_expr;689 };690 691 class VoidNode : public ExpressionNode {692 public:693 VoidNode(const JSTokenLocation&, ExpressionNode*);694 695 private:696 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);697 698 ExpressionNode* m_expr;699 };700 701 class TypeOfResolveNode : public ExpressionNode {702 public:703 TypeOfResolveNode(const JSTokenLocation&, const Identifier&);704 705 const Identifier& identifier() const { return m_ident; }706 707 private:708 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0);709 710 const Identifier& m_ident;711 };712 713 675 class TypeOfValueNode : public ExpressionNode { 714 676 public: … … 721 683 }; 722 684 723 class PrefixResolveNode : public PrePostResolveNode { 724 public: 725 PrefixResolveNode(const JSTokenLocation&, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 726 727 private: 728 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 729 730 Operator m_operator; 731 }; 732 733 class PrefixBracketNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData { 734 public: 735 PrefixBracketNode(const JSTokenLocation&, ExpressionNode* base, ExpressionNode* subscript, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 736 737 private: 738 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 739 740 ExpressionNode* m_base; 741 ExpressionNode* m_subscript; 742 Operator m_operator; 743 }; 744 745 class PrefixDotNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData { 746 public: 747 PrefixDotNode(const JSTokenLocation&, ExpressionNode* base, const Identifier&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 748 749 private: 750 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 751 752 ExpressionNode* m_base; 753 const Identifier& m_ident; 754 Operator m_operator; 755 }; 756 757 class PrefixErrorNode : public ExpressionNode, public ThrowableExpressionData { 758 public: 759 PrefixErrorNode(const JSTokenLocation&, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 760 761 private: 762 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 763 685 class PrefixNode : public ExpressionNode, public ThrowablePrefixedSubExpressionData { 686 public: 687 PrefixNode(const JSTokenLocation&, ExpressionNode*, Operator, unsigned divot, unsigned startOffset, unsigned endOffset); 688 689 private: 690 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 691 virtual RegisterID* emitResolve(BytecodeGenerator&, RegisterID* = 0); 692 virtual RegisterID* emitBracket(BytecodeGenerator&, RegisterID* = 0); 693 virtual RegisterID* emitDot(BytecodeGenerator&, RegisterID* = 0); 694 695 ExpressionNode* m_expr; 764 696 Operator m_operator; 765 697 };
Note:
See TracChangeset
for help on using the changeset viewer.