mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 08:11:05 +00:00
[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:
parent
0ebed3f7d5
commit
81845864ca
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -1200,7 +1200,7 @@ class TypeVariableSearch implements DartTypeVisitor<bool> {
|
|||
}
|
||||
|
||||
@override
|
||||
bool visitViewType(ViewType node) {
|
||||
bool visitInlineType(InlineType node) {
|
||||
return anyTypeVariables(node.typeArguments);
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
|
|||
}
|
||||
|
||||
@override
|
||||
TypeBuilder visitViewType(ViewType node) {
|
||||
TypeBuilder visitInlineType(InlineType node) {
|
||||
throw "Not implemented";
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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
|
||||
;
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
||||
|
|
|
@ -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'),
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
///
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue