mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 11:53:55 +00:00
Insert implicit downcasts for the conditions of do statements.
Change-Id: I8bfffa0796775434cea767ec9ad13cf5697812d2 Reviewed-on: https://dart-review.googlesource.com/23140 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
afbcb4a1fc
commit
501872471c
|
@ -614,8 +614,11 @@ class ShadowDoStatement extends DoStatement implements ShadowStatement {
|
|||
void _inferStatement(ShadowTypeInferrer inferrer) {
|
||||
inferrer.listener.doStatementEnter(this);
|
||||
inferrer.inferStatement(body);
|
||||
inferrer.inferExpression(
|
||||
condition, inferrer.coreTypes.boolClass.rawType, false);
|
||||
var boolType = inferrer.coreTypes.boolClass.rawType;
|
||||
var actualType =
|
||||
inferrer.inferExpression(condition, boolType, !inferrer.isTopLevel);
|
||||
inferrer.checkAssignability(
|
||||
boolType, actualType, condition, condition.fileOffset);
|
||||
inferrer.listener.doStatementExit(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_do: Crash
|
||||
runtime_checks/implicit_downcast_if: Crash
|
||||
runtime_checks/implicit_downcast_not: Crash
|
||||
runtime_checks_new/call_through_this: Crash
|
||||
|
|
|
@ -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_do: RuntimeError # Test exercises strong mode semantics
|
||||
runtime_checks/implicit_downcast_if: RuntimeError # Test exercises strong mode semantics
|
||||
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
|
||||
|
|
|
@ -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.
|
||||
|
||||
/*@testedFeatures=checks*/
|
||||
library test;
|
||||
|
||||
main() {
|
||||
Object o = 1;
|
||||
try {
|
||||
do {} while (o);
|
||||
throw 'no exception';
|
||||
} on TypeError {}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
library test;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
static method main() → dynamic {
|
||||
core::Object o = 1;
|
||||
try {
|
||||
do {
|
||||
}
|
||||
while (o)
|
||||
throw "no exception";
|
||||
}
|
||||
on core::TypeError catch(no-exception-var) {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
library test;
|
||||
import self as self;
|
||||
|
||||
static method main() → dynamic
|
||||
;
|
|
@ -0,0 +1,15 @@
|
|||
library test;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
static method main() → dynamic {
|
||||
core::Object o = 1;
|
||||
try {
|
||||
do {
|
||||
}
|
||||
while (o as{TypeError} core::bool)
|
||||
throw "no exception";
|
||||
}
|
||||
on core::TypeError catch(no-exception-var) {
|
||||
}
|
||||
}
|
14
tests/language_2/implicit_downcast_during_do_test.dart
Normal file
14
tests/language_2/implicit_downcast_during_do_test.dart
Normal 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 = false;
|
||||
do {} while (b); // No error
|
||||
b = new Object();
|
||||
Expect.throwsTypeError(() {
|
||||
do {} while (b);
|
||||
});
|
||||
}
|
|
@ -1078,6 +1078,7 @@ implicit_downcast_during_combiner_test: RuntimeError
|
|||
implicit_downcast_during_compound_assignment_test: RuntimeError
|
||||
implicit_downcast_during_conditional_expression_test: RuntimeError
|
||||
implicit_downcast_during_constructor_invocation_test: RuntimeError
|
||||
implicit_downcast_during_do_test: RuntimeError
|
||||
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
|
||||
implicit_downcast_during_if_null_assignment_test: RuntimeError
|
||||
implicit_downcast_during_if_statement_test: RuntimeError
|
||||
|
@ -2991,6 +2992,7 @@ implicit_downcast_during_assignment_test: RuntimeError
|
|||
implicit_downcast_during_combiner_test: RuntimeError
|
||||
implicit_downcast_during_compound_assignment_test: RuntimeError
|
||||
implicit_downcast_during_conditional_expression_test: RuntimeError
|
||||
implicit_downcast_during_do_test: RuntimeError
|
||||
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
|
||||
implicit_downcast_during_if_null_assignment_test: RuntimeError
|
||||
implicit_downcast_during_if_statement_test: RuntimeError
|
||||
|
|
|
@ -1343,7 +1343,6 @@ vm/regress_27201_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading k
|
|||
vm/regress_29145_test: Skip # Issue 29145
|
||||
vm/type_cast_vm_test: RuntimeError
|
||||
vm/type_vm_test/10: MissingCompileTimeError
|
||||
vm/type_vm_test/11: MissingCompileTimeError
|
||||
vm/type_vm_test/12: MissingCompileTimeError
|
||||
vm/type_vm_test/27: MissingCompileTimeError
|
||||
vm/type_vm_test/none: RuntimeError
|
||||
|
@ -2269,6 +2268,7 @@ implicit_downcast_during_assignment_test: Pass # Correctly passes.
|
|||
implicit_downcast_during_combiner_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_compound_assignment_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_conditional_expression_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_do_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_if_null_assignment_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_if_statement_test: Pass # Correctly passes.
|
||||
implicit_downcast_during_list_literal_test: Pass # Correctly passes.
|
||||
|
@ -3285,6 +3285,7 @@ implicit_downcast_during_assignment_test: RuntimeError
|
|||
implicit_downcast_during_combiner_test: RuntimeError
|
||||
implicit_downcast_during_compound_assignment_test: RuntimeError
|
||||
implicit_downcast_during_conditional_expression_test: RuntimeError
|
||||
implicit_downcast_during_do_test: RuntimeError
|
||||
implicit_downcast_during_if_null_assignment_test: RuntimeError
|
||||
implicit_downcast_during_if_statement_test: RuntimeError
|
||||
implicit_downcast_during_list_literal_test: RuntimeError
|
||||
|
|
|
@ -1035,6 +1035,7 @@ implicit_downcast_during_combiner_test: RuntimeError
|
|||
implicit_downcast_during_compound_assignment_test: RuntimeError
|
||||
implicit_downcast_during_conditional_expression_test: RuntimeError
|
||||
implicit_downcast_during_constructor_invocation_test: RuntimeError
|
||||
implicit_downcast_during_do_test: RuntimeError
|
||||
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
|
||||
implicit_downcast_during_if_null_assignment_test: RuntimeError
|
||||
implicit_downcast_during_if_statement_test: RuntimeError
|
||||
|
|
|
@ -1013,6 +1013,7 @@ implicit_downcast_during_assignment_test: RuntimeError
|
|||
implicit_downcast_during_combiner_test: RuntimeError
|
||||
implicit_downcast_during_compound_assignment_test: RuntimeError
|
||||
implicit_downcast_during_conditional_expression_test: RuntimeError
|
||||
implicit_downcast_during_do_test: RuntimeError
|
||||
implicit_downcast_during_if_null_assignment_test: RuntimeError
|
||||
implicit_downcast_during_if_statement_test: RuntimeError
|
||||
implicit_downcast_during_list_literal_test: RuntimeError
|
||||
|
|
Loading…
Reference in a new issue