Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: src/ast.h

Issue 1961004: First step towards making JumpTarget work on ARM. Instead... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 // Type testing & conversion. 344 // Type testing & conversion.
345 virtual BreakableStatement* AsBreakableStatement() { return this; } 345 virtual BreakableStatement* AsBreakableStatement() { return this; }
346 346
347 // Code generation 347 // Code generation
348 BreakTarget* break_target() { return &break_target_; } 348 BreakTarget* break_target() { return &break_target_; }
349 349
350 // Testers. 350 // Testers.
351 bool is_target_for_anonymous() const { return type_ == TARGET_FOR_ANONYMOUS; } 351 bool is_target_for_anonymous() const { return type_ == TARGET_FOR_ANONYMOUS; }
352 352
353 protected: 353 protected:
354 BreakableStatement(ZoneStringList* labels, Type type) 354 inline BreakableStatement(ZoneStringList* labels, Type type);
355 : labels_(labels), type_(type) {
356 ASSERT(labels == NULL || labels->length() > 0);
357 }
358 355
359 explicit BreakableStatement(BreakableStatement* other); 356 explicit BreakableStatement(BreakableStatement* other);
360 357
361 private: 358 private:
362 ZoneStringList* labels_; 359 ZoneStringList* labels_;
363 Type type_; 360 Type type_;
364 BreakTarget break_target_; 361 BreakTarget break_target_;
365 }; 362 };
366 363
367 364
368 class Block: public BreakableStatement { 365 class Block: public BreakableStatement {
369 public: 366 public:
370 Block(ZoneStringList* labels, int capacity, bool is_initializer_block) 367 inline Block(ZoneStringList* labels, int capacity, bool is_initializer_block);
371 : BreakableStatement(labels, TARGET_FOR_NAMED_ONLY),
372 statements_(capacity),
373 is_initializer_block_(is_initializer_block) { }
374 368
375 // Construct a clone initialized from the original block and 369 // Construct a clone initialized from the original block and
376 // a deep copy of all statements of the original block. 370 // a deep copy of all statements of the original block.
377 Block(Block* other, ZoneList<Statement*>* statements); 371 Block(Block* other, ZoneList<Statement*>* statements);
378 372
379 virtual void Accept(AstVisitor* v); 373 virtual void Accept(AstVisitor* v);
380 374
381 virtual Block* AsBlock() { return this; } 375 virtual Block* AsBlock() { return this; }
382 376
383 virtual Assignment* StatementAsSimpleAssignment() { 377 virtual Assignment* StatementAsSimpleAssignment() {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 // Type testing & conversion. 424 // Type testing & conversion.
431 virtual IterationStatement* AsIterationStatement() { return this; } 425 virtual IterationStatement* AsIterationStatement() { return this; }
432 426
433 Statement* body() const { return body_; } 427 Statement* body() const { return body_; }
434 void set_body(Statement* stmt) { body_ = stmt; } 428 void set_body(Statement* stmt) { body_ = stmt; }
435 429
436 // Code generation 430 // Code generation
437 BreakTarget* continue_target() { return &continue_target_; } 431 BreakTarget* continue_target() { return &continue_target_; }
438 432
439 protected: 433 protected:
440 explicit IterationStatement(ZoneStringList* labels) 434 explicit inline IterationStatement(ZoneStringList* labels);
441 : BreakableStatement(labels, TARGET_FOR_ANONYMOUS), body_(NULL) { }
442 435
443 // Construct a clone initialized from original and 436 // Construct a clone initialized from original and
444 // a deep copy of the original body. 437 // a deep copy of the original body.
445 IterationStatement(IterationStatement* other, Statement* body); 438 IterationStatement(IterationStatement* other, Statement* body);
446 439
447 void Initialize(Statement* body) { 440 void Initialize(Statement* body) {
448 body_ = body; 441 body_ = body;
449 } 442 }
450 443
451 private: 444 private:
452 Statement* body_; 445 Statement* body_;
453 BreakTarget continue_target_; 446 BreakTarget continue_target_;
454 }; 447 };
455 448
456 449
457 class DoWhileStatement: public IterationStatement { 450 class DoWhileStatement: public IterationStatement {
458 public: 451 public:
459 explicit DoWhileStatement(ZoneStringList* labels) 452 explicit inline DoWhileStatement(ZoneStringList* labels);
460 : IterationStatement(labels), cond_(NULL), condition_position_(-1) {
461 }
462 453
463 void Initialize(Expression* cond, Statement* body) { 454 void Initialize(Expression* cond, Statement* body) {
464 IterationStatement::Initialize(body); 455 IterationStatement::Initialize(body);
465 cond_ = cond; 456 cond_ = cond;
466 } 457 }
467 458
468 virtual void Accept(AstVisitor* v); 459 virtual void Accept(AstVisitor* v);
469 460
470 Expression* cond() const { return cond_; } 461 Expression* cond() const { return cond_; }
471 462
472 // Position where condition expression starts. We need it to make 463 // Position where condition expression starts. We need it to make
473 // the loop's condition a breakable location. 464 // the loop's condition a breakable location.
474 int condition_position() { return condition_position_; } 465 int condition_position() { return condition_position_; }
475 void set_condition_position(int pos) { condition_position_ = pos; } 466 void set_condition_position(int pos) { condition_position_ = pos; }
476 467
477 private: 468 private:
478 Expression* cond_; 469 Expression* cond_;
479 int condition_position_; 470 int condition_position_;
480 }; 471 };
481 472
482 473
483 class WhileStatement: public IterationStatement { 474 class WhileStatement: public IterationStatement {
484 public: 475 public:
485 explicit WhileStatement(ZoneStringList* labels) 476 explicit WhileStatement(ZoneStringList* labels);
486 : IterationStatement(labels),
487 cond_(NULL),
488 may_have_function_literal_(true) {
489 }
490 477
491 void Initialize(Expression* cond, Statement* body) { 478 void Initialize(Expression* cond, Statement* body) {
492 IterationStatement::Initialize(body); 479 IterationStatement::Initialize(body);
493 cond_ = cond; 480 cond_ = cond;
494 } 481 }
495 482
496 virtual void Accept(AstVisitor* v); 483 virtual void Accept(AstVisitor* v);
497 484
498 Expression* cond() const { return cond_; } 485 Expression* cond() const { return cond_; }
499 bool may_have_function_literal() const { 486 bool may_have_function_literal() const {
500 return may_have_function_literal_; 487 return may_have_function_literal_;
501 } 488 }
502 489
503 private: 490 private:
504 Expression* cond_; 491 Expression* cond_;
505 // True if there is a function literal subexpression in the condition. 492 // True if there is a function literal subexpression in the condition.
506 bool may_have_function_literal_; 493 bool may_have_function_literal_;
507 494
508 friend class AstOptimizer; 495 friend class AstOptimizer;
509 }; 496 };
510 497
511 498
512 class ForStatement: public IterationStatement { 499 class ForStatement: public IterationStatement {
513 public: 500 public:
514 explicit ForStatement(ZoneStringList* labels) 501 explicit inline ForStatement(ZoneStringList* labels);
515 : IterationStatement(labels),
516 init_(NULL),
517 cond_(NULL),
518 next_(NULL),
519 may_have_function_literal_(true),
520 loop_variable_(NULL),
521 peel_this_loop_(false) {}
522 502
523 // Construct a for-statement initialized from another for-statement 503 // Construct a for-statement initialized from another for-statement
524 // and deep copies of all parts of the original statement. 504 // and deep copies of all parts of the original statement.
525 ForStatement(ForStatement* other, 505 ForStatement(ForStatement* other,
526 Statement* init, 506 Statement* init,
527 Expression* cond, 507 Expression* cond,
528 Statement* next, 508 Statement* next,
529 Statement* body); 509 Statement* body);
530 510
531 virtual ForStatement* AsForStatement() { return this; } 511 virtual ForStatement* AsForStatement() { return this; }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 bool may_have_function_literal_; 547 bool may_have_function_literal_;
568 Variable* loop_variable_; 548 Variable* loop_variable_;
569 bool peel_this_loop_; 549 bool peel_this_loop_;
570 550
571 friend class AstOptimizer; 551 friend class AstOptimizer;
572 }; 552 };
573 553
574 554
575 class ForInStatement: public IterationStatement { 555 class ForInStatement: public IterationStatement {
576 public: 556 public:
577 explicit ForInStatement(ZoneStringList* labels) 557 explicit inline ForInStatement(ZoneStringList* labels);
578 : IterationStatement(labels), each_(NULL), enumerable_(NULL) { }
579 558
580 void Initialize(Expression* each, Expression* enumerable, Statement* body) { 559 void Initialize(Expression* each, Expression* enumerable, Statement* body) {
581 IterationStatement::Initialize(body); 560 IterationStatement::Initialize(body);
582 each_ = each; 561 each_ = each;
583 enumerable_ = enumerable; 562 enumerable_ = enumerable;
584 } 563 }
585 564
586 virtual void Accept(AstVisitor* v); 565 virtual void Accept(AstVisitor* v);
587 566
588 Expression* each() const { return each_; } 567 Expression* each() const { return each_; }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 class WithExitStatement: public Statement { 663 class WithExitStatement: public Statement {
685 public: 664 public:
686 WithExitStatement() { } 665 WithExitStatement() { }
687 666
688 virtual void Accept(AstVisitor* v); 667 virtual void Accept(AstVisitor* v);
689 }; 668 };
690 669
691 670
692 class CaseClause: public ZoneObject { 671 class CaseClause: public ZoneObject {
693 public: 672 public:
694 CaseClause(Expression* label, ZoneList<Statement*>* statements) 673 CaseClause(Expression* label, ZoneList<Statement*>* statements);
695 : label_(label), statements_(statements) { }
696 674
697 bool is_default() const { return label_ == NULL; } 675 bool is_default() const { return label_ == NULL; }
698 Expression* label() const { 676 Expression* label() const {
699 CHECK(!is_default()); 677 CHECK(!is_default());
700 return label_; 678 return label_;
701 } 679 }
702 JumpTarget* body_target() { return &body_target_; } 680 JumpTarget* body_target() { return &body_target_; }
703 ZoneList<Statement*>* statements() const { return statements_; } 681 ZoneList<Statement*>* statements() const { return statements_; }
704 682
705 private: 683 private:
706 Expression* label_; 684 Expression* label_;
707 JumpTarget body_target_; 685 JumpTarget body_target_;
708 ZoneList<Statement*>* statements_; 686 ZoneList<Statement*>* statements_;
709 }; 687 };
710 688
711 689
712 class SwitchStatement: public BreakableStatement { 690 class SwitchStatement: public BreakableStatement {
713 public: 691 public:
714 explicit SwitchStatement(ZoneStringList* labels) 692 explicit inline SwitchStatement(ZoneStringList* labels);
715 : BreakableStatement(labels, TARGET_FOR_ANONYMOUS),
716 tag_(NULL), cases_(NULL) { }
717 693
718 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) { 694 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) {
719 tag_ = tag; 695 tag_ = tag;
720 cases_ = cases; 696 cases_ = cases;
721 } 697 }
722 698
723 virtual void Accept(AstVisitor* v); 699 virtual void Accept(AstVisitor* v);
724 700
725 Expression* tag() const { return tag_; } 701 Expression* tag() const { return tag_; }
726 ZoneList<CaseClause*>* cases() const { return cases_; } 702 ZoneList<CaseClause*>* cases() const { return cases_; }
(...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after
2112 2088
2113 // Holds the result of copying an expression. 2089 // Holds the result of copying an expression.
2114 Expression* expr_; 2090 Expression* expr_;
2115 // Holds the result of copying a statement. 2091 // Holds the result of copying a statement.
2116 Statement* stmt_; 2092 Statement* stmt_;
2117 }; 2093 };
2118 2094
2119 } } // namespace v8::internal 2095 } } // namespace v8::internal
2120 2096
2121 #endif // V8_AST_H_ 2097 #endif // V8_AST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698