[kernel] Rename View* to Inline*

TEST=existing

Change-Id: I8726c936261ceb770b489f264d14fff02a1b4998
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275243
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Johnni Winther 2022-12-14 08:36:57 +00:00 committed by Commit Queue
parent 0ebed3f7d5
commit 81845864ca
77 changed files with 614 additions and 575 deletions

View file

@ -248,8 +248,8 @@ class _FreeVariableVisitor implements ir.DartTypeVisitor<bool> {
}
@override
bool visitViewType(ir.ViewType node) {
return visit(node.representationType);
bool visitInlineType(ir.InlineType node) {
return visit(node.instantiatedRepresentationType);
}
@override

View file

@ -130,8 +130,8 @@ class TypeTextVisitor implements ir.DartTypeVisitor1<void, StringBuffer> {
}
@override
void visitViewType(ir.ViewType node, StringBuffer sb) {
writeType(node.representationType, sb);
void visitInlineType(ir.InlineType node, StringBuffer sb) {
writeType(node.instantiatedRepresentationType, sb);
}
@override

View file

@ -3234,8 +3234,8 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
type.onType.accept(this);
@override
js_ast.Expression visitViewType(ViewType type) =>
type.representationType.accept(this);
js_ast.Expression visitInlineType(InlineType type) =>
type.instantiatedRepresentationType.accept(this);
@override
js_ast.Expression visitFutureOrType(FutureOrType type) {

View file

@ -22,8 +22,8 @@ abstract class ViewBuilder implements DeclarationBuilder {
/// The type of the underlying representation.
DartType get representationType;
/// Return the [View] built by this builder.
View get view;
/// Return the [InlineClass] built by this builder.
InlineClass get view;
/// Looks up extension member by [name] taking privacy into account.
///
@ -65,7 +65,7 @@ abstract class ViewBuilderImpl extends DeclarationBuilderImpl
Uri fileUri,
int charOffset,
{required bool hasExplicitTypeArguments}) {
return new ViewType(view, nullability, arguments);
return new InlineType(view, nullability, arguments);
}
@override

View file

@ -4805,7 +4805,7 @@ class IsInstantiatedVisitor implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return node.typeArguments
.every((DartType typeArgument) => typeArgument.accept(this));
}

View file

@ -1587,7 +1587,7 @@ class StaticAccessGenerator extends Generator {
///
/// These can only occur within a view instance member.
class ViewInstanceAccessGenerator extends Generator {
final View view;
final InlineClass view;
/// The original name of the target.
final String targetName;
@ -1640,7 +1640,7 @@ class ViewInstanceAccessGenerator extends Generator {
factory ViewInstanceAccessGenerator.fromBuilder(
ExpressionGeneratorHelper helper,
Token token,
View view,
InlineClass view,
String? targetName,
VariableDeclaration viewThis,
List<TypeParameter>? viewTypeParameters,

View file

@ -64,7 +64,7 @@ class _InvalidTypeFinder implements DartTypeVisitor1<bool, Set<TypedefType>> {
}
@override
bool visitViewType(ViewType node, Set<TypedefType> visitedTypedefs) {
bool visitInlineType(InlineType node, Set<TypedefType> visitedTypedefs) {
for (DartType typeArgument in node.typeArguments) {
if (typeArgument.accept1(this, visitedTypedefs)) return true;
}

View file

@ -1200,7 +1200,7 @@ class TypeVariableSearch implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return anyTypeVariables(node.typeArguments);
}

View file

@ -112,7 +112,7 @@ class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
}
@override
TypeBuilder visitViewType(ViewType node) {
TypeBuilder visitInlineType(InlineType node) {
throw "Not implemented";
}

View file

@ -291,13 +291,13 @@ class TypeLabeler implements DartTypeVisitor<void>, ConstantVisitor<void> {
}
@override
void visitViewType(ViewType node) {
void visitInlineType(InlineType node) {
// TODO(johnniwinther): Ensure enclosing libraries on extensions earlier
// in the compiler to ensure types in error messages have context.
Library? enclosingLibrary = node.view.parent as Library?;
Library? enclosingLibrary = node.inlineClass.parent as Library?;
result.add(nameForEntity(
node.view,
node.view.name,
node.inlineClass,
node.inlineClass.name,
enclosingLibrary?.importUri ?? unknownUri,
enclosingLibrary?.fileUri ?? unknownUri));
if (node.typeArguments.isNotEmpty) {

View file

@ -1131,7 +1131,7 @@ class SourceViewConstructorBuilder extends AbstractSourceConstructorBuilder {
// function is its enclosing class.
super.buildFunction();
View view = viewBuilder.view;
InlineClass view = viewBuilder.view;
List<DartType> typeParameterTypes = <DartType>[];
for (int i = 0; i < view.typeParameters.length; i++) {
TypeParameter typeParameter = view.typeParameters[i];
@ -1139,8 +1139,8 @@ class SourceViewConstructorBuilder extends AbstractSourceConstructorBuilder {
new TypeParameterType.withDefaultNullabilityForLibrary(
typeParameter, libraryBuilder.library));
}
ViewType type =
new ViewType(view, libraryBuilder.nonNullable, typeParameterTypes);
InlineType type =
new InlineType(view, libraryBuilder.nonNullable, typeParameterTypes);
returnType.registerInferredType(type);
}

View file

@ -2196,7 +2196,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
ConstructorScope constructorScope =
new ConstructorScope(name, constructors);
View? referenceFrom = referencesFromIndexed?.lookupView(name);
InlineClass? referenceFrom = referencesFromIndexed?.lookupInlineClass(name);
SourceFieldBuilder? representationFieldBuilder;
outer:
@ -3292,10 +3292,10 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
library.addExtension(extension);
}
} else if (declaration is SourceViewBuilder) {
View view = declaration.build(coreLibrary,
InlineClass view = declaration.build(coreLibrary,
addMembersToLibrary: !declaration.isDuplicate);
if (!declaration.isPatch && !declaration.isDuplicate) {
library.addView(view);
library.addInlineClass(view);
}
} else if (declaration is SourceMemberBuilder) {
declaration

View file

@ -315,7 +315,7 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl
assert(_procedure.kind == ProcedureKind.Method);
}
} else if (isViewMethod) {
_procedure.isViewMember = true;
_procedure.isInlineClassMember = true;
_procedure.isStatic = true;
if (isViewInstanceMember) {
assert(_procedure.kind == ProcedureKind.Method);

View file

@ -25,7 +25,7 @@ import 'source_member_builder.dart';
class SourceViewBuilder extends ViewBuilderImpl
with SourceDeclarationBuilderMixin {
final View _view;
final InlineClass _view;
SourceViewBuilder? _origin;
SourceViewBuilder? patchForTesting;
@ -48,9 +48,9 @@ class SourceViewBuilder extends ViewBuilderImpl
int startOffset,
int nameOffset,
int endOffset,
View? referenceFrom,
InlineClass? referenceFrom,
this.representationFieldBuilder)
: _view = new View(
: _view = new InlineClass(
name: name,
fileUri: parent.fileUri,
typeParameters:
@ -73,12 +73,12 @@ class SourceViewBuilder extends ViewBuilderImpl
: throw new UnimplementedError("SourceViewBuilder.mergedScope");
@override
View get view => isPatch ? origin._view : _view;
InlineClass get view => isPatch ? origin._view : _view;
@override
Annotatable get annotatable => view;
/// Builds the [View] for this view builder and inserts the members
/// Builds the [InlineClass] for this view builder and inserts the members
/// into the [Library] of [libraryBuilder].
///
/// [addMembersToLibrary] is `true` if the view members should be added
@ -86,7 +86,8 @@ class SourceViewBuilder extends ViewBuilderImpl
/// another library member. In this case, the view member should not be
/// added to the library to avoid name clashes with other members in the
/// library.
View build(LibraryBuilder coreLibrary, {required bool addMembersToLibrary}) {
InlineClass build(LibraryBuilder coreLibrary,
{required bool addMembersToLibrary}) {
DartType representationType;
if (representationFieldBuilder != null) {
TypeBuilder typeBuilder = representationFieldBuilder!.type;
@ -99,7 +100,7 @@ class SourceViewBuilder extends ViewBuilderImpl
} else {
representationType = const InvalidType();
}
_view.representationType = representationType;
_view.declaredRepresentationType = representationType;
buildInternal(coreLibrary, addMembersToLibrary: addMembersToLibrary);
@ -110,7 +111,7 @@ class SourceViewBuilder extends ViewBuilderImpl
void addMemberDescriptorInternal(SourceMemberBuilder memberBuilder,
Member member, BuiltMemberKind memberKind, Reference memberReference) {
String name = memberBuilder.name;
ViewMemberKind kind;
InlineClassMemberKind kind;
switch (memberKind) {
case BuiltMemberKind.Constructor:
case BuiltMemberKind.RedirectingFactory:
@ -125,35 +126,35 @@ class SourceViewBuilder extends ViewBuilderImpl
memberBuilder.charOffset, memberBuilder.fileUri);
case BuiltMemberKind.ExtensionField:
case BuiltMemberKind.LateIsSetField:
kind = ViewMemberKind.Field;
kind = InlineClassMemberKind.Field;
break;
case BuiltMemberKind.ViewConstructor:
kind = ViewMemberKind.Constructor;
kind = InlineClassMemberKind.Constructor;
break;
case BuiltMemberKind.ViewMethod:
kind = ViewMemberKind.Method;
kind = InlineClassMemberKind.Method;
break;
case BuiltMemberKind.ViewGetter:
case BuiltMemberKind.LateGetter:
kind = ViewMemberKind.Getter;
kind = InlineClassMemberKind.Getter;
break;
case BuiltMemberKind.ViewSetter:
case BuiltMemberKind.LateSetter:
kind = ViewMemberKind.Setter;
kind = InlineClassMemberKind.Setter;
break;
case BuiltMemberKind.ViewOperator:
kind = ViewMemberKind.Operator;
kind = InlineClassMemberKind.Operator;
break;
case BuiltMemberKind.ViewTearOff:
kind = ViewMemberKind.TearOff;
kind = InlineClassMemberKind.TearOff;
break;
case BuiltMemberKind.ViewFactory:
kind = ViewMemberKind.Factory;
kind = InlineClassMemberKind.Factory;
break;
}
// ignore: unnecessary_null_comparison
assert(kind != null);
view.members.add(new ViewMemberDescriptor(
view.members.add(new InlineClassMemberDescriptor(
name: new Name(name, libraryBuilder.library),
member: memberReference,
isStatic: memberBuilder.isStatic,

View file

@ -50,7 +50,7 @@ class IncludesTypeParametersNonCovariantly implements DartTypeVisitor<bool> {
bool visitExtensionType(ExtensionType node) => false;
@override
bool visitViewType(ViewType node) => false;
bool visitInlineType(InlineType node) => false;
@override
bool visitNeverType(NeverType node) => false;

View file

@ -154,7 +154,7 @@ class _IsKnownVisitor implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
for (DartType typeArgument in node.typeArguments) {
if (!typeArgument.accept(this)) return false;
}

View file

@ -737,8 +737,8 @@ class DartTypeToTextVisitor implements DartTypeVisitor<void> {
}
@override
void visitViewType(ViewType node) {
sb.write(node.view.name);
void visitInlineType(InlineType node) {
sb.write(node.inlineClass.name);
if (node.typeArguments.isNotEmpty) {
sb.write('<');
visitList(node.typeArguments);

View file

@ -1128,7 +1128,7 @@ abstract class SubtypeTest<T, E> {
isObliviousSubtype("Null", "(int, String)");
isObliviousSubtype("(int, String)?", "Record");
// TODO(johnniwinther): Add support for view types in the type parser and
// TODO(johnniwinther): Add support for inline types in the type parser and
// add subtype tests here.
}
}

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -2,10 +2,10 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
constructor • = self::Class1|;
}
view Class2 /* representationType = core::int */ {
inline class Class2 /* declaredRepresentationType = core::int */ {
constructor • = self::Class2|;
}
method Class1|(core::int field) → self::Class1

View file

@ -9,8 +9,8 @@ class Class2 = core::Object with self::Mixin /*hasConstConstructor*/ {
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}

View file

@ -9,8 +9,8 @@ class Class2 extends core::Object implements self::Mixin /*isEliminatedMixin,has
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}

View file

@ -9,8 +9,8 @@ class Class2 = core::Object with self::Mixin /*hasConstConstructor*/ {
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}

View file

@ -9,8 +9,8 @@ class Class2 = core::Object with self::Mixin /*hasConstConstructor*/ {
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}

View file

@ -9,9 +9,9 @@ class Class2 = core::Object with self::Mixin /*hasConstConstructor*/ {
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic
;

View file

@ -9,8 +9,8 @@ class Class2 extends core::Object implements self::Mixin /*isEliminatedMixin,has
: super core::Object::•()
;
}
view Class1 /* representationType = core::int */ {
inline class Class1 /* declaredRepresentationType = core::int */ {
}
view Class3<T extends core::Object? = dynamic> /* representationType = core::List<T%> */ {
inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
}
static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -2,7 +2,7 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Class /* representationType = core::int */ {
inline class Class /* declaredRepresentationType = core::int */ {
method instanceMethod = self::Class|instanceMethod;
tearoff instanceMethod = self::Class|get#instanceMethod;
get instanceGetter = self::Class|get#instanceGetter;
@ -13,7 +13,7 @@ view Class /* representationType = core::int */ {
static method staticMethod = self::Class|staticMethod;
static method genericStaticMethod = self::Class|genericStaticMethod;
}
view GenericClass<T extends core::Object? = dynamic> /* representationType = T% */ {
inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
method instanceMethod = self::GenericClass|instanceMethod;
tearoff instanceMethod = self::GenericClass|get#instanceMethod;
get instanceGetter = self::GenericClass|get#instanceGetter;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField = 42;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField = 42;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField = 42;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField = 42;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField;

View file

@ -12,13 +12,13 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
view Missing /* representationType = invalid-type */ {
inline class Missing /* declaredRepresentationType = invalid-type */ {
}
view Static /* representationType = core::bool */ {
inline class Static /* declaredRepresentationType = core::bool */ {
static field staticField = self::Static|staticField;
}
view Multiple /* representationType = core::bool */ {
inline class Multiple /* declaredRepresentationType = core::bool */ {
}
view Duplicate /* representationType = core::bool */ {
inline class Duplicate /* declaredRepresentationType = core::bool */ {
}
static field core::int Static|staticField = 42;

View file

@ -381,7 +381,7 @@ class BenchMaker implements DartTypeVisitor1<void, StringBuffer> {
}
@override
void visitViewType(ViewType node, StringBuffer sb) {
void visitInlineType(InlineType node, StringBuffer sb) {
throw "not implemented";
}

View file

@ -95,7 +95,7 @@ const Map<String?, Map<String, FieldRule?>> _fieldRuleMap = {
'_classes': FieldRule(name: 'classes'),
'_typedefs': FieldRule(name: 'typedefs'),
'_extensions': FieldRule(name: 'extensions'),
'_views': FieldRule(name: 'views'),
'_inlineClasses': FieldRule(name: 'inlineClasses'),
'_fields': FieldRule(name: 'fields'),
'_procedures': FieldRule(name: 'procedures'),
},
@ -116,7 +116,7 @@ const Map<String?, Map<String, FieldRule?>> _fieldRuleMap = {
'Extension': {
'typeParameters': FieldRule(isDeclaration: true),
},
'View': {
'InlineClass': {
'typeParameters': FieldRule(isDeclaration: true),
},
'Field': {
@ -186,8 +186,9 @@ const Map<String?, Map<String, FieldRule?>> _fieldRuleMap = {
'ExtensionType': {
'_onType': FieldRule(name: 'onType'),
},
'ViewType': {
'_representationType': FieldRule(name: 'representationType'),
'InlineType': {
'_instantiatedRepresentationType':
FieldRule(name: 'instantiatedRepresentationType'),
},
};

View file

@ -308,7 +308,7 @@ String? getNameOfTag(int tag) {
if (tag == Tag.NeverType) return "NeverType";
if (tag == Tag.IntersectionType) return "IntersectionType";
if (tag == Tag.RecordType) return "RecordType";
if (tag == Tag.ViewType) return "ViewType";
if (tag == Tag.InlineType) return "InlineType";
return null;
}

View file

@ -229,8 +229,8 @@ type TypedefReference {
CanonicalNameReference canonicalName;
}
type ViewReference {
// Must be populated by a view (possibly later in the file).
type InlineClassReference {
// Must be populated by an inline class (possibly later in the file).
CanonicalNameReference canonicalName;
}
@ -257,7 +257,7 @@ type Library {
List<Typedef> typedefs;
List<Class> classes;
List<Extension> extensions;
List<View> views;
List<InlineClass> inlineClasses;
List<Field> fields;
List<Procedure> procedures;
@ -375,7 +375,7 @@ type ExtensionMemberDescriptor {
MemberReference member;
}
type View extends Node {
type InlineClass extends Node {
Byte tag = 85;
CanonicalNameReference canonicalName;
StringReference name;
@ -385,14 +385,14 @@ type View extends Node {
Byte flags ();
List<TypeParameter> typeParameters;
DartType representationType;
List<ViewMemberDescriptor> members;
List<InlineClassMemberDescriptor> members;
}
enum ViewMemberKind { Constructor = 0, Factory = 1, Field = 2, Method = 3, Getter = 4, Setter = 5, Operator = 6, TearOff = 7, }
enum InlineClassMemberKind { Constructor = 0, Factory = 1, Field = 2, Method = 3, Getter = 4, Setter = 5, Operator = 6, TearOff = 7, }
type ViewMemberDescriptor {
type InlineClassMemberDescriptor {
Name name;
ViewMemberKind kind;
InlineClassMemberKind kind;
Byte flags (isStatic);
MemberReference member;
}
@ -411,7 +411,7 @@ type Field extends Member {
UInt flags (isFinal, isConst, isStatic, isCovariantByDeclaration,
isCovariantByClass, isLate, isExtensionMember,
isNonNullableByDefault, isInternalImplementation,
isEnumElement, isViewMember);
isEnumElement, isInlineClassMember);
Name name;
List<Expression> annotations;
DartType type;
@ -467,7 +467,7 @@ type Procedure extends Member {
UInt flags (isStatic, isAbstract, isExternal, isConst,
isRedirectingFactory, isExtensionMember,
isNonNullableByDefault, isSynthetic, isInternalImplementation,
isViewMember);
isInlineClassMember);
Name name;
List<Expression> annotations;
MemberReference stubTarget; // May be NullReference.
@ -1614,10 +1614,10 @@ type IntersectionType extends DartType {
DartType right;
}
type ViewType extends DartType {
type InlineType extends DartType {
Byte tag = 103;
Byte nullability; // Index into the Nullability enum above.
ViewReference viewReference;
InlineClassReference inlineClassReference;
List<DartType> typeArguments;
DartType representationType;
}

View file

@ -358,7 +358,7 @@ class Library extends NamedNode
List<Typedef> _typedefs;
List<Class> _classes;
List<Extension> _extensions;
List<View> _views;
List<InlineClass> _inlineClasses;
List<Procedure> _procedures;
List<Field> _fields;
@ -370,7 +370,7 @@ class Library extends NamedNode
List<Typedef>? typedefs,
List<Class>? classes,
List<Extension>? extensions,
List<View>? views,
List<InlineClass>? inlineClasses,
List<Procedure>? procedures,
List<Field>? fields,
required this.fileUri,
@ -383,7 +383,7 @@ class Library extends NamedNode
this._typedefs = typedefs ?? <Typedef>[],
this._classes = classes ?? <Class>[],
this._extensions = extensions ?? <Extension>[],
this._views = views ?? <View>[],
this._inlineClasses = inlineClasses ?? <InlineClass>[],
this._procedures = procedures ?? <Procedure>[],
this._fields = fields ?? <Field>[],
super(reference) {
@ -423,13 +423,13 @@ class Library extends NamedNode
_extensions = extensions;
}
List<View> get views => _views;
List<InlineClass> get inlineClasses => _inlineClasses;
/// Internal. Should *ONLY* be used from within kernel.
///
/// Used for adding views when reading the dill file.
void set viewsInternal(List<View> views) {
_views = views;
/// Used for adding inline classes when reading the dill file.
void set inlineClassesInternal(List<InlineClass> inlineClasses) {
_inlineClasses = inlineClasses;
}
List<Procedure> get procedures => _procedures;
@ -490,9 +490,9 @@ class Library extends NamedNode
extensions.add(extension);
}
void addView(View view) {
view.parent = this;
views.add(view);
void addInlineClass(InlineClass inlineClass) {
inlineClass.parent = this;
inlineClasses.add(inlineClass);
}
void addField(Field field) {
@ -533,8 +533,8 @@ class Library extends NamedNode
for (int i = 0; i < extensions.length; ++i) {
extensions[i].bindCanonicalNames(canonicalName);
}
for (int i = 0; i < views.length; ++i) {
views[i].bindCanonicalNames(canonicalName);
for (int i = 0; i < inlineClasses.length; ++i) {
inlineClasses[i].bindCanonicalNames(canonicalName);
}
}
@ -567,9 +567,9 @@ class Library extends NamedNode
Extension extension = extensions[i];
extension._relinkNode();
}
for (int i = 0; i < views.length; ++i) {
View view = views[i];
view._relinkNode();
for (int i = 0; i < inlineClasses.length; ++i) {
InlineClass inlineClass = inlineClasses[i];
inlineClass._relinkNode();
}
}
@ -595,7 +595,7 @@ class Library extends NamedNode
visitList(typedefs, v);
visitList(classes, v);
visitList(extensions, v);
visitList(views, v);
visitList(inlineClasses, v);
visitList(procedures, v);
visitList(fields, v);
}
@ -608,7 +608,7 @@ class Library extends NamedNode
v.transformList(typedefs, this);
v.transformList(classes, this);
v.transformList(extensions, this);
v.transformList(views, this);
v.transformList(inlineClasses, this);
v.transformList(procedures, this);
v.transformList(fields, this);
}
@ -621,7 +621,7 @@ class Library extends NamedNode
v.transformTypedefList(typedefs, this);
v.transformClassList(classes, this);
v.transformExtensionList(extensions, this);
v.transformViewList(views, this);
v.transformInlineClassList(inlineClasses, this);
v.transformProcedureList(procedures, this);
v.transformFieldList(fields, this);
}
@ -1944,12 +1944,12 @@ class ExtensionTypeShowHideClause {
}
}
/// Declaration of a view.
/// Declaration of an inline class.
///
/// The members are converted into top-level procedures and only accessible
/// by reference in the [View] node.
class View extends NamedNode implements Annotatable, FileUriNode {
/// Name of the view.
/// by reference in the [InlineClass] node.
class InlineClass extends NamedNode implements Annotatable, FileUriNode {
/// Name of the inline class.
String name;
/// The URI of the source file this class was loaded from.
@ -1959,20 +1959,23 @@ class View extends NamedNode implements Annotatable, FileUriNode {
/// Type parameters declared on the extension.
final List<TypeParameter> typeParameters;
/// The type in the underlying representation of the view declaration.
/// The type in the underlying representation of the inline class declaration.
///
/// For instance A in the view B:
/// For instance A in the inline class B:
///
/// class A {}
/// view class B(A it) {}
/// inline class B {
/// final A it;
/// B(this.it)
/// }
///
late DartType representationType;
late DartType declaredRepresentationType;
/// The members declared by the view.
/// The members declared by the inline class.
///
/// The members are converted into top-level members and only accessible
/// by reference through [ViewMemberDescriptor].
List<ViewMemberDescriptor> members;
/// by reference through [InlineClassMemberDescriptor].
List<InlineClassMemberDescriptor> members;
@override
List<Expression> annotations = const <Expression>[];
@ -1988,11 +1991,11 @@ class View extends NamedNode implements Annotatable, FileUriNode {
node.parent = this;
}
View(
InlineClass(
{required this.name,
List<TypeParameter>? typeParameters,
DartType? representationType,
List<ViewMemberDescriptor>? members,
DartType? declaredRepresentationType,
List<InlineClassMemberDescriptor>? members,
required this.fileUri,
Reference? reference})
// ignore: unnecessary_null_comparison
@ -2000,11 +2003,11 @@ class View extends NamedNode implements Annotatable, FileUriNode {
// ignore: unnecessary_null_comparison
assert(fileUri != null),
this.typeParameters = typeParameters ?? <TypeParameter>[],
this.members = members ?? <ViewMemberDescriptor>[],
this.members = members ?? <InlineClassMemberDescriptor>[],
super(reference) {
setParents(this.typeParameters, this);
if (representationType != null) {
this.representationType = representationType;
if (declaredRepresentationType != null) {
this.declaredRepresentationType = declaredRepresentationType;
}
}
@ -2016,18 +2019,18 @@ class View extends NamedNode implements Annotatable, FileUriNode {
Library get enclosingLibrary => parent as Library;
@override
R accept<R>(TreeVisitor<R> v) => v.visitView(this);
R accept<R>(TreeVisitor<R> v) => v.visitInlineClass(this);
@override
R accept1<R, A>(TreeVisitor1<R, A> v, A arg) => v.visitView(this, arg);
R accept1<R, A>(TreeVisitor1<R, A> v, A arg) => v.visitInlineClass(this, arg);
R acceptReference<R>(Visitor<R> v) => v.visitViewReference(this);
R acceptReference<R>(Visitor<R> v) => v.visitInlineClassReference(this);
@override
void visitChildren(Visitor v) {
visitList(annotations, v);
visitList(typeParameters, v);
representationType.accept(v);
declaredRepresentationType.accept(v);
}
@override
@ -2035,8 +2038,8 @@ class View extends NamedNode implements Annotatable, FileUriNode {
v.transformList(annotations, this);
v.transformList(typeParameters, this);
// ignore: unnecessary_null_comparison
if (representationType != null) {
representationType = v.visitDartType(representationType);
if (declaredRepresentationType != null) {
declaredRepresentationType = v.visitDartType(declaredRepresentationType);
}
}
@ -2045,9 +2048,9 @@ class View extends NamedNode implements Annotatable, FileUriNode {
v.transformExpressionList(annotations, this);
v.transformTypeParameterList(typeParameters, this);
// ignore: unnecessary_null_comparison
if (representationType != null) {
representationType =
v.visitDartType(representationType, cannotRemoveSentinel);
if (declaredRepresentationType != null) {
declaredRepresentationType =
v.visitDartType(declaredRepresentationType, cannotRemoveSentinel);
}
}
@ -2058,16 +2061,16 @@ class View extends NamedNode implements Annotatable, FileUriNode {
@override
String toString() {
return "View(${toStringInternal()})";
return "InlineClass(${toStringInternal()})";
}
@override
void toTextInternal(AstPrinter printer) {
printer.writeViewName(reference);
printer.writeInlineClassName(reference);
}
}
enum ViewMemberKind {
enum InlineClassMemberKind {
Constructor,
Factory,
Field,
@ -2078,26 +2081,28 @@ enum ViewMemberKind {
TearOff,
}
/// Information about an member declaration in a view.
class ViewMemberDescriptor {
/// Information about an member declaration in an inline class.
class InlineClassMemberDescriptor {
static const int FlagStatic = 1 << 0; // Must match serialized bit positions.
/// The name of the extension member.
/// The name of the inline class member.
///
/// The name of the generated top-level member is mangled to ensure
/// uniqueness. This name is used to lookup an extension method in the
/// extension itself.
/// uniqueness. This name is used to lookup a member in the inline class
/// itself.
Name name;
/// [ViewMemberKind] kind of the original member.
/// [InlineClassMemberKind] kind of the original member.
///
/// A view method is converted into a regular top-level method. For
/// An inline class member is converted into a regular top-level method. For
/// instance:
///
/// class A {
/// var foo;
/// }
/// extension B on A {
/// inline class B {
/// final A it;
/// B(this.it);
/// get bar => this.foo;
/// }
///
@ -2109,14 +2114,14 @@ class ViewMemberDescriptor {
/// where `B|get#bar` is the synthesized name of the top-level method and
/// `#this` is the synthesized parameter that holds represents `this`.
///
ViewMemberKind kind;
InlineClassMemberKind kind;
int flags = 0;
/// Reference to the top-level member created for the extension method.
/// Reference to the top-level member created for the inline class member.
final Reference member;
ViewMemberDescriptor(
InlineClassMemberDescriptor(
{required this.name,
required this.kind,
bool isStatic = false,
@ -2124,7 +2129,7 @@ class ViewMemberDescriptor {
this.isStatic = isStatic;
}
/// Return `true` if the extension method was declared as `static`.
/// Return `true` if the inline class member was declared as `static`.
bool get isStatic => flags & FlagStatic != 0;
void set isStatic(bool value) {
@ -2133,7 +2138,7 @@ class ViewMemberDescriptor {
@override
String toString() {
return 'ViewMemberDescriptor($name,$kind,'
return 'InlineClassMemberDescriptor($name,$kind,'
'${member.toStringInternal()},isStatic=${isStatic})';
}
}
@ -2239,12 +2244,12 @@ abstract class Member extends NamedNode implements Annotatable, FileUriNode {
///
bool get isExtensionMember;
/// If `true` this member is compiled from a member declared in a view class
/// declaration.
/// If `true` this member is compiled from a member declared in an inline
/// class declaration.
///
/// For instance `field`, `method1` and `method2` in:
///
/// view class A {
/// inline class A {
/// final B it;
/// A(this.it);
/// static var field;
@ -2252,7 +2257,7 @@ abstract class Member extends NamedNode implements Annotatable, FileUriNode {
/// static B method2() => new B();
/// }
///
bool get isViewMember;
bool get isInlineClassMember;
/// If `true` this member is defined in a library for which non-nullable by
/// default is enabled.
@ -2489,7 +2494,7 @@ class Field extends Member {
static const int FlagNonNullableByDefault = 1 << 7;
static const int FlagInternalImplementation = 1 << 8;
static const int FlagEnumElement = 1 << 9;
static const int FlagViewMember = 1 << 10;
static const int FlagInlineClassMember = 1 << 10;
/// Whether the field is declared with the `covariant` keyword.
bool get isCovariantByDeclaration => flags & FlagCovariant != 0;
@ -2505,7 +2510,7 @@ class Field extends Member {
bool get isExtensionMember => flags & FlagExtensionMember != 0;
@override
bool get isViewMember => flags & FlagViewMember != 0;
bool get isInlineClassMember => flags & FlagInlineClassMember != 0;
/// Indicates whether the implicit setter associated with this field needs to
/// contain a runtime type check to deal with generic covariance.
@ -2577,8 +2582,10 @@ class Field extends Member {
flags = value ? (flags | FlagEnumElement) : (flags & ~FlagEnumElement);
}
void set isViewMember(bool value) {
flags = value ? (flags | FlagViewMember) : (flags & ~FlagViewMember);
void set isInlineClassMember(bool value) {
flags = value
? (flags | FlagInlineClassMember)
: (flags & ~FlagInlineClassMember);
}
@override
@ -2758,7 +2765,7 @@ class Constructor extends Member {
bool get isExtensionMember => false;
@override
bool get isViewMember => false;
bool get isInlineClassMember => false;
@override
bool get isNonNullableByDefault => flags & FlagNonNullableByDefault != 0;
@ -2924,7 +2931,7 @@ class RedirectingFactory extends Member {
bool get isExtensionMember => false;
@override
bool get isViewMember => false;
bool get isInlineClassMember => false;
bool get isUnresolved => targetReference == null;
@ -3341,7 +3348,7 @@ class Procedure extends Member {
static const int FlagSynthetic = 1 << 7;
static const int FlagInternalImplementation = 1 << 8;
static const int FlagIsAbstractFieldAccessor = 1 << 9;
static const int FlagViewMember = 1 << 10;
static const int FlagInlineMember = 1 << 10;
bool get isStatic => flags & FlagStatic != 0;
@ -3422,7 +3429,7 @@ class Procedure extends Member {
bool get isExtensionMember => flags & FlagExtensionMember != 0;
@override
bool get isViewMember => flags & FlagViewMember != 0;
bool get isInlineClassMember => flags & FlagInlineMember != 0;
void set isStatic(bool value) {
flags = value ? (flags | FlagStatic) : (flags & ~FlagStatic);
@ -3452,8 +3459,8 @@ class Procedure extends Member {
value ? (flags | FlagExtensionMember) : (flags & ~FlagExtensionMember);
}
void set isViewMember(bool value) {
flags = value ? (flags | FlagViewMember) : (flags & ~FlagViewMember);
void set isInlineClassMember(bool value) {
flags = value ? (flags | FlagInlineMember) : (flags & ~FlagInlineMember);
}
void set isSynthetic(bool value) {
@ -12534,86 +12541,86 @@ class ExtensionType extends DartType {
}
}
class ViewType extends DartType {
final Reference viewReference;
class InlineType extends DartType {
final Reference inlineClassReference;
@override
final Nullability declaredNullability;
final List<DartType> typeArguments;
DartType? _representationType;
DartType? _instantiatedRepresentationType;
ViewType(View view, Nullability declaredNullability,
InlineType(InlineClass inlineClass, Nullability declaredNullability,
[List<DartType>? typeArguments])
: this.byReference(view.reference, declaredNullability,
typeArguments ?? _defaultTypeArguments(view));
: this.byReference(inlineClass.reference, declaredNullability,
typeArguments ?? _defaultTypeArguments(inlineClass));
ViewType.byReference(
this.viewReference, this.declaredNullability, this.typeArguments,
[this._representationType])
InlineType.byReference(
this.inlineClassReference, this.declaredNullability, this.typeArguments,
[this._instantiatedRepresentationType])
// ignore: unnecessary_null_comparison
: assert(declaredNullability != null);
View get view => viewReference.asView;
InlineClass get inlineClass => inlineClassReference.asInlineClass;
DartType get representationType =>
_representationType ??= _computeRepresentationType(
viewReference, typeArguments, declaredNullability);
DartType get instantiatedRepresentationType =>
_instantiatedRepresentationType ??= _computeRepresentationType(
inlineClassReference, typeArguments, declaredNullability);
@override
Nullability get nullability => declaredNullability;
@override
DartType get resolveTypeParameterType =>
representationType.resolveTypeParameterType;
instantiatedRepresentationType.resolveTypeParameterType;
static List<DartType> _defaultTypeArguments(View view) {
if (view.typeParameters.length == 0) {
static List<DartType> _defaultTypeArguments(InlineClass inlineClass) {
if (inlineClass.typeParameters.length == 0) {
// Avoid allocating a list in this very common case.
return const <DartType>[];
} else {
return new List<DartType>.filled(
view.typeParameters.length, const DynamicType());
inlineClass.typeParameters.length, const DynamicType());
}
}
static DartType _computeRepresentationType(Reference viewReference,
static DartType _computeRepresentationType(Reference inlineClassReference,
List<DartType> typeArguments, Nullability declaredNullability) {
View view = viewReference.asView;
if (view.typeParameters.isEmpty) {
return view.representationType;
InlineClass inlineClass = inlineClassReference.asInlineClass;
if (inlineClass.typeParameters.isEmpty) {
return inlineClass.declaredRepresentationType;
} else {
assert(view.typeParameters.length == typeArguments.length);
return Substitution.fromPairs(view.typeParameters, typeArguments)
.substituteType(view.representationType)
.withDeclaredNullability(uniteNullabilities(
declaredNullability, view.representationType.nullability));
assert(inlineClass.typeParameters.length == typeArguments.length);
return Substitution.fromPairs(inlineClass.typeParameters, typeArguments)
.substituteType(inlineClass.declaredRepresentationType)
.withDeclaredNullability(uniteNullabilities(declaredNullability,
inlineClass.declaredRepresentationType.nullability));
}
}
@override
R accept<R>(DartTypeVisitor<R> v) {
return v.visitViewType(this);
return v.visitInlineType(this);
}
@override
R accept1<R, A>(DartTypeVisitor1<R, A> v, A arg) {
return v.visitViewType(this, arg);
return v.visitInlineType(this, arg);
}
@override
void visitChildren(Visitor v) {
view.acceptReference(v);
inlineClass.acceptReference(v);
visitList(typeArguments, v);
}
@override
bool equals(Object other, Assumptions? assumptions) {
if (identical(this, other)) return true;
if (other is ViewType) {
if (other is InlineType) {
if (nullability != other.nullability) return false;
if (viewReference != other.viewReference) return false;
if (inlineClassReference != other.inlineClassReference) return false;
if (typeArguments.length != other.typeArguments.length) return false;
for (int i = 0; i < typeArguments.length; ++i) {
if (!typeArguments[i].equals(other.typeArguments[i], assumptions)) {
@ -12628,7 +12635,7 @@ class ViewType extends DartType {
@override
int get hashCode {
int hash = 0x3fffffff & viewReference.hashCode;
int hash = 0x3fffffff & inlineClassReference.hashCode;
for (int i = 0; i < typeArguments.length; ++i) {
hash = 0x3fffffff & (hash * 31 + (hash ^ typeArguments[i].hashCode));
}
@ -12638,21 +12645,21 @@ class ViewType extends DartType {
}
@override
ViewType withDeclaredNullability(Nullability declaredNullability) {
InlineType withDeclaredNullability(Nullability declaredNullability) {
return declaredNullability == this.declaredNullability
? this
: new ViewType.byReference(
viewReference, declaredNullability, typeArguments);
: new InlineType.byReference(
inlineClassReference, declaredNullability, typeArguments);
}
@override
String toString() {
return "ViewType(${toStringInternal()})";
return "InlineType(${toStringInternal()})";
}
@override
void toTextInternal(AstPrinter printer) {
printer.writeViewName(viewReference);
printer.writeInlineClassName(inlineClassReference);
printer.writeTypeArguments(typeArguments);
printer.write(nullabilityToString(declaredNullability));
}
@ -15562,9 +15569,10 @@ final List<Typedef> emptyListOfTypedef =
final List<Extension> emptyListOfExtension =
List.filled(0, dummyExtension, growable: false);
/// Almost const <View>[], but not const in an attempt to avoid
/// Almost const <InlineClass>[], but not const in an attempt to avoid
/// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
final List<View> emptyListOfView = List.filled(0, dummyView, growable: false);
final List<InlineClass> emptyListOfInlineClass =
List.filled(0, dummyInlineClass, growable: false);
/// Almost const <Field>[], but not const in an attempt to avoid
/// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
@ -15601,10 +15609,10 @@ final List<Class> emptyListOfClass =
final List<ExtensionMemberDescriptor> emptyListOfExtensionMemberDescriptor =
List.filled(0, dummyExtensionMemberDescriptor, growable: false);
/// Almost const <ViewMemberDescriptor>[], but not const in an attempt to
/// Almost const <InlineClassMemberDescriptor>[], but not const in an attempt to
/// avoid polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
final List<ViewMemberDescriptor> emptyListOfViewMemberDescriptor =
List.filled(0, dummyViewMemberDescriptor, growable: false);
final List<InlineClassMemberDescriptor> emptyListOfInlineClassMemberDescriptor =
List.filled(0, dummyInlineClassMemberDescriptor, growable: false);
/// Almost const <Constructor>[], but not const in an attempt to avoid
/// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
@ -15721,20 +15729,24 @@ final ExtensionMemberDescriptor dummyExtensionMemberDescriptor =
kind: ExtensionMemberKind.Getter,
member: dummyReference);
/// Non-nullable [View] dummy value.
/// Non-nullable [InlineClass] dummy value.
///
/// This is used as the removal sentinel in [RemovingTransformer] and can be
/// used for instance as a dummy initial value for the `List.filled`
/// constructor.
final View dummyView = new View(name: '', fileUri: dummyUri);
final InlineClass dummyInlineClass =
new InlineClass(name: '', fileUri: dummyUri);
/// Non-nullable [ViewMemberDescriptor] dummy value.
/// Non-nullable [InlineClassMemberDescriptor] dummy value.
///
/// This is used as the removal sentinel in [RemovingTransformer] and can be
/// used for instance as a dummy initial value for the `List.filled`
/// constructor.
final ViewMemberDescriptor dummyViewMemberDescriptor = new ViewMemberDescriptor(
name: dummyName, kind: ViewMemberKind.Getter, member: dummyReference);
final InlineClassMemberDescriptor dummyInlineClassMemberDescriptor =
new InlineClassMemberDescriptor(
name: dummyName,
kind: InlineClassMemberKind.Getter,
member: dummyReference);
/// Non-nullable [Member] dummy value.
///

View file

@ -1094,10 +1094,10 @@ class BinaryBuilder {
return name.reference;
}
Reference readNonNullViewReference() {
Reference readNonNullInlineClassReference() {
CanonicalName? name = readNullableCanonicalNameReference();
if (name == null) {
throw 'Expected a view reference to be valid but was `null`.';
throw 'Expected an inline class reference to be valid but was `null`.';
}
return name.reference;
}
@ -1262,7 +1262,7 @@ class BinaryBuilder {
_readTypedefList(library);
_readClassList(library, classOffsets);
_readExtensionList(library);
_readViewList(library);
_readInlineClassList(library);
library.fieldsInternal = _readFieldList(library);
library.proceduresInternal = _readProcedureList(library, procedureOffsets);
@ -1312,15 +1312,15 @@ class BinaryBuilder {
}
}
void _readViewList(Library library) {
void _readInlineClassList(Library library) {
int length = readUInt30();
if (!useGrowableLists && length == 0) {
// When lists don't have to be growable anyway, we might as well use an
// almost constant one for the empty list.
library.viewsInternal = emptyListOfView;
library.inlineClassesInternal = emptyListOfInlineClass;
} else {
library.viewsInternal = new List<View>.generate(
length, (int index) => readView()..parent = library,
library.inlineClassesInternal = new List<InlineClass>.generate(
length, (int index) => readInlineClass()..parent = library,
growable: useGrowableLists);
}
}
@ -1605,13 +1605,13 @@ class BinaryBuilder {
..flags = flags;
}
View readView() {
InlineClass readInlineClass() {
int tag = readByte();
assert(tag == Tag.View);
assert(tag == Tag.InlineClass);
CanonicalName canonicalName = readNonNullCanonicalNameReference();
Reference reference = canonicalName.reference;
View? node = reference.node as View?;
InlineClass? node = reference.node as InlineClass?;
if (alwaysCreateNewNamedNodes) {
node = null;
}
@ -1627,7 +1627,8 @@ class BinaryBuilder {
Uri fileUri = readUriReference();
if (node == null) {
node = new View(name: name, reference: reference, fileUri: fileUri);
node =
new InlineClass(name: name, reference: reference, fileUri: fileUri);
}
node.annotations = annotations;
setParents(annotations, node);
@ -1642,33 +1643,33 @@ class BinaryBuilder {
node.name = name;
node.fileUri = fileUri;
node.representationType = representationType;
node.declaredRepresentationType = representationType;
node.members = _readViewMemberDescriptorList();
node.members = _readInlineClassMemberDescriptorList();
return node;
}
List<ViewMemberDescriptor> _readViewMemberDescriptorList() {
List<InlineClassMemberDescriptor> _readInlineClassMemberDescriptorList() {
int length = readUInt30();
if (!useGrowableLists && length == 0) {
// When lists don't have to be growable anyway, we might as well use a
// constant one for the empty list.
return emptyListOfViewMemberDescriptor;
return emptyListOfInlineClassMemberDescriptor;
}
return new List<ViewMemberDescriptor>.generate(
length, (_) => _readViewMemberDescriptor(),
return new List<InlineClassMemberDescriptor>.generate(
length, (_) => _readInlineClassMemberDescriptor(),
growable: useGrowableLists);
}
ViewMemberDescriptor _readViewMemberDescriptor() {
InlineClassMemberDescriptor _readInlineClassMemberDescriptor() {
Name name = readName();
int kind = readByte();
int flags = readByte();
CanonicalName canonicalName = readNonNullCanonicalNameReference();
return new ViewMemberDescriptor(
return new InlineClassMemberDescriptor(
name: name,
kind: ViewMemberKind.values[kind],
kind: InlineClassMemberKind.values[kind],
member: canonicalName.reference)
..flags = flags;
}
@ -3319,8 +3320,8 @@ class BinaryBuilder {
return _readInvalidType();
case Tag.NeverType:
return _readNeverType();
case Tag.ViewType:
return _readViewType();
case Tag.InlineType:
return _readInlineType();
case Tag.FunctionType:
return _readFunctionType();
case Tag.IntersectionType:
@ -3407,12 +3408,12 @@ class BinaryBuilder {
return result;
}
DartType _readViewType() {
DartType _readInlineType() {
int nullabilityIndex = readByte();
Reference reference = readNonNullViewReference();
Reference reference = readNonNullInlineClassReference();
List<DartType> typeArguments = readDartTypeList();
DartType representationType = readDartType();
return new ViewType.byReference(
return new InlineType.byReference(
reference,
Nullability.values[nullabilityIndex],
typeArguments,
@ -3734,9 +3735,9 @@ class BinaryBuilderWithMetadata extends BinaryBuilder implements BinarySource {
}
@override
View readView() {
InlineClass readInlineClass() {
final int nodeOffset = _byteOffset;
final View result = super.readView();
final InlineClass result = super.readInlineClass();
return _associateMetadata(result, nodeOffset);
}

View file

@ -384,12 +384,12 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
}
}
void writeViewNodeList(List<View> nodes) {
void writeInlineClassNodeList(List<InlineClass> nodes) {
final int len = nodes.length;
writeUInt30(len);
for (int i = 0; i < len; i++) {
final View node = nodes[i];
writeViewNode(node);
final InlineClass node = nodes[i];
writeInlineClassNode(node);
}
}
@ -495,7 +495,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
node.accept(this);
}
void writeViewNode(View node) {
void writeInlineClassNode(InlineClass node) {
if (_metadataSubsections != null) {
_writeNodeMetadata(node);
}
@ -1126,7 +1126,7 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
writeClassNodeList(node.classes);
classOffsets.add(getBufferOffset());
writeExtensionNodeList(node.extensions);
writeViewNodeList(node.views);
writeInlineClassNodeList(node.inlineClasses);
writeFieldNodeList(node.fields);
procedureOffsets = <int>[];
writeProcedureNodeList(node.procedures);
@ -2466,12 +2466,12 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
}
@override
void visitViewType(ViewType node) {
writeByte(Tag.ViewType);
void visitInlineType(InlineType node) {
writeByte(Tag.InlineType);
writeByte(node.nullability.index);
writeNonNullReference(node.viewReference);
writeNonNullReference(node.inlineClassReference);
writeNodeList(node.typeArguments);
writeNode(node.representationType);
writeNode(node.instantiatedRepresentationType);
}
@override
@ -2655,12 +2655,12 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
}
@override
void visitView(View node) {
void visitInlineClass(InlineClass node) {
CanonicalName? canonicalName = node.reference.canonicalName;
if (canonicalName == null) {
throw new ArgumentError('Missing canonical name for $node');
}
writeByte(Tag.View);
writeByte(Tag.InlineClass);
_writeNonNullCanonicalName(canonicalName);
writeStringReference(node.name);
writeAnnotationList(node.annotations);
@ -2670,13 +2670,13 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
enterScope(typeParameters: node.typeParameters);
writeNodeList(node.typeParameters);
writeDartType(node.representationType);
writeDartType(node.declaredRepresentationType);
leaveScope(typeParameters: node.typeParameters);
final int len = node.members.length;
writeUInt30(len);
for (int i = 0; i < len; i++) {
final ViewMemberDescriptor descriptor = node.members[i];
final InlineClassMemberDescriptor descriptor = node.members[i];
writeName(descriptor.name);
writeByte(descriptor.kind.index);
writeByte(descriptor.flags);
@ -2783,8 +2783,8 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
}
@override
void visitViewReference(View node) {
throw new UnsupportedError('serialization of View references');
void visitInlineClassReference(InlineClass node) {
throw new UnsupportedError('serialization of InlineClass references');
}
@override

View file

@ -10,7 +10,7 @@ class Tag {
static const int Class = 2;
static const int Extension = 115;
static const int View = 85;
static const int InlineClass = 85;
static const int FunctionNode = 3;
@ -81,7 +81,7 @@ class Tag {
static const int BlockExpression = 82;
static const int TypedefTearOff = 83;
static const int RedirectingFactoryTearOff = 84;
// 85 is occupied by [View].
// 85 is occupied by [InlineClass].
static const int RecordIndexGet = 101;
static const int RecordNameGet = 102;
@ -135,7 +135,7 @@ class Tag {
// 82 is occupied by [BlockExpression] (expression).
// 83 is occupied by [TypedefTearOff] (expression).
// 84 is occupied by [RedirectingFactoryTearOff] (expression).
// 85 is occupied by [View].
// 85 is occupied by [InlineClass].
// Types
static const int TypedefType = 87;
@ -153,7 +153,7 @@ class Tag {
static const int RecordType = 100;
// 101 is occupied by [RecordIndexGet] (expression).
// 102 is occupied by [RecordNameGet] (expression).
static const int ViewType = 103;
static const int InlineType = 103;
// 104 is occupied by [RecordLiteral] (expression).
// 105 is occupied by [ConstRecordLiteral] (expression).

View file

@ -554,11 +554,11 @@ class Reference {
return node as Extension;
}
View get asView {
InlineClass get asInlineClass {
if (node == null) {
throw '$this is not bound to an AST node. A view was expected';
throw '$this is not bound to an AST node. An inline class was expected';
}
return node as View;
return node as InlineClass;
}
bool get isConsistent {

View file

@ -73,8 +73,8 @@ class CloneVisitorNotMembers implements TreeVisitor<TreeNode> {
}
@override
TreeNode visitView(View node) {
throw 'Cloning of views is not implemented';
TreeNode visitInlineClass(InlineClass node) {
throw 'Cloning of inline classes is not implemented';
}
@override

View file

@ -1135,10 +1135,11 @@ class CoreTypes {
return isTop(type.typeArgument);
}
// If the representation type, R, is a top type then the view type, V0, is a
// top type, otherwise V0 is a proper subtype of Object?.
if (type is ViewType) {
return isTop(type.representationType);
// If the instantiated representation type, R, is a top type then the inline
// type, V0, is a top type, otherwise V0 is a proper subtype of Object?.
// TODO(johnniwinther): Is this correct?
if (type is InlineType) {
return isTop(type.instantiatedRepresentationType);
}
return false;

View file

@ -16,7 +16,7 @@ import "ast.dart"
ProcedureKind,
Reference,
Typedef,
View;
InlineClass;
class ReferenceFromIndex {
Map<Library, IndexedLibrary> _indexedLibraries =
@ -85,7 +85,8 @@ class IndexedLibrary extends IndexedContainer {
final Map<String, IndexedClass> _indexedClasses =
new Map<String, IndexedClass>();
final Map<String, Extension> _extensions = new Map<String, Extension>();
final Map<String, View> _views = new Map<String, View>();
final Map<String, InlineClass> _inlineClasses =
new Map<String, InlineClass>();
@override
final Library library;
@ -112,10 +113,10 @@ class IndexedLibrary extends IndexedContainer {
_extensions[extension.name] = extension;
}
}
for (int i = 0; i < library.views.length; i++) {
View view = library.views[i];
assert(_views[view.name] == null);
_views[view.name] = view;
for (int i = 0; i < library.inlineClasses.length; i++) {
InlineClass inlineClass = library.inlineClasses[i];
assert(_inlineClasses[inlineClass.name] == null);
_inlineClasses[inlineClass.name] = inlineClass;
}
_addProcedures(library.procedures);
_addFields(library.fields);
@ -144,7 +145,7 @@ class IndexedLibrary extends IndexedContainer {
Class? lookupClass(String name) => _classes[name];
IndexedClass? lookupIndexedClass(String name) => _indexedClasses[name];
Extension? lookupExtension(String name) => _extensions[name];
View? lookupView(String name) => _views[name];
InlineClass? lookupInlineClass(String name) => _inlineClasses[name];
}
class IndexedClass extends IndexedContainer {

View file

@ -32,7 +32,8 @@ class TypeVariableGraph extends Graph<int> {
// Dummy value.
-1);
Map<TypeParameter, int> typeParameterIndices = <TypeParameter, int>{};
edges = new List<List<int>>.filled(typeParameters.length,
edges = new List<List<int>>.filled(
typeParameters.length,
// Dummy value.
const []);
for (int i = 0; i < vertices.length; i++) {
@ -86,7 +87,7 @@ class OccurrenceCollectorVisitor implements DartTypeVisitor<void> {
}
@override
void visitViewType(ViewType node) {
void visitInlineType(InlineType node) {
for (DartType argument in node.typeArguments) {
argument.accept(this);
}
@ -811,14 +812,14 @@ class VarianceCalculator
}
@override
int visitViewType(
ViewType node, Map<TypeParameter, Map<DartType, int>> computedVariances) {
int visitInlineType(InlineType node,
Map<TypeParameter, Map<DartType, int>> computedVariances) {
int result = Variance.unrelated;
for (int i = 0; i < node.typeArguments.length; ++i) {
result = Variance.meet(
result,
Variance.combine(
node.view.typeParameters[i].variance,
node.inlineClass.typeParameters[i].variance,
computeVariance(typeParameter, node.typeArguments[i],
computedVariances: computedVariances)));
}

View file

@ -42,8 +42,8 @@ class CoverageVisitor implements Visitor<void> {
}
@override
void visitView(View node) {
visited.add(NodeKind.View);
void visitInlineClass(InlineClass node) {
visited.add(NodeKind.InlineClass);
node.visitChildren(this);
}
@ -768,8 +768,8 @@ class CoverageVisitor implements Visitor<void> {
}
@override
void visitViewType(ViewType node) {
visited.add(DartTypeKind.ViewType);
void visitInlineType(InlineType node) {
visited.add(DartTypeKind.InlineType);
node.visitChildren(this);
}
@ -921,7 +921,7 @@ class CoverageVisitor implements Visitor<void> {
@override
void visitExtensionReference(Extension node) {}
@override
void visitViewReference(View node) {}
void visitInlineClassReference(InlineClass node) {}
@override
void defaultMemberReference(Member node) {}
@override
@ -1053,6 +1053,7 @@ enum NodeKind {
Component,
Extension,
FunctionNode,
InlineClass,
Library,
LibraryDependency,
LibraryPart,
@ -1064,7 +1065,6 @@ enum NodeKind {
SwitchCase,
TypeParameter,
Typedef,
View,
}
enum MemberKind {
@ -1180,6 +1180,7 @@ enum DartTypeKind {
ExtensionType,
FunctionType,
FutureOrType,
InlineType,
InterfaceType,
IntersectionType,
InvalidType,
@ -1188,7 +1189,6 @@ enum DartTypeKind {
RecordType,
TypeParameterType,
TypedefType,
ViewType,
VoidType,
}

View file

@ -201,18 +201,18 @@ class DartTypeEquivalence implements DartTypeVisitor1<bool, DartType> {
}
@override
bool visitViewType(ViewType node, DartType other) {
bool visitInlineType(InlineType node, DartType other) {
// First, check Object*, Object?.
if (equateTopTypes && coreTypes.isTop(node)) {
return coreTypes.isTop(other);
}
if (other is ViewType) {
if (other is InlineType) {
if (!_checkAndRegisterNullabilities(
node.declaredNullability, other.declaredNullability)) {
return false;
}
if (node.view != other.view) {
if (node.inlineClass != other.inlineClass) {
return false;
}
assert(node.typeArguments.length == other.typeArguments.length);

View file

@ -56,8 +56,8 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
}
@override
bool visitView(View node, Node other) {
return strategy.checkView(this, node, other);
bool visitInlineClass(InlineClass node, Node other) {
return strategy.checkInlineClass(this, node, other);
}
@override
@ -686,8 +686,8 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
}
@override
bool visitViewType(ViewType node, Node other) {
return strategy.checkViewType(this, node, other);
bool visitInlineType(InlineType node, Node other) {
return strategy.checkInlineType(this, node, other);
}
@override
@ -828,7 +828,7 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
}
@override
bool visitViewReference(View node, Node other) {
bool visitInlineClassReference(InlineClass node, Node other) {
return false;
}
@ -1478,7 +1478,7 @@ class EquivalenceStrategy {
if (!checkLibrary_extensions(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkLibrary_views(visitor, node, other)) {
if (!checkLibrary_inlineClasses(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkLibrary_procedures(visitor, node, other)) {
@ -1700,61 +1700,62 @@ class EquivalenceStrategy {
return result;
}
bool checkViewMemberDescriptor(
EquivalenceVisitor visitor, ViewMemberDescriptor? node, Object? other) {
bool checkInlineClassMemberDescriptor(EquivalenceVisitor visitor,
InlineClassMemberDescriptor? node, Object? other) {
if (identical(node, other)) return true;
if (node is! ViewMemberDescriptor) return false;
if (other is! ViewMemberDescriptor) return false;
if (node is! InlineClassMemberDescriptor) return false;
if (other is! InlineClassMemberDescriptor) return false;
bool result = true;
if (!checkViewMemberDescriptor_name(visitor, node, other)) {
if (!checkInlineClassMemberDescriptor_name(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewMemberDescriptor_kind(visitor, node, other)) {
if (!checkInlineClassMemberDescriptor_kind(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewMemberDescriptor_flags(visitor, node, other)) {
if (!checkInlineClassMemberDescriptor_flags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewMemberDescriptor_member(visitor, node, other)) {
if (!checkInlineClassMemberDescriptor_member(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
return result;
}
bool checkView(EquivalenceVisitor visitor, View? node, Object? other) {
bool checkInlineClass(
EquivalenceVisitor visitor, InlineClass? node, Object? other) {
if (identical(node, other)) return true;
if (node is! View) return false;
if (other is! View) return false;
if (node is! InlineClass) return false;
if (other is! InlineClass) return false;
if (!visitor.matchNamedNodes(node, other)) {
return false;
}
visitor.pushNodeState(node, other);
bool result = true;
if (!checkView_name(visitor, node, other)) {
if (!checkInlineClass_name(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_fileUri(visitor, node, other)) {
if (!checkInlineClass_fileUri(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_typeParameters(visitor, node, other)) {
if (!checkInlineClass_typeParameters(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_representationType(visitor, node, other)) {
if (!checkInlineClass_declaredRepresentationType(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_members(visitor, node, other)) {
if (!checkInlineClass_members(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_annotations(visitor, node, other)) {
if (!checkInlineClass_annotations(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_flags(visitor, node, other)) {
if (!checkInlineClass_flags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_reference(visitor, node, other)) {
if (!checkInlineClass_reference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkView_fileOffset(visitor, node, other)) {
if (!checkInlineClass_fileOffset(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
visitor.popState();
@ -4434,23 +4435,23 @@ class EquivalenceStrategy {
return result;
}
bool checkViewType(
EquivalenceVisitor visitor, ViewType? node, Object? other) {
bool checkInlineType(
EquivalenceVisitor visitor, InlineType? node, Object? other) {
if (identical(node, other)) return true;
if (node is! ViewType) return false;
if (other is! ViewType) return false;
if (node is! InlineType) return false;
if (other is! InlineType) return false;
visitor.pushNodeState(node, other);
bool result = true;
if (!checkViewType_viewReference(visitor, node, other)) {
if (!checkInlineType_inlineClassReference(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewType_declaredNullability(visitor, node, other)) {
if (!checkInlineType_declaredNullability(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewType_typeArguments(visitor, node, other)) {
if (!checkInlineType_typeArguments(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkViewType_representationType(visitor, node, other)) {
if (!checkInlineType_instantiatedRepresentationType(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
visitor.popState();
@ -4927,10 +4928,10 @@ class EquivalenceStrategy {
node.extensions, other.extensions, visitor.checkNodes, 'extensions');
}
bool checkLibrary_views(
bool checkLibrary_inlineClasses(
EquivalenceVisitor visitor, Library node, Library other) {
return visitor.checkLists(
node.views, other.views, visitor.checkNodes, 'views');
return visitor.checkLists(node.inlineClasses, other.inlineClasses,
visitor.checkNodes, 'inlineClasses');
}
bool checkLibrary_procedures(
@ -5247,70 +5248,76 @@ class EquivalenceStrategy {
return checkNamedNode_fileOffset(visitor, node, other);
}
bool checkView_name(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_name(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkValues(node.name, other.name, 'name');
}
bool checkView_fileUri(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_fileUri(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkValues(node.fileUri, other.fileUri, 'fileUri');
}
bool checkView_typeParameters(
EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_typeParameters(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkLists(node.typeParameters, other.typeParameters,
visitor.checkNodes, 'typeParameters');
}
bool checkView_representationType(
EquivalenceVisitor visitor, View node, View other) {
return visitor.checkNodes(node.representationType, other.representationType,
'representationType');
bool checkInlineClass_declaredRepresentationType(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkNodes(node.declaredRepresentationType,
other.declaredRepresentationType, 'declaredRepresentationType');
}
bool checkViewMemberDescriptor_name(EquivalenceVisitor visitor,
ViewMemberDescriptor node, ViewMemberDescriptor other) {
bool checkInlineClassMemberDescriptor_name(EquivalenceVisitor visitor,
InlineClassMemberDescriptor node, InlineClassMemberDescriptor other) {
return visitor.checkNodes(node.name, other.name, 'name');
}
bool checkViewMemberDescriptor_kind(EquivalenceVisitor visitor,
ViewMemberDescriptor node, ViewMemberDescriptor other) {
bool checkInlineClassMemberDescriptor_kind(EquivalenceVisitor visitor,
InlineClassMemberDescriptor node, InlineClassMemberDescriptor other) {
return visitor.checkValues(node.kind, other.kind, 'kind');
}
bool checkViewMemberDescriptor_flags(EquivalenceVisitor visitor,
ViewMemberDescriptor node, ViewMemberDescriptor other) {
bool checkInlineClassMemberDescriptor_flags(EquivalenceVisitor visitor,
InlineClassMemberDescriptor node, InlineClassMemberDescriptor other) {
return visitor.checkValues(node.flags, other.flags, 'flags');
}
bool checkViewMemberDescriptor_member(EquivalenceVisitor visitor,
ViewMemberDescriptor node, ViewMemberDescriptor other) {
bool checkInlineClassMemberDescriptor_member(EquivalenceVisitor visitor,
InlineClassMemberDescriptor node, InlineClassMemberDescriptor other) {
return visitor.checkReferences(node.member, other.member, 'member');
}
bool checkView_members(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_members(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkLists(node.members, other.members, (a, b, _) {
if (identical(a, b)) return true;
if (a is! ViewMemberDescriptor) return false;
if (b is! ViewMemberDescriptor) return false;
return checkViewMemberDescriptor(visitor, a, b);
if (a is! InlineClassMemberDescriptor) return false;
if (b is! InlineClassMemberDescriptor) return false;
return checkInlineClassMemberDescriptor(visitor, a, b);
}, 'members');
}
bool checkView_annotations(
EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_annotations(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkLists(
node.annotations, other.annotations, visitor.checkNodes, 'annotations');
}
bool checkView_flags(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_flags(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return visitor.checkValues(node.flags, other.flags, 'flags');
}
bool checkView_reference(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_reference(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return checkNamedNode_reference(visitor, node, other);
}
bool checkView_fileOffset(EquivalenceVisitor visitor, View node, View other) {
bool checkInlineClass_fileOffset(
EquivalenceVisitor visitor, InlineClass node, InlineClass other) {
return checkNamedNode_fileOffset(visitor, node, other);
}
@ -7765,28 +7772,28 @@ class EquivalenceStrategy {
return visitor.checkNodes(node.onType, other.onType, 'onType');
}
bool checkViewType_viewReference(
EquivalenceVisitor visitor, ViewType node, ViewType other) {
return visitor.checkReferences(
node.viewReference, other.viewReference, 'viewReference');
bool checkInlineType_inlineClassReference(
EquivalenceVisitor visitor, InlineType node, InlineType other) {
return visitor.checkReferences(node.inlineClassReference,
other.inlineClassReference, 'inlineClassReference');
}
bool checkViewType_declaredNullability(
EquivalenceVisitor visitor, ViewType node, ViewType other) {
bool checkInlineType_declaredNullability(
EquivalenceVisitor visitor, InlineType node, InlineType other) {
return visitor.checkValues(node.declaredNullability,
other.declaredNullability, 'declaredNullability');
}
bool checkViewType_typeArguments(
EquivalenceVisitor visitor, ViewType node, ViewType other) {
bool checkInlineType_typeArguments(
EquivalenceVisitor visitor, InlineType node, InlineType other) {
return visitor.checkLists(node.typeArguments, other.typeArguments,
visitor.checkNodes, 'typeArguments');
}
bool checkViewType_representationType(
EquivalenceVisitor visitor, ViewType node, ViewType other) {
return visitor.checkNodes(node.representationType, other.representationType,
'representationType');
bool checkInlineType_instantiatedRepresentationType(
EquivalenceVisitor visitor, InlineType node, InlineType other) {
return visitor.checkNodes(node.instantiatedRepresentationType,
other.instantiatedRepresentationType, 'instantiatedRepresentationType');
}
bool checkIntersectionType_left(EquivalenceVisitor visitor,

View file

@ -106,7 +106,7 @@ class FutureValueTypeVisitor implements DartTypeVisitor1<DartType, CoreTypes> {
}
@override
DartType visitViewType(DartType node, CoreTypes coreTypes) {
DartType visitInlineType(DartType node, CoreTypes coreTypes) {
// Otherwise, for all S, futureValueType(S) = Object?.
return coreTypes.objectNullableRawType;
}

View file

@ -252,13 +252,13 @@ class MergeVisitor implements DartTypeVisitor1<DartType?, DartType> {
}
@override
DartType? visitViewType(ViewType a, DartType b) {
if (b is ViewType &&
a.view == b.view &&
DartType? visitInlineType(InlineType a, DartType b) {
if (b is InlineType &&
a.inlineClass == b.inlineClass &&
a.typeArguments.length == b.typeArguments.length) {
Nullability? nullability = mergeNullability(a.nullability, b.nullability);
if (nullability != null) {
return mergeViewTypes(a, b, nullability);
return mergeInlineTypes(a, b, nullability);
}
}
if (b is InvalidType) {
@ -267,11 +267,12 @@ class MergeVisitor implements DartTypeVisitor1<DartType?, DartType> {
return null;
}
DartType? mergeViewTypes(ViewType a, ViewType b, Nullability nullability) {
assert(a.view == b.view);
DartType? mergeInlineTypes(
InlineType a, InlineType b, Nullability nullability) {
assert(a.inlineClass == b.inlineClass);
assert(a.typeArguments.length == b.typeArguments.length);
if (a.typeArguments.isEmpty) {
return new ViewType(a.view, nullability);
return new InlineType(a.inlineClass, nullability);
}
List<DartType> newTypeArguments =
new List<DartType>.filled(a.typeArguments.length, dummyDartType);
@ -282,7 +283,7 @@ class MergeVisitor implements DartTypeVisitor1<DartType?, DartType> {
}
newTypeArguments[i] = newType;
}
return new ViewType(a.view, nullability, newTypeArguments);
return new InlineType(a.inlineClass, nullability, newTypeArguments);
}
@override

View file

@ -45,7 +45,7 @@ class NodeCreator {
List<Library> _neededLibraries = [];
List<Class> _neededClasses = [];
List<Extension> _neededExtensions = [];
List<View> _neededViews = [];
List<InlineClass> _neededInlineClasses = [];
List<Typedef> _neededTypedefs = [];
List<TypeParameter> _neededTypeParameters = [];
List<Constructor> _neededConstructors = [];
@ -312,8 +312,8 @@ class NodeCreator {
case NodeKind.Typedef:
_needLibrary().addTypedef(node as Typedef);
break;
case NodeKind.View:
_needLibrary().addView(node as View);
case NodeKind.InlineClass:
_needLibrary().addInlineClass(node as InlineClass);
break;
}
}
@ -384,20 +384,22 @@ class NodeCreator {
return extension;
}
/// Returns a [View] node that fits the requirements.
/// Returns an [InlineClass] node that fits the requirements.
///
/// If no such [View] exists in [_neededViews], a new [Extension] is
/// created and added to [_neededViews].
/// If no such [InlineClass] exists in [_neededInlineClasses], a new
/// [InlineClass] is created and added to [_neededInlineClasses].
// TODO(johnniwinther): Add requirements when/where needed.
View _needView() {
for (View view in _neededViews) {
return view;
InlineClass _needInlineClass() {
for (InlineClass inlineClass in _neededInlineClasses) {
return inlineClass;
}
View view = View(
name: 'foo', fileUri: _uri, representationType: const DynamicType());
_neededViews.add(view);
_needLibrary().addView(view);
return view;
InlineClass inlineClass = InlineClass(
name: 'foo',
fileUri: _uri,
declaredRepresentationType: const DynamicType());
_neededInlineClasses.add(inlineClass);
_needLibrary().addInlineClass(inlineClass);
return inlineClass;
}
/// Returns a [Typedef] node that fits the requirements.
@ -1208,8 +1210,8 @@ class NodeCreator {
// TODO(johnniwinther): Create non-trivial cases.
() => TypedefType(_needTypedef(), Nullability.nonNullable, []),
]);
case DartTypeKind.ViewType:
return ViewType(_needView(), Nullability.nonNullable);
case DartTypeKind.InlineType:
return InlineType(_needInlineClass(), Nullability.nonNullable);
case DartTypeKind.VoidType:
return VoidType();
}
@ -1567,11 +1569,11 @@ class NodeCreator {
case NodeKind.Typedef:
return Typedef('foo', _createDartType(), fileUri: _uri)
..fileOffset = _needFileOffset();
case NodeKind.View:
case NodeKind.InlineClass:
// TODO(johnniwinther): Add non-trivial cases.
return View(name: 'foo', fileUri: _uri)
return InlineClass(name: 'foo', fileUri: _uri)
..fileOffset = _needFileOffset()
..representationType = _createDartType();
..declaredRepresentationType = _createDartType();
}
}

View file

@ -119,7 +119,7 @@ class _NonNullVisitor implements DartTypeVisitor<DartType?> {
}
@override
DartType? visitViewType(ViewType node) {
DartType? visitInlineType(InlineType node) {
// NonNull(T?) = NonNull(T)
//
// NonNull(T*) = NonNull(T)

View file

@ -118,8 +118,8 @@ class AstPrinter {
includeLibraryName: _strategy.includeLibraryNamesInMembers));
}
void writeViewName(Reference? reference) {
_sb.write(qualifiedViewNameToStringByReference(reference,
void writeInlineClassName(Reference? reference) {
_sb.write(qualifiedInlineClassNameToStringByReference(reference,
includeLibraryName: _strategy.includeLibraryNamesInMembers));
}

View file

@ -344,27 +344,31 @@ class ReplacementVisitor implements DartTypeVisitor1<DartType?, int> {
}
@override
DartType? visitViewType(ViewType node, int variance) {
DartType? visitInlineType(InlineType node, int variance) {
Nullability? newNullability = visitNullability(node);
List<DartType>? newTypeArguments = null;
for (int i = 0; i < node.typeArguments.length; i++) {
DartType? substitution = node.typeArguments[i].accept1(this,
Variance.combine(variance, node.view.typeParameters[i].variance));
DartType? substitution = node.typeArguments[i].accept1(
this,
Variance.combine(
variance, node.inlineClass.typeParameters[i].variance));
if (substitution != null) {
newTypeArguments ??= node.typeArguments.toList(growable: false);
newTypeArguments[i] = substitution;
}
}
return createViewType(node, newNullability, newTypeArguments);
return createInlineType(node, newNullability, newTypeArguments);
}
DartType? createViewType(ViewType node, Nullability? newNullability,
DartType? createInlineType(InlineType node, Nullability? newNullability,
List<DartType>? newTypeArguments) {
if (newNullability == null && newTypeArguments == null) {
// No nullability or type arguments needed to be substituted.
return null;
} else {
return new ViewType(node.view, newNullability ?? node.nullability,
return new InlineType(
node.inlineClass,
newNullability ?? node.nullability,
newTypeArguments ?? node.typeArguments);
}
}

View file

@ -150,23 +150,24 @@ String extensionNameToString(Extension? node) {
return node == null ? 'null' : node.name;
}
String qualifiedViewNameToString(View node, {bool includeLibraryName = false}) {
String qualifiedInlineClassNameToString(InlineClass node,
{bool includeLibraryName = false}) {
TreeNode? parent = node.parent;
if (parent is Library && includeLibraryName) {
return libraryNameToString(parent) + '::' + viewNameToString(node);
return libraryNameToString(parent) + '::' + inlineClassNameToString(node);
} else {
return viewNameToString(node);
return inlineClassNameToString(node);
}
}
String qualifiedViewNameToStringByReference(Reference? reference,
String qualifiedInlineClassNameToStringByReference(Reference? reference,
{bool includeLibraryName = false}) {
if (reference == null) {
return '<missing-view-reference>';
return '<missing-inline-class-reference>';
} else {
View? node = reference.node as View?;
InlineClass? node = reference.node as InlineClass?;
if (node != null) {
return qualifiedViewNameToString(node,
return qualifiedInlineClassNameToString(node,
includeLibraryName: includeLibraryName);
} else {
CanonicalName? canonicalName = reference.canonicalName;
@ -174,13 +175,13 @@ String qualifiedViewNameToStringByReference(Reference? reference,
return qualifiedCanonicalNameToString(canonicalName,
includeLibraryName: includeLibraryName);
} else {
return '<unlinked-view-reference>';
return '<unlinked-inline-class-reference>';
}
}
}
}
String viewNameToString(View? node) {
String inlineClassNameToString(InlineClass? node) {
return node == null ? 'null' : node.name;
}

View file

@ -117,8 +117,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is FunctionType) {
const IsFunctionSubtypeOf relation = const IsFunctionSubtypeOf();
@ -142,8 +142,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is TypeParameterType) {
const IsTypeParameterSubtypeOf relation =
@ -168,8 +168,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is IntersectionType) {
const IsIntersectionSubtypeOf relation = const IsIntersectionSubtypeOf();
@ -193,8 +193,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is TypedefType) {
const IsTypedefSubtypeOf relation = const IsTypedefSubtypeOf();
@ -218,8 +218,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is FutureOrType) {
const IsFutureOrSubtypeOf relation = const IsFutureOrSubtypeOf();
@ -243,8 +243,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is NullType) {
const IsNullTypeSubtypeOf relation = const IsNullTypeSubtypeOf();
@ -268,8 +268,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is NeverType) {
const IsNeverTypeSubtypeOf relation = const IsNeverTypeSubtypeOf();
@ -293,8 +293,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is RecordType) {
const IsRecordSubtypeOf relation = const IsRecordSubtypeOf();
@ -319,8 +319,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is ExtensionType) {
const IsExtensionTypeSubtypeOf relation =
@ -346,11 +346,11 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else if (t is ViewType) {
const IsViewTypeSubtypeOf relation = const IsViewTypeSubtypeOf();
} else if (t is InlineType) {
const IsInlineTypeSubtypeOf relation = const IsInlineTypeSubtypeOf();
if (s is DynamicType) {
return relation.isDynamicRelated(s, t, this);
} else if (s is VoidType) {
@ -372,8 +372,8 @@ class Types with StandardBounds {
return relation.isExtensionRelated(s, t, this);
} else if (s is RecordType) {
return relation.isRecordRelated(s, t, this);
} else if (s is ViewType) {
return relation.isViewTypeRelated(s, t, this);
} else if (s is InlineType) {
return relation.isInlineTypeRelated(s, t, this);
}
} else {
throw "Unhandled type: ${t.runtimeType}";
@ -462,7 +462,7 @@ abstract class TypeRelation<T extends DartType> {
IsSubtypeOf isRecordRelated(RecordType s, T t, Types types);
IsSubtypeOf isViewTypeRelated(ViewType s, T t, Types types);
IsSubtypeOf isInlineTypeRelated(InlineType s, T t, Types types);
}
class IsInterfaceSubtypeOf extends TypeRelation<InterfaceType> {
@ -549,7 +549,7 @@ class IsInterfaceSubtypeOf extends TypeRelation<InterfaceType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, InterfaceType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, InterfaceType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -738,7 +738,7 @@ class IsFunctionSubtypeOf extends TypeRelation<FunctionType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, FunctionType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, FunctionType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -829,7 +829,7 @@ class IsRecordSubtypeOf extends TypeRelation<RecordType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, RecordType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, RecordType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -925,7 +925,8 @@ class IsTypeParameterSubtypeOf extends TypeRelation<TypeParameterType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, TypeParameterType t, Types types) {
IsSubtypeOf isInlineTypeRelated(
InlineType s, TypeParameterType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -986,7 +987,7 @@ class IsTypedefSubtypeOf extends TypeRelation<TypedefType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, TypedefType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, TypedefType t, Types types) {
return types.performNullabilityAwareSubtypeCheck(s, t.unalias);
}
}
@ -1132,7 +1133,7 @@ class IsFutureOrSubtypeOf extends TypeRelation<FutureOrType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, FutureOrType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, FutureOrType t, Types types) {
// Rule 11.
return types.performNullabilityAwareSubtypeCheck(
s, t.typeArgument.withDeclaredNullability(t.nullability));
@ -1209,7 +1210,8 @@ class IsIntersectionSubtypeOf extends TypeRelation<IntersectionType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, IntersectionType t, Types types) {
IsSubtypeOf isInlineTypeRelated(
InlineType s, IntersectionType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -1274,7 +1276,7 @@ class IsNullTypeSubtypeOf implements TypeRelation<NullType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, NullType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, NullType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -1337,7 +1339,7 @@ class IsNeverTypeSubtypeOf implements TypeRelation<NeverType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, NeverType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, NeverType t, Types types) {
return const IsSubtypeOf.never();
}
}
@ -1408,75 +1410,75 @@ class IsExtensionTypeSubtypeOf implements TypeRelation<ExtensionType> {
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, ExtensionType t, Types types) {
IsSubtypeOf isInlineTypeRelated(InlineType s, ExtensionType t, Types types) {
return const IsSubtypeOf.never();
}
}
class IsViewTypeSubtypeOf implements TypeRelation<ViewType> {
const IsViewTypeSubtypeOf();
class IsInlineTypeSubtypeOf implements TypeRelation<InlineType> {
const IsInlineTypeSubtypeOf();
@override
IsSubtypeOf isDynamicRelated(DynamicType s, ViewType t, Types types) {
IsSubtypeOf isDynamicRelated(DynamicType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isVoidRelated(VoidType s, ViewType t, Types types) {
IsSubtypeOf isVoidRelated(VoidType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isInterfaceRelated(InterfaceType s, ViewType t, Types types) {
IsSubtypeOf isInterfaceRelated(InterfaceType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isIntersectionRelated(
IntersectionType intersection, ViewType t, Types types) {
IntersectionType intersection, InlineType t, Types types) {
return types.performNullabilityAwareSubtypeCheck(intersection.right, t);
}
@override
IsSubtypeOf isFunctionRelated(FunctionType s, ViewType t, Types types) {
IsSubtypeOf isFunctionRelated(FunctionType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isFutureOrRelated(FutureOrType s, ViewType t, Types types) {
IsSubtypeOf isFutureOrRelated(FutureOrType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isTypeParameterRelated(
TypeParameterType s, ViewType t, Types types) {
TypeParameterType s, InlineType t, Types types) {
return types.performNullabilityAwareSubtypeCheck(s.bound, t);
}
@override
IsSubtypeOf isTypedefRelated(TypedefType s, ViewType t, Types types) {
IsSubtypeOf isTypedefRelated(TypedefType s, InlineType t, Types types) {
return types.performNullabilityAwareSubtypeCheck(s.unalias, t);
}
@override
IsSubtypeOf isExtensionRelated(ExtensionType s, ViewType t, Types types) {
IsSubtypeOf isExtensionRelated(ExtensionType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isRecordRelated(RecordType s, ViewType t, Types types) {
IsSubtypeOf isRecordRelated(RecordType s, InlineType t, Types types) {
return const IsSubtypeOf.never();
}
@override
IsSubtypeOf isViewTypeRelated(ViewType s, ViewType t, Types types) {
if (s.view != t.view) {
// TODO(johnniwinther): Support view interfaces.
IsSubtypeOf isInlineTypeRelated(InlineType s, InlineType t, Types types) {
if (s.inlineClass != t.inlineClass) {
// TODO(johnniwinther): Support inline class interfaces.
return const IsSubtypeOf.never();
}
return types
.areTypeArgumentsOfSubtypeKernel(
s.typeArguments, t.typeArguments, t.view.typeParameters)
s.typeArguments, t.typeArguments, t.inlineClass.typeParameters)
.and(new IsSubtypeOf.basedSolelyOnNullabilities(s, t));
}
}

View file

@ -343,7 +343,7 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
return node.name;
}
String getViewName(View node) {
String getInlineClassName(InlineClass node) {
return node.name;
}
@ -363,10 +363,10 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
return '$library::$name';
}
String getViewReference(View node) {
String getInlineClassReference(InlineClass node) {
// ignore: unnecessary_null_comparison
if (node == null) return '<No View>';
String name = getViewName(node);
if (node == null) return '<No InlineClass>';
String name = getInlineClassName(node);
String library = getLibraryReference(node.enclosingLibrary);
return '$library::$name';
}
@ -516,7 +516,7 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
library.typedefs.forEach(writeNode);
library.classes.forEach(writeNode);
library.extensions.forEach(writeNode);
library.views.forEach(writeNode);
library.inlineClasses.forEach(writeNode);
library.fields.forEach(writeNode);
library.procedures.forEach(writeNode);
}
@ -997,15 +997,15 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
throw "Neither node nor canonical name found";
}
void writeViewReferenceFromReference(Reference reference) {
writeWord(getViewReferenceFromReference(reference));
void writeInlineClassReferenceFromReference(Reference reference) {
writeWord(getInlineClassReferenceFromReference(reference));
}
String getViewReferenceFromReference(Reference reference) {
String getInlineClassReferenceFromReference(Reference reference) {
// ignore: unnecessary_null_comparison
if (reference == null) return '<No Extension>';
if (reference.node != null) {
return getViewReference(reference.asView);
return getInlineClassReference(reference.asInlineClass);
}
if (reference.canonicalName != null) {
return getCanonicalNameString(reference.canonicalName!);
@ -1477,14 +1477,14 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
}
@override
void visitView(View node) {
void visitInlineClass(InlineClass node) {
writeAnnotationList(node.annotations);
writeIndentation();
writeWord('view');
writeWord(getViewName(node));
writeWord('inline class');
writeWord(getInlineClassName(node));
writeTypeParameterList(node.typeParameters);
writeWord('/* representationType =');
writeType(node.representationType);
writeWord('/* declaredRepresentationType =');
writeType(node.declaredRepresentationType);
writeWord('*/');
String endLineString = ' {';
@ -1494,32 +1494,32 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
endLine(endLineString);
++indentation;
node.members.forEach((ViewMemberDescriptor descriptor) {
node.members.forEach((InlineClassMemberDescriptor descriptor) {
writeIndentation();
writeModifier(descriptor.isStatic, 'static');
switch (descriptor.kind) {
case ViewMemberKind.Constructor:
case InlineClassMemberKind.Constructor:
writeWord('constructor');
break;
case ViewMemberKind.Factory:
case InlineClassMemberKind.Factory:
writeWord('factory');
break;
case ViewMemberKind.Method:
case InlineClassMemberKind.Method:
writeWord('method');
break;
case ViewMemberKind.Getter:
case InlineClassMemberKind.Getter:
writeWord('get');
break;
case ViewMemberKind.Setter:
case InlineClassMemberKind.Setter:
writeWord('set');
break;
case ViewMemberKind.Operator:
case InlineClassMemberKind.Operator:
writeWord('operator');
break;
case ViewMemberKind.Field:
case InlineClassMemberKind.Field:
writeWord('field');
break;
case ViewMemberKind.TearOff:
case InlineClassMemberKind.TearOff:
writeWord('tearoff');
break;
}
@ -2778,8 +2778,8 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
}
@override
void visitViewType(ViewType node) {
writeViewReferenceFromReference(node.viewReference);
void visitInlineType(InlineType node) {
writeInlineClassReferenceFromReference(node.inlineClassReference);
if (node.typeArguments.isNotEmpty) {
writeSymbol('<');
writeList(node.typeArguments, writeType);

View file

@ -341,7 +341,7 @@ class _AllFreeTypeVariablesVisitor implements DartTypeVisitor<void> {
}
@override
void visitViewType(ViewType node) {
void visitInlineType(InlineType node) {
for (DartType typeArgument in node.typeArguments) {
typeArgument.accept(this);
}
@ -732,12 +732,12 @@ abstract class _TypeSubstitutor implements DartTypeVisitor<DartType> {
}
@override
DartType visitViewType(ViewType node) {
DartType visitInlineType(InlineType node) {
if (node.typeArguments.isEmpty) return node;
int before = useCounter;
List<DartType> typeArguments = node.typeArguments.map(visit).toList();
if (useCounter == before) return node;
return new ViewType(node.view, node.nullability, typeArguments);
return new InlineType(node.inlineClass, node.nullability, typeArguments);
}
@override
@ -949,7 +949,7 @@ class _OccurrenceVisitor implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return node.typeArguments.any(visit);
}
@ -1033,7 +1033,7 @@ class _FreeFunctionTypeVariableVisitor implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return node.typeArguments.any(visit);
}
@ -1121,7 +1121,7 @@ class _FreeTypeVariableVisitor implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return node.typeArguments.any(visit);
}
@ -1249,7 +1249,7 @@ class _PrimitiveTypeVerifier implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
return node.typeArguments.isEmpty;
}
@ -1334,7 +1334,7 @@ class _NullabilityConstructorUnwrapper
}
@override
DartType visitViewType(ViewType node, CoreTypes coreTypes) {
DartType visitInlineType(InlineType node, CoreTypes coreTypes) {
return node.withDeclaredNullability(Nullability.nonNullable);
}
@ -1659,7 +1659,7 @@ class _NullabilityMarkerDetector implements DartTypeVisitor<bool> {
}
@override
bool visitViewType(ViewType node) {
bool visitInlineType(InlineType node) {
assert(node.declaredNullability != Nullability.undetermined);
return node.declaredNullability == Nullability.nullable ||
node.declaredNullability == Nullability.legacy;

View file

@ -91,12 +91,12 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
Extension? currentExtension;
View? currentView;
InlineClass? currentInlineClass;
TreeNode? currentParent;
TreeNode? get currentClassOrExtensionOrMember =>
currentMember ?? currentClass ?? currentExtension ?? currentView;
currentMember ?? currentClass ?? currentExtension ?? currentInlineClass;
static void check(Component component,
{bool? isOutline,
@ -278,14 +278,14 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
}
@override
void visitView(View node) {
currentView = node;
void visitInlineClass(InlineClass node) {
currentInlineClass = node;
declareTypeParameters(node.typeParameters);
final TreeNode? oldParent = enterParent(node);
node.visitChildren(this);
exitParent(oldParent);
undeclareTypeParameters(node.typeParameters);
currentView = null;
currentInlineClass = null;
}
void checkTypedef(Typedef node) {

View file

@ -408,7 +408,7 @@ abstract class TreeVisitor<R>
// Classes
R visitClass(Class node) => defaultTreeNode(node);
R visitExtension(Extension node) => defaultTreeNode(node);
R visitView(View node) => defaultTreeNode(node);
R visitInlineClass(InlineClass node) => defaultTreeNode(node);
// Initializers
@override
@ -709,7 +709,7 @@ abstract class TreeVisitor1<R, A>
// Classes
R visitClass(Class node, A arg) => defaultTreeNode(node, arg);
R visitExtension(Extension node, A arg) => defaultTreeNode(node, arg);
R visitView(View node, A arg) => defaultTreeNode(node, arg);
R visitInlineClass(InlineClass node, A arg) => defaultTreeNode(node, arg);
// Initializers
@override
@ -768,7 +768,7 @@ abstract class DartTypeVisitor<R> {
R visitNeverType(NeverType node) => defaultDartType(node);
R visitNullType(NullType node) => defaultDartType(node);
R visitExtensionType(ExtensionType node) => defaultDartType(node);
R visitViewType(ViewType node) => defaultDartType(node);
R visitInlineType(InlineType node) => defaultDartType(node);
R visitIntersectionType(IntersectionType node) => defaultDartType(node);
R visitRecordType(RecordType node) => defaultDartType(node);
}
@ -790,7 +790,7 @@ abstract class DartTypeVisitor1<R, T> {
R visitNeverType(NeverType node, T arg) => defaultDartType(node, arg);
R visitNullType(NullType node, T arg) => defaultDartType(node, arg);
R visitExtensionType(ExtensionType node, T arg) => defaultDartType(node, arg);
R visitViewType(ViewType node, T arg) => defaultDartType(node, arg);
R visitInlineType(InlineType node, T arg) => defaultDartType(node, arg);
R visitIntersectionType(IntersectionType node, T arg) =>
defaultDartType(node, arg);
R visitRecordType(RecordType node, T arg) => defaultDartType(node, arg);
@ -1179,7 +1179,7 @@ abstract class Visitor<R> extends TreeVisitor<R>
@override
R visitExtensionType(ExtensionType node) => defaultDartType(node);
@override
R visitViewType(ViewType node) => defaultDartType(node);
R visitInlineType(InlineType node) => defaultDartType(node);
@override
R visitIntersectionType(IntersectionType node) => defaultDartType(node);
@override
@ -1238,7 +1238,7 @@ abstract class Visitor<R> extends TreeVisitor<R>
R visitExtensionReference(Extension node);
R visitViewReference(View node);
R visitInlineClassReference(InlineClass node);
// Constant references
R defaultConstantReference(Constant node);
@ -1340,7 +1340,7 @@ abstract class Visitor1<R, A> extends TreeVisitor1<R, A>
@override
R visitExtensionType(ExtensionType node, A arg) => defaultDartType(node, arg);
@override
R visitViewType(ViewType node, A arg) => defaultDartType(node, arg);
R visitInlineType(InlineType node, A arg) => defaultDartType(node, arg);
// Constants
@override
@ -1386,7 +1386,7 @@ abstract class Visitor1<R, A> extends TreeVisitor1<R, A>
R visitExtensionReference(Extension node, A arg);
R visitViewReference(View node, A arg);
R visitInlineClassReference(InlineClass node, A arg);
// Constant references
R defaultConstantReference(Constant node, A arg);
@ -1481,9 +1481,9 @@ mixin VisitorThrowingMixin<R> implements Visitor<R> {
}
@override
R visitViewReference(View node) {
R visitInlineClassReference(InlineClass node) {
throw new UnimplementedError(
'Unimplemented ${runtimeType}.visitViewReference for '
'Unimplemented ${runtimeType}.visitInlineClassReference for '
'${node} (${node.runtimeType})');
}
@ -1518,7 +1518,7 @@ mixin VisitorNullMixin<R> implements Visitor<R?> {
R? visitExtensionReference(Extension node) => null;
@override
R? visitViewReference(View node) => null;
R? visitInlineClassReference(InlineClass node) => null;
@override
R? defaultConstantReference(Constant node) => null;
@ -1542,7 +1542,7 @@ mixin VisitorVoidMixin implements Visitor<void> {
void visitExtensionReference(Extension node) {}
@override
void visitViewReference(View node) {}
void visitInlineClassReference(InlineClass node) {}
@override
void defaultConstantReference(Constant node) {}
@ -1568,7 +1568,7 @@ mixin VisitorDefaultValueMixin<R> implements Visitor<R> {
R visitExtensionReference(Extension node) => defaultValue;
@override
R visitViewReference(View node) => defaultValue;
R visitInlineClassReference(InlineClass node) => defaultValue;
@override
R defaultConstantReference(Constant node) => defaultValue;
@ -1890,13 +1890,13 @@ class RemovingTransformer extends TreeVisitor1<TreeNode, TreeNode?> {
transformList(nodes, parent, dummyExtension);
}
/// Transforms or removes [View] nodes in [nodes] as children of
/// Transforms or removes [InlineClass] nodes in [nodes] as children of
/// [parent].
///
/// This is convenience method for calling [transformList] with removal
/// sentinel for [View] nodes.
void transformViewList(List<View> nodes, TreeNode parent) {
transformList(nodes, parent, dummyView);
/// sentinel for [InlineClass] nodes.
void transformInlineClassList(List<InlineClass> nodes, TreeNode parent) {
transformList(nodes, parent, dummyInlineClass);
}
/// Transforms or removes [Constructor] nodes in [nodes] as children of

View file

@ -272,8 +272,8 @@ void KernelFingerprintHelper::CalculateDartTypeFingerprint() {
}
break;
}
case kViewType: {
// We skip the view type and only use the representation type.
case kInlineType: {
// We skip the inline type and only use the representation type.
ReadNullability();
SkipCanonicalNameReference(); // read index for canonical name.
SkipListOfDartTypes(); // read type arguments

View file

@ -2224,7 +2224,7 @@ void KernelReaderHelper::SkipDartType() {
}
return;
}
case kViewType: {
case kInlineType: {
ReadNullability();
SkipCanonicalNameReference(); // read index for canonical name.
SkipListOfDartTypes(); // read type arguments
@ -3195,8 +3195,8 @@ void TypeTranslator::BuildTypeInternal() {
case kIntersectionType:
BuildIntersectionType();
break;
case kViewType:
BuildViewType();
case kInlineType:
BuildInlineType();
break;
default:
helper_->ReportUnexpectedTag("type", tag);
@ -3507,8 +3507,8 @@ void TypeTranslator::BuildIntersectionType() {
helper_->SkipDartType(); // read right.
}
void TypeTranslator::BuildViewType() {
// We skip the view type and only use the representation type.
void TypeTranslator::BuildInlineType() {
// We skip the inline type and only use the representation type.
helper_->ReadNullability();
helper_->SkipCanonicalNameReference(); // read index for canonical name.
helper_->SkipListOfDartTypes(); // read type arguments

View file

@ -495,7 +495,7 @@ class FieldHelper {
kNonNullableByDefault = 1 << 7,
kInternalImplementation = 1 << 8,
kEnumElement = 1 << 9,
kViewMember = 1 << 10,
kInlineClassMember = 1 << 10,
};
explicit FieldHelper(KernelReaderHelper* helper)
@ -521,7 +521,9 @@ class FieldHelper {
}
bool IsLate() const { return (flags_ & kIsLate) != 0; }
bool IsExtensionMember() const { return (flags_ & kExtensionMember) != 0; }
bool IsViewMember() const { return (flags_ & kViewMember) != 0; }
bool IsInlineClassMember() const {
return (flags_ & kInlineClassMember) != 0;
}
NameIndex canonical_name_field_;
NameIndex canonical_name_getter_;
@ -596,7 +598,7 @@ class ProcedureHelper {
kSyntheticProcedure = 1 << 7,
kInternalImplementation = 1 << 8,
kIsAbstractFieldAccessor = 1 << 9,
kViewMember = 1 << 10,
kInlineClassMember = 1 << 10,
};
explicit ProcedureHelper(KernelReaderHelper* helper)
@ -630,7 +632,9 @@ class ProcedureHelper {
return stub_kind_ == kNoSuchMethodForwarderStubKind;
}
bool IsExtensionMember() const { return (flags_ & kExtensionMember) != 0; }
bool IsViewMember() const { return (flags_ & kViewMember) != 0; }
bool IsInlineClassMember() const {
return (flags_ & kInlineClassMember) != 0;
}
bool IsMemberSignature() const {
return stub_kind_ == kMemberSignatureStubKind;
}
@ -822,7 +826,7 @@ class LibraryHelper {
// * kTypedefs
// * kClasses
// * kExtensions
// * kViews
// * kInlineClasses
// * kToplevelField
// * kToplevelProcedures
// * kSourceReferences
@ -1555,7 +1559,7 @@ class TypeTranslator {
void BuildRecordType();
void BuildTypeParameterType();
void BuildIntersectionType();
void BuildViewType();
void BuildInlineType();
class TypeParameterScope {
public:

View file

@ -1390,8 +1390,8 @@ void ScopeBuilder::VisitDartType() {
case kIntersectionType:
VisitIntersectionType();
return;
case kViewType:
VisitViewType();
case kInlineType:
VisitInlineType();
return;
default:
ReportUnexpectedTag("type", tag);
@ -1505,8 +1505,8 @@ void ScopeBuilder::VisitIntersectionType() {
helper_.SkipDartType(); // read right.
}
void ScopeBuilder::VisitViewType() {
// We skip the view type and only use the representation type.
void ScopeBuilder::VisitInlineType() {
// We skip the inline type and only use the representation type.
helper_.ReadNullability();
helper_.SkipCanonicalNameReference(); // read index for canonical name.
helper_.SkipListOfDartTypes(); // read type arguments

View file

@ -51,7 +51,7 @@ class ScopeBuilder {
void VisitRecordType();
void VisitTypeParameterType();
void VisitIntersectionType();
void VisitViewType();
void VisitInlineType();
void HandleLocalFunction(intptr_t parent_kernel_offset);
AbstractType& BuildAndVisitVariableType();

View file

@ -26,7 +26,7 @@ static const uint32_t kSupportedKernelFormatVersion = 90;
V(Something, 1) \
V(Class, 2) \
V(Extension, 115) \
V(View, 85) \
V(InlineClass, 85) \
V(FunctionNode, 3) \
V(Field, 4) \
V(Constructor, 5) \
@ -134,7 +134,7 @@ static const uint32_t kSupportedKernelFormatVersion = 90;
V(NeverType, 98) \
V(IntersectionType, 99) \
V(RecordType, 100) \
V(ViewType, 103) \
V(InlineType, 103) \
V(ConstantExpression, 106) \
V(InstanceGet, 118) \
V(InstanceSet, 119) \

View file

@ -1100,8 +1100,8 @@ void KernelLoader::FinishTopLevelClassLoading(
}
}
const intptr_t view_count = helper_.ReadListLength();
for (intptr_t i = 0; i < view_count; ++i) {
const intptr_t inline_class_count = helper_.ReadListLength();
for (intptr_t i = 0; i < inline_class_count; ++i) {
helper_.ReadTag(); // read tag.
helper_.SkipCanonicalNameReference(); // skip canonical name.
helper_.SkipStringReference(); // skip name.
@ -1112,8 +1112,8 @@ void KernelLoader::FinishTopLevelClassLoading(
helper_.SkipTypeParametersList(); // skip type parameter list.
helper_.SkipDartType(); // skip representation-type.
const intptr_t view_member_count = helper_.ReadListLength();
for (intptr_t j = 0; j < view_member_count; ++j) {
const intptr_t inline_class_member_count = helper_.ReadListLength();
for (intptr_t j = 0; j < inline_class_member_count; ++j) {
helper_.SkipName(); // skip name.
helper_.ReadByte(); // read kind.
helper_.ReadByte(); // read flags.