Changeset 27622 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Nov 8, 2007, 4:43:52 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r27589 r27622 118 118 virtual ~Node(); 119 119 120 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL = 0;121 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;122 120 UString toString() const KJS_FAST_CALL; 123 121 int lineNo() const KJS_FAST_CALL { return m_line; } … … 127 125 static void clearNewNodes() KJS_FAST_CALL; 128 126 129 virtual bool isNumber() const KJS_FAST_CALL { return false; }130 virtual bool isLocation() const KJS_FAST_CALL { return false; }131 virtual bool isResolveNode() const KJS_FAST_CALL { return false; }132 virtual bool isBracketAccessorNode() const KJS_FAST_CALL { return false; }133 virtual bool isDotAccessorNode() const KJS_FAST_CALL { return false; }134 135 127 // Serialization. 136 128 virtual void streamTo(SourceStream&) const KJS_FAST_CALL = 0; … … 151 143 Completion createErrorCompletion(ExecState *, ErrorType, const char *msg, const Identifier &) KJS_FAST_CALL; 152 144 153 JSValue *throwError(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL;154 JSValue* throwError(ExecState 155 JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node*) KJS_FAST_CALL;156 JSValue *throwError(ExecState *, ErrorType, const char *msg, const Identifier&) KJS_FAST_CALL;157 JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, const Identifier&) KJS_FAST_CALL;158 JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, Node*) KJS_FAST_CALL;159 JSValue *throwError(ExecState *, ErrorType, const char *msg, JSValue *, Node *, const Identifier&) KJS_FAST_CALL;160 161 JSValue *throwUndefinedVariableError(ExecState *, const Identifier&) KJS_FAST_CALL;145 JSValue* throwError(ExecState*, ErrorType, const char* msg) KJS_FAST_CALL; 146 JSValue* throwError(ExecState*, ErrorType, const char* msg, const char*) KJS_FAST_CALL; 147 JSValue* throwError(ExecState*, ErrorType, const char* msg, JSValue*, Node*) KJS_FAST_CALL; 148 JSValue* throwError(ExecState*, ErrorType, const char* msg, const Identifier&) KJS_FAST_CALL; 149 JSValue* throwError(ExecState*, ErrorType, const char* msg, JSValue*, const Identifier&) KJS_FAST_CALL; 150 JSValue* throwError(ExecState*, ErrorType, const char* msg, JSValue*, Node*, Node*) KJS_FAST_CALL; 151 JSValue* throwError(ExecState*, ErrorType, const char* msg, JSValue*, Node*, const Identifier&) KJS_FAST_CALL; 152 153 JSValue* throwUndefinedVariableError(ExecState*, const Identifier&) KJS_FAST_CALL; 162 154 163 155 void handleException(ExecState*) KJS_FAST_CALL; … … 173 165 Node(const Node &other) KJS_FAST_CALL; 174 166 }; 167 168 class ExpressionNode : public Node { 169 public: 170 ExpressionNode() KJS_FAST_CALL 171 : Node() 172 { 173 } 174 175 // Special constructor for cases where we overwrite an object in place. 176 ExpressionNode(PlacementNewAdoptType) KJS_FAST_CALL 177 : Node(PlacementNewAdopt) 178 { 179 } 180 181 virtual bool isNumber() const KJS_FAST_CALL { return false; } 182 virtual bool isLocation() const KJS_FAST_CALL { return false; } 183 virtual bool isResolveNode() const KJS_FAST_CALL { return false; } 184 virtual bool isBracketAccessorNode() const KJS_FAST_CALL { return false; } 185 virtual bool isDotAccessorNode() const KJS_FAST_CALL { return false; } 186 187 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL = 0; 188 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 189 }; 175 190 176 191 class StatementNode : public Node { … … 187 202 LabelStack ls; 188 203 private: 189 JSValue *evaluate(ExecState*) KJS_FAST_CALL { return jsUndefined(); }190 204 int m_lastLine; 191 205 }; 192 206 193 class NullNode : public Node {207 class NullNode : public ExpressionNode { 194 208 public: 195 209 NullNode() KJS_FAST_CALL {} 196 JSValue* evaluate(ExecState*) KJS_FAST_CALL;210 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 197 211 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 198 212 virtual Precedence precedence() const { return PrecPrimary; } 199 213 }; 200 214 201 class BooleanNode : public Node {215 class BooleanNode : public ExpressionNode { 202 216 public: 203 217 BooleanNode(bool v) KJS_FAST_CALL : value(v) {} 204 JSValue* evaluate(ExecState*) KJS_FAST_CALL;218 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 205 219 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 206 220 virtual Precedence precedence() const { return PrecPrimary; } … … 209 223 }; 210 224 211 class NumberNode : public Node {225 class NumberNode : public ExpressionNode { 212 226 public: 213 227 NumberNode(double v) KJS_FAST_CALL : m_double(v) {} … … 234 248 }; 235 249 236 class StringNode : public Node {250 class StringNode : public ExpressionNode { 237 251 public: 238 252 StringNode(const UString *v) KJS_FAST_CALL { value = *v; } … … 245 259 }; 246 260 247 class RegExpNode : public Node {261 class RegExpNode : public ExpressionNode { 248 262 public: 249 263 RegExpNode(const UString &p, const UString &f) KJS_FAST_CALL 250 264 : pattern(p), flags(f) { } 251 JSValue* evaluate(ExecState*) KJS_FAST_CALL;265 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 252 266 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 253 267 virtual Precedence precedence() const { return PrecPrimary; } … … 256 270 }; 257 271 258 class ThisNode : public Node {272 class ThisNode : public ExpressionNode { 259 273 public: 260 274 ThisNode() KJS_FAST_CALL {} 261 JSValue* evaluate(ExecState*) KJS_FAST_CALL;275 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 262 276 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 263 277 virtual Precedence precedence() const { return PrecPrimary; } 264 278 }; 265 279 266 class ResolveNode : public Node {280 class ResolveNode : public ExpressionNode { 267 281 public: 268 282 ResolveNode(const Identifier &s) KJS_FAST_CALL … … 273 287 // Special constructor for cases where we overwrite an object in place. 274 288 ResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 275 : Node(PlacementNewAdopt)276 , ident(PlacementNewAdopt) 289 : ExpressionNode(PlacementNewAdopt) 290 , ident(PlacementNewAdopt) 277 291 { 278 292 } … … 280 294 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 281 295 282 JSValue* evaluate(ExecState*) KJS_FAST_CALL;296 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 283 297 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 284 298 virtual Precedence precedence() const { return PrecPrimary; } … … 308 322 }; 309 323 310 class ElementNode : public Node {311 public: 312 ElementNode(int e, Node* n) KJS_FAST_CALL : elision(e), node(n) { }313 ElementNode(ElementNode* l, int e, Node* n) KJS_FAST_CALL324 class ElementNode : public ExpressionNode { 325 public: 326 ElementNode(int e, ExpressionNode* n) KJS_FAST_CALL : elision(e), node(n) { } 327 ElementNode(ElementNode* l, int e, ExpressionNode* n) KJS_FAST_CALL 314 328 : elision(e), node(n) { l->next = this; } 315 329 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 316 JSValue* evaluate(ExecState*) KJS_FAST_CALL;330 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 317 331 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 318 332 PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return next.release(); } … … 322 336 ListRefPtr<ElementNode> next; 323 337 int elision; 324 RefPtr< Node> node;325 }; 326 327 class ArrayNode : public Node {338 RefPtr<ExpressionNode> node; 339 }; 340 341 class ArrayNode : public ExpressionNode { 328 342 public: 329 343 ArrayNode(int e) KJS_FAST_CALL : elision(e), opt(true) { } 330 ArrayNode(ElementNode* ele) KJS_FAST_CALL344 ArrayNode(ElementNode*) KJS_FAST_CALL 331 345 : element(ele), elision(0), opt(false) { } 332 346 ArrayNode(int eli, ElementNode* ele) KJS_FAST_CALL 333 347 : element(ele), elision(eli), opt(true) { } 334 348 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 335 JSValue* evaluate(ExecState*) KJS_FAST_CALL;349 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 336 350 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 337 351 virtual Precedence precedence() const { return PrecPrimary; } … … 342 356 }; 343 357 344 class PropertyNode : public Node {358 class PropertyNode : public ExpressionNode { 345 359 public: 346 360 enum Type { Constant, Getter, Setter }; 347 PropertyNode(const Identifier& n, Node *a, Type t) KJS_FAST_CALL361 PropertyNode(const Identifier& n, ExpressionNode* a, Type t) KJS_FAST_CALL 348 362 : m_name(n), assign(a), type(t) { } 349 363 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 350 JSValue* evaluate(ExecState*) KJS_FAST_CALL;364 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 351 365 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 352 366 friend class PropertyListNode; … … 355 369 private: 356 370 Identifier m_name; 357 RefPtr< Node> assign;371 RefPtr<ExpressionNode> assign; 358 372 Type type; 359 373 }; 360 374 361 class PropertyListNode : public Node {375 class PropertyListNode : public ExpressionNode { 362 376 public: 363 377 PropertyListNode(PropertyNode* n) KJS_FAST_CALL … … 366 380 : node(n) { l->next = this; } 367 381 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 368 JSValue* evaluate(ExecState*) KJS_FAST_CALL;382 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 369 383 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 370 384 PassRefPtr<PropertyListNode> releaseNext() KJS_FAST_CALL { return next.release(); } … … 376 390 }; 377 391 378 class ObjectLiteralNode : public Node {392 class ObjectLiteralNode : public ExpressionNode { 379 393 public: 380 394 ObjectLiteralNode() KJS_FAST_CALL { } 381 395 ObjectLiteralNode(PropertyListNode* l) KJS_FAST_CALL : list(l) { } 382 396 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 383 JSValue* evaluate(ExecState*) KJS_FAST_CALL;397 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 384 398 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 385 399 virtual Precedence precedence() const { return PrecPrimary; } … … 388 402 }; 389 403 390 class BracketAccessorNode : public Node {391 public: 392 BracketAccessorNode( Node *e1, Node *e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {}404 class BracketAccessorNode : public ExpressionNode { 405 public: 406 BracketAccessorNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {} 393 407 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 394 408 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 399 413 virtual bool isLocation() const KJS_FAST_CALL { return true; } 400 414 virtual bool isBracketAccessorNode() const KJS_FAST_CALL { return true; } 401 Node *base() KJS_FAST_CALL { return expr1.get(); }402 Node *subscript() KJS_FAST_CALL { return expr2.get(); }415 ExpressionNode* base() KJS_FAST_CALL { return expr1.get(); } 416 ExpressionNode* subscript() KJS_FAST_CALL { return expr2.get(); } 403 417 404 418 private: 405 419 ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*); 406 RefPtr< Node> expr1;407 RefPtr< Node> expr2;408 }; 409 410 class DotAccessorNode : public Node {411 public: 412 DotAccessorNode( Node *e, const Identifier &s) KJS_FAST_CALL : expr(e), ident(s) { }413 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 414 JSValue* evaluate(ExecState*) KJS_FAST_CALL;420 RefPtr<ExpressionNode> expr1; 421 RefPtr<ExpressionNode> expr2; 422 }; 423 424 class DotAccessorNode : public ExpressionNode { 425 public: 426 DotAccessorNode(ExpressionNode* e, const Identifier& s) KJS_FAST_CALL : expr(e), ident(s) { } 427 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 428 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 415 429 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 416 430 virtual Precedence precedence() const { return PrecMember; } … … 418 432 virtual bool isLocation() const KJS_FAST_CALL { return true; } 419 433 virtual bool isDotAccessorNode() const KJS_FAST_CALL { return true; } 420 Node *base() const KJS_FAST_CALL { return expr.get(); }434 ExpressionNode* base() const KJS_FAST_CALL { return expr.get(); } 421 435 const Identifier& identifier() const KJS_FAST_CALL { return ident; } 422 436 423 437 private: 424 RefPtr< Node> expr;438 RefPtr<ExpressionNode> expr; 425 439 Identifier ident; 426 440 }; 427 441 428 class ArgumentListNode : public Node {429 public: 430 ArgumentListNode( Node* e) KJS_FAST_CALL : expr(e) { }431 ArgumentListNode(ArgumentListNode* l, Node* e) KJS_FAST_CALL442 class ArgumentListNode : public ExpressionNode { 443 public: 444 ArgumentListNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) { } 445 ArgumentListNode(ArgumentListNode* l, ExpressionNode* e) KJS_FAST_CALL 432 446 : expr(e) { l->next = this; } 433 447 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 434 JSValue* evaluate(ExecState*) KJS_FAST_CALL;448 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 435 449 void evaluateList(ExecState*, List&) KJS_FAST_CALL; 436 450 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 440 454 friend class ArgumentsNode; 441 455 ListRefPtr<ArgumentListNode> next; 442 RefPtr< Node> expr;443 }; 444 445 class ArgumentsNode : public Node {456 RefPtr<ExpressionNode> expr; 457 }; 458 459 class ArgumentsNode : public ExpressionNode { 446 460 public: 447 461 ArgumentsNode() KJS_FAST_CALL { } … … 449 463 : listNode(l) { } 450 464 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 451 JSValue* evaluate(ExecState*) KJS_FAST_CALL;465 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 452 466 void evaluateList(ExecState* exec, List& list) KJS_FAST_CALL { if (listNode) listNode->evaluateList(exec, list); } 453 467 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 457 471 }; 458 472 459 class NewExprNode : public Node {460 public: 461 NewExprNode( Node *e) KJS_FAST_CALL : expr(e) {}462 NewExprNode( Node *e, ArgumentsNode *a) KJS_FAST_CALL : expr(e), args(a) {}463 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 464 JSValue* evaluate(ExecState*) KJS_FAST_CALL;473 class NewExprNode : public ExpressionNode { 474 public: 475 NewExprNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 476 NewExprNode(ExpressionNode* e, ArgumentsNode* a) KJS_FAST_CALL : expr(e), args(a) {} 477 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 478 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 465 479 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 466 480 virtual Precedence precedence() const { return PrecLeftHandSide; } 467 481 private: 468 RefPtr< Node> expr;482 RefPtr<ExpressionNode> expr; 469 483 RefPtr<ArgumentsNode> args; 470 484 }; 471 485 472 class FunctionCallValueNode : public Node {473 public: 474 FunctionCallValueNode( Node *e, ArgumentsNode *a) KJS_FAST_CALL : expr(e), args(a) {}475 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 476 JSValue* evaluate(ExecState*) KJS_FAST_CALL;486 class FunctionCallValueNode : public ExpressionNode { 487 public: 488 FunctionCallValueNode(ExpressionNode* e, ArgumentsNode* a) KJS_FAST_CALL : expr(e), args(a) {} 489 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 490 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 477 491 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 478 492 virtual Precedence precedence() const { return PrecCall; } 479 493 private: 480 RefPtr< Node> expr;494 RefPtr<ExpressionNode> expr; 481 495 RefPtr<ArgumentsNode> args; 482 496 }; 483 497 484 class FunctionCallResolveNode : public Node {498 class FunctionCallResolveNode : public ExpressionNode { 485 499 public: 486 500 FunctionCallResolveNode(const Identifier& i, ArgumentsNode* a) KJS_FAST_CALL … … 491 505 492 506 FunctionCallResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 493 : Node(PlacementNewAdopt)507 : ExpressionNode(PlacementNewAdopt) 494 508 , ident(PlacementNewAdopt) 495 509 , args(PlacementNewAdopt) … … 498 512 499 513 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 500 JSValue* evaluate(ExecState*) KJS_FAST_CALL;514 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 501 515 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 502 516 virtual Precedence precedence() const { return PrecCall; } … … 517 531 } 518 532 519 JSValue* evaluate(ExecState*) KJS_FAST_CALL;520 }; 521 522 class FunctionCallBracketNode : public Node {523 public: 524 FunctionCallBracketNode( Node *b, Node *s, ArgumentsNode *a) KJS_FAST_CALL : base(b), subscript(s), args(a) {}525 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 526 JSValue* evaluate(ExecState*) KJS_FAST_CALL;533 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 534 }; 535 536 class FunctionCallBracketNode : public ExpressionNode { 537 public: 538 FunctionCallBracketNode(ExpressionNode* b, ExpressionNode* s, ArgumentsNode* a) KJS_FAST_CALL : base(b), subscript(s), args(a) {} 539 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 540 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 527 541 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 528 542 virtual Precedence precedence() const { return PrecCall; } 529 543 protected: 530 RefPtr< Node> base;531 RefPtr< Node> subscript;544 RefPtr<ExpressionNode> base; 545 RefPtr<ExpressionNode> subscript; 532 546 RefPtr<ArgumentsNode> args; 533 547 }; 534 548 535 class FunctionCallDotNode : public Node {536 public: 537 FunctionCallDotNode( Node *b, const Identifier &i, ArgumentsNode *a) KJS_FAST_CALL : base(b), ident(i), args(a) {}538 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 539 JSValue* evaluate(ExecState*) KJS_FAST_CALL;549 class FunctionCallDotNode : public ExpressionNode { 550 public: 551 FunctionCallDotNode(ExpressionNode* b, const Identifier& i, ArgumentsNode* a) KJS_FAST_CALL : base(b), ident(i), args(a) {} 552 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 553 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 540 554 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 541 555 virtual Precedence precedence() const { return PrecCall; } 542 556 protected: 543 RefPtr< Node> base;557 RefPtr<ExpressionNode> base; 544 558 Identifier ident; 545 559 RefPtr<ArgumentsNode> args; 546 560 }; 547 561 548 class PrePostResolveNode : publicNode {562 class PrePostResolveNode : public ExpressionNode { 549 563 public: 550 564 PrePostResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {} 551 565 552 566 PrePostResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 553 : Node(PlacementNewAdopt)567 : ExpressionNode(PlacementNewAdopt) 554 568 , m_ident(PlacementNewAdopt) 555 569 { … … 571 585 572 586 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 573 JSValue* evaluate(ExecState*) KJS_FAST_CALL;587 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 574 588 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 575 589 virtual Precedence precedence() const { return PrecPostfix; } … … 587 601 } 588 602 589 JSValue* evaluate(ExecState*) KJS_FAST_CALL;603 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 590 604 virtual void optimizeForUnnecessaryResult(); 591 605 }; … … 601 615 602 616 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 603 JSValue* evaluate(ExecState*) KJS_FAST_CALL;617 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 604 618 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 605 619 virtual Precedence precedence() const { return PrecPostfix; } … … 616 630 } 617 631 618 JSValue* evaluate(ExecState*) KJS_FAST_CALL;632 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 619 633 virtual void optimizeForUnnecessaryResult(); 620 634 }; 621 635 622 class PostfixBracketNode : publicNode {623 public: 624 PostfixBracketNode( Node *b, Node *s) KJS_FAST_CALL : m_base(b), m_subscript(s) {}636 class PostfixBracketNode : public ExpressionNode { 637 public: 638 PostfixBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : m_base(b), m_subscript(s) {} 625 639 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 626 640 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 628 642 protected: 629 643 virtual bool isIncrement() const = 0; 630 RefPtr< Node> m_base;631 RefPtr< Node> m_subscript;644 RefPtr<ExpressionNode> m_base; 645 RefPtr<ExpressionNode> m_subscript; 632 646 }; 633 647 634 648 class PostIncBracketNode : public PostfixBracketNode { 635 649 public: 636 PostIncBracketNode( Node *b, Node *s) KJS_FAST_CALL : PostfixBracketNode(b, s) {}637 JSValue* evaluate(ExecState*) KJS_FAST_CALL;650 PostIncBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : PostfixBracketNode(b, s) {} 651 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 638 652 protected: 639 653 virtual bool isIncrement() const { return true; } … … 642 656 class PostDecBracketNode : public PostfixBracketNode { 643 657 public: 644 PostDecBracketNode( Node *b, Node *s) KJS_FAST_CALL : PostfixBracketNode(b, s) {}645 JSValue* evaluate(ExecState*) KJS_FAST_CALL;658 PostDecBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : PostfixBracketNode(b, s) {} 659 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 646 660 protected: 647 661 virtual bool isIncrement() const { return false; } 648 662 }; 649 663 650 class PostfixDotNode : publicNode {651 public: 652 PostfixDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {}664 class PostfixDotNode : public ExpressionNode { 665 public: 666 PostfixDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {} 653 667 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 654 668 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 656 670 protected: 657 671 virtual bool isIncrement() const = 0; 658 RefPtr< Node> m_base;672 RefPtr<ExpressionNode> m_base; 659 673 Identifier m_ident; 660 674 }; … … 662 676 class PostIncDotNode : public PostfixDotNode { 663 677 public: 664 PostIncDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : PostfixDotNode(b, i) {}665 JSValue* evaluate(ExecState*) KJS_FAST_CALL;678 PostIncDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : PostfixDotNode(b, i) {} 679 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 666 680 protected: 667 681 virtual bool isIncrement() const { return true; } … … 670 684 class PostDecDotNode : public PostfixDotNode { 671 685 public: 672 PostDecDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : PostfixDotNode(b, i) {}673 JSValue* evaluate(ExecState*) KJS_FAST_CALL;686 PostDecDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : PostfixDotNode(b, i) {} 687 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 674 688 protected: 675 689 virtual bool isIncrement() const { return false; } 676 690 }; 677 691 678 class PostfixErrorNode : public Node {679 public: 680 PostfixErrorNode( Node* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {}681 JSValue* evaluate(ExecState*) KJS_FAST_CALL;692 class PostfixErrorNode : public ExpressionNode { 693 public: 694 PostfixErrorNode(ExpressionNode* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {} 695 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 682 696 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 683 697 virtual Precedence precedence() const { return PrecPostfix; } 684 698 private: 685 RefPtr< Node> m_expr;699 RefPtr<ExpressionNode> m_expr; 686 700 Operator m_oper; 687 701 }; 688 702 689 class DeleteResolveNode : public Node {703 class DeleteResolveNode : public ExpressionNode { 690 704 public: 691 705 DeleteResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {} 692 706 DeleteResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 693 : Node(PlacementNewAdopt)707 : ExpressionNode(PlacementNewAdopt) 694 708 , m_ident(PlacementNewAdopt) 695 709 { … … 697 711 698 712 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 699 JSValue* evaluate(ExecState*) KJS_FAST_CALL;713 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 700 714 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 701 715 virtual Precedence precedence() const { return PrecUnary; } … … 711 725 } 712 726 713 JSValue* evaluate(ExecState*) KJS_FAST_CALL;714 }; 715 716 class DeleteBracketNode : public Node {717 public: 718 DeleteBracketNode( Node *base, Node *subscript) KJS_FAST_CALL : m_base(base), m_subscript(subscript) {}719 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 720 JSValue* evaluate(ExecState*) KJS_FAST_CALL;727 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 728 }; 729 730 class DeleteBracketNode : public ExpressionNode { 731 public: 732 DeleteBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL : m_base(base), m_subscript(subscript) {} 733 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 734 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 721 735 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 722 736 virtual Precedence precedence() const { return PrecUnary; } 723 737 private: 724 RefPtr< Node> m_base;725 RefPtr< Node> m_subscript;726 }; 727 728 class DeleteDotNode : public Node {729 public: 730 DeleteDotNode( Node *base, const Identifier& i) KJS_FAST_CALL : m_base(base), m_ident(i) {}731 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 732 JSValue* evaluate(ExecState*) KJS_FAST_CALL;738 RefPtr<ExpressionNode> m_base; 739 RefPtr<ExpressionNode> m_subscript; 740 }; 741 742 class DeleteDotNode : public ExpressionNode { 743 public: 744 DeleteDotNode(ExpressionNode* base, const Identifier& i) KJS_FAST_CALL : m_base(base), m_ident(i) {} 745 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 746 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 733 747 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 734 748 virtual Precedence precedence() const { return PrecUnary; } 735 749 private: 736 RefPtr< Node> m_base;750 RefPtr<ExpressionNode> m_base; 737 751 Identifier m_ident; 738 752 }; 739 753 740 class DeleteValueNode : public Node {741 public: 742 DeleteValueNode( Node *e) KJS_FAST_CALL : m_expr(e) {}743 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 744 JSValue* evaluate(ExecState*) KJS_FAST_CALL;754 class DeleteValueNode : public ExpressionNode { 755 public: 756 DeleteValueNode(ExpressionNode* e) KJS_FAST_CALL : m_expr(e) {} 757 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 758 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 745 759 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 746 760 virtual Precedence precedence() const { return PrecUnary; } 747 761 private: 748 RefPtr< Node> m_expr;749 }; 750 751 class VoidNode : public Node {752 public: 753 VoidNode( Node *e) KJS_FAST_CALL : expr(e) {}754 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 755 JSValue* evaluate(ExecState*) KJS_FAST_CALL;762 RefPtr<ExpressionNode> m_expr; 763 }; 764 765 class VoidNode : public ExpressionNode { 766 public: 767 VoidNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 768 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 769 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 756 770 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 757 771 virtual Precedence precedence() const { return PrecUnary; } 758 772 private: 759 RefPtr< Node> expr;760 }; 761 762 class TypeOfResolveNode : public Node {773 RefPtr<ExpressionNode> expr; 774 }; 775 776 class TypeOfResolveNode : public ExpressionNode { 763 777 public: 764 778 TypeOfResolveNode(const Identifier &s) KJS_FAST_CALL … … 768 782 769 783 TypeOfResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 770 : Node(PlacementNewAdopt)784 : ExpressionNode(PlacementNewAdopt) 771 785 , m_ident(PlacementNewAdopt) 772 786 { … … 775 789 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 776 790 777 JSValue* evaluate(ExecState*) KJS_FAST_CALL;791 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 778 792 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 779 793 virtual Precedence precedence() const { return PrecUnary; } … … 795 809 } 796 810 797 JSValue* evaluate(ExecState*) KJS_FAST_CALL;798 }; 799 800 class TypeOfValueNode : public Node {801 public: 802 TypeOfValueNode( Node *e) KJS_FAST_CALL : m_expr(e) {}803 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 804 JSValue* evaluate(ExecState*) KJS_FAST_CALL;811 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 812 }; 813 814 class TypeOfValueNode : public ExpressionNode { 815 public: 816 TypeOfValueNode(ExpressionNode* e) KJS_FAST_CALL : m_expr(e) {} 817 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 818 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 805 819 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 806 820 virtual Precedence precedence() const { return PrecUnary; } 807 821 private: 808 RefPtr< Node> m_expr;822 RefPtr<ExpressionNode> m_expr; 809 823 }; 810 824 … … 823 837 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 824 838 825 JSValue* evaluate(ExecState*) KJS_FAST_CALL;839 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 826 840 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 827 841 virtual Precedence precedence() const { return PrecUnary; } … … 837 851 } 838 852 839 JSValue* evaluate(ExecState*) KJS_FAST_CALL;853 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 840 854 }; 841 855 … … 854 868 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 855 869 856 JSValue* evaluate(ExecState*) KJS_FAST_CALL;870 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 857 871 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 858 872 virtual Precedence precedence() const { return PrecUnary; } … … 868 882 } 869 883 870 JSValue* evaluate(ExecState*) KJS_FAST_CALL;884 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 871 885 }; 872 886 873 class PrefixBracketNode : public Node {874 public: 875 PrefixBracketNode( Node *b, Node *s) KJS_FAST_CALL : m_base(b), m_subscript(s) {}887 class PrefixBracketNode : public ExpressionNode { 888 public: 889 PrefixBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : m_base(b), m_subscript(s) {} 876 890 877 891 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; … … 880 894 protected: 881 895 virtual bool isIncrement() const = 0; 882 RefPtr< Node> m_base;883 RefPtr< Node> m_subscript;896 RefPtr<ExpressionNode> m_base; 897 RefPtr<ExpressionNode> m_subscript; 884 898 }; 885 899 886 900 class PreIncBracketNode : public PrefixBracketNode { 887 901 public: 888 PreIncBracketNode( Node *b, Node *s) KJS_FAST_CALL : PrefixBracketNode(b, s) {}889 JSValue* evaluate(ExecState*) KJS_FAST_CALL;902 PreIncBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : PrefixBracketNode(b, s) {} 903 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 890 904 protected: 891 905 bool isIncrement() const { return true; } … … 894 908 class PreDecBracketNode : public PrefixBracketNode { 895 909 public: 896 PreDecBracketNode( Node *b, Node *s) KJS_FAST_CALL : PrefixBracketNode(b, s) {}897 JSValue* evaluate(ExecState*) KJS_FAST_CALL;910 PreDecBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : PrefixBracketNode(b, s) {} 911 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 898 912 protected: 899 913 bool isIncrement() const { return false; } 900 914 }; 901 915 902 class PrefixDotNode : public Node {903 public: 904 PrefixDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {}916 class PrefixDotNode : public ExpressionNode { 917 public: 918 PrefixDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {} 905 919 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 906 920 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 908 922 protected: 909 923 virtual bool isIncrement() const = 0; 910 RefPtr< Node> m_base;924 RefPtr<ExpressionNode> m_base; 911 925 Identifier m_ident; 912 926 }; … … 914 928 class PreIncDotNode : public PrefixDotNode { 915 929 public: 916 PreIncDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : PrefixDotNode(b, i) {}917 JSValue* evaluate(ExecState*) KJS_FAST_CALL;930 PreIncDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : PrefixDotNode(b, i) {} 931 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 918 932 protected: 919 933 virtual bool isIncrement() const { return true; } … … 922 936 class PreDecDotNode : public PrefixDotNode { 923 937 public: 924 PreDecDotNode( Node *b, const Identifier& i) KJS_FAST_CALL : PrefixDotNode(b, i) {}925 JSValue* evaluate(ExecState*) KJS_FAST_CALL;938 PreDecDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : PrefixDotNode(b, i) {} 939 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 926 940 protected: 927 941 virtual bool isIncrement() const { return false; } 928 942 }; 929 943 930 class PrefixErrorNode : public Node {931 public: 932 PrefixErrorNode( Node* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {}933 JSValue* evaluate(ExecState*) KJS_FAST_CALL;944 class PrefixErrorNode : public ExpressionNode { 945 public: 946 PrefixErrorNode(ExpressionNode* e, Operator o) KJS_FAST_CALL : m_expr(e), m_oper(o) {} 947 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 934 948 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 935 949 virtual Precedence precedence() const { return PrecUnary; } 936 950 private: 937 RefPtr< Node> m_expr;951 RefPtr<ExpressionNode> m_expr; 938 952 Operator m_oper; 939 953 }; 940 954 941 class UnaryPlusNode : public Node {942 public: 943 UnaryPlusNode( Node *e) KJS_FAST_CALL : expr(e) {}944 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 945 JSValue* evaluate(ExecState*) KJS_FAST_CALL;955 class UnaryPlusNode : public ExpressionNode { 956 public: 957 UnaryPlusNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 958 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 959 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 946 960 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 947 961 virtual Precedence precedence() const { return PrecUnary; } 948 962 private: 949 RefPtr< Node> expr;950 }; 951 952 class NegateNode : public Node {953 public: 954 NegateNode( Node *e) KJS_FAST_CALL : expr(e) {}963 RefPtr<ExpressionNode> expr; 964 }; 965 966 class NegateNode : public ExpressionNode { 967 public: 968 NegateNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 955 969 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 956 970 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 959 973 virtual Precedence precedence() const { return PrecUnary; } 960 974 private: 961 RefPtr< Node> expr;962 }; 963 964 class BitwiseNotNode : public Node {965 public: 966 BitwiseNotNode( Node *e) KJS_FAST_CALL : expr(e) {}967 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 968 JSValue* evaluate(ExecState*) KJS_FAST_CALL;975 RefPtr<ExpressionNode> expr; 976 }; 977 978 class BitwiseNotNode : public ExpressionNode { 979 public: 980 BitwiseNotNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 981 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 982 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 969 983 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 970 984 virtual Precedence precedence() const { return PrecUnary; } 971 985 private: 972 RefPtr< Node> expr;973 }; 974 975 class LogicalNotNode : public Node {976 public: 977 LogicalNotNode( Node *e) KJS_FAST_CALL : expr(e) {}978 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 979 JSValue* evaluate(ExecState*) KJS_FAST_CALL;986 RefPtr<ExpressionNode> expr; 987 }; 988 989 class LogicalNotNode : public ExpressionNode { 990 public: 991 LogicalNotNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 992 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 993 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 980 994 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 981 995 virtual Precedence precedence() const { return PrecUnary; } 982 996 private: 983 RefPtr< Node> expr;997 RefPtr<ExpressionNode> expr; 984 998 }; 985 999 986 class MultNode : public Node {987 public: 988 MultNode( Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {}1000 class MultNode : public ExpressionNode { 1001 public: 1002 MultNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 989 1003 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 990 1004 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 994 1008 private: 995 1009 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 996 RefPtr< Node> term1;997 RefPtr< Node> term2;1010 RefPtr<ExpressionNode> term1; 1011 RefPtr<ExpressionNode> term2; 998 1012 }; 999 1013 1000 class DivNode : public Node {1001 public: 1002 DivNode( Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {}1014 class DivNode : public ExpressionNode { 1015 public: 1016 DivNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1003 1017 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1004 1018 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1008 1022 private: 1009 1023 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1010 RefPtr< Node> term1;1011 RefPtr< Node> term2;1024 RefPtr<ExpressionNode> term1; 1025 RefPtr<ExpressionNode> term2; 1012 1026 }; 1013 1027 1014 class ModNode : public Node {1015 public: 1016 ModNode( Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {}1028 class ModNode : public ExpressionNode { 1029 public: 1030 ModNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1017 1031 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1018 1032 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1022 1036 private: 1023 1037 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1024 RefPtr< Node> term1;1025 RefPtr< Node> term2;1026 }; 1027 1028 class AddNode : public Node {1029 public: 1030 AddNode( Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {}1038 RefPtr<ExpressionNode> term1; 1039 RefPtr<ExpressionNode> term2; 1040 }; 1041 1042 class AddNode : public ExpressionNode { 1043 public: 1044 AddNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1031 1045 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1032 1046 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1035 1049 virtual Precedence precedence() const { return PrecAdditive; } 1036 1050 private: 1037 RefPtr< Node> term1;1038 RefPtr< Node> term2;1051 RefPtr<ExpressionNode> term1; 1052 RefPtr<ExpressionNode> term2; 1039 1053 }; 1040 1054 1041 class SubNode : public Node {1042 public: 1043 SubNode( Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {}1055 class SubNode : public ExpressionNode { 1056 public: 1057 SubNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1044 1058 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1045 1059 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; … … 1049 1063 private: 1050 1064 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1051 RefPtr< Node> term1;1052 RefPtr< Node> term2;1053 }; 1054 1055 class LeftShiftNode : public Node {1056 public: 1057 LeftShiftNode( Node *t1, Node *t2) KJS_FAST_CALL1065 RefPtr<ExpressionNode> term1; 1066 RefPtr<ExpressionNode> term2; 1067 }; 1068 1069 class LeftShiftNode : public ExpressionNode { 1070 public: 1071 LeftShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL 1058 1072 : term1(t1), term2(t2) {} 1059 1073 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1060 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1074 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1061 1075 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1062 1076 virtual Precedence precedence() const { return PrecShift; } 1063 1077 private: 1064 RefPtr< Node> term1;1065 RefPtr< Node> term2;1066 }; 1067 1068 class RightShiftNode : public Node {1069 public: 1070 RightShiftNode( Node *t1, Node *t2) KJS_FAST_CALL1078 RefPtr<ExpressionNode> term1; 1079 RefPtr<ExpressionNode> term2; 1080 }; 1081 1082 class RightShiftNode : public ExpressionNode { 1083 public: 1084 RightShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL 1071 1085 : term1(t1), term2(t2) {} 1072 1086 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1073 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1087 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1074 1088 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1075 1089 virtual Precedence precedence() const { return PrecShift; } 1076 1090 private: 1077 RefPtr< Node> term1;1078 RefPtr< Node> term2;1079 }; 1080 1081 class UnsignedRightShiftNode : public Node {1082 public: 1083 UnsignedRightShiftNode( Node *t1, Node *t2) KJS_FAST_CALL1091 RefPtr<ExpressionNode> term1; 1092 RefPtr<ExpressionNode> term2; 1093 }; 1094 1095 class UnsignedRightShiftNode : public ExpressionNode { 1096 public: 1097 UnsignedRightShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL 1084 1098 : term1(t1), term2(t2) {} 1085 1099 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1086 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1100 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1087 1101 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1088 1102 virtual Precedence precedence() const { return PrecShift; } 1089 1103 private: 1090 RefPtr< Node> term1;1091 RefPtr< Node> term2;1092 }; 1093 1094 class LessNode : public Node {1095 public: 1096 LessNode( Node *e1, Node *e2) KJS_FAST_CALL :1104 RefPtr<ExpressionNode> term1; 1105 RefPtr<ExpressionNode> term2; 1106 }; 1107 1108 class LessNode : public ExpressionNode { 1109 public: 1110 LessNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1097 1111 expr1(e1), expr2(e2) {} 1098 1112 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1099 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1113 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1100 1114 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1101 1115 virtual Precedence precedence() const { return PrecRelational; } 1102 1116 private: 1103 RefPtr< Node> expr1;1104 RefPtr< Node> expr2;1105 }; 1106 1107 class GreaterNode : public Node {1108 public: 1109 GreaterNode( Node *e1, Node *e2) KJS_FAST_CALL :1117 RefPtr<ExpressionNode> expr1; 1118 RefPtr<ExpressionNode> expr2; 1119 }; 1120 1121 class GreaterNode : public ExpressionNode { 1122 public: 1123 GreaterNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1110 1124 expr1(e1), expr2(e2) {} 1111 1125 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1112 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1126 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1113 1127 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1114 1128 virtual Precedence precedence() const { return PrecRelational; } 1115 1129 private: 1116 RefPtr< Node> expr1;1117 RefPtr< Node> expr2;1118 }; 1119 1120 class LessEqNode : public Node {1121 public: 1122 LessEqNode( Node *e1, Node *e2) KJS_FAST_CALL :1130 RefPtr<ExpressionNode> expr1; 1131 RefPtr<ExpressionNode> expr2; 1132 }; 1133 1134 class LessEqNode : public ExpressionNode { 1135 public: 1136 LessEqNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1123 1137 expr1(e1), expr2(e2) {} 1124 1138 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1125 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1139 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1126 1140 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1127 1141 virtual Precedence precedence() const { return PrecRelational; } 1128 1142 private: 1129 RefPtr< Node> expr1;1130 RefPtr< Node> expr2;1131 }; 1132 1133 class GreaterEqNode : public Node {1134 public: 1135 GreaterEqNode( Node *e1, Node *e2) KJS_FAST_CALL :1143 RefPtr<ExpressionNode> expr1; 1144 RefPtr<ExpressionNode> expr2; 1145 }; 1146 1147 class GreaterEqNode : public ExpressionNode { 1148 public: 1149 GreaterEqNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1136 1150 expr1(e1), expr2(e2) {} 1137 1151 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1138 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1152 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1139 1153 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1140 1154 virtual Precedence precedence() const { return PrecRelational; } 1141 1155 private: 1142 RefPtr< Node> expr1;1143 RefPtr< Node> expr2;1144 }; 1145 1146 class InstanceOfNode : publicNode {1147 public: 1148 InstanceOfNode( Node *e1, Node *e2) KJS_FAST_CALL :1156 RefPtr<ExpressionNode> expr1; 1157 RefPtr<ExpressionNode> expr2; 1158 }; 1159 1160 class InstanceOfNode : public ExpressionNode { 1161 public: 1162 InstanceOfNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1149 1163 expr1(e1), expr2(e2) {} 1150 1164 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1151 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1165 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1152 1166 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1153 1167 virtual Precedence precedence() const { return PrecRelational; } 1154 1168 private: 1155 RefPtr< Node> expr1;1156 RefPtr< Node> expr2;1157 }; 1158 1159 class InNode : publicNode {1160 public: 1161 InNode( Node *e1, Node *e2) KJS_FAST_CALL :1169 RefPtr<ExpressionNode> expr1; 1170 RefPtr<ExpressionNode> expr2; 1171 }; 1172 1173 class InNode : public ExpressionNode { 1174 public: 1175 InNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1162 1176 expr1(e1), expr2(e2) {} 1163 1177 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1164 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1178 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1165 1179 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1166 1180 virtual Precedence precedence() const { return PrecRelational; } 1167 1181 private: 1168 RefPtr< Node> expr1;1169 RefPtr< Node> expr2;1170 }; 1171 1172 class EqualNode : publicNode {1173 public: 1174 EqualNode( Node *e1, Node *e2) KJS_FAST_CALL1182 RefPtr<ExpressionNode> expr1; 1183 RefPtr<ExpressionNode> expr2; 1184 }; 1185 1186 class EqualNode : public ExpressionNode { 1187 public: 1188 EqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL 1175 1189 : expr1(e1), expr2(e2) {} 1176 1190 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1177 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1191 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1178 1192 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1179 1193 virtual Precedence precedence() const { return PrecEquality; } 1180 1194 private: 1181 RefPtr< Node> expr1;1182 RefPtr< Node> expr2;1183 }; 1184 1185 class NotEqualNode : publicNode {1186 public: 1187 NotEqualNode( Node *e1, Node *e2) KJS_FAST_CALL1195 RefPtr<ExpressionNode> expr1; 1196 RefPtr<ExpressionNode> expr2; 1197 }; 1198 1199 class NotEqualNode : public ExpressionNode { 1200 public: 1201 NotEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL 1188 1202 : expr1(e1), expr2(e2) {} 1189 1203 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1190 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1204 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1191 1205 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1192 1206 virtual Precedence precedence() const { return PrecEquality; } 1193 1207 private: 1194 RefPtr< Node> expr1;1195 RefPtr< Node> expr2;1196 }; 1197 1198 class StrictEqualNode : publicNode {1199 public: 1200 StrictEqualNode( Node *e1, Node *e2) KJS_FAST_CALL1208 RefPtr<ExpressionNode> expr1; 1209 RefPtr<ExpressionNode> expr2; 1210 }; 1211 1212 class StrictEqualNode : public ExpressionNode { 1213 public: 1214 StrictEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL 1201 1215 : expr1(e1), expr2(e2) {} 1202 1216 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1203 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1217 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1204 1218 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1205 1219 virtual Precedence precedence() const { return PrecEquality; } 1206 1220 private: 1207 RefPtr< Node> expr1;1208 RefPtr< Node> expr2;1209 }; 1210 1211 class NotStrictEqualNode : publicNode {1212 public: 1213 NotStrictEqualNode( Node *e1, Node *e2) KJS_FAST_CALL1221 RefPtr<ExpressionNode> expr1; 1222 RefPtr<ExpressionNode> expr2; 1223 }; 1224 1225 class NotStrictEqualNode : public ExpressionNode { 1226 public: 1227 NotStrictEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL 1214 1228 : expr1(e1), expr2(e2) {} 1215 1229 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1216 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1230 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1217 1231 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1218 1232 virtual Precedence precedence() const { return PrecEquality; } 1219 1233 private: 1220 RefPtr< Node> expr1;1221 RefPtr< Node> expr2;1222 }; 1223 1224 class BitAndNode : publicNode {1225 public: 1226 BitAndNode( Node *e1, Node *e2) KJS_FAST_CALL :1234 RefPtr<ExpressionNode> expr1; 1235 RefPtr<ExpressionNode> expr2; 1236 }; 1237 1238 class BitAndNode : public ExpressionNode { 1239 public: 1240 BitAndNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1227 1241 expr1(e1), expr2(e2) {} 1228 1242 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1229 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1243 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1230 1244 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1231 1245 virtual Precedence precedence() const { return PrecBitwiseAnd; } 1232 1246 private: 1233 RefPtr< Node> expr1;1234 RefPtr< Node> expr2;1235 }; 1236 1237 class BitOrNode : publicNode {1238 public: 1239 BitOrNode( Node *e1, Node *e2) KJS_FAST_CALL :1247 RefPtr<ExpressionNode> expr1; 1248 RefPtr<ExpressionNode> expr2; 1249 }; 1250 1251 class BitOrNode : public ExpressionNode { 1252 public: 1253 BitOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1240 1254 expr1(e1), expr2(e2) {} 1241 1255 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1242 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1256 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1243 1257 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1244 1258 virtual Precedence precedence() const { return PrecBitwiseOr; } 1245 1259 private: 1246 RefPtr< Node> expr1;1247 RefPtr< Node> expr2;1248 }; 1249 1250 class BitXOrNode : publicNode {1251 public: 1252 BitXOrNode( Node *e1, Node *e2) KJS_FAST_CALL :1260 RefPtr<ExpressionNode> expr1; 1261 RefPtr<ExpressionNode> expr2; 1262 }; 1263 1264 class BitXOrNode : public ExpressionNode { 1265 public: 1266 BitXOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1253 1267 expr1(e1), expr2(e2) {} 1254 1268 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1255 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1269 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1256 1270 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1257 1271 virtual Precedence precedence() const { return PrecBitwiseXor; } 1258 1272 private: 1259 RefPtr< Node> expr1;1260 RefPtr< Node> expr2;1273 RefPtr<ExpressionNode> expr1; 1274 RefPtr<ExpressionNode> expr2; 1261 1275 }; 1262 1276 … … 1264 1278 * expr1 && expr2, expr1 || expr2 1265 1279 */ 1266 class LogicalAndNode : publicNode {1267 public: 1268 LogicalAndNode( Node *e1, Node *e2) KJS_FAST_CALL :1280 class LogicalAndNode : public ExpressionNode { 1281 public: 1282 LogicalAndNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1269 1283 expr1(e1), expr2(e2) {} 1270 1284 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1271 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1285 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1272 1286 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1273 1287 virtual Precedence precedence() const { return PrecLogicalAnd; } 1274 1288 private: 1275 RefPtr< Node> expr1;1276 RefPtr< Node> expr2;1289 RefPtr<ExpressionNode> expr1; 1290 RefPtr<ExpressionNode> expr2; 1277 1291 }; 1278 1292 1279 class LogicalOrNode : publicNode {1280 public: 1281 LogicalOrNode( Node *e1, Node *e2) KJS_FAST_CALL :1293 class LogicalOrNode : public ExpressionNode { 1294 public: 1295 LogicalOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1282 1296 expr1(e1), expr2(e2) {} 1283 1297 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1284 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1298 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1285 1299 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1286 1300 virtual Precedence precedence() const { return PrecLogicalOr; } 1287 1301 private: 1288 RefPtr< Node> expr1;1289 RefPtr< Node> expr2;1302 RefPtr<ExpressionNode> expr1; 1303 RefPtr<ExpressionNode> expr2; 1290 1304 }; 1291 1305 … … 1293 1307 * The ternary operator, "logical ? expr1 : expr2" 1294 1308 */ 1295 class ConditionalNode : publicNode {1296 public: 1297 ConditionalNode( Node *l, Node *e1, Node *e2) KJS_FAST_CALL :1309 class ConditionalNode : public ExpressionNode { 1310 public: 1311 ConditionalNode(ExpressionNode* l, ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : 1298 1312 logical(l), expr1(e1), expr2(e2) {} 1299 1313 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1300 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1314 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1301 1315 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1302 1316 virtual Precedence precedence() const { return PrecConditional; } 1303 1317 private: 1304 RefPtr< Node> logical;1305 RefPtr< Node> expr1;1306 RefPtr< Node> expr2;1307 }; 1308 1309 class ReadModifyResolveNode : publicNode {1310 public: 1311 ReadModifyResolveNode(const Identifier &ident, Operator oper, Node *right) KJS_FAST_CALL1318 RefPtr<ExpressionNode> logical; 1319 RefPtr<ExpressionNode> expr1; 1320 RefPtr<ExpressionNode> expr2; 1321 }; 1322 1323 class ReadModifyResolveNode : public ExpressionNode { 1324 public: 1325 ReadModifyResolveNode(const Identifier &ident, Operator oper, ExpressionNode* right) KJS_FAST_CALL 1312 1326 : m_ident(ident) 1313 1327 , m_oper(oper) … … 1317 1331 1318 1332 ReadModifyResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 1319 : Node(PlacementNewAdopt)1333 : ExpressionNode(PlacementNewAdopt) 1320 1334 , m_ident(PlacementNewAdopt) 1321 1335 , m_right(PlacementNewAdopt) … … 1324 1338 1325 1339 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1326 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1340 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1327 1341 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1328 1342 virtual Precedence precedence() const { return PrecAssignment; } … … 1330 1344 Identifier m_ident; 1331 1345 Operator m_oper; 1332 RefPtr< Node> m_right;1346 RefPtr<ExpressionNode> m_right; 1333 1347 size_t m_index; // Used by ReadModifyLocalVarNode. 1334 1348 }; … … 1343 1357 } 1344 1358 1345 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1346 }; 1347 1348 class AssignResolveNode : publicNode {1349 public: 1350 AssignResolveNode(const Identifier &ident, Node *right) KJS_FAST_CALL1359 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1360 }; 1361 1362 class AssignResolveNode : public ExpressionNode { 1363 public: 1364 AssignResolveNode(const Identifier &ident, ExpressionNode* right) KJS_FAST_CALL 1351 1365 : m_ident(ident) 1352 1366 , m_right(right) … … 1355 1369 1356 1370 AssignResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 1357 : Node(PlacementNewAdopt)1371 : ExpressionNode(PlacementNewAdopt) 1358 1372 , m_ident(PlacementNewAdopt) 1359 1373 , m_right(PlacementNewAdopt) … … 1362 1376 1363 1377 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1364 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1378 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1365 1379 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1366 1380 virtual Precedence precedence() const { return PrecAssignment; } 1367 1381 protected: 1368 1382 Identifier m_ident; 1369 RefPtr< Node> m_right;1383 RefPtr<ExpressionNode> m_right; 1370 1384 size_t m_index; // Used by ReadModifyLocalVarNode. 1371 1385 }; … … 1380 1394 } 1381 1395 1382 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1383 }; 1384 1385 class ReadModifyBracketNode : publicNode {1386 public: 1387 ReadModifyBracketNode( Node *base, Node *subscript, Operator oper, Node *right) KJS_FAST_CALL1396 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1397 }; 1398 1399 class ReadModifyBracketNode : public ExpressionNode { 1400 public: 1401 ReadModifyBracketNode(ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right) KJS_FAST_CALL 1388 1402 : m_base(base), m_subscript(subscript), m_oper(oper), m_right(right) {} 1389 1403 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1390 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1404 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1391 1405 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1392 1406 virtual Precedence precedence() const { return PrecAssignment; } 1393 1407 protected: 1394 RefPtr< Node> m_base;1395 RefPtr< Node> m_subscript;1408 RefPtr<ExpressionNode> m_base; 1409 RefPtr<ExpressionNode> m_subscript; 1396 1410 Operator m_oper; 1397 RefPtr< Node> m_right;1398 }; 1399 1400 class AssignBracketNode : publicNode {1401 public: 1402 AssignBracketNode( Node *base, Node *subscript, Node *right) KJS_FAST_CALL1411 RefPtr<ExpressionNode> m_right; 1412 }; 1413 1414 class AssignBracketNode : public ExpressionNode { 1415 public: 1416 AssignBracketNode(ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right) KJS_FAST_CALL 1403 1417 : m_base(base), m_subscript(subscript), m_right(right) {} 1404 1418 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1405 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1419 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1406 1420 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1407 1421 virtual Precedence precedence() const { return PrecAssignment; } 1408 1422 protected: 1409 RefPtr< Node> m_base;1410 RefPtr< Node> m_subscript;1411 RefPtr< Node> m_right;1412 }; 1413 1414 class AssignDotNode : publicNode {1415 public: 1416 AssignDotNode( Node *base, const Identifier& ident, Node *right) KJS_FAST_CALL1423 RefPtr<ExpressionNode> m_base; 1424 RefPtr<ExpressionNode> m_subscript; 1425 RefPtr<ExpressionNode> m_right; 1426 }; 1427 1428 class AssignDotNode : public ExpressionNode { 1429 public: 1430 AssignDotNode(ExpressionNode* base, const Identifier& ident, ExpressionNode* right) KJS_FAST_CALL 1417 1431 : m_base(base), m_ident(ident), m_right(right) {} 1418 1432 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1419 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1433 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1420 1434 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1421 1435 virtual Precedence precedence() const { return PrecAssignment; } 1422 1436 protected: 1423 RefPtr< Node> m_base;1437 RefPtr<ExpressionNode> m_base; 1424 1438 Identifier m_ident; 1425 RefPtr< Node> m_right;1426 }; 1427 1428 class ReadModifyDotNode : publicNode {1429 public: 1430 ReadModifyDotNode( Node *base, const Identifier& ident, Operator oper, Node *right) KJS_FAST_CALL1439 RefPtr<ExpressionNode> m_right; 1440 }; 1441 1442 class ReadModifyDotNode : public ExpressionNode { 1443 public: 1444 ReadModifyDotNode(ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right) KJS_FAST_CALL 1431 1445 : m_base(base), m_ident(ident), m_oper(oper), m_right(right) {} 1432 1446 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1433 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1447 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1434 1448 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1435 1449 virtual Precedence precedence() const { return PrecAssignment; } 1436 1450 protected: 1437 RefPtr< Node> m_base;1451 RefPtr<ExpressionNode> m_base; 1438 1452 Identifier m_ident; 1439 1453 Operator m_oper; 1440 RefPtr< Node> m_right;1441 }; 1442 1443 class AssignErrorNode : publicNode {1444 public: 1445 AssignErrorNode( Node* left, Operator oper,Node* right) KJS_FAST_CALL1454 RefPtr<ExpressionNode> m_right; 1455 }; 1456 1457 class AssignErrorNode : public ExpressionNode { 1458 public: 1459 AssignErrorNode(ExpressionNode* left, Operator oper, ExpressionNode* right) KJS_FAST_CALL 1446 1460 : m_left(left), m_oper(oper), m_right(right) {} 1447 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1461 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1448 1462 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1449 1463 virtual Precedence precedence() const { return PrecAssignment; } 1450 1464 protected: 1451 RefPtr< Node> m_left;1465 RefPtr<ExpressionNode> m_left; 1452 1466 Operator m_oper; 1453 RefPtr< Node> m_right;1454 }; 1455 1456 class CommaNode : publicNode {1457 public: 1458 CommaNode( Node *e1, Node *e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {}1459 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1460 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1467 RefPtr<ExpressionNode> m_right; 1468 }; 1469 1470 class CommaNode : public ExpressionNode { 1471 public: 1472 CommaNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {} 1473 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1474 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1461 1475 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1462 1476 virtual Precedence precedence() const { return PrecExpression; } 1463 1477 private: 1464 RefPtr< Node> expr1;1465 RefPtr< Node> expr2;1466 }; 1467 1468 class AssignExprNode : publicNode {1469 public: 1470 AssignExprNode( Node *e) KJS_FAST_CALL : expr(e) {}1471 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1472 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1478 RefPtr<ExpressionNode> expr1; 1479 RefPtr<ExpressionNode> expr2; 1480 }; 1481 1482 class AssignExprNode : public ExpressionNode { 1483 public: 1484 AssignExprNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 1485 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1486 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1473 1487 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1474 1488 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 1475 1489 private: 1476 RefPtr< Node> expr;1477 }; 1478 1479 class VarDeclNode : publicNode {1490 RefPtr<ExpressionNode> expr; 1491 }; 1492 1493 class VarDeclNode : public ExpressionNode { 1480 1494 public: 1481 1495 enum Type { Variable, Constant }; … … 1530 1544 class ExprStatementNode : public StatementNode { 1531 1545 public: 1532 ExprStatementNode( Node *e) KJS_FAST_CALL : expr(e) { }1546 ExprStatementNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) { } 1533 1547 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1534 1548 virtual Completion execute(ExecState*) KJS_FAST_CALL; 1535 1549 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1536 1550 private: 1537 RefPtr< Node> expr;1551 RefPtr<ExpressionNode> expr; 1538 1552 }; 1539 1553 1540 1554 class IfNode : public StatementNode { 1541 1555 public: 1542 IfNode( Node *e, StatementNode *s1, StatementNode *s2) KJS_FAST_CALL1556 IfNode(ExpressionNode* e, StatementNode *s1, StatementNode *s2) KJS_FAST_CALL 1543 1557 : expr(e), statement1(s1), statement2(s2) { m_mayHaveDeclarations = statement1->mayHaveDeclarations() || (statement2 && statement2->mayHaveDeclarations()); } 1544 1558 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; … … 1547 1561 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1548 1562 private: 1549 RefPtr< Node> expr;1563 RefPtr<ExpressionNode> expr; 1550 1564 RefPtr<StatementNode> statement1; 1551 1565 RefPtr<StatementNode> statement2; … … 1554 1568 class DoWhileNode : public StatementNode { 1555 1569 public: 1556 DoWhileNode(StatementNode *s, Node *e) KJS_FAST_CALL : statement(s), expr(e) { m_mayHaveDeclarations = true; }1570 DoWhileNode(StatementNode *s, ExpressionNode* e) KJS_FAST_CALL : statement(s), expr(e) { m_mayHaveDeclarations = true; } 1557 1571 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1558 1572 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1561 1575 private: 1562 1576 RefPtr<StatementNode> statement; 1563 RefPtr< Node> expr;1577 RefPtr<ExpressionNode> expr; 1564 1578 }; 1565 1579 1566 1580 class WhileNode : public StatementNode { 1567 1581 public: 1568 WhileNode( Node *e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; }1582 WhileNode(ExpressionNode* e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; } 1569 1583 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1570 1584 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1572 1586 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1573 1587 private: 1574 RefPtr< Node> expr;1588 RefPtr<ExpressionNode> expr; 1575 1589 RefPtr<StatementNode> statement; 1576 1590 }; … … 1578 1592 class ForNode : public StatementNode { 1579 1593 public: 1580 ForNode( Node* e1, Node* e2,Node* e3, StatementNode* s) KJS_FAST_CALL :1594 ForNode(ExpressionNode* e1, ExpressionNode* e2, ExpressionNode* e3, StatementNode* s) KJS_FAST_CALL : 1581 1595 expr1(e1), expr2(e2), expr3(e3), statement(s) 1582 1596 { … … 1591 1605 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1592 1606 private: 1593 RefPtr< Node> expr1;1594 RefPtr< Node> expr2;1595 RefPtr< Node> expr3;1607 RefPtr<ExpressionNode> expr1; 1608 RefPtr<ExpressionNode> expr2; 1609 RefPtr<ExpressionNode> expr3; 1596 1610 RefPtr<StatementNode> statement; 1597 1611 }; … … 1599 1613 class ForInNode : public StatementNode { 1600 1614 public: 1601 ForInNode( Node *l, Node *e, StatementNode *s) KJS_FAST_CALL;1602 ForInNode(const Identifier &i, AssignExprNode *in, Node *e, StatementNode *s) KJS_FAST_CALL;1615 ForInNode(ExpressionNode* l, ExpressionNode* e, StatementNode *s) KJS_FAST_CALL; 1616 ForInNode(const Identifier &i, AssignExprNode *in, ExpressionNode* e, StatementNode *s) KJS_FAST_CALL; 1603 1617 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1604 1618 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1608 1622 Identifier ident; 1609 1623 RefPtr<AssignExprNode> init; 1610 RefPtr< Node> lexpr;1611 RefPtr< Node> expr;1624 RefPtr<ExpressionNode> lexpr; 1625 RefPtr<ExpressionNode> expr; 1612 1626 RefPtr<VarDeclNode> varDecl; 1613 1627 RefPtr<StatementNode> statement; … … 1636 1650 class ReturnNode : public StatementNode { 1637 1651 public: 1638 ReturnNode( Node *v) KJS_FAST_CALL : value(v) {}1652 ReturnNode(ExpressionNode* v) KJS_FAST_CALL : value(v) {} 1639 1653 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1640 1654 virtual Completion execute(ExecState*) KJS_FAST_CALL; 1641 1655 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1642 1656 private: 1643 RefPtr< Node> value;1657 RefPtr<ExpressionNode> value; 1644 1658 }; 1645 1659 1646 1660 class WithNode : public StatementNode { 1647 1661 public: 1648 WithNode( Node *e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; }1662 WithNode(ExpressionNode* e, StatementNode* s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; } 1649 1663 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1650 1664 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1652 1666 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1653 1667 private: 1654 RefPtr< Node> expr;1668 RefPtr<ExpressionNode> expr; 1655 1669 RefPtr<StatementNode> statement; 1656 1670 }; … … 1670 1684 class ThrowNode : public StatementNode { 1671 1685 public: 1672 ThrowNode( Node *e) KJS_FAST_CALL : expr(e) {}1686 ThrowNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {} 1673 1687 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1674 1688 virtual Completion execute(ExecState*) KJS_FAST_CALL; 1675 1689 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1676 1690 private: 1677 RefPtr< Node> expr;1691 RefPtr<ExpressionNode> expr; 1678 1692 }; 1679 1693 … … 1693 1707 }; 1694 1708 1695 class ParameterNode : publicNode {1709 class ParameterNode : public ExpressionNode { 1696 1710 public: 1697 1711 ParameterNode(const Identifier& i) KJS_FAST_CALL : id(i) { } 1698 1712 ParameterNode(ParameterNode* l, const Identifier& i) KJS_FAST_CALL 1699 1713 : id(i) { l->next = this; } 1700 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1714 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1701 1715 Identifier ident() KJS_FAST_CALL { return id; } 1702 1716 ParameterNode *nextParam() KJS_FAST_CALL { return next.get(); } … … 1752 1766 }; 1753 1767 1754 class FuncExprNode : publicNode {1768 class FuncExprNode : public ExpressionNode { 1755 1769 public: 1756 1770 FuncExprNode(const Identifier& i, FunctionBodyNode* b, ParameterNode* p = 0) KJS_FAST_CALL … … 1785 1799 }; 1786 1800 1787 class CaseClauseNode : publicNode {1788 public: 1789 CaseClauseNode( Node* e) KJS_FAST_CALL : expr(e) { m_mayHaveDeclarations = true; }1790 CaseClauseNode( Node* e, SourceElements* children) KJS_FAST_CALL1801 class CaseClauseNode : public ExpressionNode { 1802 public: 1803 CaseClauseNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) { m_mayHaveDeclarations = true; } 1804 CaseClauseNode(ExpressionNode* e, SourceElements* children) KJS_FAST_CALL 1791 1805 : expr(e), m_children(children) { m_mayHaveDeclarations = true; } 1792 1806 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1793 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1807 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1794 1808 Completion evalStatements(ExecState*) KJS_FAST_CALL; 1795 1809 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 1797 1811 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 1798 1812 private: 1799 RefPtr< Node> expr;1813 RefPtr<ExpressionNode> expr; 1800 1814 OwnPtr<SourceElements> m_children; 1801 1815 }; 1802 1816 1803 class ClauseListNode : publicNode {1817 class ClauseListNode : public ExpressionNode { 1804 1818 public: 1805 1819 ClauseListNode(CaseClauseNode* c) KJS_FAST_CALL : clause(c) { m_mayHaveDeclarations = true; } … … 1807 1821 : clause(c) { n->next = this; m_mayHaveDeclarations = true; } 1808 1822 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1809 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1823 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1810 1824 CaseClauseNode *getClause() const KJS_FAST_CALL { return clause.get(); } 1811 1825 ClauseListNode *getNext() const KJS_FAST_CALL { return next.get(); } … … 1820 1834 }; 1821 1835 1822 class CaseBlockNode : publicNode {1836 class CaseBlockNode : public ExpressionNode { 1823 1837 public: 1824 1838 CaseBlockNode(ClauseListNode* l1, CaseClauseNode* d, ClauseListNode* l2) KJS_FAST_CALL; 1825 1839 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1826 JSValue* evaluate(ExecState*) KJS_FAST_CALL;1840 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1827 1841 Completion evalBlock(ExecState *exec, JSValue *input) KJS_FAST_CALL; 1828 1842 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; … … 1837 1851 class SwitchNode : public StatementNode { 1838 1852 public: 1839 SwitchNode( Node *e, CaseBlockNode *b) KJS_FAST_CALL : expr(e), block(b) { m_mayHaveDeclarations = true; }1853 SwitchNode(ExpressionNode* e, CaseBlockNode *b) KJS_FAST_CALL : expr(e), block(b) { m_mayHaveDeclarations = true; } 1840 1854 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1841 1855 virtual Completion execute(ExecState*) KJS_FAST_CALL; … … 1843 1857 virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL; 1844 1858 private: 1845 RefPtr< Node> expr;1859 RefPtr<ExpressionNode> expr; 1846 1860 RefPtr<CaseBlockNode> block; 1847 1861 };
Note:
See TracChangeset
for help on using the changeset viewer.