Changeset 5356 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Nov 2, 2003, 2:51:46 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r5209 r5356 210 210 class ElementNode : public Node { 211 211 public: 212 ElementNode(int e, Node *n) : list(0L), elision(e), node(n) { } 212 // list pointer is tail of a circular list, cracked in the ArrayNode ctor 213 ElementNode(int e, Node *n) : list(this), elision(e), node(n) { } 213 214 ElementNode(ElementNode *l, int e, Node *n) 214 : list(l ), elision(e), node(n) {}215 : list(l->list), elision(e), node(n) { l->list = this; } 215 216 virtual void ref(); 216 217 virtual bool deref(); … … 226 227 class ArrayNode : public Node { 227 228 public: 228 ArrayNode(int e) : element(0 L), elision(e), opt(true) { }229 ArrayNode(int e) : element(0), elision(e), opt(true) { } 229 230 ArrayNode(ElementNode *ele) 230 : element(ele ), elision(0), opt(false) { reverseElementList(); }231 : element(ele->list), elision(0), opt(false) { ele->list = 0; } 231 232 ArrayNode(int eli, ElementNode *ele) 232 : element(ele), elision(eli), opt(true) { reverseElementList(); } 233 virtual void ref(); 234 virtual bool deref(); 235 Value evaluate(ExecState *exec); 236 virtual void streamTo(SourceStream &s) const; 237 private: 238 void reverseElementList(); 233 : element(ele->list), elision(eli), opt(true) { ele->list = 0; } 234 virtual void ref(); 235 virtual bool deref(); 236 Value evaluate(ExecState *exec); 237 virtual void streamTo(SourceStream &s) const; 238 private: 239 239 ElementNode *element; 240 240 int elision; … … 242 242 }; 243 243 244 class ObjectLiteralNode : public Node {245 public:246 ObjectLiteralNode(PropertyValueNode *l) : list(l) { reverseList(); }247 virtual void ref();248 virtual bool deref();249 Value evaluate(ExecState *exec);250 virtual void streamTo(SourceStream &s) const;251 private:252 void reverseList();253 PropertyValueNode *list;254 };255 256 244 class PropertyValueNode : public Node { 257 245 public: 258 PropertyValueNode(PropertyNode *n, Node *a, PropertyValueNode *l = 0L) 259 : name(n), assign(a), list(l) { } 246 // list pointer is tail of a circular list, cracked in the ObjectLiteralNode ctor 247 PropertyValueNode(PropertyNode *n, Node *a) 248 : name(n), assign(a), list(this) { } 249 PropertyValueNode(PropertyNode *n, Node *a, PropertyValueNode *l) 250 : name(n), assign(a), list(l->list) { l->list = this; } 260 251 virtual void ref(); 261 252 virtual bool deref(); … … 269 260 }; 270 261 262 class ObjectLiteralNode : public Node { 263 public: 264 ObjectLiteralNode() : list(0) { } 265 ObjectLiteralNode(PropertyValueNode *l) : list(l->list) { l->list = 0; } 266 virtual void ref(); 267 virtual bool deref(); 268 Value evaluate(ExecState *exec); 269 virtual void streamTo(SourceStream &s) const; 270 private: 271 PropertyValueNode *list; 272 }; 273 271 274 class PropertyNode : public Node { 272 275 public: … … 308 311 class ArgumentListNode : public Node { 309 312 public: 310 ArgumentListNode(Node *e); 311 ArgumentListNode(ArgumentListNode *l, Node *e); 313 // list pointer is tail of a circular list, cracked in the ArgumentsNode ctor 314 ArgumentListNode(Node *e) : list(this), expr(e) { } 315 ArgumentListNode(ArgumentListNode *l, Node *e) 316 : list(l->list), expr(e) { l->list = this; } 312 317 virtual void ref(); 313 318 virtual bool deref(); … … 323 328 class ArgumentsNode : public Node { 324 329 public: 325 ArgumentsNode(ArgumentListNode *l) : list(l) { reverseList(); } 330 ArgumentsNode() : list(0) { } 331 ArgumentsNode(ArgumentListNode *l) 332 : list(l->list) { l->list = 0; } 326 333 virtual void ref(); 327 334 virtual bool deref(); … … 330 337 virtual void streamTo(SourceStream &s) const; 331 338 private: 332 void reverseList();333 339 ArgumentListNode *list; 334 340 }; … … 336 342 class NewExprNode : public Node { 337 343 public: 338 NewExprNode(Node *e) : expr(e), args(0 L) {}344 NewExprNode(Node *e) : expr(e), args(0) {} 339 345 NewExprNode(Node *e, ArgumentsNode *a) : expr(e), args(a) {} 340 346 virtual void ref(); … … 593 599 class StatListNode : public StatementNode { 594 600 public: 595 StatListNode(StatementNode *s) : statement(s), list(0L) { } 596 StatListNode(StatListNode *l, StatementNode *s) : statement(s), list(l) { } 601 // list pointer is tail of a circular list, cracked in the CaseClauseNode ctor 602 StatListNode(StatementNode *s); 603 StatListNode(StatListNode *l, StatementNode *s); 597 604 virtual void ref(); 598 605 virtual bool deref(); … … 632 639 class VarDeclListNode : public Node { 633 640 public: 634 VarDeclListNode(VarDeclNode *v) : list(0L), var(v) {} 635 VarDeclListNode(VarDeclListNode *l, VarDeclNode *v) : list(l), var(v) {} 641 // list pointer is tail of a circular list, cracked in the ForNode/VarStatementNode ctor 642 VarDeclListNode(VarDeclNode *v) : list(this), var(v) {} 643 VarDeclListNode(VarDeclListNode *l, VarDeclNode *v) 644 : list(l->list), var(v) { l->list = this; } 636 645 virtual void ref(); 637 646 virtual bool deref(); … … 648 657 class VarStatementNode : public StatementNode { 649 658 public: 650 VarStatementNode(VarDeclListNode *l) : list(l) { reverseList(); }651 virtual void ref();652 virtual bool deref();653 virtual Completion execute(ExecState *exec);654 virtual void processVarDecls(ExecState *exec);655 virtual void streamTo(SourceStream &s) const;656 private:657 void reverseList();659 VarStatementNode(VarDeclListNode *l) 660 : list(l->list) { l->list = 0; } 661 virtual void ref(); 662 virtual bool deref(); 663 virtual Completion execute(ExecState *exec); 664 virtual void processVarDecls(ExecState *exec); 665 virtual void streamTo(SourceStream &s) const; 666 private: 658 667 VarDeclListNode *list; 659 668 }; … … 661 670 class BlockNode : public StatementNode { 662 671 public: 663 BlockNode(SourceElementsNode *s) : source(s) { reverseList(); }672 BlockNode(SourceElementsNode *s); 664 673 virtual void ref(); 665 674 virtual bool deref(); … … 668 677 virtual void streamTo(SourceStream &s) const; 669 678 protected: 670 void reverseList();671 679 SourceElementsNode *source; 672 680 }; … … 735 743 expr1(e1), expr2(e2), expr3(e3), statement(s) {} 736 744 ForNode(VarDeclListNode *e1, Node *e2, Node *e3, StatementNode *s) : 737 expr1(reverseList(e1)), expr2(e2), expr3(e3), statement(s) {} 738 virtual void ref(); 739 virtual bool deref(); 740 virtual Completion execute(ExecState *exec); 741 virtual void processVarDecls(ExecState *exec); 742 virtual void streamTo(SourceStream &s) const; 743 private: 744 static VarDeclListNode *reverseList(VarDeclListNode *); 745 expr1(e1->list), expr2(e2), expr3(e3), statement(s) { e1->list = 0; } 746 virtual void ref(); 747 virtual bool deref(); 748 virtual Completion execute(ExecState *exec); 749 virtual void processVarDecls(ExecState *exec); 750 virtual void streamTo(SourceStream &s) const; 751 private: 745 752 Node *expr1, *expr2, *expr3; 746 753 StatementNode *statement; … … 808 815 }; 809 816 810 class CaseClauseNode: public Node { 811 public: 812 CaseClauseNode(Node *e, StatListNode *l) : expr(e), list(l) { reverseList(); } 817 class CaseClauseNode : public Node { 818 public: 819 CaseClauseNode(Node *e) : expr(e), list(0) { } 820 CaseClauseNode(Node *e, StatListNode *l) 821 : expr(e), list(l->list) { l->list = 0; } 813 822 virtual void ref(); 814 823 virtual bool deref(); … … 818 827 virtual void streamTo(SourceStream &s) const; 819 828 private: 820 void reverseList();821 829 Node *expr; 822 830 StatListNode *list; … … 825 833 class ClauseListNode : public Node { 826 834 public: 827 ClauseListNode(CaseClauseNode *c) : cl(c), nx(0L) { } 828 ClauseListNode(ClauseListNode *n, CaseClauseNode *c) : cl(c), nx(n) { } 835 // list pointer is tail of a circular list, cracked in the CaseBlockNode ctor 836 ClauseListNode(CaseClauseNode *c) : cl(c), nx(this) { } 837 ClauseListNode(ClauseListNode *n, CaseClauseNode *c) 838 : cl(c), nx(n->nx) { n->nx = this; } 829 839 virtual void ref(); 830 840 virtual bool deref(); … … 840 850 }; 841 851 842 class CaseBlockNode: public Node { 843 public: 844 CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2) 845 : list1(l1), def(d), list2(l2) { reverseLists(); } 852 class CaseBlockNode : public Node { 853 public: 854 CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2); 846 855 virtual void ref(); 847 856 virtual bool deref(); … … 851 860 virtual void streamTo(SourceStream &s) const; 852 861 private: 853 void reverseLists();854 862 ClauseListNode *list1; 855 863 CaseClauseNode *def; … … 922 930 class TryNode : public StatementNode { 923 931 public: 924 TryNode(StatementNode *b, Node *c = 0L, Node *f = 0L) 925 : block(b), _catch((CatchNode*)c), _final((FinallyNode*)f) {} 932 TryNode(StatementNode *b, CatchNode *c) 933 : block(b), _catch(c), _final(0) {} 934 TryNode(StatementNode *b, FinallyNode *f) 935 : block(b), _catch(0), _final(f) {} 936 TryNode(StatementNode *b, CatchNode *c, FinallyNode *f) 937 : block(b), _catch(c), _final(f) {} 926 938 virtual void ref(); 927 939 virtual bool deref(); … … 937 949 class ParameterNode : public Node { 938 950 public: 939 ParameterNode(const Identifier &i) : id(i), next(0L) { } 940 ParameterNode(ParameterNode *list, const Identifier &i) : id(i), next(list) { } 951 // list pointer is tail of a circular list, cracked in the FuncDeclNode/FuncExprNode ctor 952 ParameterNode(const Identifier &i) : id(i), next(this) { } 953 ParameterNode(ParameterNode *list, const Identifier &i) 954 : id(i), next(list->next) { list->next = this; } 941 955 virtual void ref(); 942 956 virtual bool deref(); … … 961 975 class FuncDeclNode : public StatementNode { 962 976 public: 977 FuncDeclNode(const Identifier &i, FunctionBodyNode *b) 978 : ident(i), param(0), body(b) { } 963 979 FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b) 964 : ident(i), param(p ), body(b) { reverseParameterList(); }980 : ident(i), param(p->next), body(b) { p->next = 0; } 965 981 virtual void ref(); 966 982 virtual bool deref(); … … 970 986 virtual void streamTo(SourceStream &s) const; 971 987 private: 972 void reverseParameterList();973 988 Identifier ident; 974 989 ParameterNode *param; … … 978 993 class FuncExprNode : public Node { 979 994 public: 995 FuncExprNode(FunctionBodyNode *b) : param(0), body(b) { } 980 996 FuncExprNode(ParameterNode *p, FunctionBodyNode *b) 981 : param(p), body(b) { reverseParameterList(); } 982 virtual void ref(); 983 virtual bool deref(); 984 Value evaluate(ExecState *exec); 985 virtual void streamTo(SourceStream &s) const; 986 private: 987 void reverseParameterList(); 997 : param(p->next), body(b) { p->next = 0; } 998 virtual void ref(); 999 virtual bool deref(); 1000 Value evaluate(ExecState *exec); 1001 virtual void streamTo(SourceStream &s) const; 1002 private: 988 1003 ParameterNode *param; 989 1004 FunctionBodyNode *body; … … 993 1008 class SourceElementsNode : public StatementNode { 994 1009 public: 995 SourceElementsNode(StatementNode *s1) { element = s1; elements = 0L; }996 SourceElementsNode(S ourceElementsNode *s1, StatementNode *s2)997 { elements = s1; element = s2; }1010 // list pointer is tail of a circular list, cracked in the BlockNode (or subclass) ctor 1011 SourceElementsNode(StatementNode *s1); 1012 SourceElementsNode(SourceElementsNode *s1, StatementNode *s2); 998 1013 virtual void ref(); 999 1014 virtual bool deref();
Note:
See TracChangeset
for help on using the changeset viewer.