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

Side by Side Diff: src/ast.h

Issue 46089: Revert 1469 and 1472 on trunk. (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: '' Created 11 years, 9 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
« no previous file with comments | « src/api.cc ('k') | src/ast.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 V(CallRuntime) \ 88 V(CallRuntime) \
89 V(UnaryOperation) \ 89 V(UnaryOperation) \
90 V(CountOperation) \ 90 V(CountOperation) \
91 V(BinaryOperation) \ 91 V(BinaryOperation) \
92 V(CompareOperation) \ 92 V(CompareOperation) \
93 V(ThisFunction) 93 V(ThisFunction)
94 94
95 95
96 // Forward declarations 96 // Forward declarations
97 class TargetCollector; 97 class TargetCollector;
98 class MaterializedLiteral;
99 98
100 #define DEF_FORWARD_DECLARATION(type) class type; 99 #define DEF_FORWARD_DECLARATION(type) class type;
101 NODE_LIST(DEF_FORWARD_DECLARATION) 100 NODE_LIST(DEF_FORWARD_DECLARATION)
102 #undef DEF_FORWARD_DECLARATION 101 #undef DEF_FORWARD_DECLARATION
103 102
104 103
105 // Typedef only introduced to avoid unreadable code. 104 // Typedef only introduced to avoid unreadable code.
106 // Please do appreciate the required space in "> >". 105 // Please do appreciate the required space in "> >".
107 typedef ZoneList<Handle<String> > ZoneStringList; 106 typedef ZoneList<Handle<String> > ZoneStringList;
108 107
(...skipping 14 matching lines...) Expand all
123 virtual VariableProxy* AsVariableProxy() { return NULL; } 122 virtual VariableProxy* AsVariableProxy() { return NULL; }
124 virtual Property* AsProperty() { return NULL; } 123 virtual Property* AsProperty() { return NULL; }
125 virtual Call* AsCall() { return NULL; } 124 virtual Call* AsCall() { return NULL; }
126 virtual TargetCollector* AsTargetCollector() { return NULL; } 125 virtual TargetCollector* AsTargetCollector() { return NULL; }
127 virtual BreakableStatement* AsBreakableStatement() { return NULL; } 126 virtual BreakableStatement* AsBreakableStatement() { return NULL; }
128 virtual IterationStatement* AsIterationStatement() { return NULL; } 127 virtual IterationStatement* AsIterationStatement() { return NULL; }
129 virtual UnaryOperation* AsUnaryOperation() { return NULL; } 128 virtual UnaryOperation* AsUnaryOperation() { return NULL; }
130 virtual BinaryOperation* AsBinaryOperation() { return NULL; } 129 virtual BinaryOperation* AsBinaryOperation() { return NULL; }
131 virtual Assignment* AsAssignment() { return NULL; } 130 virtual Assignment* AsAssignment() { return NULL; }
132 virtual FunctionLiteral* AsFunctionLiteral() { return NULL; } 131 virtual FunctionLiteral* AsFunctionLiteral() { return NULL; }
133 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; }
134 virtual ObjectLiteral* AsObjectLiteral() { return NULL; }
135 virtual ArrayLiteral* AsArrayLiteral() { return NULL; }
136 132
137 void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; } 133 void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; }
138 int statement_pos() const { return statement_pos_; } 134 int statement_pos() const { return statement_pos_; }
139 135
140 private: 136 private:
141 int statement_pos_; 137 int statement_pos_;
142 }; 138 };
143 139
144 140
145 class Statement: public Node { 141 class Statement: public Node {
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 Handle<Object> handle() const { return handle_; } 619 Handle<Object> handle() const { return handle_; }
624 620
625 private: 621 private:
626 Handle<Object> handle_; 622 Handle<Object> handle_;
627 }; 623 };
628 624
629 625
630 // Base class for literals that needs space in the corresponding JSFunction. 626 // Base class for literals that needs space in the corresponding JSFunction.
631 class MaterializedLiteral: public Expression { 627 class MaterializedLiteral: public Expression {
632 public: 628 public:
633 explicit MaterializedLiteral(int literal_index, bool is_simple) 629 explicit MaterializedLiteral(int literal_index)
634 : literal_index_(literal_index), is_simple_(is_simple) {} 630 : literal_index_(literal_index) {}
635
636 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; }
637
638 int literal_index() { return literal_index_; } 631 int literal_index() { return literal_index_; }
639
640 // A materialized literal is simple if the values consist of only
641 // constants and simple object and array literals.
642 bool is_simple() const { return is_simple_; }
643
644 private: 632 private:
645 int literal_index_; 633 int literal_index_;
646 bool is_simple_;
647 }; 634 };
648 635
649 636
650 // An object literal has a boilerplate object that is used 637 // An object literal has a boilerplate object that is used
651 // for minimizing the work when constructing it at runtime. 638 // for minimizing the work when constructing it at runtime.
652 class ObjectLiteral: public MaterializedLiteral { 639 class ObjectLiteral: public MaterializedLiteral {
653 public: 640 public:
654 // Property is used for passing information 641 // Property is used for passing information
655 // about an object literal's properties from the parser 642 // about an object literal's properties from the parser
656 // to the code generator. 643 // to the code generator.
657 class Property: public ZoneObject { 644 class Property: public ZoneObject {
658 public: 645 public:
659 646
660 enum Kind { 647 enum Kind {
661 CONSTANT, // Property with constant value (compile time). 648 CONSTANT, // Property with constant value (at compile time).
662 COMPUTED, // Property with computed value (execution time). 649 COMPUTED, // Property with computed value (at execution time).
663 MATERIALIZED_LITERAL, // Property value is a materialized literal. 650 GETTER, SETTER, // Property is an accessor function.
664 GETTER, SETTER, // Property is an accessor function. 651 PROTOTYPE // Property is __proto__.
665 PROTOTYPE // Property is __proto__.
666 }; 652 };
667 653
668 Property(Literal* key, Expression* value); 654 Property(Literal* key, Expression* value);
669 Property(bool is_getter, FunctionLiteral* value); 655 Property(bool is_getter, FunctionLiteral* value);
670 656
671 Literal* key() { return key_; } 657 Literal* key() { return key_; }
672 Expression* value() { return value_; } 658 Expression* value() { return value_; }
673 Kind kind() { return kind_; } 659 Kind kind() { return kind_; }
674 660
675 private: 661 private:
676 Literal* key_; 662 Literal* key_;
677 Expression* value_; 663 Expression* value_;
678 Kind kind_; 664 Kind kind_;
679 }; 665 };
680 666
681 ObjectLiteral(Handle<FixedArray> constant_properties, 667 ObjectLiteral(Handle<FixedArray> constant_properties,
682 ZoneList<Property*>* properties, 668 ZoneList<Property*>* properties,
683 int literal_index, 669 int literal_index)
684 bool is_simple) 670 : MaterializedLiteral(literal_index),
685 : MaterializedLiteral(literal_index, is_simple),
686 constant_properties_(constant_properties), 671 constant_properties_(constant_properties),
687 properties_(properties) {} 672 properties_(properties) {
673 }
688 674
689 virtual ObjectLiteral* AsObjectLiteral() { return this; }
690 virtual void Accept(AstVisitor* v); 675 virtual void Accept(AstVisitor* v);
691 676
692 Handle<FixedArray> constant_properties() const { 677 Handle<FixedArray> constant_properties() const {
693 return constant_properties_; 678 return constant_properties_;
694 } 679 }
695 ZoneList<Property*>* properties() const { return properties_; } 680 ZoneList<Property*>* properties() const { return properties_; }
696 681
697 private: 682 private:
698 Handle<FixedArray> constant_properties_; 683 Handle<FixedArray> constant_properties_;
699 ZoneList<Property*>* properties_; 684 ZoneList<Property*>* properties_;
700 }; 685 };
701 686
702 687
703 // Node for capturing a regexp literal. 688 // Node for capturing a regexp literal.
704 class RegExpLiteral: public MaterializedLiteral { 689 class RegExpLiteral: public MaterializedLiteral {
705 public: 690 public:
706 RegExpLiteral(Handle<String> pattern, 691 RegExpLiteral(Handle<String> pattern,
707 Handle<String> flags, 692 Handle<String> flags,
708 int literal_index) 693 int literal_index)
709 : MaterializedLiteral(literal_index, false), 694 : MaterializedLiteral(literal_index),
710 pattern_(pattern), 695 pattern_(pattern),
711 flags_(flags) {} 696 flags_(flags) {}
712 697
713 virtual void Accept(AstVisitor* v); 698 virtual void Accept(AstVisitor* v);
714 699
715 Handle<String> pattern() const { return pattern_; } 700 Handle<String> pattern() const { return pattern_; }
716 Handle<String> flags() const { return flags_; } 701 Handle<String> flags() const { return flags_; }
717 702
718 private: 703 private:
719 Handle<String> pattern_; 704 Handle<String> pattern_;
720 Handle<String> flags_; 705 Handle<String> flags_;
721 }; 706 };
722 707
723 // An array literal has a literals object that is used 708 // An array literal has a literals object that is used
724 // for minimizing the work when constructing it at runtime. 709 // for minimizing the work when constructing it at runtime.
725 class ArrayLiteral: public MaterializedLiteral { 710 class ArrayLiteral: public Expression {
726 public: 711 public:
727 ArrayLiteral(Handle<FixedArray> literals, 712 ArrayLiteral(Handle<FixedArray> literals,
728 ZoneList<Expression*>* values, 713 ZoneList<Expression*>* values)
729 int literal_index, 714 : literals_(literals), values_(values) {
730 bool is_simple) 715 }
731 : MaterializedLiteral(literal_index, is_simple),
732 literals_(literals),
733 values_(values) {}
734 716
735 virtual void Accept(AstVisitor* v); 717 virtual void Accept(AstVisitor* v);
736 virtual ArrayLiteral* AsArrayLiteral() { return this; }
737 718
738 Handle<FixedArray> literals() const { return literals_; } 719 Handle<FixedArray> literals() const { return literals_; }
739 ZoneList<Expression*>* values() const { return values_; } 720 ZoneList<Expression*>* values() const { return values_; }
740 721
741 private: 722 private:
742 Handle<FixedArray> literals_; 723 Handle<FixedArray> literals_;
743 ZoneList<Expression*>* values_; 724 ZoneList<Expression*>* values_;
744 }; 725 };
745 726
746 727
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1677 #undef DEF_VISIT 1658 #undef DEF_VISIT
1678 1659
1679 private: 1660 private:
1680 bool stack_overflow_; 1661 bool stack_overflow_;
1681 }; 1662 };
1682 1663
1683 1664
1684 } } // namespace v8::internal 1665 } } // namespace v8::internal
1685 1666
1686 #endif // V8_AST_H_ 1667 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/ast.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698