Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(977)

Side by Side Diff: runtime/vm/parser.cc

Issue 2220883004: Use metadata annotation @patch for patch classes (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: wip Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« runtime/bin/common_patch.dart ('K') | « runtime/vm/parser.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 4527 matching lines...) Expand 10 before | Expand all | Expand 10 after
4538 } 4538 }
4539 4539
4540 4540
4541 void Parser::ParseClassDeclaration(const GrowableObjectArray& pending_classes, 4541 void Parser::ParseClassDeclaration(const GrowableObjectArray& pending_classes,
4542 const Object& tl_owner, 4542 const Object& tl_owner,
4543 TokenPosition metadata_pos) { 4543 TokenPosition metadata_pos) {
4544 TRACE_PARSER("ParseClassDeclaration"); 4544 TRACE_PARSER("ParseClassDeclaration");
4545 bool is_patch = false; 4545 bool is_patch = false;
4546 bool is_abstract = false; 4546 bool is_abstract = false;
4547 TokenPosition declaration_pos = 4547 TokenPosition declaration_pos =
4548 metadata_pos.IsReal() ? metadata_pos : TokenPos(); 4548 metadata_pos.IsReal() ? metadata_pos : TokenPos();
4549 if (is_patch_source() && 4549 if (is_patch_source() && IsPatchAnnotation(metadata_pos)) {
4550 is_patch = true;
4551 metadata_pos = TokenPosition::kNoSource;
4552 declaration_pos = TokenPos();
4553 } else if (is_patch_source() &&
4550 (CurrentToken() == Token::kIDENT) && 4554 (CurrentToken() == Token::kIDENT) &&
4551 CurrentLiteral()->Equals("patch")) { 4555 CurrentLiteral()->Equals("patch")) {
4556 ReportWarning("deprecated use of patch annotation");
kasperl 2016/08/09 11:48:09 patch annotation -> patch "keyword"?
hausner 2016/08/09 15:48:45 Done. This legacy support and warning should go aw
4552 ConsumeToken(); 4557 ConsumeToken();
4553 is_patch = true; 4558 is_patch = true;
4554 } else if (CurrentToken() == Token::kABSTRACT) { 4559 } else if (CurrentToken() == Token::kABSTRACT) {
4555 is_abstract = true; 4560 is_abstract = true;
4556 ConsumeToken(); 4561 ConsumeToken();
4557 } 4562 }
4558 ExpectToken(Token::kCLASS); 4563 ExpectToken(Token::kCLASS);
4559 const TokenPosition classname_pos = TokenPos(); 4564 const TokenPosition classname_pos = TokenPos();
4560 String& class_name = *ExpectUserDefinedTypeIdentifier("class name expected"); 4565 String& class_name = *ExpectUserDefinedTypeIdentifier("class name expected");
4561 if (FLAG_trace_parser) { 4566 if (FLAG_trace_parser) {
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
5257 if (token_kind_ == Token::kGT) { 5262 if (token_kind_ == Token::kGT) {
5258 ConsumeToken(); 5263 ConsumeToken();
5259 } else if (token_kind_ == Token::kSHR) { 5264 } else if (token_kind_ == Token::kSHR) {
5260 token_kind_ = Token::kGT; 5265 token_kind_ = Token::kGT;
5261 } else { 5266 } else {
5262 UNREACHABLE(); 5267 UNREACHABLE();
5263 } 5268 }
5264 } 5269 }
5265 5270
5266 5271
5272 bool Parser::IsPatchAnnotation(TokenPosition pos) {
5273 if (pos == TokenPosition::kNoSource) {
5274 return false;
5275 }
5276 TokenPosition saved_pos = TokenPos();
5277 SetPosition(pos);
5278 ExpectToken(Token::kAT);
5279 bool is_patch = IsSymbol(Symbols::Patch());
5280 SetPosition(saved_pos);
5281 return is_patch;
5282 }
5283
5284
5267 TokenPosition Parser::SkipMetadata() { 5285 TokenPosition Parser::SkipMetadata() {
5268 if (CurrentToken() != Token::kAT) { 5286 if (CurrentToken() != Token::kAT) {
5269 return TokenPosition::kNoSource; 5287 return TokenPosition::kNoSource;
5270 } 5288 }
5271 TokenPosition metadata_pos = TokenPos(); 5289 TokenPosition metadata_pos = TokenPos();
5272 while (CurrentToken() == Token::kAT) { 5290 while (CurrentToken() == Token::kAT) {
5273 ConsumeToken(); 5291 ConsumeToken();
5274 ExpectIdentifier("identifier expected"); 5292 ExpectIdentifier("identifier expected");
5275 if (CurrentToken() == Token::kPERIOD) { 5293 if (CurrentToken() == Token::kPERIOD) {
5276 ConsumeToken(); 5294 ConsumeToken();
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
5599 5617
5600 void Parser::ParseTopLevelFunction(TopLevel* top_level, 5618 void Parser::ParseTopLevelFunction(TopLevel* top_level,
5601 const Object& owner, 5619 const Object& owner,
5602 TokenPosition metadata_pos) { 5620 TokenPosition metadata_pos) {
5603 TRACE_PARSER("ParseTopLevelFunction"); 5621 TRACE_PARSER("ParseTopLevelFunction");
5604 const TokenPosition decl_begin_pos = TokenPos(); 5622 const TokenPosition decl_begin_pos = TokenPos();
5605 AbstractType& result_type = Type::Handle(Z, Type::DynamicType()); 5623 AbstractType& result_type = Type::Handle(Z, Type::DynamicType());
5606 const bool is_static = true; 5624 const bool is_static = true;
5607 bool is_external = false; 5625 bool is_external = false;
5608 bool is_patch = false; 5626 bool is_patch = false;
5609 if (is_patch_source() && 5627 if (is_patch_source() && IsPatchAnnotation(metadata_pos)) {
5628 is_patch = true;
5629 metadata_pos = TokenPosition::kNoSource;
5630 } else if (is_patch_source() &&
5610 (CurrentToken() == Token::kIDENT) && 5631 (CurrentToken() == Token::kIDENT) &&
5611 CurrentLiteral()->Equals("patch") && 5632 CurrentLiteral()->Equals("patch") &&
5612 (LookaheadToken(1) != Token::kLPAREN)) { 5633 (LookaheadToken(1) != Token::kLPAREN)) {
5634 ReportWarning("deprecated use of patch annotation");
5613 ConsumeToken(); 5635 ConsumeToken();
5614 is_patch = true; 5636 is_patch = true;
5615 } else if (CurrentToken() == Token::kEXTERNAL) { 5637 } else if (CurrentToken() == Token::kEXTERNAL) {
5616 ConsumeToken(); 5638 ConsumeToken();
5617 is_external = true; 5639 is_external = true;
5618 } 5640 }
5619 if (CurrentToken() == Token::kVOID) { 5641 if (CurrentToken() == Token::kVOID) {
5620 ConsumeToken(); 5642 ConsumeToken();
5621 result_type = Type::VoidType(); 5643 result_type = Type::VoidType();
5622 } else { 5644 } else {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
5722 5744
5723 void Parser::ParseTopLevelAccessor(TopLevel* top_level, 5745 void Parser::ParseTopLevelAccessor(TopLevel* top_level,
5724 const Object& owner, 5746 const Object& owner,
5725 TokenPosition metadata_pos) { 5747 TokenPosition metadata_pos) {
5726 TRACE_PARSER("ParseTopLevelAccessor"); 5748 TRACE_PARSER("ParseTopLevelAccessor");
5727 const TokenPosition decl_begin_pos = TokenPos(); 5749 const TokenPosition decl_begin_pos = TokenPos();
5728 const bool is_static = true; 5750 const bool is_static = true;
5729 bool is_external = false; 5751 bool is_external = false;
5730 bool is_patch = false; 5752 bool is_patch = false;
5731 AbstractType& result_type = AbstractType::Handle(Z); 5753 AbstractType& result_type = AbstractType::Handle(Z);
5732 if (is_patch_source() && 5754 if (is_patch_source() && IsPatchAnnotation(metadata_pos)) {
5755 is_patch = true;
5756 metadata_pos = TokenPosition::kNoSource;
5757 } else if (is_patch_source() &&
5733 (CurrentToken() == Token::kIDENT) && 5758 (CurrentToken() == Token::kIDENT) &&
5734 CurrentLiteral()->Equals("patch")) { 5759 CurrentLiteral()->Equals("patch")) {
5760 ReportWarning("deprecated use of patch annotation");
5735 ConsumeToken(); 5761 ConsumeToken();
5736 is_patch = true; 5762 is_patch = true;
5737 } else if (CurrentToken() == Token::kEXTERNAL) { 5763 } else if (CurrentToken() == Token::kEXTERNAL) {
5738 ConsumeToken(); 5764 ConsumeToken();
5739 is_external = true; 5765 is_external = true;
5740 } 5766 }
5741 bool is_getter = (CurrentToken() == Token::kGET); 5767 bool is_getter = (CurrentToken() == Token::kGET);
5742 if (CurrentToken() == Token::kGET || 5768 if (CurrentToken() == Token::kGET ||
5743 CurrentToken() == Token::kSET) { 5769 CurrentToken() == Token::kSET) {
5744 ConsumeToken(); 5770 ConsumeToken();
(...skipping 8987 matching lines...) Expand 10 before | Expand all | Expand 10 after
14732 const ArgumentListNode& function_args, 14758 const ArgumentListNode& function_args,
14733 const LocalVariable* temp_for_last_arg, 14759 const LocalVariable* temp_for_last_arg,
14734 bool is_super_invocation) { 14760 bool is_super_invocation) {
14735 UNREACHABLE(); 14761 UNREACHABLE();
14736 return NULL; 14762 return NULL;
14737 } 14763 }
14738 14764
14739 } // namespace dart 14765 } // namespace dart
14740 14766
14741 #endif // DART_PRECOMPILED_RUNTIME 14767 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW
« runtime/bin/common_patch.dart ('K') | « runtime/vm/parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698