| 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 "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
| 8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
| 9 #include "vm/ast_transformer.h" | 9 #include "vm/ast_transformer.h" |
| 10 #include "vm/bootstrap.h" | 10 #include "vm/bootstrap.h" |
| (...skipping 10692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10703 while (true) { | 10703 while (true) { |
| 10704 AstNode* selector = NULL; | 10704 AstNode* selector = NULL; |
| 10705 if (CurrentToken() == Token::kPERIOD) { | 10705 if (CurrentToken() == Token::kPERIOD) { |
| 10706 ConsumeToken(); | 10706 ConsumeToken(); |
| 10707 if (left->IsPrimaryNode()) { | 10707 if (left->IsPrimaryNode()) { |
| 10708 PrimaryNode* primary_node = left->AsPrimaryNode(); | 10708 PrimaryNode* primary_node = left->AsPrimaryNode(); |
| 10709 const intptr_t primary_pos = primary_node->token_pos(); | 10709 const intptr_t primary_pos = primary_node->token_pos(); |
| 10710 if (primary_node->primary().IsFunction()) { | 10710 if (primary_node->primary().IsFunction()) { |
| 10711 left = LoadClosure(primary_node); | 10711 left = LoadClosure(primary_node); |
| 10712 } else if (primary_node->primary().IsTypeParameter()) { | 10712 } else if (primary_node->primary().IsTypeParameter()) { |
| 10713 if (current_function().is_static()) { | 10713 if (ParsingStaticMember()) { |
| 10714 const String& name = String::ZoneHandle(Z, | 10714 const String& name = String::ZoneHandle(Z, |
| 10715 TypeParameter::Cast(primary_node->primary()).name()); | 10715 TypeParameter::Cast(primary_node->primary()).name()); |
| 10716 ReportError(primary_pos, | 10716 ReportError(primary_pos, |
| 10717 "cannot access type parameter '%s' " | 10717 "cannot access type parameter '%s' " |
| 10718 "from static function", | 10718 "from static function", |
| 10719 name.ToCString()); | 10719 name.ToCString()); |
| 10720 } | 10720 } |
| 10721 if (current_block_->scope->function_level() > 0) { | 10721 if (current_block_->scope->function_level() > 0) { |
| 10722 // Make sure that the instantiator is captured. | 10722 // Make sure that the instantiator is captured. |
| 10723 CaptureInstantiator(); | 10723 CaptureInstantiator(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10789 const Class& type_class = Class::Cast(primary_node->primary()); | 10789 const Class& type_class = Class::Cast(primary_node->primary()); |
| 10790 AbstractType& type = Type::ZoneHandle(Z, | 10790 AbstractType& type = Type::ZoneHandle(Z, |
| 10791 Type::New(type_class, TypeArguments::Handle(Z), | 10791 Type::New(type_class, TypeArguments::Handle(Z), |
| 10792 primary_pos, Heap::kOld)); | 10792 primary_pos, Heap::kOld)); |
| 10793 type ^= ClassFinalizer::FinalizeType( | 10793 type ^= ClassFinalizer::FinalizeType( |
| 10794 current_class(), type, ClassFinalizer::kCanonicalize); | 10794 current_class(), type, ClassFinalizer::kCanonicalize); |
| 10795 // Type may be malbounded, but not malformed. | 10795 // Type may be malbounded, but not malformed. |
| 10796 ASSERT(!type.IsMalformed()); | 10796 ASSERT(!type.IsMalformed()); |
| 10797 array = new(Z) TypeNode(primary_pos, type); | 10797 array = new(Z) TypeNode(primary_pos, type); |
| 10798 } else if (primary_node->primary().IsTypeParameter()) { | 10798 } else if (primary_node->primary().IsTypeParameter()) { |
| 10799 if (current_function().is_static()) { | 10799 if (ParsingStaticMember()) { |
| 10800 const String& name = String::ZoneHandle(Z, | 10800 const String& name = String::ZoneHandle(Z, |
| 10801 TypeParameter::Cast(primary_node->primary()).name()); | 10801 TypeParameter::Cast(primary_node->primary()).name()); |
| 10802 ReportError(primary_pos, | 10802 ReportError(primary_pos, |
| 10803 "cannot access type parameter '%s' " | 10803 "cannot access type parameter '%s' " |
| 10804 "from static function", | 10804 "from static function", |
| 10805 name.ToCString()); | 10805 name.ToCString()); |
| 10806 } | 10806 } |
| 10807 if (current_block_->scope->function_level() > 0) { | 10807 if (current_block_->scope->function_level() > 0) { |
| 10808 // Make sure that the instantiator is captured. | 10808 // Make sure that the instantiator is captured. |
| 10809 CaptureInstantiator(); | 10809 CaptureInstantiator(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10857 InvocationMirror::kStatic, | 10857 InvocationMirror::kStatic, |
| 10858 InvocationMirror::kMethod, | 10858 InvocationMirror::kMethod, |
| 10859 NULL); // No existing function. | 10859 NULL); // No existing function. |
| 10860 } else { | 10860 } else { |
| 10861 // Treat as call to unresolved (instance) method. | 10861 // Treat as call to unresolved (instance) method. |
| 10862 selector = ParseInstanceCall(LoadReceiver(primary_pos), name); | 10862 selector = ParseInstanceCall(LoadReceiver(primary_pos), name); |
| 10863 } | 10863 } |
| 10864 } else if (primary_node->primary().IsTypeParameter()) { | 10864 } else if (primary_node->primary().IsTypeParameter()) { |
| 10865 const String& name = String::ZoneHandle(Z, | 10865 const String& name = String::ZoneHandle(Z, |
| 10866 TypeParameter::Cast(primary_node->primary()).name()); | 10866 TypeParameter::Cast(primary_node->primary()).name()); |
| 10867 if (current_function().is_static()) { | 10867 if (ParsingStaticMember()) { |
| 10868 // Treat as this.T(), because T is in scope. | 10868 // Treat as this.T(), because T is in scope. |
| 10869 ReportError(primary_pos, | 10869 ReportError(primary_pos, |
| 10870 "cannot access type parameter '%s' " | 10870 "cannot access type parameter '%s' " |
| 10871 "from static function", | 10871 "from static function", |
| 10872 name.ToCString()); | 10872 name.ToCString()); |
| 10873 } else { | 10873 } else { |
| 10874 // Treat as call to unresolved (instance) method. | 10874 // Treat as call to unresolved (instance) method. |
| 10875 selector = ParseInstanceCall(LoadReceiver(primary_pos), name); | 10875 selector = ParseInstanceCall(LoadReceiver(primary_pos), name); |
| 10876 } | 10876 } |
| 10877 } else if (primary_node->primary().IsClass()) { | 10877 } else if (primary_node->primary().IsClass()) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 10903 } else if (primary_node->primary().IsClass()) { | 10903 } else if (primary_node->primary().IsClass()) { |
| 10904 const Class& type_class = Class::Cast(primary_node->primary()); | 10904 const Class& type_class = Class::Cast(primary_node->primary()); |
| 10905 AbstractType& type = Type::ZoneHandle(Z, Type::New( | 10905 AbstractType& type = Type::ZoneHandle(Z, Type::New( |
| 10906 type_class, TypeArguments::Handle(Z), primary_pos)); | 10906 type_class, TypeArguments::Handle(Z), primary_pos)); |
| 10907 type = ClassFinalizer::FinalizeType( | 10907 type = ClassFinalizer::FinalizeType( |
| 10908 current_class(), type, ClassFinalizer::kCanonicalize); | 10908 current_class(), type, ClassFinalizer::kCanonicalize); |
| 10909 // Type may be malbounded, but not malformed. | 10909 // Type may be malbounded, but not malformed. |
| 10910 ASSERT(!type.IsMalformed()); | 10910 ASSERT(!type.IsMalformed()); |
| 10911 left = new(Z) TypeNode(primary_pos, type); | 10911 left = new(Z) TypeNode(primary_pos, type); |
| 10912 } else if (primary_node->primary().IsTypeParameter()) { | 10912 } else if (primary_node->primary().IsTypeParameter()) { |
| 10913 if (current_function().is_static()) { | 10913 if (ParsingStaticMember()) { |
| 10914 const String& name = String::ZoneHandle(Z, | 10914 const String& name = String::ZoneHandle(Z, |
| 10915 TypeParameter::Cast(primary_node->primary()).name()); | 10915 TypeParameter::Cast(primary_node->primary()).name()); |
| 10916 ReportError(primary_pos, | 10916 ReportError(primary_pos, |
| 10917 "cannot access type parameter '%s' " | 10917 "cannot access type parameter '%s' " |
| 10918 "from static function", | 10918 "from static function", |
| 10919 name.ToCString()); | 10919 name.ToCString()); |
| 10920 } | 10920 } |
| 10921 if (current_block_->scope->function_level() > 0) { | 10921 if (current_block_->scope->function_level() > 0) { |
| 10922 // Make sure that the instantiator is captured. | 10922 // Make sure that the instantiator is captured. |
| 10923 CaptureInstantiator(); | 10923 CaptureInstantiator(); |
| (...skipping 2278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13202 void Parser::SkipQualIdent() { | 13202 void Parser::SkipQualIdent() { |
| 13203 ASSERT(IsIdentifier()); | 13203 ASSERT(IsIdentifier()); |
| 13204 ConsumeToken(); | 13204 ConsumeToken(); |
| 13205 if (CurrentToken() == Token::kPERIOD) { | 13205 if (CurrentToken() == Token::kPERIOD) { |
| 13206 ConsumeToken(); // Consume the kPERIOD token. | 13206 ConsumeToken(); // Consume the kPERIOD token. |
| 13207 ExpectIdentifier("identifier expected after '.'"); | 13207 ExpectIdentifier("identifier expected after '.'"); |
| 13208 } | 13208 } |
| 13209 } | 13209 } |
| 13210 | 13210 |
| 13211 } // namespace dart | 13211 } // namespace dart |
| OLD | NEW |