| OLD | NEW |
| 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/scanner.h" | 5 #include "vm/scanner.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
| 9 #include "vm/object.h" | 9 #include "vm/object.h" |
| 10 #include "vm/object_store.h" | 10 #include "vm/object_store.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 bool* is_positive, | 182 bool* is_positive, |
| 183 String** value) { | 183 String** value) { |
| 184 if ((tokens.length() == 2) && | 184 if ((tokens.length() == 2) && |
| 185 (tokens[0].kind == literal_kind) && | 185 (tokens[0].kind == literal_kind) && |
| 186 (tokens[1].kind == Token::kEOS)) { | 186 (tokens[1].kind == Token::kEOS)) { |
| 187 *is_positive = true; | 187 *is_positive = true; |
| 188 *value = tokens[0].literal; | 188 *value = tokens[0].literal; |
| 189 return true; | 189 return true; |
| 190 } | 190 } |
| 191 if ((tokens.length() == 3) && | 191 if ((tokens.length() == 3) && |
| 192 ((tokens[0].kind == Token::kTIGHTADD) || | 192 ((tokens[0].kind == Token::kADD) || |
| 193 (tokens[0].kind == Token::kSUB)) && | 193 (tokens[0].kind == Token::kSUB)) && |
| 194 (tokens[1].kind == literal_kind) && | 194 (tokens[1].kind == literal_kind) && |
| 195 (tokens[2].kind == Token::kEOS)) { | 195 (tokens[2].kind == Token::kEOS)) { |
| 196 // Check there is no space between "+/-" and number. | 196 // Check there is no space between "+/-" and number. |
| 197 if ((tokens[0].offset + 1) != tokens[1].offset) { | 197 if ((tokens[0].offset + 1) != tokens[1].offset) { |
| 198 return false; | 198 return false; |
| 199 } | 199 } |
| 200 *is_positive = tokens[0].kind == Token::kTIGHTADD; | 200 *is_positive = tokens[0].kind == Token::kADD; |
| 201 *value = tokens[1].literal; | 201 *value = tokens[1].literal; |
| 202 return true; | 202 return true; |
| 203 } | 203 } |
| 204 return false; | 204 return false; |
| 205 } | 205 } |
| 206 | 206 |
| 207 | 207 |
| 208 void Scanner::ReadChar() { | 208 void Scanner::ReadChar() { |
| 209 if (lookahead_pos_ < source_length_) { | 209 if (lookahead_pos_ < source_length_) { |
| 210 if (c0_ == '\n') { | 210 if (c0_ == '\n') { |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 ScanLiteralStringChars(false); | 632 ScanLiteralStringChars(false); |
| 633 } | 633 } |
| 634 break; | 634 break; |
| 635 } | 635 } |
| 636 switch (c0_) { | 636 switch (c0_) { |
| 637 case '\0': | 637 case '\0': |
| 638 current_token_.kind = Token::kEOS; | 638 current_token_.kind = Token::kEOS; |
| 639 break; | 639 break; |
| 640 | 640 |
| 641 case '+': // + ++ += | 641 case '+': // + ++ += |
| 642 ReadChar(); | 642 Recognize(Token::kADD); |
| 643 current_token_.kind = | 643 if (c0_ == '+') { |
| 644 IsNumberStart(c0_) ? Token::kTIGHTADD : Token::kADD; | |
| 645 // Unary + is not allowed for hexadecimal integers, so treat the | |
| 646 // + as a binary operator. | |
| 647 if ((c0_ == '0') && | |
| 648 ((LookaheadChar(1) == 'x') || (LookaheadChar(1) == 'X'))) { | |
| 649 current_token_.kind = Token::kADD; | |
| 650 } else if (c0_ == '+') { | |
| 651 Recognize(Token::kINCR); | 644 Recognize(Token::kINCR); |
| 652 } else if (c0_ == '=') { | 645 } else if (c0_ == '=') { |
| 653 Recognize(Token::kASSIGN_ADD); | 646 Recognize(Token::kASSIGN_ADD); |
| 654 } | 647 } |
| 655 break; | 648 break; |
| 656 | 649 |
| 657 case '-': // - -- -= | 650 case '-': // - -- -= |
| 658 Recognize(Token::kSUB); | 651 Recognize(Token::kSUB); |
| 659 if (c0_ == '-') { | 652 if (c0_ == '-') { |
| 660 Recognize(Token::kDECR); | 653 Recognize(Token::kDECR); |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 961 "%c%#"Px"", kPrivateKeySeparator, key_value); | 954 "%c%#"Px"", kPrivateKeySeparator, key_value); |
| 962 const String& result = String::Handle(String::New(private_key, Heap::kOld)); | 955 const String& result = String::Handle(String::New(private_key, Heap::kOld)); |
| 963 return result.raw(); | 956 return result.raw(); |
| 964 } | 957 } |
| 965 | 958 |
| 966 | 959 |
| 967 void Scanner::InitOnce() { | 960 void Scanner::InitOnce() { |
| 968 } | 961 } |
| 969 | 962 |
| 970 } // namespace dart | 963 } // namespace dart |
| OLD | NEW |