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

Side by Side Diff: src/preparser.h

Issue 700523003: Classes: Partial fix for constructor not calling super (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 1307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 return PreParserExpression::Super(); 1318 return PreParserExpression::Super();
1319 } 1319 }
1320 1320
1321 static PreParserExpression ClassExpression( 1321 static PreParserExpression ClassExpression(
1322 PreParserIdentifier name, PreParserExpression extends, 1322 PreParserIdentifier name, PreParserExpression extends,
1323 PreParserExpression constructor, PreParserExpressionList properties, 1323 PreParserExpression constructor, PreParserExpressionList properties,
1324 int start_position, int end_position, PreParserFactory* factory) { 1324 int start_position, int end_position, PreParserFactory* factory) {
1325 return PreParserExpression::Default(); 1325 return PreParserExpression::Default();
1326 } 1326 }
1327 1327
1328 static PreParserExpression DefaultConstructor(bool call_super,
1329 PreParserScope* scope) {
1330 return PreParserExpression::Default();
1331 }
1332
1328 static PreParserExpression ExpressionFromLiteral( 1333 static PreParserExpression ExpressionFromLiteral(
1329 Token::Value token, int pos, Scanner* scanner, 1334 Token::Value token, int pos, Scanner* scanner,
1330 PreParserFactory* factory) { 1335 PreParserFactory* factory) {
1331 return PreParserExpression::Default(); 1336 return PreParserExpression::Default();
1332 } 1337 }
1333 1338
1334 static PreParserExpression ExpressionFromIdentifier( 1339 static PreParserExpression ExpressionFromIdentifier(
1335 PreParserIdentifier name, int pos, PreParserScope* scope, 1340 PreParserIdentifier name, int pos, PreParserScope* scope,
1336 PreParserFactory* factory) { 1341 PreParserFactory* factory) {
1337 return PreParserExpression::FromIdentifier(name); 1342 return PreParserExpression::FromIdentifier(name);
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 ReportMessageAt(class_name_location, "unexpected_strict_reserved"); 2745 ReportMessageAt(class_name_location, "unexpected_strict_reserved");
2741 *ok = false; 2746 *ok = false;
2742 return this->EmptyExpression(); 2747 return this->EmptyExpression();
2743 } 2748 }
2744 if (this->IsEvalOrArguments(name)) { 2749 if (this->IsEvalOrArguments(name)) {
2745 ReportMessageAt(class_name_location, "strict_eval_arguments"); 2750 ReportMessageAt(class_name_location, "strict_eval_arguments");
2746 *ok = false; 2751 *ok = false;
2747 return this->EmptyExpression(); 2752 return this->EmptyExpression();
2748 } 2753 }
2749 2754
2755 bool has_extends = false;
2750 ExpressionT extends = this->EmptyExpression(); 2756 ExpressionT extends = this->EmptyExpression();
2751 if (Check(Token::EXTENDS)) { 2757 if (Check(Token::EXTENDS)) {
2752 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); 2758 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE);
2753 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); 2759 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope));
2754 scope_->SetStrictMode(STRICT); 2760 scope_->SetStrictMode(STRICT);
2755 extends = this->ParseLeftHandSideExpression(CHECK_OK); 2761 extends = this->ParseLeftHandSideExpression(CHECK_OK);
2762 has_extends = true;
2756 } 2763 }
2757 2764
2758 // TODO(arv): Implement scopes and name binding in class body only. 2765 // TODO(arv): Implement scopes and name binding in class body only.
2759 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); 2766 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE);
2760 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); 2767 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope));
2761 scope_->SetStrictMode(STRICT); 2768 scope_->SetStrictMode(STRICT);
2762 scope_->SetScopeName(name); 2769 scope_->SetScopeName(name);
2763 2770
2764 typename Traits::Type::PropertyList properties = 2771 typename Traits::Type::PropertyList properties =
2765 this->NewPropertyList(4, zone_); 2772 this->NewPropertyList(4, zone_);
(...skipping 18 matching lines...) Expand all
2784 2791
2785 if (fni_ != NULL) { 2792 if (fni_ != NULL) {
2786 fni_->Infer(); 2793 fni_->Infer();
2787 fni_->Leave(); 2794 fni_->Leave();
2788 } 2795 }
2789 } 2796 }
2790 2797
2791 int end_pos = peek_position(); 2798 int end_pos = peek_position();
2792 Expect(Token::RBRACE, CHECK_OK); 2799 Expect(Token::RBRACE, CHECK_OK);
2793 2800
2801 if (!has_seen_constructor) {
2802 constructor = this->DefaultConstructor(has_extends, scope_);
2803 }
2804
2794 return this->ClassExpression(name, extends, constructor, properties, pos, 2805 return this->ClassExpression(name, extends, constructor, properties, pos,
2795 end_pos + 1, factory()); 2806 end_pos + 1, factory());
2796 } 2807 }
2797 2808
2798 2809
2799 template <typename Traits> 2810 template <typename Traits>
2800 typename ParserBase<Traits>::ExpressionT 2811 typename ParserBase<Traits>::ExpressionT
2801 ParserBase<Traits>::CheckAndRewriteReferenceExpression( 2812 ParserBase<Traits>::CheckAndRewriteReferenceExpression(
2802 ExpressionT expression, 2813 ExpressionT expression,
2803 Scanner::Location location, const char* message, bool* ok) { 2814 Scanner::Location location, const char* message, bool* ok) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2848 DCHECK(IsAccessorAccessorConflict(old_type, type)); 2859 DCHECK(IsAccessorAccessorConflict(old_type, type));
2849 // Both accessors of the same type. 2860 // Both accessors of the same type.
2850 parser()->ReportMessage("accessor_get_set"); 2861 parser()->ReportMessage("accessor_get_set");
2851 } 2862 }
2852 *ok = false; 2863 *ok = false;
2853 } 2864 }
2854 } 2865 }
2855 } } // v8::internal 2866 } } // v8::internal
2856 2867
2857 #endif // V8_PREPARSER_H 2868 #endif // V8_PREPARSER_H
OLDNEW
« src/parser.cc ('K') | « src/parser.cc ('k') | src/runtime/runtime-classes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698