| Index: runtime/vm/flow_graph_compiler_ia32.cc
|
| diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
|
| index efb9b7b1d9c88e93f8999f384cbfcf0e15996ace..b39fdbdc8a5d9715ed06a1b758331041154d3ae0 100644
|
| --- a/runtime/vm/flow_graph_compiler_ia32.cc
|
| +++ b/runtime/vm/flow_graph_compiler_ia32.cc
|
| @@ -24,6 +24,7 @@ DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
|
| DECLARE_FLAG(int, optimization_counter_threshold);
|
| DECLARE_FLAG(bool, print_ast);
|
| DECLARE_FLAG(bool, print_scopes);
|
| +DECLARE_FLAG(bool, eliminate_type_checks);
|
|
|
|
|
| FlowGraphCompiler::~FlowGraphCompiler() {
|
| @@ -561,6 +562,16 @@ void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos,
|
| __ cmpl(EAX, raw_null);
|
| __ j(EQUAL, &is_assignable);
|
|
|
| + if (!FLAG_eliminate_type_checks) {
|
| + // If type checks are not eliminated during the graph building then
|
| + // a transition sentinel can be seen here.
|
| + const Immediate& raw_transition_sentinel =
|
| + Immediate(reinterpret_cast<intptr_t>(
|
| + Object::transition_sentinel().raw()));
|
| + __ cmpl(EAX, raw_transition_sentinel);
|
| + __ j(EQUAL, &is_assignable);
|
| + }
|
| +
|
| // Generate throw new TypeError() if the type is malformed.
|
| if (dst_type.IsMalformed()) {
|
| const Error& error = Error::Handle(dst_type.malformed_error());
|
|
|