Skip to content

Commit 28a3c47

Browse files
johnniwintherCommit Queue
authored and
Commit Queue
committed
Revert "[cfe] Support external inline class fields"
This reverts commit 335d3af. Reason for revert: Causes NPE in dart2js Original change's description: > [cfe] Support external inline class fields > > Change-Id: I0c16dc5c32aa8afb285b425c826eee8b8534c734 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/278507 > Commit-Queue: Johnni Winther <[email protected]> > Reviewed-by: Jens Johansen <[email protected]> [email protected],[email protected],[email protected] Change-Id: I0826daf1ee9f1eb4c1489a239b795b13028e6a11 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/278700 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Ivan Inozemtsev <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 5b234e4 commit 28a3c47

9 files changed

+265
-202
lines changed

pkg/front_end/lib/src/fasta/source/source_field_builder.dart

Lines changed: 22 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import '../type_inference/type_inference_engine.dart'
3838
show IncludesTypeParametersNonCovariantly;
3939
import '../util/helpers.dart' show DelayedActionPerformer;
4040
import 'source_class_builder.dart';
41-
import 'source_inline_class_builder.dart';
4241
import 'source_member_builder.dart';
4342

4443
class SourceFieldBuilder extends SourceMemberBuilderImpl
@@ -1567,7 +1566,6 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
15671566
final bool isAbstract;
15681567
final bool isExternal;
15691568
final bool _isExtensionInstanceMember;
1570-
final bool _isInlineClassInstanceMember;
15711569

