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

Unified Diff: runtime/vm/parser.cc

Issue 1037343002: Mark code when it instantiates an unloaded deferred type (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 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
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 44751)
+++ runtime/vm/parser.cc (working copy)
@@ -11910,15 +11910,28 @@
"using '%s' in this context is invalid",
type_name.ToCString());
}
- if (!prefix.IsNull() && prefix.is_deferred_load() && !allow_deferred_type) {
- ParseTypeArguments(ClassFinalizer::kIgnore);
- return ClassFinalizer::NewFinalizedMalformedType(
- Error::Handle(Z), // No previous error.
- script_,
- ident_pos,
- "using deferred type '%s.%s' is invalid",
- String::Handle(Z, prefix.name()).ToCString(),
- type_name.ToCString());
+ if (!prefix.IsNull() && prefix.is_deferred_load()) {
+ // If deferred prefixes are allowed but it is not yet loaded,
+ // remember that this function depends on the prefix.
+ if (allow_deferred_type && !prefix.is_loaded()) {
+ ASSERT(parsed_function() != NULL);
+ parsed_function()->AddDeferredPrefix(prefix);
+ }
+ // If the deferred prefixes are not allowed, or if the prefix
+ // is not yet loaded, return a malformed type. Otherwise, handle
+ // resolution below, as needed.
+ if (!prefix.is_loaded() || !allow_deferred_type) {
+ ParseTypeArguments(ClassFinalizer::kIgnore);
+ return ClassFinalizer::NewFinalizedMalformedType(
+ Error::Handle(Z), // No previous error.
+ script_,
+ ident_pos,
+ !prefix.is_loaded()
+ ? "deferred type '%s.%s' is not yet loaded"
+ : "using deferred type '%s.%s' is invalid",
+ String::Handle(Z, prefix.name()).ToCString(),
+ type_name.ToCString());
+ }
}
}
Object& type_class = Object::Handle(Z);
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698