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

Side by Side Diff: runtime/vm/parser.cc

Issue 17103002: Remove support for + prefix in number literals (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 | « runtime/vm/object.cc ('k') | runtime/vm/scanner.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/parser.h" 5 #include "vm/parser.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "vm/bigint_operations.h" 8 #include "vm/bigint_operations.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 6788 matching lines...) Expand 10 before | Expand all | Expand 10 after
6799 return IsIdentifier() && CurrentLiteral()->Equals(literal); 6799 return IsIdentifier() && CurrentLiteral()->Equals(literal);
6800 } 6800 }
6801 6801
6802 6802
6803 static bool IsIncrementOperator(Token::Kind token) { 6803 static bool IsIncrementOperator(Token::Kind token) {
6804 return token == Token::kINCR || token == Token::kDECR; 6804 return token == Token::kINCR || token == Token::kDECR;
6805 } 6805 }
6806 6806
6807 6807
6808 static bool IsPrefixOperator(Token::Kind token) { 6808 static bool IsPrefixOperator(Token::Kind token) {
6809 return (token == Token::kTIGHTADD) || // Valid for literals only! 6809 return (token == Token::kSUB) ||
6810 (token == Token::kSUB) ||
6811 (token == Token::kNOT) || 6810 (token == Token::kNOT) ||
6812 (token == Token::kBIT_NOT); 6811 (token == Token::kBIT_NOT);
6813 } 6812 }
6814 6813
6815 6814
6816 SequenceNode* Parser::NodeAsSequenceNode(intptr_t sequence_pos, 6815 SequenceNode* Parser::NodeAsSequenceNode(intptr_t sequence_pos,
6817 AstNode* node, 6816 AstNode* node,
6818 LocalScope* scope) { 6817 LocalScope* scope) {
6819 if ((node == NULL) || !node->IsSequenceNode()) { 6818 if ((node == NULL) || !node->IsSequenceNode()) {
6820 SequenceNode* sequence = new SequenceNode(sequence_pos, scope); 6819 SequenceNode* sequence = new SequenceNode(sequence_pos, scope);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
6913 (left_operand->AsPrimaryNode()->IsSuper())) { 6912 (left_operand->AsPrimaryNode()->IsSuper())) {
6914 ErrorMsg(left_operand->token_pos(), "illegal use of 'super'"); 6913 ErrorMsg(left_operand->token_pos(), "illegal use of 'super'");
6915 } 6914 }
6916 if (IsLiteral("as")) { // Not a reserved word. 6915 if (IsLiteral("as")) { // Not a reserved word.
6917 token_kind_ = Token::kAS; 6916 token_kind_ = Token::kAS;
6918 } 6917 }
6919 int current_preced = Token::Precedence(CurrentToken()); 6918 int current_preced = Token::Precedence(CurrentToken());
6920 while (current_preced >= min_preced) { 6919 while (current_preced >= min_preced) {
6921 while (Token::Precedence(CurrentToken()) == current_preced) { 6920 while (Token::Precedence(CurrentToken()) == current_preced) {
6922 Token::Kind op_kind = CurrentToken(); 6921 Token::Kind op_kind = CurrentToken();
6923 if (op_kind == Token::kTIGHTADD) {
6924 op_kind = Token::kADD;
6925 }
6926 const intptr_t op_pos = TokenPos(); 6922 const intptr_t op_pos = TokenPos();
6927 ConsumeToken(); 6923 ConsumeToken();
6928 AstNode* right_operand = NULL; 6924 AstNode* right_operand = NULL;
6929 if ((op_kind != Token::kIS) && (op_kind != Token::kAS)) { 6925 if ((op_kind != Token::kIS) && (op_kind != Token::kAS)) {
6930 right_operand = ParseBinaryExpr(current_preced + 1); 6926 right_operand = ParseBinaryExpr(current_preced + 1);
6931 } else { 6927 } else {
6932 // For 'is' and 'as' we expect the right operand to be a type. 6928 // For 'is' and 'as' we expect the right operand to be a type.
6933 if ((op_kind == Token::kIS) && (CurrentToken() == Token::kNOT)) { 6929 if ((op_kind == Token::kIS) && (CurrentToken() == Token::kNOT)) {
6934 ConsumeToken(); 6930 ConsumeToken();
6935 op_kind = Token::kISNOT; 6931 op_kind = Token::kISNOT;
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
7324 TRACE_PARSER("ParseUnaryExpr"); 7320 TRACE_PARSER("ParseUnaryExpr");
7325 AstNode* expr = NULL; 7321 AstNode* expr = NULL;
7326 const intptr_t op_pos = TokenPos(); 7322 const intptr_t op_pos = TokenPos();
7327 if (IsPrefixOperator(CurrentToken())) { 7323 if (IsPrefixOperator(CurrentToken())) {
7328 Token::Kind unary_op = CurrentToken(); 7324 Token::Kind unary_op = CurrentToken();
7329 if (unary_op == Token::kSUB) { 7325 if (unary_op == Token::kSUB) {
7330 unary_op = Token::kNEGATE; 7326 unary_op = Token::kNEGATE;
7331 } 7327 }
7332 ConsumeToken(); 7328 ConsumeToken();
7333 expr = ParseUnaryExpr(); 7329 expr = ParseUnaryExpr();
7334 if (unary_op == Token::kTIGHTADD) { 7330 if (expr->IsPrimaryNode() && (expr->AsPrimaryNode()->IsSuper())) {
7335 // kTIGHADD is added only in front of a number literal.
7336 if (!expr->IsLiteralNode()) {
7337 ErrorMsg(op_pos, "unexpected operator '+'");
7338 }
7339 // Expression is the literal itself.
7340 } else if (expr->IsPrimaryNode() && (expr->AsPrimaryNode()->IsSuper())) {
7341 expr = BuildUnarySuperOperator(unary_op, expr->AsPrimaryNode()); 7331 expr = BuildUnarySuperOperator(unary_op, expr->AsPrimaryNode());
7342 } else { 7332 } else {
7343 expr = UnaryOpNode::UnaryOpOrLiteral(op_pos, unary_op, expr); 7333 expr = UnaryOpNode::UnaryOpOrLiteral(op_pos, unary_op, expr);
7344 } 7334 }
7345 } else if (IsIncrementOperator(CurrentToken())) { 7335 } else if (IsIncrementOperator(CurrentToken())) {
7346 Token::Kind incr_op = CurrentToken(); 7336 Token::Kind incr_op = CurrentToken();
7347 ConsumeToken(); 7337 ConsumeToken();
7348 expr = ParseUnaryExpr(); 7338 expr = ParseUnaryExpr();
7349 if (!IsAssignableExpr(expr)) { 7339 if (!IsAssignableExpr(expr)) {
7350 ErrorMsg("expression is not assignable"); 7340 ErrorMsg("expression is not assignable");
(...skipping 2749 matching lines...) Expand 10 before | Expand all | Expand 10 after
10100 void Parser::SkipQualIdent() { 10090 void Parser::SkipQualIdent() {
10101 ASSERT(IsIdentifier()); 10091 ASSERT(IsIdentifier());
10102 ConsumeToken(); 10092 ConsumeToken();
10103 if (CurrentToken() == Token::kPERIOD) { 10093 if (CurrentToken() == Token::kPERIOD) {
10104 ConsumeToken(); // Consume the kPERIOD token. 10094 ConsumeToken(); // Consume the kPERIOD token.
10105 ExpectIdentifier("identifier expected after '.'"); 10095 ExpectIdentifier("identifier expected after '.'");
10106 } 10096 }
10107 } 10097 }
10108 10098
10109 } // namespace dart 10099 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/scanner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698