Changeset 27215 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Oct 28, 2007, 11:49:54 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r27210 r27215 143 143 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL { } 144 144 145 virtual void breakCycle() KJS_FAST_CALL { }146 147 145 protected: 148 146 Completion createErrorCompletion(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL; … … 307 305 class ElementNode : public Node { 308 306 public: 309 // list pointer is tail of a circular list, cracked in the ArrayNode ctor 310 ElementNode(int e, Node *n) KJS_FAST_CALL : next(this), elision(e), node(n) { Parser::noteNodeCycle(this); } 311 ElementNode(ElementNode *l, int e, Node *n) KJS_FAST_CALL 312 : next(l->next), elision(e), node(n) { l->next = this; } 307 ElementNode(int e, Node* n) KJS_FAST_CALL : elision(e), node(n) { } 308 ElementNode(ElementNode* l, int e, Node* n) KJS_FAST_CALL 309 : elision(e), node(n) { l->next = this; } 313 310 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 314 311 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 315 312 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 316 313 PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return next.release(); } 317 virtual void breakCycle() KJS_FAST_CALL;318 314 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 319 315 private: … … 327 323 public: 328 324 ArrayNode(int e) KJS_FAST_CALL : elision(e), opt(true) { } 329 ArrayNode(ElementNode *ele) KJS_FAST_CALL330 : element(ele ->next.release()), elision(0), opt(false) { Parser::removeNodeCycle(element.get());}331 ArrayNode(int eli, ElementNode *ele) KJS_FAST_CALL332 : element(ele ->next.release()), elision(eli), opt(true) { Parser::removeNodeCycle(element.get());}325 ArrayNode(ElementNode* ele) KJS_FAST_CALL 326 : element(ele), elision(0), opt(false) { } 327 ArrayNode(int eli, ElementNode* ele) KJS_FAST_CALL 328 : element(ele), elision(eli), opt(true) { } 333 329 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 334 330 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 360 356 class PropertyListNode : public Node { 361 357 public: 362 // list pointer is tail of a circular list, cracked in the ObjectLiteralNode ctor 363 PropertyListNode(PropertyNode *n) KJS_FAST_CALL 364 : node(n), next(this) { Parser::noteNodeCycle(this); } 365 PropertyListNode(PropertyNode *n, PropertyListNode *l) KJS_FAST_CALL 366 : node(n), next(l->next) { l->next = this; } 358 PropertyListNode(PropertyNode* n) KJS_FAST_CALL 359 : node(n) { } 360 PropertyListNode(PropertyNode* n, PropertyListNode* l) KJS_FAST_CALL 361 : node(n) { l->next = this; } 367 362 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 368 363 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 369 364 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 370 365 PassRefPtr<PropertyListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 371 virtual void breakCycle() KJS_FAST_CALL;372 366 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 373 367 private: … … 380 374 public: 381 375 ObjectLiteralNode() KJS_FAST_CALL { } 382 ObjectLiteralNode(PropertyListNode *l) KJS_FAST_CALL : list(l->next.release()) { Parser::removeNodeCycle(list.get());}376 ObjectLiteralNode(PropertyListNode* l) KJS_FAST_CALL : list(l) { } 383 377 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 384 378 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 427 421 class ArgumentListNode : public Node { 428 422 public: 429 // list pointer is tail of a circular list, cracked in the ArgumentsNode ctor 430 ArgumentListNode(Node *e) KJS_FAST_CALL : next(this), expr(e) { Parser::noteNodeCycle(this); } 431 ArgumentListNode(ArgumentListNode *l, Node *e) KJS_FAST_CALL 432 : next(l->next), expr(e) { l->next = this; } 423 ArgumentListNode(Node* e) KJS_FAST_CALL : expr(e) { } 424 ArgumentListNode(ArgumentListNode* l, Node* e) KJS_FAST_CALL 425 : expr(e) { l->next = this; } 433 426 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 434 427 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 436 429 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 437 430 PassRefPtr<ArgumentListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 438 virtual void breakCycle() KJS_FAST_CALL;439 431 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 440 432 private: … … 447 439 public: 448 440 ArgumentsNode() KJS_FAST_CALL { } 449 ArgumentsNode(ArgumentListNode *l) KJS_FAST_CALL450 : list(l ->next.release()) { Parser::removeNodeCycle(list.get());}441 ArgumentsNode(ArgumentListNode* l) KJS_FAST_CALL 442 : list(l) { } 451 443 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 452 444 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1215 1207 class VarDeclListNode : public Node { 1216 1208 public: 1217 // list pointer is tail of a circular list, cracked in the ForNode/VarStatementNode ctor 1218 VarDeclListNode(VarDeclNode *v) KJS_FAST_CALL : next(this), var(v) { Parser::noteNodeCycle(this); m_mayHaveDeclarations = true; } 1219 VarDeclListNode(VarDeclListNode *l, VarDeclNode *v) KJS_FAST_CALL 1220 : next(l->next), var(v) { l->next = this; m_mayHaveDeclarations = true; } 1209 VarDeclListNode(VarDeclNode* v) KJS_FAST_CALL : var(v) { m_mayHaveDeclarations = true; } 1210 VarDeclListNode(VarDeclListNode* l, VarDeclNode* v) KJS_FAST_CALL 1211 : var(v) { l->next = this; m_mayHaveDeclarations = true; } 1221 1212 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1222 1213 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1223 1214 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1224 1215 PassRefPtr<VarDeclListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 1225 virtual void breakCycle() KJS_FAST_CALL;1226 1216 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1227 1217 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } … … 1235 1225 class VarStatementNode : public StatementNode { 1236 1226 public: 1237 VarStatementNode(VarDeclListNode *l) KJS_FAST_CALL : next(l->next.release()) { Parser::removeNodeCycle(next.get());m_mayHaveDeclarations = true; }1227 VarStatementNode(VarDeclListNode* l) KJS_FAST_CALL : next(l) { m_mayHaveDeclarations = true; } 1238 1228 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1239 1229 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1312 1302 class ForNode : public StatementNode { 1313 1303 public: 1314 ForNode(Node *e1, Node *e2, Node *e3, StatementNode *s) KJS_FAST_CALL :1304 ForNode(Node* e1, Node* e2, Node* e3, StatementNode* s) KJS_FAST_CALL : 1315 1305 expr1(e1), expr2(e2), expr3(e3), statement(s) { m_mayHaveDeclarations = true; } 1316 ForNode(VarDeclListNode *e1, Node *e2, Node *e3, StatementNode *s) KJS_FAST_CALL :1317 expr1(e1->next.release()), expr2(e2), expr3(e3), statement(s) { Parser::removeNodeCycle(expr1.get()); m_mayHaveDeclarations = true; }1318 1306 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1319 1307 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1425 1413 class ParameterNode : public Node { 1426 1414 public: 1427 // list pointer is tail of a circular list, cracked in the FuncDeclNode/FuncExprNode ctor 1428 ParameterNode(const Identifier &i) KJS_FAST_CALL : id(i), next(this) { Parser::noteNodeCycle(this); } 1429 ParameterNode(ParameterNode *next, const Identifier &i) KJS_FAST_CALL 1430 : id(i), next(next->next) { next->next = this; } 1415 ParameterNode(const Identifier& i) KJS_FAST_CALL : id(i) { } 1416 ParameterNode(ParameterNode* l, const Identifier& i) KJS_FAST_CALL 1417 : id(i) { l->next = this; } 1431 1418 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1432 1419 Identifier ident() KJS_FAST_CALL { return id; } … … 1434 1421 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1435 1422 PassRefPtr<ParameterNode> releaseNext() KJS_FAST_CALL { return next.release(); } 1436 virtual void breakCycle() KJS_FAST_CALL;1437 1423 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 1438 1424 private: … … 1486 1472 class FuncExprNode : public Node { 1487 1473 public: 1488 FuncExprNode(const Identifier &i, FunctionBodyNode *b, ParameterNode *p = 0) KJS_FAST_CALL1489 : ident(i), param(p ? p->next.release() : 0), body(b) { if (p) { Parser::removeNodeCycle(param.get()); }addParams(); }1474 FuncExprNode(const Identifier& i, FunctionBodyNode* b, ParameterNode* p = 0) KJS_FAST_CALL 1475 : ident(i), param(p), body(b) { addParams(); } 1490 1476 virtual JSValue *evaluate(ExecState*) KJS_FAST_CALL; 1491 1477 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 1502 1488 class FuncDeclNode : public StatementNode { 1503 1489 public: 1504 FuncDeclNode(const Identifier &i, FunctionBodyNode *b) KJS_FAST_CALL1490 FuncDeclNode(const Identifier& i, FunctionBodyNode* b) KJS_FAST_CALL 1505 1491 : ident(i), body(b) { addParams(); m_mayHaveDeclarations = true; } 1506 FuncDeclNode(const Identifier &i, ParameterNode *p, FunctionBodyNode *b) KJS_FAST_CALL1507 : ident(i), param(p ->next.release()), body(b) { Parser::removeNodeCycle(param.get());addParams(); m_mayHaveDeclarations = true; }1492 FuncDeclNode(const Identifier& i, ParameterNode* p, FunctionBodyNode* b) KJS_FAST_CALL 1493 : ident(i), param(p), body(b) { addParams(); m_mayHaveDeclarations = true; } 1508 1494 virtual Completion execute(ExecState*) KJS_FAST_CALL; 1509 1495 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 1521 1507 public: 1522 1508 static int count; 1523 // list pointer is tail of a circular list, cracked in the BlockNode (or subclass) ctor1524 1509 SourceElementsNode(StatementNode*) KJS_FAST_CALL; 1525 SourceElementsNode(SourceElementsNode *s1, StatementNode *s2) KJS_FAST_CALL;1510 SourceElementsNode(SourceElementsNode*, StatementNode*) KJS_FAST_CALL; 1526 1511 1527 1512 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; … … 1529 1514 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1530 1515 PassRefPtr<SourceElementsNode> releaseNext() KJS_FAST_CALL { return next.release(); } 1531 virtual void breakCycle() KJS_FAST_CALL;1532 1516 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1533 1517 private: … … 1542 1526 CaseClauseNode(Node *e) KJS_FAST_CALL : expr(e) { m_mayHaveDeclarations = true; } 1543 1527 CaseClauseNode(Node *e, SourceElementsNode *s) KJS_FAST_CALL 1544 : expr(e), source(s ->next.release()) { Parser::removeNodeCycle(source.get());m_mayHaveDeclarations = true; }1528 : expr(e), source(s) { m_mayHaveDeclarations = true; } 1545 1529 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1546 1530 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1556 1540 class ClauseListNode : public Node { 1557 1541 public: 1558 // list pointer is tail of a circular list, cracked in the CaseBlockNode ctor 1559 ClauseListNode(CaseClauseNode *c) KJS_FAST_CALL : clause(c), next(this) { Parser::noteNodeCycle(this); m_mayHaveDeclarations = true; } 1560 ClauseListNode(ClauseListNode *n, CaseClauseNode *c) KJS_FAST_CALL 1561 : clause(c), next(n->next) { n->next = this; m_mayHaveDeclarations = true; } 1542 ClauseListNode(CaseClauseNode* c) KJS_FAST_CALL : clause(c) { m_mayHaveDeclarations = true; } 1543 ClauseListNode(ClauseListNode* n, CaseClauseNode* c) KJS_FAST_CALL 1544 : clause(c) { n->next = this; m_mayHaveDeclarations = true; } 1562 1545 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1563 1546 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1566 1549 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1567 1550 PassRefPtr<ClauseListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 1568 virtual void breakCycle() KJS_FAST_CALL;1569 1551 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1570 1552 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } … … 1577 1559 class CaseBlockNode : public Node { 1578 1560 public: 1579 CaseBlockNode(ClauseListNode *l1, CaseClauseNode *d, ClauseListNode *l2) KJS_FAST_CALL;1561 CaseBlockNode(ClauseListNode* l1, CaseClauseNode* d, ClauseListNode* l2) KJS_FAST_CALL; 1580 1562 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1581 1563 JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1604 1586 class ProgramNode : public FunctionBodyNode { 1605 1587 public: 1606 ProgramNode(SourceElementsNode *s) KJS_FAST_CALL;1588 ProgramNode(SourceElementsNode* s) KJS_FAST_CALL; 1607 1589 }; 1608 1590
Note:
See TracChangeset
for help on using the changeset viewer.