Insert implicit downcasts for the operands of "not" expressions.

Tests that have begun failing due to this change are marked with a
reference to issue #31402.

Change-Id: I3d29a1058af5ba43bc2868d85de1e9d87b666ee2
Reviewed-on: https://dart-review.googlesource.com/23080
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Paul Berry 2017-11-22 17:55:27 +00:00 committed by commit-bot@chromium.org
parent ad7bc62921
commit 6786f1944a
12 changed files with 69 additions and 2 deletions

View file

@ -1360,7 +1360,9 @@ class ShadowNot extends Not implements ShadowExpression {
typeNeeded = inferrer.listener.notEnter(this, typeContext) || typeNeeded;
// First infer the receiver so we can look up the method that was invoked.
var boolType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(operand, boolType, false);
var actualType =
inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
inferrer.checkAssignability(boolType, actualType, operand, fileOffset);
DartType inferredType = typeNeeded ? boolType : null;
inferrer.listener.notExit(this, inferredType);
return inferredType;

View file

@ -465,6 +465,7 @@ runtime_checks/covariant_generic_parameter_tear_off: Crash
runtime_checks/covariant_keyword: Crash
runtime_checks/covariant_setter: Crash
runtime_checks/forwarding_stub_with_default_values: Crash
runtime_checks/implicit_downcast_not: Crash
runtime_checks_new/call_through_this: Crash
runtime_checks_new/contravariant_combiner: Crash
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: Crash

View file

@ -94,6 +94,7 @@ regress/issue_29982: Fail # Issue 29982.
regress/issue_30836: RuntimeError # Issue 30836.
regress/issue_31155: Crash # Issue 31155.
runtime_checks/implicit_downcast_not: RuntimeError # Test exercises strong mode semantics
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError # Test exercises strong mode semantics
runtime_checks_new/mixin_forwarding_stub_field: RuntimeError # Test exercises strong mode semantics
runtime_checks_new/mixin_forwarding_stub_getter: RuntimeError # Test exercises strong mode semantics

View file

@ -0,0 +1,13 @@
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/*@testedFeatures=checks*/
library test;
void main() {
try {
!1;
throw 'no exception';
} on TypeError {}
}

View file

@ -0,0 +1,12 @@
library test;
import self as self;
import "dart:core" as core;
static method main() → void {
try {
!1;
throw "no exception";
}
on core::TypeError catch(no-exception-var) {
}
}

View file

@ -0,0 +1,5 @@
library test;
import self as self;
static method main() → void
;

View file

@ -0,0 +1,12 @@
library test;
import self as self;
import "dart:core" as core;
static method main() → void {
try {
!(1 as{TypeError} core::bool);
throw "no exception";
}
on core::TypeError catch(no-exception-var) {
}
}

View file

@ -0,0 +1,14 @@
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
void main() {
Object b = true;
!b; // No error
b = new Object();
Expect.throwsTypeError(() {
!b;
});
}

View file

@ -1084,6 +1084,7 @@ implicit_downcast_during_invocation_test: RuntimeError
implicit_downcast_during_logical_expression_test: RuntimeError
implicit_downcast_during_map_literal_test: RuntimeError
implicit_downcast_during_method_invocation_test: RuntimeError
implicit_downcast_during_not_test: RuntimeError
implicit_downcast_during_null_aware_method_invocation_test: RuntimeError
implicit_downcast_during_return_test: RuntimeError
implicit_downcast_during_static_method_invocation_test: RuntimeError
@ -3000,6 +3001,7 @@ implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_logical_expression_test: RuntimeError
implicit_downcast_during_map_literal_test: RuntimeError
implicit_downcast_during_method_invocation_test: RuntimeError
implicit_downcast_during_not_test: RuntimeError
implicit_downcast_during_null_aware_method_invocation_test: RuntimeError
implicit_downcast_during_return_test: RuntimeError
implicit_downcast_during_static_method_invocation_test: RuntimeError

View file

@ -243,6 +243,7 @@ conditional_property_assignment_test/05: MissingCompileTimeError
conditional_property_assignment_test/06: MissingCompileTimeError
conditional_property_assignment_test/10: MissingCompileTimeError
conditional_property_assignment_test/11: MissingCompileTimeError
conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
config_import_corelib_test: RuntimeError # KernelVM bug: Configurable imports.
config_import_test: RuntimeError # KernelVM bug: Configurable imports.
const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
@ -1343,7 +1344,6 @@ vm/optimized_guarded_field_isolates_test: RuntimeError # Issue 31402 (Variable d
vm/regress_27201_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 28335.
vm/regress_29145_test: Skip # Issue 29145
vm/type_cast_vm_test: RuntimeError
vm/type_vm_test/09: MissingCompileTimeError
vm/type_vm_test/10: MissingCompileTimeError
vm/type_vm_test/11: MissingCompileTimeError
vm/type_vm_test/12: MissingCompileTimeError
@ -1792,6 +1792,7 @@ conditional_property_assignment_test/05: MissingCompileTimeError
conditional_property_assignment_test/06: MissingCompileTimeError
conditional_property_assignment_test/10: MissingCompileTimeError
conditional_property_assignment_test/11: MissingCompileTimeError
conditional_rewrite_test: RuntimeError # Issue 31402 (Not)
config_import_corelib_test: RuntimeError # KernelVM bug: Configurable imports.
config_import_test: RuntimeError # KernelVM bug: Configurable imports.
const_constructor2_test/11: CompileTimeError # Issue 31402 (Invocation arguments)
@ -2275,6 +2276,7 @@ implicit_downcast_during_if_null_assignment_test: Pass # Correctly passes.
implicit_downcast_during_list_literal_test: Pass # Correctly passes.
implicit_downcast_during_logical_expression_test: Pass # Correctly passes.
implicit_downcast_during_map_literal_test: Pass # Correctly passes.
implicit_downcast_during_not_test: Pass # Correctly passes.
implicit_downcast_during_return_async_test: Pass # Correctly passes.
implicit_downcast_during_return_test: Pass # Correctly passes.
implicit_downcast_during_variable_declaration_test: Pass # Correctly passes.
@ -3291,6 +3293,7 @@ implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_list_literal_test: RuntimeError
implicit_downcast_during_logical_expression_test: RuntimeError
implicit_downcast_during_map_literal_test: RuntimeError
implicit_downcast_during_not_test: RuntimeError
implicit_downcast_during_return_async_test: RuntimeError
implicit_downcast_during_return_test: RuntimeError
implicit_downcast_during_variable_declaration_test: RuntimeError

View file

@ -1042,6 +1042,7 @@ implicit_downcast_during_list_literal_test: RuntimeError
implicit_downcast_during_logical_expression_test: RuntimeError
implicit_downcast_during_map_literal_test: RuntimeError
implicit_downcast_during_method_invocation_test: RuntimeError
implicit_downcast_during_not_test: RuntimeError
implicit_downcast_during_null_aware_method_invocation_test: RuntimeError
implicit_downcast_during_redirecting_initializer_test: RuntimeError
implicit_downcast_during_return_async_test: RuntimeError

View file

@ -1017,6 +1017,7 @@ implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_list_literal_test: RuntimeError
implicit_downcast_during_logical_expression_test: RuntimeError
implicit_downcast_during_map_literal_test: RuntimeError
implicit_downcast_during_not_test: RuntimeError
implicit_downcast_during_return_async_test: RuntimeError
implicit_downcast_during_return_test: RuntimeError
implicit_downcast_during_variable_declaration_test: RuntimeError