Skip to content

Commit b20c35c

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
[cfe] Handle typed variable declarations during top-level inference
Fixes flutter/flutter#50908 Change-Id: Ia7a04351eb9f2a557bb70c96c7938a28c8cbc835 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136127 Reviewed-by: Dmitry Stefantsov <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 3c9f52a commit b20c35c

6 files changed

Lines changed: 55 additions & 0 deletions

pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1874,6 +1874,10 @@ class TypeInferrerImpl implements TypeInferrer {
18741874
/// Modifies a type as appropriate when inferring a declared variable's type.
18751875
DartType inferDeclarationType(DartType initializerType,
18761876
{bool forSyntheticVariable: false}) {
1877+
if (initializerType == null) {
1878+
assert(isTopLevel, "No initializer type provided.");
1879+
return null;
1880+
}
18771881
if (initializerType is BottomType ||
18781882
(initializerType is InterfaceType &&
18791883
initializerType.classNode == coreTypes.nullClass)) {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
class Class {
6+
var map = {
7+
'foo': (String a) {
8+
int c = a.length;
9+
}
10+
};
11+
}
12+
13+
main() {}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class Class extends core::Object {
6+
field core::Map<core::String*, (core::String*) →* core::Null?>* map;
7+
synthetic constructor •() → self::Class*
8+
;
9+
}
10+
static method main() → dynamic
11+
;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class Class extends core::Object {
6+
field core::Map<core::String*, (core::String*) →* core::Null?>* map = <core::String*, (core::String*) →* core::Null?>{"foo": (core::String* a) → core::Null? {
7+
core::int* c = a.{core::String::length};
8+
}};
9+
synthetic constructor •() → self::Class*
10+
: super core::Object::•()
11+
;
12+
}
13+
static method main() → dynamic {}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
class Class extends core::Object {
6+
field core::Map<core::String*, (core::String*) →* core::Null?>* map = <core::String*, (core::String*) →* core::Null?>{"foo": (core::String* a) → core::Null? {
7+
core::int* c = a.{core::String::length};
8+
}};
9+
synthetic constructor •() → self::Class*
10+
: super core::Object::•()
11+
;
12+
}
13+
static method main() → dynamic {}

pkg/front_end/testcases/text_serialization.status

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ general/import_conflicting_type_member: TextSerializationFailure
206206
general/import_conflicting_types: TextSerializationFailure
207207
general/incomplete_field_formal_parameter: TextSerializationFailure # Was: RuntimeError
208208
general/infer_field_from_multiple: TypeCheckError
209+
general/infer_map_literal_with_closure: TextSerializationFailure
209210
general/interface_contravariant_from_class: TextSerializationFailure
210211
general/interface_covariantImpl_from_class: TextSerializationFailure
211212
general/interface_covariantInterface_from_class: TextSerializationFailure

0 commit comments

Comments
 (0)