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

Unified Diff: runtime/vm/parser.cc

Issue 217543004: VM: Evaluate metadata on a class in the scope of its library not the scope of the class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix status for dart2js and analyzer Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/parser.cc
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 88f4b3c4b83864e37e7726398a56d6a8349050f8..86e85b41f7cd4fa57fe7dc61d30521b5052d0e2f 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -3808,6 +3808,7 @@ void Parser::ParseClassMemberDefinition(ClassDesc* members,
void Parser::ParseClassDeclaration(const GrowableObjectArray& pending_classes,
+ const Class& toplevel_class,
intptr_t metadata_pos) {
TRACE_PARSER("ParseClassDeclaration");
bool is_patch = false;
@@ -3910,7 +3911,7 @@ void Parser::ParseClassDeclaration(const GrowableObjectArray& pending_classes,
cls.set_is_abstract();
}
if (metadata_pos >= 0) {
- library_.AddClassMetadata(cls, metadata_pos);
+ library_.AddClassMetadata(cls, toplevel_class, metadata_pos);
}
const bool is_mixin_declaration = (CurrentToken() == Token::kASSIGN);
@@ -4109,6 +4110,7 @@ void Parser::CheckConstructors(ClassDesc* class_desc) {
void Parser::ParseMixinAppAlias(
const GrowableObjectArray& pending_classes,
+ const Class& toplevel_class,
intptr_t metadata_pos) {
TRACE_PARSER("ParseMixinAppAlias");
const intptr_t classname_pos = TokenPos();
@@ -4161,7 +4163,7 @@ void Parser::ParseMixinAppAlias(
ExpectSemicolon();
pending_classes.Add(mixin_application, Heap::kOld);
if (metadata_pos >= 0) {
- library_.AddClassMetadata(mixin_application, metadata_pos);
+ library_.AddClassMetadata(mixin_application, toplevel_class, metadata_pos);
}
}
@@ -4207,6 +4209,7 @@ bool Parser::IsMixinAppAlias() {
void Parser::ParseTypedef(const GrowableObjectArray& pending_classes,
+ const Class& toplevel_class,
intptr_t metadata_pos) {
TRACE_PARSER("ParseTypedef");
ExpectToken(Token::kTYPEDEF);
@@ -4215,7 +4218,7 @@ void Parser::ParseTypedef(const GrowableObjectArray& pending_classes,
if (FLAG_warn_mixin_typedef) {
Warning("deprecated mixin application typedef");
}
- ParseMixinAppAlias(pending_classes, metadata_pos);
+ ParseMixinAppAlias(pending_classes, toplevel_class, metadata_pos);
return;
}
@@ -4322,7 +4325,9 @@ void Parser::ParseTypedef(const GrowableObjectArray& pending_classes,
ASSERT(!function_type_alias.is_finalized());
pending_classes.Add(function_type_alias, Heap::kOld);
if (metadata_pos >= 0) {
- library_.AddClassMetadata(function_type_alias, metadata_pos);
+ library_.AddClassMetadata(function_type_alias,
+ toplevel_class,
+ metadata_pos);
}
}
@@ -5182,17 +5187,17 @@ void Parser::ParseTopLevel() {
set_current_class(cls); // No current class.
intptr_t metadata_pos = SkipMetadata();
if (CurrentToken() == Token::kCLASS) {
- ParseClassDeclaration(pending_classes, metadata_pos);
+ ParseClassDeclaration(pending_classes, toplevel_class, metadata_pos);
} else if ((CurrentToken() == Token::kTYPEDEF) &&
(LookaheadToken(1) != Token::kLPAREN)) {
set_current_class(toplevel_class);
- ParseTypedef(pending_classes, metadata_pos);
+ ParseTypedef(pending_classes, toplevel_class, metadata_pos);
} else if ((CurrentToken() == Token::kABSTRACT) &&
(LookaheadToken(1) == Token::kCLASS)) {
- ParseClassDeclaration(pending_classes, metadata_pos);
+ ParseClassDeclaration(pending_classes, toplevel_class, metadata_pos);
} else if (is_patch_source() && IsLiteral("patch") &&
(LookaheadToken(1) == Token::kCLASS)) {
- ParseClassDeclaration(pending_classes, metadata_pos);
+ ParseClassDeclaration(pending_classes, toplevel_class, metadata_pos);
} else {
set_current_class(toplevel_class);
if (IsVariableDeclaration()) {

Powered by Google App Engine
This is Rietveld 408576698