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

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: remove todo 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
« no previous file with comments | « src/parser.cc ('k') | src/runtime/runtime-classes.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 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, int pos,
1330 int end_pos) {
1331 return PreParserExpression::Default();
1332 }
1333
1328 static PreParserExpression ExpressionFromLiteral( 1334 static PreParserExpression ExpressionFromLiteral(
1329 Token::Value token, int pos, Scanner* scanner, 1335 Token::Value token, int pos, Scanner* scanner,
1330 PreParserFactory* factory) { 1336 PreParserFactory* factory) {
1331 return PreParserExpression::Default(); 1337 return PreParserExpression::Default();
1332 } 1338 }
1333 1339
1334 static PreParserExpression ExpressionFromIdentifier( 1340 static PreParserExpression ExpressionFromIdentifier(
1335 PreParserIdentifier name, int pos, PreParserScope* scope, 1341 PreParserIdentifier name, int pos, PreParserScope* scope,
1336 PreParserFactory* factory) { 1342 PreParserFactory* factory) {
1337 return PreParserExpression::FromIdentifier(name); 1343 return PreParserExpression::FromIdentifier(name);
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 ReportMessageAt(class_name_location, "unexpected_strict_reserved"); 2746 ReportMessageAt(class_name_location, "unexpected_strict_reserved");
2741 *ok = false; 2747 *ok = false;
2742 return this->EmptyExpression(); 2748 return this->EmptyExpression();
2743 } 2749 }
2744 if (this->IsEvalOrArguments(name)) { 2750 if (this->IsEvalOrArguments(name)) {
2745 ReportMessageAt(class_name_location, "strict_eval_arguments"); 2751 ReportMessageAt(class_name_location, "strict_eval_arguments");
2746 *ok = false; 2752 *ok = false;
2747 return this->EmptyExpression(); 2753 return this->EmptyExpression();
2748 } 2754 }
2749 2755
2756 bool has_extends = false;
2750 ExpressionT extends = this->EmptyExpression(); 2757 ExpressionT extends = this->EmptyExpression();
2751 if (Check(Token::EXTENDS)) { 2758 if (Check(Token::EXTENDS)) {
2752 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); 2759 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE);
2753 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); 2760 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope));
2754 scope_->SetStrictMode(STRICT); 2761 scope_->SetStrictMode(STRICT);
2755 extends = this->ParseLeftHandSideExpression(CHECK_OK); 2762 extends = this->ParseLeftHandSideExpression(CHECK_OK);
2763 has_extends = true;
2756 } 2764 }
2757 2765
2758 // TODO(arv): Implement scopes and name binding in class body only. 2766 // TODO(arv): Implement scopes and name binding in class body only.
2759 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); 2767 typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE);
2760 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); 2768 BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope));
2761 scope_->SetStrictMode(STRICT); 2769 scope_->SetStrictMode(STRICT);
2762 scope_->SetScopeName(name); 2770 scope_->SetScopeName(name);
2763 2771
2764 typename Traits::Type::PropertyList properties = 2772 typename Traits::Type::PropertyList properties =
2765 this->NewPropertyList(4, zone_); 2773 this->NewPropertyList(4, zone_);
(...skipping 18 matching lines...) Expand all
2784 2792
2785 if (fni_ != NULL) { 2793 if (fni_ != NULL) {
2786 fni_->Infer(); 2794 fni_->Infer();
2787 fni_->Leave(); 2795 fni_->Leave();
2788 } 2796 }
2789 } 2797 }
2790 2798
2791 int end_pos = peek_position(); 2799 int end_pos = peek_position();
2792 Expect(Token::RBRACE, CHECK_OK); 2800 Expect(Token::RBRACE, CHECK_OK);
2793 2801
2802 if (!has_seen_constructor) {
2803 constructor =
2804 this->DefaultConstructor(has_extends, scope_, pos, end_pos + 1);
2805 }
2806
2794 return this->ClassExpression(name, extends, constructor, properties, pos, 2807 return this->ClassExpression(name, extends, constructor, properties, pos,
2795 end_pos + 1, factory()); 2808 end_pos + 1, factory());
2796 } 2809 }
2797 2810
2798 2811
2799 template <typename Traits> 2812 template <typename Traits>
2800 typename ParserBase<Traits>::ExpressionT 2813 typename ParserBase<Traits>::ExpressionT
2801 ParserBase<Traits>::CheckAndRewriteReferenceExpression( 2814 ParserBase<Traits>::CheckAndRewriteReferenceExpression(
2802 ExpressionT expression, 2815 ExpressionT expression,
2803 Scanner::Location location, const char* message, bool* ok) { 2816 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)); 2861 DCHECK(IsAccessorAccessorConflict(old_type, type));
2849 // Both accessors of the same type. 2862 // Both accessors of the same type.
2850 parser()->ReportMessage("accessor_get_set"); 2863 parser()->ReportMessage("accessor_get_set");
2851 } 2864 }
2852 *ok = false; 2865 *ok = false;
2853 } 2866 }
2854 } 2867 }
2855 } } // v8::internal 2868 } } // v8::internal
2856 2869
2857 #endif // V8_PREPARSER_H 2870 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/runtime/runtime-classes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698