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

Side by Side Diff: src/ast.h

Issue 46088: Revert 1469 and 1472 due to a bug with array literals. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
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 | « no previous file | 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 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 Handle<Object> handle() const { return handle_; } 629 Handle<Object> handle() const { return handle_; }
634 630
635 private: 631 private:
636 Handle<Object> handle_; 632 Handle<Object> handle_;
637 }; 633 };
638 634
639 635
640 // Base class for literals that needs space in the corresponding JSFunction. 636 // Base class for literals that needs space in the corresponding JSFunction.
641 class MaterializedLiteral: public Expression { 637 class MaterializedLiteral: public Expression {
642 public: 638 public:
643 explicit MaterializedLiteral(int literal_index, bool is_simple) 639 explicit MaterializedLiteral(int literal_index)
644 : literal_index_(literal_index), is_simple_(is_simple) {} 640 : literal_index_(literal_index) {}
645
646 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; }
647
648 int literal_index() { return literal_index_; } 641 int literal_index() { return literal_index_; }
649
650 // A materialized literal is simple if the values consist of only
651 // constants and simple object and array literals.
652 bool is_simple() const { return is_simple_; }
653
654 private: 642 private:
655 int literal_index_; 643 int literal_index_;
656 bool is_simple_;
657 }; 644 };
658 645
659 646
660 // An object literal has a boilerplate object that is used 647 // An object literal has a boilerplate object that is used
661 // for minimizing the work when constructing it at runtime. 648 // for minimizing the work when constructing it at runtime.
662 class ObjectLiteral: public MaterializedLiteral { 649 class ObjectLiteral: public MaterializedLiteral {
663 public: 650 public:
664 // Property is used for passing information 651 // Property is used for passing information
665 // about an object literal's properties from the parser 652 // about an object literal's properties from the parser
666 // to the code generator. 653 // to the code generator.
667 class Property: public ZoneObject { 654 class Property: public ZoneObject {
668 public: 655 public:
669 656
670 enum Kind { 657 enum Kind {
671 CONSTANT, // Property with constant value (compile time). 658 CONSTANT, // Property with constant value (at compile time).
672 COMPUTED, // Property with computed value (execution time). 659 COMPUTED, // Property with computed value (at execution time).
673 MATERIALIZED_LITERAL, // Property value is a materialized literal. 660 GETTER, SETTER, // Property is an accessor function.
674 GETTER, SETTER, // Property is an accessor function. 661 PROTOTYPE // Property is __proto__.
675 PROTOTYPE // Property is __proto__.
676 }; 662 };
677 663
678 Property(Literal* key, Expression* value); 664 Property(Literal* key, Expression* value);
679 Property(bool is_getter, FunctionLiteral* value); 665 Property(bool is_getter, FunctionLiteral* value);
680 666
681 Literal* key() { return key_; } 667 Literal* key() { return key_; }
682 Expression* value() { return value_; } 668 Expression* value() { return value_; }
683 Kind kind() { return kind_; } 669 Kind kind() { return kind_; }
684 670
685 private: 671 private:
686 Literal* key_; 672 Literal* key_;
687 Expression* value_; 673 Expression* value_;
688 Kind kind_; 674 Kind kind_;
689 }; 675 };
690 676
691 ObjectLiteral(Handle<FixedArray> constant_properties, 677 ObjectLiteral(Handle<FixedArray> constant_properties,
692 ZoneList<Property*>* properties, 678 ZoneList<Property*>* properties,
693 int literal_index, 679 int literal_index)
694 bool is_simple) 680 : MaterializedLiteral(literal_index),
695 : MaterializedLiteral(literal_index, is_simple),
696 constant_properties_(constant_properties), 681 constant_properties_(constant_properties),
697 properties_(properties) {} 682 properties_(properties) {
683 }
698 684
699 virtual ObjectLiteral* AsObjectLiteral() { return this; }
700 virtual void Accept(AstVisitor* v); 685 virtual void Accept(AstVisitor* v);
701 686
702 Handle<FixedArray> constant_properties() const { 687 Handle<FixedArray> constant_properties() const {
703 return constant_properties_; 688 return constant_properties_;
704 } 689 }
705 ZoneList<Property*>* properties() const { return properties_; } 690 ZoneList<Property*>* properties() const { return properties_; }
706 691
707 private: 692 private:
708 Handle<FixedArray> constant_properties_; 693 Handle<FixedArray> constant_properties_;
709 ZoneList<Property*>* properties_; 694 ZoneList<Property*>* properties_;
710 }; 695 };
711 696
712 697
713 // Node for capturing a regexp literal. 698 // Node for capturing a regexp literal.
714 class RegExpLiteral: public MaterializedLiteral { 699 class RegExpLiteral: public MaterializedLiteral {
715 public: 700 public:
716 RegExpLiteral(Handle<String> pattern, 701 RegExpLiteral(Handle<String> pattern,
717 Handle<String> flags, 702 Handle<String> flags,
718 int literal_index) 703 int literal_index)
719 : MaterializedLiteral(literal_index, false), 704 : MaterializedLiteral(literal_index),
720 pattern_(pattern), 705 pattern_(pattern),
721 flags_(flags) {} 706 flags_(flags) {}
722 707
723 virtual void Accept(AstVisitor* v); 708 virtual void Accept(AstVisitor* v);
724 709
725 Handle<String> pattern() const { return pattern_; } 710 Handle<String> pattern() const { return pattern_; }
726 Handle<String> flags() const { return flags_; } 711 Handle<String> flags() const { return flags_; }
727 712
728 private: 713 private:
729 Handle<String> pattern_; 714 Handle<String> pattern_;
730 Handle<String> flags_; 715 Handle<String> flags_;
731 }; 716 };
732 717
733 // An array literal has a literals object that is used 718 // An array literal has a literals object that is used
734 // for minimizing the work when constructing it at runtime. 719 // for minimizing the work when constructing it at runtime.
735 class ArrayLiteral: public MaterializedLiteral { 720 class ArrayLiteral: public Expression {
736 public: 721 public:
737 ArrayLiteral(Handle<FixedArray> literals, 722 ArrayLiteral(Handle<FixedArray> literals,
738 ZoneList<Expression*>* values, 723 ZoneList<Expression*>* values)
739 int literal_index, 724 : literals_(literals), values_(values) {
740 bool is_simple) 725 }
741 : MaterializedLiteral(literal_index, is_simple),
742 literals_(literals),
743 values_(values) {}
744 726
745 virtual void Accept(AstVisitor* v); 727 virtual void Accept(AstVisitor* v);
746 virtual ArrayLiteral* AsArrayLiteral() { return this; }
747 728
748 Handle<FixedArray> literals() const { return literals_; } 729 Handle<FixedArray> literals() const { return literals_; }
749 ZoneList<Expression*>* values() const { return values_; } 730 ZoneList<Expression*>* values() const { return values_; }
750 731
751 private: 732 private:
752 Handle<FixedArray> literals_; 733 Handle<FixedArray> literals_;
753 ZoneList<Expression*>* values_; 734 ZoneList<Expression*>* values_;
754 }; 735 };
755 736
756 737
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 #undef DEF_VISIT 1668 #undef DEF_VISIT
1688 1669
1689 private: 1670 private:
1690 bool stack_overflow_; 1671 bool stack_overflow_;
1691 }; 1672 };
1692 1673
1693 1674
1694 } } // namespace v8::internal 1675 } } // namespace v8::internal
1695 1676
1696 #endif // V8_AST_H_ 1677 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/ast.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698