15721570
late Procedure _getter;
15731571
Procedure? _setter;
@@ -1599,11 +1597,8 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
15991597
assert(isNonNullableByDefault != null),
16001598
_isExtensionInstanceMember = isExternal &&
16011599
nameScheme.isExtensionMember &&
1602-
nameScheme.isInstanceMember,
1603-
_isInlineClassInstanceMember = isExternal &&
1604-
nameScheme.isInlineClassMember &&
16051600
nameScheme.isInstanceMember {
1606-
if (_isExtensionInstanceMember || _isInlineClassInstanceMember) {
1601+
if (_isExtensionInstanceMember) {
16071602
_getter = new Procedure(
16081603
dummyName,
16091604
ProcedureKind.Method,
@@ -1695,26 +1690,17 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
16951690
"Type has already been computed for field ${_fieldBuilder.name}.");
16961691
_type = value;
16971692
if (value is! InferredType) {
1698-
if (_isExtensionInstanceMember || _isInlineClassInstanceMember) {
1699-
DartType thisParameterType;
1700-
List<TypeParameter> typeParameters;
1701-
if (_isExtensionInstanceMember) {
1702-
SourceExtensionBuilder extensionBuilder =
1703-
_fieldBuilder.parent as SourceExtensionBuilder;
1704-
thisParameterType = extensionBuilder.extension.onType;
1705-
typeParameters = extensionBuilder.extension.typeParameters;
1706-
} else {
1707-
SourceInlineClassBuilder inlineClassBuilder =
1708-
_fieldBuilder.parent as SourceInlineClassBuilder;
1709-
thisParameterType =
1710-
inlineClassBuilder.inlineClass.declaredRepresentationType;
1711-
typeParameters = inlineClassBuilder.inlineClass.typeParameters;
1712-
}
1693+
if (_isExtensionInstanceMember) {
1694+
SourceExtensionBuilder extensionBuilder =
1695+
_fieldBuilder.parent as SourceExtensionBuilder;
1696+
DartType onType = extensionBuilder.extension.onType;
1697+
List<TypeParameter> typeParameters =
1698+
extensionBuilder.extension.typeParameters;
17131699
if (typeParameters.isNotEmpty) {
17141700
FreshTypeParameters getterTypeParameters =
17151701
getFreshTypeParameters(typeParameters);
17161702
_getter.function.positionalParameters.first.type =
1717-
getterTypeParameters.substitute(thisParameterType);
1703+
getterTypeParameters.substitute(onType);
17181704
_getter.function.returnType = getterTypeParameters.substitute(value);
17191705
_getter.function.typeParameters =
17201706
getterTypeParameters.freshTypeParameters;
@@ -1726,7 +1712,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
17261712
FreshTypeParameters setterTypeParameters =
17271713
getFreshTypeParameters(typeParameters);
17281714
setter.function.positionalParameters.first.type =
1729-
setterTypeParameters.substitute(thisParameterType);
1715+
setterTypeParameters.substitute(onType);
17301716
setter.function.positionalParameters[1].type =
17311717
setterTypeParameters.substitute(value);
17321718
setter.function.typeParameters =
@@ -1737,8 +1723,8 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
17371723
} else {
17381724
_getter.function.returnType = value;
17391725
_setter?.function.positionalParameters[1].type = value;
1740-
_getter.function.positionalParameters.first.type = thisParameterType;
1741-
_setter?.function.positionalParameters.first.type = thisParameterType;
1726+
_getter.function.positionalParameters.first.type = onType;
1727+
_setter?.function.positionalParameters.first.type = onType;
17421728
}
17431729
} else {
17441730
_getter.function.returnType = value;
@@ -1769,24 +1755,20 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
17691755
void build(
17701756
SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
17711757
bool isExtensionMember = fieldBuilder.isExtensionMember;
1772-
bool isInlineClassMember = fieldBuilder.isInlineClassMember;
1773-
bool isInstanceMember = !isExtensionMember &&
1774-
!isInlineClassMember &&
1758+
bool isInstanceMember = !fieldBuilder.isExtensionMember &&
17751759
!fieldBuilder.isStatic &&
17761760
!fieldBuilder.isTopLevel;
17771761
_getter..isConst = fieldBuilder.isConst;
17781762
_getter
17791763
..isStatic = !isInstanceMember
17801764
..isExtensionMember = isExtensionMember
1781-
..isInlineClassMember = isInlineClassMember
17821765
..isAbstract = isAbstract && !isExternal
17831766
..isExternal = isExternal;
17841767

17851768
if (_setter != null) {
17861769
_setter!
17871770
..isStatic = !isInstanceMember
17881771
..isExtensionMember = isExtensionMember
1789-
..isInlineClassMember = isInlineClassMember
17901772
..isAbstract = isAbstract && !isExternal
17911773
..isExternal = isExternal;
17921774
}
@@ -1797,25 +1779,17 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
17971779
SourceLibraryBuilder library,
17981780
SourceFieldBuilder fieldBuilder,
17991781
void Function(Member, BuiltMemberKind) f) {
1800-
BuiltMemberKind getterMemberKind;
1801-
if (fieldBuilder.isExtensionMember) {
1802-
getterMemberKind = BuiltMemberKind.ExtensionGetter;
1803-
} else if (fieldBuilder.isInlineClassMember) {
1804-
getterMemberKind = BuiltMemberKind.InlineClassGetter;
1805-
} else {
1806-
getterMemberKind = BuiltMemberKind.Method;
1807-
}
1808-
f(_getter, getterMemberKind);
1782+
f(
1783+
_getter,
1784+
fieldBuilder.isExtensionMember
1785+
? BuiltMemberKind.ExtensionGetter
1786+
: BuiltMemberKind.Method);
18091787
if (_setter != null) {
1810-
BuiltMemberKind setterMemberKind;
1811-
if (fieldBuilder.isExtensionMember) {
1812-
setterMemberKind = BuiltMemberKind.ExtensionSetter;
1813-
} else if (fieldBuilder.isInlineClassMember) {
1814-
setterMemberKind = BuiltMemberKind.InlineClassSetter;
1815-
} else {
1816-
setterMemberKind = BuiltMemberKind.Method;
1817-
}
1818-
f(_setter!, setterMemberKind);
1788+
f(
1789+
_setter!,
1790+
fieldBuilder.isExtensionMember
1791+
? BuiltMemberKind.ExtensionSetter
1792+
: BuiltMemberKind.Method);
18191793
}
18201794
}
18211795

pkg/front_end/testcases/inline_class/external.dart

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ inline class B {
1111

1212
external B.named(int i);
1313

14-
external A field;
15-
1614
external A method();
1715

1816
external T genericMethod<T>(T t);
@@ -21,36 +19,29 @@ inline class B {
2119

2220
external void set setter(B b);
2321

24-
external static A staticField;
22+
// TODO(johnniwinther): Support static fields.
23+
//static external A staticField;
2524

26-
external static A staticMethod();
25+
static external A staticMethod();
2726

28-
external static T staticGenericMethod<T>(T t);
27+
static external T staticGenericMethod<T>(T t);
2928

30-
external static B get staticGetter;
29+
static external B get staticGetter;
3130

32-
external static void set staticSetter(B b);
31+
static external void set staticGetter(B b);
3332
}
3433

3534
void method(A a) {
3635
B b1 = new B(a);
3736
B b2 = new B.named(0);
38-
a = b1.field;
39-
b1.field = a;
4037
a = b1.method();
41-
var f1 = b1.method;
4238
b2 = b2.genericMethod(b2);
43-
var f2 = b2.genericMethod;
44-
int Function(int) f3 = b2.genericMethod;
4539
b1 = b2.getter;
4640
b1.setter = b2;
47-
a = B.staticField;
48-
B.staticField = a;
49-
a = B.staticMethod();
50-
var f4 = B.staticMethod;
41+
//a = B.staticField;
42+
//B.staticField = a;
43+
a = B.staticMethod;
5144
b2 = B.staticGenericMethod(b2);
52-
var f5 = B.staticGenericMethod;
53-
String Function(String) f6 = B.staticGenericMethod;
5445
b1 = B.staticGetter;
5546
B.staticSetter = b2;
5647
}
Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/inline_class/external.dart:25:10: Error: The modifier 'external' should be before the modifier 'static'.
6+
// Try re-ordering the modifiers.
7+
// static external A staticMethod();
8+
// ^^^^^^^^
9+
//
10+
// pkg/front_end/testcases/inline_class/external.dart:27:10: Error: The modifier 'external' should be before the modifier 'static'.
11+
// Try re-ordering the modifiers.
12+
// static external T staticGenericMethod<T>(T t);
13+
// ^^^^^^^^
14+
//
15+
// pkg/front_end/testcases/inline_class/external.dart:29:10: Error: The modifier 'external' should be before the modifier 'static'.
16+
// Try re-ordering the modifiers.
17+
// static external B get staticGetter;
18+
// ^^^^^^^^
19+
//
20+
// pkg/front_end/testcases/inline_class/external.dart:31:10: Error: The modifier 'external' should be before the modifier 'static'.
21+
// Try re-ordering the modifiers.
22+
// static external void set staticGetter(B b);
23+
// ^^^^^^^^
24+
//
25+
// pkg/front_end/testcases/inline_class/external.dart:46:5: Error: Setter not found: 'staticSetter'.
26+
// B.staticSetter = b2;
27+
// ^^^^^^^^^^^^
28+
//
29+
// pkg/front_end/testcases/inline_class/external.dart:43:9: Error: A value of type 'A Function()' can't be assigned to a variable of type 'A'.
30+
// - 'A' is from 'pkg/front_end/testcases/inline_class/external.dart'.
31+
// a = B.staticMethod;
32+
// ^
33+
//
234
import self as self;
335
import "dart:core" as core;
436

@@ -8,27 +40,21 @@ abstract class A extends core::Object {
840
;
941
}
1042
inline class B /* declaredRepresentationType = self::A */ {
11-
get field = self::B|get#field;
12-
set field = self::B|set#field;
1343
method method = self::B|method;
1444
tearoff method = self::B|get#method;
1545
method genericMethod = self::B|genericMethod;
1646
tearoff genericMethod = self::B|get#genericMethod;
1747
get getter = self::B|get#getter;
18-
static get staticField = get self::B|staticField;
19-
static set staticField = set self::B|staticField;
2048
static method staticMethod = self::B|staticMethod;
2149
static method staticGenericMethod = self::B|staticGenericMethod;
2250
static get staticGetter = get self::B|staticGetter;
2351
set setter = self::B|set#setter;
24-
static set staticSetter = set self::B|staticSetter;
52+
static set staticGetter = set self::B|staticGetter;
2553
constructor • = self::B|;
2654
constructor named = self::B|named;
2755
}
2856
external static method B|(self::A a) → self::B;
2957
external static method B|named(core::int i) → self::B;
30-
external static method B|get#field(self::A #this) → self::A;
31-
external static method B|set#field(self::A #this, self::A #externalFieldValue) → void;
3258
external static method B|method(lowered final self::B #this) → self::A;
3359
static method B|get#method(lowered final self::B #this) → () → self::A
3460
return () → self::A => self::B|method(#this);
@@ -37,37 +63,28 @@ static method B|get#genericMethod(lowered final self::B #this) → <T extends co
3763
return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
3864
external static method B|get#getter(lowered final self::B #this) → self::B;
3965
external static method B|set#setter(lowered final self::B #this, self::B b) → void;
40-
external static get B|staticField() → self::A;
41-
external static set B|staticField(self::A #externalFieldValue) → void;
4266
external static method B|staticMethod() → self::A;
4367
external static method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
4468
external static get B|staticGetter() → self::B;
45-
external static set B|staticSetter(self::B b) → void;
69+
external static set B|staticGetter(self::B b) → void;
4670
static method method(self::A a) → void {
4771
self::B b1 = self::B|(a);
4872
self::B b2 = self::B|named(0);
49-
a = self::B|get#field(b1);
50-
self::B|set#field(b1, a);
5173
a = self::B|method(b1);
52-
() → self::A f1 = self::B|get#method(b1);
5374
b2 = self::B|genericMethod<self::B>(b2, b2);
54-
<T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
55-
(core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
5675
b1 = self::B|get#getter(b2);
5776
self::B|set#setter(b1, b2);
58-
a = self::B|staticField;
59-
self::B|staticField = a;
60-
a = self::B|staticMethod();
61-
() → self::A f4 = #C1;
77+
a = invalid-expression "pkg/front_end/testcases/inline_class/external.dart:43:9: Error: A value of type 'A Function()' can't be assigned to a variable of type 'A'.
78+
- 'A' is from 'pkg/front_end/testcases/inline_class/external.dart'.
79+
a = B.staticMethod;
80+
^" in #C1 as{TypeError,ForNonNullableByDefault} self::A;
6281
b2 = self::B|staticGenericMethod<self::B>(b2);
63-
<T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
64-
(core::String) → core::String f6 = #C3;
6582
b1 = self::B|staticGetter;
66-
self::B|staticSetter = b2;
83+
invalid-expression "pkg/front_end/testcases/inline_class/external.dart:46:5: Error: Setter not found: 'staticSetter'.
84+
B.staticSetter = b2;
85+
^^^^^^^^^^^^";
6786
}
6887

6988
constants {
7089
#C1 = static-tearoff self::B|staticMethod
71-
#C2 = static-tearoff self::B|staticGenericMethod
72-
#C3 = instantiation #C2 <core::String>
7390
}

0 commit comments

Comments
 (0)