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

Unified Diff: runtime/vm/compiler.cc

Issue 260713008: Add support for javascript incompatibility warnings. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 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/compiler.cc
===================================================================
--- runtime/vm/compiler.cc (revision 36000)
+++ runtime/vm/compiler.cc (working copy)
@@ -59,6 +59,8 @@
"Enable compiler verification assertions");
DECLARE_FLAG(bool, trace_failed_optimization_attempts);
+DECLARE_FLAG(bool, warn_on_javascript_compatibility);
+DECLARE_FLAG(bool, warning_as_error);
// Compile a function. Should call only if the function has not been compiled.
// Arg0: function object.
@@ -596,10 +598,11 @@
is_compiled = true;
done = true;
} else {
- // We bailed out.
+ // We bailed out or we encountered an error.
+ const Error& error = Error::Handle(
+ isolate->object_store()->sticky_error());
- if (isolate->object_store()->sticky_error() ==
- Object::branch_offset_error().raw()) {
+ if (error.raw() == Object::branch_offset_error().raw()) {
// Compilation failed due to an out of range branch offset in the
// assembler. We try again (done = false) with far branches enabled.
done = false;
@@ -610,15 +613,19 @@
// try again (done = true), and indicate that we did not finish
// compiling (is_compiled = false).
if (FLAG_trace_bailout) {
- const Error& bailout_error = Error::Handle(
- isolate->object_store()->sticky_error());
- OS::Print("%s\n", bailout_error.ToErrorCString());
+ OS::Print("%s\n", error.ToErrorCString());
}
done = true;
- ASSERT(optimized);
+ ASSERT(optimized ||
+ (FLAG_warn_on_javascript_compatibility &&
+ FLAG_warning_as_error));
}
- isolate->object_store()->clear_sticky_error();
+ // Clear the error if it was not a real error, but just a bailout.
+ if (error.IsLanguageError() &&
+ (LanguageError::Cast(error).kind() == LanguageError::kBailout)) {
+ isolate->object_store()->clear_sticky_error();
+ }
is_compiled = false;
}
// Reset global isolate state.
@@ -791,19 +798,29 @@
const bool success =
CompileParsedFunctionHelper(parsed_function, optimized, osr_id);
- if (optimized && !success) {
- // Optimizer bailed out. Disable optimizations and to never try again.
- if (FLAG_trace_compiler) {
- OS::Print("--> disabling optimizations for '%s'\n",
- function.ToFullyQualifiedCString());
- } else if (FLAG_trace_failed_optimization_attempts) {
- OS::Print("Cannot optimize: %s\n", function.ToFullyQualifiedCString());
+ if (!success) {
+ if (optimized) {
+ // Optimizer bailed out. Disable optimizations and to never try again.
+ if (FLAG_trace_compiler) {
+ OS::Print("--> disabling optimizations for '%s'\n",
+ function.ToFullyQualifiedCString());
+ } else if (FLAG_trace_failed_optimization_attempts) {
+ OS::Print("Cannot optimize: %s\n",
+ function.ToFullyQualifiedCString());
+ }
+ function.SetIsOptimizable(false);
+ return Error::null();
}
- function.SetIsOptimizable(false);
- return Error::null();
+ // So far, the only possible real error is a JS warning reported as error.
+ ASSERT(FLAG_warn_on_javascript_compatibility && FLAG_warning_as_error);
+ Error& error = Error::Handle();
+ // We got an error during compilation.
+ error = isolate->object_store()->sticky_error();
+ ASSERT(!error.IsNull());
+ isolate->object_store()->clear_sticky_error();
+ return error.raw();
}
- ASSERT(success);
per_compile_timer.Stop();
if (FLAG_trace_compiler) {
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/exceptions.h » ('j') | runtime/vm/symbols.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698