| 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 #include "vm/flags.h" | 6 #include "vm/flags.h" |
| 7 | 7 |
| 8 #ifndef DART_PRECOMPILED_RUNTIME | 8 #ifndef DART_PRECOMPILED_RUNTIME |
| 9 | 9 |
| 10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 | 618 |
| 619 | 619 |
| 620 RawInteger* Parser::CurrentIntegerLiteral() const { | 620 RawInteger* Parser::CurrentIntegerLiteral() const { |
| 621 literal_token_ ^= tokens_iterator_.CurrentToken(); | 621 literal_token_ ^= tokens_iterator_.CurrentToken(); |
| 622 ASSERT(literal_token_.kind() == Token::kINTEGER); | 622 ASSERT(literal_token_.kind() == Token::kINTEGER); |
| 623 RawInteger* ri = Integer::RawCast(literal_token_.value()); | 623 RawInteger* ri = Integer::RawCast(literal_token_.value()); |
| 624 return ri; | 624 return ri; |
| 625 } | 625 } |
| 626 | 626 |
| 627 | 627 |
| 628 RawFraction* Parser::CurrentRationalLiteral() const { |
| 629 literal_token_ ^= tokens_iterator_.CurrentToken(); |
| 630 ASSERT(literal_token_.kind() == Token::kRATIONAL); |
| 631 return Fraction::RawCast(literal_token_.value()); |
| 632 } |
| 633 |
| 634 |
| 628 struct ParamDesc { | 635 struct ParamDesc { |
| 629 ParamDesc() | 636 ParamDesc() |
| 630 : type(NULL), | 637 : type(NULL), |
| 631 name_pos(TokenPosition::kNoSource), | 638 name_pos(TokenPosition::kNoSource), |
| 632 name(NULL), | 639 name(NULL), |
| 633 default_value(NULL), | 640 default_value(NULL), |
| 634 metadata(NULL), | 641 metadata(NULL), |
| 635 var(NULL), | 642 var(NULL), |
| 636 is_final(false), | 643 is_final(false), |
| 637 is_field_initializer(false), | 644 is_field_initializer(false), |
| (...skipping 3879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4517 cls ^= obj.raw(); | 4524 cls ^= obj.raw(); |
| 4518 if (is_patch) { | 4525 if (is_patch) { |
| 4519 // Preserve and reuse the original type parameters and bounds since the | 4526 // Preserve and reuse the original type parameters and bounds since the |
| 4520 // ones defined in the patch class will not be finalized. | 4527 // ones defined in the patch class will not be finalized. |
| 4521 orig_type_parameters = cls.type_parameters(); | 4528 orig_type_parameters = cls.type_parameters(); |
| 4522 cls = Class::New(library_, class_name, script_, declaration_pos); | 4529 cls = Class::New(library_, class_name, script_, declaration_pos); |
| 4523 } else { | 4530 } else { |
| 4524 // Not patching a class, but it has been found. This must be one of the | 4531 // Not patching a class, but it has been found. This must be one of the |
| 4525 // pre-registered classes from object.cc or a duplicate definition. | 4532 // pre-registered classes from object.cc or a duplicate definition. |
| 4526 if (!(cls.is_prefinalized() || | 4533 if (!(cls.is_prefinalized() || |
| 4534 cls.is_refinalize_after_patch() || // TODO(regis): Remove. |
| 4527 RawObject::IsImplicitFieldClassId(cls.id()))) { | 4535 RawObject::IsImplicitFieldClassId(cls.id()))) { |
| 4528 ReportError(classname_pos, "class '%s' is already defined", | 4536 ReportError(classname_pos, "class '%s' is already defined", |
| 4529 class_name.ToCString()); | 4537 class_name.ToCString()); |
| 4530 } | 4538 } |
| 4531 // Pre-registered classes need their scripts connected at this time. | 4539 // Pre-registered classes need their scripts connected at this time. |
| 4532 cls.set_script(script_); | 4540 cls.set_script(script_); |
| 4533 cls.set_token_pos(declaration_pos); | 4541 cls.set_token_pos(declaration_pos); |
| 4534 } | 4542 } |
| 4535 } | 4543 } |
| 4536 ASSERT(!cls.IsNull()); | 4544 ASSERT(!cls.IsNull()); |
| (...skipping 3384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7921 // 'type' is not a type parameter (an unresolved type will not get resolved | 7929 // 'type' is not a type parameter (an unresolved type will not get resolved |
| 7922 // to a type parameter later) and if 'type' has no type arguments, then it | 7930 // to a type parameter later) and if 'type' has no type arguments, then it |
| 7923 // will be instantiated at class finalization time. Otherwise, we return | 7931 // will be instantiated at class finalization time. Otherwise, we return |
| 7924 // false, since the type test would not be possible at finalization time for | 7932 // false, since the type test would not be possible at finalization time for |
| 7925 // an uninstantiated type. | 7933 // an uninstantiated type. |
| 7926 return false; | 7934 return false; |
| 7927 } | 7935 } |
| 7928 if (CurrentToken() == Token::kINTEGER) { | 7936 if (CurrentToken() == Token::kINTEGER) { |
| 7929 *value = CurrentIntegerLiteral(); | 7937 *value = CurrentIntegerLiteral(); |
| 7930 return true; | 7938 return true; |
| 7939 } else if (CurrentToken() == Token::kRATIONAL) { |
| 7940 *value = CurrentRationalLiteral(); |
| 7941 return true; |
| 7931 } else if (CurrentToken() == Token::kDOUBLE) { | 7942 } else if (CurrentToken() == Token::kDOUBLE) { |
| 7932 *value = CurrentDoubleLiteral(); | 7943 *value = CurrentDoubleLiteral(); |
| 7933 return true; | 7944 return true; |
| 7934 } else if (CurrentToken() == Token::kSTRING) { | 7945 } else if (CurrentToken() == Token::kSTRING) { |
| 7935 *value = CurrentLiteral()->raw(); | 7946 *value = CurrentLiteral()->raw(); |
| 7936 return true; | 7947 return true; |
| 7937 } else if (CurrentToken() == Token::kTRUE) { | 7948 } else if (CurrentToken() == Token::kTRUE) { |
| 7938 *value = Bool::True().raw(); | 7949 *value = Bool::True().raw(); |
| 7939 return true; | 7950 return true; |
| 7940 } else if (CurrentToken() == Token::kFALSE) { | 7951 } else if (CurrentToken() == Token::kFALSE) { |
| (...skipping 6135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14076 ConsumeToken(); | 14087 ConsumeToken(); |
| 14077 } else if (token == Token::kNULL) { | 14088 } else if (token == Token::kNULL) { |
| 14078 primary = new(Z) LiteralNode(TokenPos(), Object::null_instance()); | 14089 primary = new(Z) LiteralNode(TokenPos(), Object::null_instance()); |
| 14079 ConsumeToken(); | 14090 ConsumeToken(); |
| 14080 } else if (token == Token::kLPAREN) { | 14091 } else if (token == Token::kLPAREN) { |
| 14081 ConsumeToken(); | 14092 ConsumeToken(); |
| 14082 const bool saved_mode = SetAllowFunctionLiterals(true); | 14093 const bool saved_mode = SetAllowFunctionLiterals(true); |
| 14083 primary = ParseExpr(kAllowConst, kConsumeCascades); | 14094 primary = ParseExpr(kAllowConst, kConsumeCascades); |
| 14084 SetAllowFunctionLiterals(saved_mode); | 14095 SetAllowFunctionLiterals(saved_mode); |
| 14085 ExpectToken(Token::kRPAREN); | 14096 ExpectToken(Token::kRPAREN); |
| 14097 } else if (token == Token::kRATIONAL) { |
| 14098 const Fraction& rational_value = |
| 14099 Fraction::ZoneHandle(Z, CurrentRationalLiteral()); |
| 14100 if (rational_value.IsNull()) { |
| 14101 ReportError("invalid rational literal"); |
| 14102 } |
| 14103 primary = new(Z) LiteralNode(TokenPos(), rational_value); |
| 14104 ConsumeToken(); |
| 14086 } else if (token == Token::kDOUBLE) { | 14105 } else if (token == Token::kDOUBLE) { |
| 14087 const Double& double_value = Double::ZoneHandle(Z, CurrentDoubleLiteral()); | 14106 const Double& double_value = Double::ZoneHandle(Z, CurrentDoubleLiteral()); |
| 14088 if (double_value.IsNull()) { | 14107 if (double_value.IsNull()) { |
| 14089 ReportError("invalid double literal"); | 14108 ReportError("invalid double literal"); |
| 14090 } | 14109 } |
| 14091 primary = new(Z) LiteralNode(TokenPos(), double_value); | 14110 primary = new(Z) LiteralNode(TokenPos(), double_value); |
| 14092 ConsumeToken(); | 14111 ConsumeToken(); |
| 14093 } else if (token == Token::kSTRING) { | 14112 } else if (token == Token::kSTRING) { |
| 14094 primary = ParseStringLiteral(true); | 14113 primary = ParseStringLiteral(true); |
| 14095 } else if (token == Token::kNEW) { | 14114 } else if (token == Token::kNEW) { |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14369 SkipFunctionLiteral(); | 14388 SkipFunctionLiteral(); |
| 14370 return; | 14389 return; |
| 14371 } | 14390 } |
| 14372 switch (CurrentToken()) { | 14391 switch (CurrentToken()) { |
| 14373 case Token::kTHIS: | 14392 case Token::kTHIS: |
| 14374 case Token::kSUPER: | 14393 case Token::kSUPER: |
| 14375 case Token::kNULL: | 14394 case Token::kNULL: |
| 14376 case Token::kTRUE: | 14395 case Token::kTRUE: |
| 14377 case Token::kFALSE: | 14396 case Token::kFALSE: |
| 14378 case Token::kINTEGER: | 14397 case Token::kINTEGER: |
| 14398 case Token::kRATIONAL: |
| 14379 case Token::kDOUBLE: | 14399 case Token::kDOUBLE: |
| 14380 ConsumeToken(); | 14400 ConsumeToken(); |
| 14381 break; | 14401 break; |
| 14382 case Token::kIDENT: | 14402 case Token::kIDENT: |
| 14383 ConsumeToken(); | 14403 ConsumeToken(); |
| 14384 break; | 14404 break; |
| 14385 case Token::kSTRING: | 14405 case Token::kSTRING: |
| 14386 SkipStringLiteral(); | 14406 SkipStringLiteral(); |
| 14387 break; | 14407 break; |
| 14388 case Token::kLPAREN: | 14408 case Token::kLPAREN: |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14640 const ArgumentListNode& function_args, | 14660 const ArgumentListNode& function_args, |
| 14641 const LocalVariable* temp_for_last_arg, | 14661 const LocalVariable* temp_for_last_arg, |
| 14642 bool is_super_invocation) { | 14662 bool is_super_invocation) { |
| 14643 UNREACHABLE(); | 14663 UNREACHABLE(); |
| 14644 return NULL; | 14664 return NULL; |
| 14645 } | 14665 } |
| 14646 | 14666 |
| 14647 } // namespace dart | 14667 } // namespace dart |
| 14648 | 14668 |
| 14649 #endif // DART_PRECOMPILED_RUNTIME | 14669 #endif // DART_PRECOMPILED_RUNTIME |
| OLD | NEW |