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

Unified Diff: runtime/vm/class_finalizer.cc

Issue 25284003: Fix expression evaluation in library context (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 3 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 | « runtime/vm/class_finalizer.h ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/class_finalizer.cc
===================================================================
--- runtime/vm/class_finalizer.cc (revision 28060)
+++ runtime/vm/class_finalizer.cc (working copy)
@@ -337,7 +337,7 @@
// Replace the type with a malformed type and compile a throw when called.
type = NewFinalizedMalformedType(
Error::Handle(), // No previous error.
- cls,
+ Script::Handle(cls.script()),
factory.token_pos(),
"factory may not redirect to 'dynamic'");
factory.SetRedirectionType(type);
@@ -364,7 +364,7 @@
// Replace the type with a malformed type and compile a throw when called.
type = NewFinalizedMalformedType(
Error::Handle(), // No previous error.
- cls,
+ Script::Handle(target_class.script()),
factory.token_pos(),
"class '%s' has no constructor or factory named '%s'",
target_class_name.ToCString(),
@@ -378,8 +378,9 @@
// Verify that the target is compatible with the redirecting factory.
Error& error = Error::Handle();
if (!target.HasCompatibleParametersWith(factory, &error)) {
+ const Script& script = Script::Handle(target_class.script());
type = NewFinalizedMalformedType(
- error, target_class, target.token_pos(),
+ error, script, target.token_pos(),
"constructor '%s' has incompatible parameters with "
"redirecting factory '%s'",
String::Handle(target.name()).ToCString(),
@@ -428,7 +429,8 @@
if (malformed_error.IsNull()) {
target_type ^= FinalizeType(cls, target_type, kCanonicalize);
} else {
- FinalizeMalformedType(malformed_error, cls, target_type,
+ const Script& script = Script::Handle(target_class.script());
+ FinalizeMalformedType(malformed_error, script, target_type,
"cannot resolve redirecting factory");
target_target = Function::null();
}
@@ -471,7 +473,7 @@
// The type class could not be resolved. The type is malformed.
FinalizeMalformedType(
Error::Handle(), // No previous error.
- cls,
+ Script::Handle(cls.script()),
parameterized_type,
"cannot resolve class '%s' from '%s'",
String::Handle(unresolved_class.Name()).ToCString(),
@@ -906,7 +908,7 @@
parameterized_type.UserVisibleName());
const Type& malformed_bound = Type::Handle(
NewFinalizedMalformedType(bound_error,
- cls,
+ Script::Handle(cls.script()),
parameterized_type.token_pos(),
"type '%s' has an out of bound type argument",
parameterized_type_name.ToCString()));
@@ -2446,12 +2448,11 @@
// Either report an error or mark the type as malformed.
void ClassFinalizer::ReportMalformedType(const Error& prev_error,
- const Class& cls,
+ const Script& script,
const Type& type,
const char* format,
va_list args) {
LanguageError& error = LanguageError::Handle();
- const Script& script = Script::Handle(cls.script());
if (prev_error.IsNull()) {
error ^= Parser::FormatError(
script, type.token_pos(), "Error", format, args);
@@ -2479,7 +2480,7 @@
RawType* ClassFinalizer::NewFinalizedMalformedType(const Error& prev_error,
- const Class& cls,
+ const Script& script,
intptr_t type_pos,
const char* format, ...) {
va_list args;
@@ -2490,7 +2491,7 @@
type_pos));
const Type& type = Type::Handle(
Type::New(unresolved_class, TypeArguments::Handle(), type_pos));
- ReportMalformedType(prev_error, cls, type, format, args);
+ ReportMalformedType(prev_error, script, type, format, args);
va_end(args);
ASSERT(type.IsMalformed());
ASSERT(type.IsFinalized());
@@ -2499,12 +2500,12 @@
void ClassFinalizer::FinalizeMalformedType(const Error& prev_error,
- const Class& cls,
+ const Script& script,
const Type& type,
const char* format, ...) {
va_list args;
va_start(args, format);
- ReportMalformedType(prev_error, cls, type, format, args);
+ ReportMalformedType(prev_error, script, type, format, args);
va_end(args);
}
« no previous file with comments | « runtime/vm/class_finalizer.h ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698