| 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/parser.h" | 5 #include "vm/parser.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/compiler_stats.h" | 10 #include "vm/compiler_stats.h" |
| (...skipping 5031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5042 bool no_check = type.IsDynamicType(); | 5042 bool no_check = type.IsDynamicType(); |
| 5043 if ((CurrentToken() == Token::kINTEGER) && | 5043 if ((CurrentToken() == Token::kINTEGER) && |
| 5044 (no_check || type.IsIntType() || type.IsNumberType())) { | 5044 (no_check || type.IsIntType() || type.IsNumberType())) { |
| 5045 *value = CurrentIntegerLiteral(); | 5045 *value = CurrentIntegerLiteral(); |
| 5046 return true; | 5046 return true; |
| 5047 } else if ((CurrentToken() == Token::kDOUBLE) && | 5047 } else if ((CurrentToken() == Token::kDOUBLE) && |
| 5048 (no_check || type.IsDoubleType() || type.IsNumberType())) { | 5048 (no_check || type.IsDoubleType() || type.IsNumberType())) { |
| 5049 *value = CurrentDoubleLiteral(); | 5049 *value = CurrentDoubleLiteral(); |
| 5050 return true; | 5050 return true; |
| 5051 } else if ((CurrentToken() == Token::kSTRING) && | 5051 } else if ((CurrentToken() == Token::kSTRING) && |
| 5052 (no_check || type.IsStringInterface())) { | 5052 (no_check || type.IsStringType())) { |
| 5053 *value = CurrentLiteral()->raw(); | 5053 *value = CurrentLiteral()->raw(); |
| 5054 return true; | 5054 return true; |
| 5055 } else if ((CurrentToken() == Token::kTRUE) && | 5055 } else if ((CurrentToken() == Token::kTRUE) && |
| 5056 (no_check || type.IsBoolType())) { | 5056 (no_check || type.IsBoolType())) { |
| 5057 *value = Bool::True(); | 5057 *value = Bool::True(); |
| 5058 return true; | 5058 return true; |
| 5059 } else if ((CurrentToken() == Token::kFALSE) && | 5059 } else if ((CurrentToken() == Token::kFALSE) && |
| 5060 (no_check || type.IsBoolType())) { | 5060 (no_check || type.IsBoolType())) { |
| 5061 *value = Bool::False(); | 5061 *value = Bool::False(); |
| 5062 return true; | 5062 return true; |
| (...skipping 3533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8596 // Map literals take two type arguments. | 8596 // Map literals take two type arguments. |
| 8597 if (map_type_arguments.Length() < 2) { | 8597 if (map_type_arguments.Length() < 2) { |
| 8598 // TODO(hausner): Remove legacy syntax support. | 8598 // TODO(hausner): Remove legacy syntax support. |
| 8599 // We temporarily accept a single type argument. | 8599 // We temporarily accept a single type argument. |
| 8600 if (FLAG_warn_legacy_map_literal) { | 8600 if (FLAG_warn_legacy_map_literal) { |
| 8601 Warning(type_pos, | 8601 Warning(type_pos, |
| 8602 "a map literal takes two type arguments specifying " | 8602 "a map literal takes two type arguments specifying " |
| 8603 "the key type and the value type"); | 8603 "the key type and the value type"); |
| 8604 } | 8604 } |
| 8605 TypeArguments& type_array = TypeArguments::Handle(TypeArguments::New(2)); | 8605 TypeArguments& type_array = TypeArguments::Handle(TypeArguments::New(2)); |
| 8606 type_array.SetTypeAt(0, Type::Handle(Type::StringInterface())); | 8606 type_array.SetTypeAt(0, Type::Handle(Type::StringType())); |
| 8607 type_array.SetTypeAt(1, value_type); | 8607 type_array.SetTypeAt(1, value_type); |
| 8608 map_type_arguments = type_array.raw(); | 8608 map_type_arguments = type_array.raw(); |
| 8609 } else if (map_type_arguments.Length() > 2) { | 8609 } else if (map_type_arguments.Length() > 2) { |
| 8610 ErrorMsg(type_pos, | 8610 ErrorMsg(type_pos, |
| 8611 "a map literal takes two type arguments specifying " | 8611 "a map literal takes two type arguments specifying " |
| 8612 "the key type and the value type"); | 8612 "the key type and the value type"); |
| 8613 } else { | 8613 } else { |
| 8614 const AbstractType& key_type = | 8614 const AbstractType& key_type = |
| 8615 AbstractType::Handle(map_type_arguments.TypeAt(0)); | 8615 AbstractType::Handle(map_type_arguments.TypeAt(0)); |
| 8616 value_type = map_type_arguments.TypeAt(1); | 8616 value_type = map_type_arguments.TypeAt(1); |
| 8617 if (!key_type.IsStringInterface()) { | 8617 if (!key_type.IsStringType()) { |
| 8618 ErrorMsg(type_pos, "the key type of a map literal must be 'String'"); | 8618 ErrorMsg(type_pos, "the key type of a map literal must be 'String'"); |
| 8619 } | 8619 } |
| 8620 } | 8620 } |
| 8621 if (is_const && !value_type.IsInstantiated()) { | 8621 if (is_const && !value_type.IsInstantiated()) { |
| 8622 ErrorMsg(type_pos, | 8622 ErrorMsg(type_pos, |
| 8623 "the type argument of a constant map literal cannot include " | 8623 "the type argument of a constant map literal cannot include " |
| 8624 "a type variable"); | 8624 "a type variable"); |
| 8625 } | 8625 } |
| 8626 } | 8626 } |
| 8627 ASSERT(map_type_arguments.IsNull() || (map_type_arguments.Length() == 2)); | 8627 ASSERT(map_type_arguments.IsNull() || (map_type_arguments.Length() == 2)); |
| (...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9691 void Parser::SkipQualIdent() { | 9691 void Parser::SkipQualIdent() { |
| 9692 ASSERT(IsIdentifier()); | 9692 ASSERT(IsIdentifier()); |
| 9693 ConsumeToken(); | 9693 ConsumeToken(); |
| 9694 if (CurrentToken() == Token::kPERIOD) { | 9694 if (CurrentToken() == Token::kPERIOD) { |
| 9695 ConsumeToken(); // Consume the kPERIOD token. | 9695 ConsumeToken(); // Consume the kPERIOD token. |
| 9696 ExpectIdentifier("identifier expected after '.'"); | 9696 ExpectIdentifier("identifier expected after '.'"); |
| 9697 } | 9697 } |
| 9698 } | 9698 } |
| 9699 | 9699 |
| 9700 } // namespace dart | 9700 } // namespace dart |
| OLD | NEW |