| OLD | NEW |
| 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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 // needed if false. | 179 // needed if false. |
| 180 kTestValue | 180 kTestValue |
| 181 }; | 181 }; |
| 182 | 182 |
| 183 static const int kNoLabel = -1; | 183 static const int kNoLabel = -1; |
| 184 | 184 |
| 185 Expression() : num_(kNoLabel) {} | 185 Expression() : num_(kNoLabel) {} |
| 186 | 186 |
| 187 virtual Expression* AsExpression() { return this; } | 187 virtual Expression* AsExpression() { return this; } |
| 188 | 188 |
| 189 virtual bool IsValidJSON() { return false; } | |
| 190 virtual bool IsValidLeftHandSide() { return false; } | 189 virtual bool IsValidLeftHandSide() { return false; } |
| 191 | 190 |
| 192 // Symbols that cannot be parsed as array indices are considered property | 191 // Symbols that cannot be parsed as array indices are considered property |
| 193 // names. We do not treat symbols that can be array indexes as property | 192 // names. We do not treat symbols that can be array indexes as property |
| 194 // names because [] for string objects is handled only by keyed ICs. | 193 // names because [] for string objects is handled only by keyed ICs. |
| 195 virtual bool IsPropertyName() { return false; } | 194 virtual bool IsPropertyName() { return false; } |
| 196 | 195 |
| 197 // Mark the expression as being compiled as an expression | 196 // Mark the expression as being compiled as an expression |
| 198 // statement. This is used to transform postfix increments to | 197 // statement. This is used to transform postfix increments to |
| 199 // (faster) prefix increments. | 198 // (faster) prefix increments. |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 706 virtual void Accept(AstVisitor* v); | 705 virtual void Accept(AstVisitor* v); |
| 707 | 706 |
| 708 // Type testing & conversion. | 707 // Type testing & conversion. |
| 709 virtual Literal* AsLiteral() { return this; } | 708 virtual Literal* AsLiteral() { return this; } |
| 710 | 709 |
| 711 // Check if this literal is identical to the other literal. | 710 // Check if this literal is identical to the other literal. |
| 712 bool IsIdenticalTo(const Literal* other) const { | 711 bool IsIdenticalTo(const Literal* other) const { |
| 713 return handle_.is_identical_to(other->handle_); | 712 return handle_.is_identical_to(other->handle_); |
| 714 } | 713 } |
| 715 | 714 |
| 716 virtual bool IsValidJSON() { return true; } | |
| 717 | |
| 718 virtual bool IsPropertyName() { | 715 virtual bool IsPropertyName() { |
| 719 if (handle_->IsSymbol()) { | 716 if (handle_->IsSymbol()) { |
| 720 uint32_t ignored; | 717 uint32_t ignored; |
| 721 return !String::cast(*handle_)->AsArrayIndex(&ignored); | 718 return !String::cast(*handle_)->AsArrayIndex(&ignored); |
| 722 } | 719 } |
| 723 return false; | 720 return false; |
| 724 } | 721 } |
| 725 | 722 |
| 726 // Identity testers. | 723 // Identity testers. |
| 727 bool IsNull() const { return handle_.is_identical_to(Factory::null_value()); } | 724 bool IsNull() const { return handle_.is_identical_to(Factory::null_value()); } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 744 : literal_index_(literal_index), is_simple_(is_simple), depth_(depth) {} | 741 : literal_index_(literal_index), is_simple_(is_simple), depth_(depth) {} |
| 745 | 742 |
| 746 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; } | 743 virtual MaterializedLiteral* AsMaterializedLiteral() { return this; } |
| 747 | 744 |
| 748 int literal_index() { return literal_index_; } | 745 int literal_index() { return literal_index_; } |
| 749 | 746 |
| 750 // A materialized literal is simple if the values consist of only | 747 // A materialized literal is simple if the values consist of only |
| 751 // constants and simple object and array literals. | 748 // constants and simple object and array literals. |
| 752 bool is_simple() const { return is_simple_; } | 749 bool is_simple() const { return is_simple_; } |
| 753 | 750 |
| 754 virtual bool IsValidJSON() { return true; } | |
| 755 | |
| 756 int depth() const { return depth_; } | 751 int depth() const { return depth_; } |
| 757 | 752 |
| 758 private: | 753 private: |
| 759 int literal_index_; | 754 int literal_index_; |
| 760 bool is_simple_; | 755 bool is_simple_; |
| 761 int depth_; | 756 int depth_; |
| 762 }; | 757 }; |
| 763 | 758 |
| 764 | 759 |
| 765 // An object literal has a boilerplate object that is used | 760 // An object literal has a boilerplate object that is used |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 ZoneList<Property*>* properties, | 794 ZoneList<Property*>* properties, |
| 800 int literal_index, | 795 int literal_index, |
| 801 bool is_simple, | 796 bool is_simple, |
| 802 int depth) | 797 int depth) |
| 803 : MaterializedLiteral(literal_index, is_simple, depth), | 798 : MaterializedLiteral(literal_index, is_simple, depth), |
| 804 constant_properties_(constant_properties), | 799 constant_properties_(constant_properties), |
| 805 properties_(properties) {} | 800 properties_(properties) {} |
| 806 | 801 |
| 807 virtual ObjectLiteral* AsObjectLiteral() { return this; } | 802 virtual ObjectLiteral* AsObjectLiteral() { return this; } |
| 808 virtual void Accept(AstVisitor* v); | 803 virtual void Accept(AstVisitor* v); |
| 809 virtual bool IsValidJSON(); | |
| 810 | 804 |
| 811 Handle<FixedArray> constant_properties() const { | 805 Handle<FixedArray> constant_properties() const { |
| 812 return constant_properties_; | 806 return constant_properties_; |
| 813 } | 807 } |
| 814 ZoneList<Property*>* properties() const { return properties_; } | 808 ZoneList<Property*>* properties() const { return properties_; } |
| 815 | 809 |
| 816 private: | 810 private: |
| 817 Handle<FixedArray> constant_properties_; | 811 Handle<FixedArray> constant_properties_; |
| 818 ZoneList<Property*>* properties_; | 812 ZoneList<Property*>* properties_; |
| 819 }; | 813 }; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 847 ZoneList<Expression*>* values, | 841 ZoneList<Expression*>* values, |
| 848 int literal_index, | 842 int literal_index, |
| 849 bool is_simple, | 843 bool is_simple, |
| 850 int depth) | 844 int depth) |
| 851 : MaterializedLiteral(literal_index, is_simple, depth), | 845 : MaterializedLiteral(literal_index, is_simple, depth), |
| 852 constant_elements_(constant_elements), | 846 constant_elements_(constant_elements), |
| 853 values_(values) {} | 847 values_(values) {} |
| 854 | 848 |
| 855 virtual void Accept(AstVisitor* v); | 849 virtual void Accept(AstVisitor* v); |
| 856 virtual ArrayLiteral* AsArrayLiteral() { return this; } | 850 virtual ArrayLiteral* AsArrayLiteral() { return this; } |
| 857 virtual bool IsValidJSON(); | |
| 858 | 851 |
| 859 Handle<FixedArray> constant_elements() const { return constant_elements_; } | 852 Handle<FixedArray> constant_elements() const { return constant_elements_; } |
| 860 ZoneList<Expression*>* values() const { return values_; } | 853 ZoneList<Expression*>* values() const { return values_; } |
| 861 | 854 |
| 862 private: | 855 private: |
| 863 Handle<FixedArray> constant_elements_; | 856 Handle<FixedArray> constant_elements_; |
| 864 ZoneList<Expression*>* values_; | 857 ZoneList<Expression*>* values_; |
| 865 }; | 858 }; |
| 866 | 859 |
| 867 | 860 |
| (...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1810 #undef DEF_VISIT | 1803 #undef DEF_VISIT |
| 1811 | 1804 |
| 1812 private: | 1805 private: |
| 1813 bool stack_overflow_; | 1806 bool stack_overflow_; |
| 1814 }; | 1807 }; |
| 1815 | 1808 |
| 1816 | 1809 |
| 1817 } } // namespace v8::internal | 1810 } } // namespace v8::internal |
| 1818 | 1811 |
| 1819 #endif // V8_AST_H_ | 1812 #endif // V8_AST_H_ |
| OLD | NEW |