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

Side by Side Diff: src/ast.h

Issue 549207: Added validating JSON parser mode to parser. (Closed)
Patch Set: Created 10 years, 10 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
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/parser.h » ('J')
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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | src/ast.cc » ('j') | src/parser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698