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 7458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7469 selector = ParseClosureCall(closure); | 7469 selector = ParseClosureCall(closure); |
7470 } | 7470 } |
7471 } else { | 7471 } else { |
7472 // No (more) selectors to parse. | 7472 // No (more) selectors to parse. |
7473 left = LoadFieldIfUnresolved(left); | 7473 left = LoadFieldIfUnresolved(left); |
7474 if (left->IsPrimaryNode()) { | 7474 if (left->IsPrimaryNode()) { |
7475 PrimaryNode* primary = left->AsPrimaryNode(); | 7475 PrimaryNode* primary = left->AsPrimaryNode(); |
7476 if (primary->primary().IsFunction()) { | 7476 if (primary->primary().IsFunction()) { |
7477 // Treat as implicit closure. | 7477 // Treat as implicit closure. |
7478 left = LoadClosure(primary); | 7478 left = LoadClosure(primary); |
7479 } else if (left->AsPrimaryNode()->primary().IsClass()) { | 7479 } else if (primary->primary().IsClass()) { |
7480 Class& cls = Class::CheckedHandle( | 7480 const Class& type_class = Class::Cast(primary->primary()); |
7481 left->AsPrimaryNode()->primary().raw()); | 7481 Type& type = Type::ZoneHandle( |
7482 String& cls_name = String::Handle(cls.Name()); | 7482 Type::New(type_class, TypeArguments::Handle(), |
7483 ErrorMsg(left->token_pos(), | 7483 primary->token_pos(), Heap::kOld)); |
7484 "illegal use of class name '%s'", | 7484 type ^= ClassFinalizer::FinalizeType( |
7485 cls_name.ToCString()); | 7485 current_class(), type, ClassFinalizer::kCanonicalize); |
| 7486 left = new TypeNode(primary->token_pos(), type); |
7486 } else if (primary->IsSuper()) { | 7487 } else if (primary->IsSuper()) { |
7487 // Return "super" to handle unary super operator calls, | 7488 // Return "super" to handle unary super operator calls, |
7488 // or to report illegal use of "super" otherwise. | 7489 // or to report illegal use of "super" otherwise. |
7489 left = primary; | 7490 left = primary; |
7490 } else { | 7491 } else { |
7491 UNREACHABLE(); // Internal parser error. | 7492 UNREACHABLE(); // Internal parser error. |
7492 } | 7493 } |
7493 } | 7494 } |
7494 // Done parsing selectors. | 7495 // Done parsing selectors. |
7495 return left; | 7496 return left; |
(...skipping 2198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9694 void Parser::SkipQualIdent() { | 9695 void Parser::SkipQualIdent() { |
9695 ASSERT(IsIdentifier()); | 9696 ASSERT(IsIdentifier()); |
9696 ConsumeToken(); | 9697 ConsumeToken(); |
9697 if (CurrentToken() == Token::kPERIOD) { | 9698 if (CurrentToken() == Token::kPERIOD) { |
9698 ConsumeToken(); // Consume the kPERIOD token. | 9699 ConsumeToken(); // Consume the kPERIOD token. |
9699 ExpectIdentifier("identifier expected after '.'"); | 9700 ExpectIdentifier("identifier expected after '.'"); |
9700 } | 9701 } |
9701 } | 9702 } |
9702 | 9703 |
9703 } // namespace dart | 9704 } // namespace dart |
OLD | NEW |