mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:39:49 +00:00
[cfe] Add class modifiers to AST and dill files.
TEST=pkg/front_end/testcases/class_modifiers/... Change-Id: I8befd64c359eb33a6acf003525b0c8cc6096df3d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279331 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Kallen Tu <kallentu@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
9c7662cd7d
commit
1cdd496a51
|
@ -93,6 +93,13 @@ abstract class ClassBuilder implements DeclarationBuilder, ClassMemberAccess {
|
|||
|
||||
bool get isSealed;
|
||||
|
||||
bool get isBase;
|
||||
|
||||
bool get isInterface;
|
||||
|
||||
@override
|
||||
bool get isFinal;
|
||||
|
||||
bool get isAugmentation;
|
||||
|
||||
bool get declaresConstConstructor;
|
||||
|
|
|
@ -66,6 +66,15 @@ class DillClassBuilder extends ClassBuilderImpl {
|
|||
@override
|
||||
bool get isSealed => cls.isSealed;
|
||||
|
||||
@override
|
||||
bool get isBase => cls.isBase;
|
||||
|
||||
@override
|
||||
bool get isInterface => cls.isInterface;
|
||||
|
||||
@override
|
||||
bool get isFinal => cls.isFinal;
|
||||
|
||||
@override
|
||||
bool get isAugmentation => false;
|
||||
|
||||
|
|
|
@ -1297,12 +1297,8 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
TypeBuilder? supertype = nullIfParserRecovery(pop()) as TypeBuilder?;
|
||||
Token? mixinToken = pop(NullValues.Token) as Token?;
|
||||
Token? augmentToken = pop(NullValues.Token) as Token?;
|
||||
// TODO(kallentu): AST work for class modifiers.
|
||||
// ignore: unused_local_variable
|
||||
Token? finalToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? interfaceToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? baseToken = pop(NullValues.Token) as Token?;
|
||||
Token? sealedToken = pop(NullValues.Token) as Token?;
|
||||
// TODO(johnniwinther): Create builder for inline.
|
||||
|
@ -1403,6 +1399,9 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
supertypeOffset,
|
||||
isMacro: macroToken != null,
|
||||
isSealed: sealedToken != null,
|
||||
isBase: baseToken != null,
|
||||
isInterface: interfaceToken != null,
|
||||
isFinal: finalToken != null,
|
||||
isAugmentation: augmentToken != null,
|
||||
isMixinClass: mixinToken != null);
|
||||
}
|
||||
|
@ -1441,12 +1440,8 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
nullIfParserRecovery(pop()) as List<TypeBuilder>?;
|
||||
List<TypeVariableBuilder>? typeVariables =
|
||||
pop(NullValues.TypeVariables) as List<TypeVariableBuilder>?;
|
||||
// TODO(kallentu): Add AST support for mixin modifiers
|
||||
// ignore: unused_local_variable
|
||||
Token? finalToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? interfaceToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? baseToken = pop(NullValues.Token) as Token?;
|
||||
Token? sealedToken = pop(NullValues.Token) as Token?;
|
||||
Token? augmentToken = pop(NullValues.Token) as Token?;
|
||||
|
@ -1505,6 +1500,9 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
endToken.charOffset,
|
||||
-1,
|
||||
isSealed: sealedToken != null,
|
||||
isBase: baseToken != null,
|
||||
isInterface: interfaceToken != null,
|
||||
isFinal: finalToken != null,
|
||||
isAugmentation: augmentToken != null);
|
||||
}
|
||||
libraryBuilder.setCurrentClassName(null);
|
||||
|
@ -2293,12 +2291,8 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
Object? supertype = pop();
|
||||
Token? mixinToken = pop(NullValues.Token) as Token?;
|
||||
Token? augmentToken = pop(NullValues.Token) as Token?;
|
||||
// TODO(kallentu): AST work for class modifiers.
|
||||
// ignore: unused_local_variable
|
||||
Token? finalToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? interfaceToken = pop(NullValues.Token) as Token?;
|
||||
// ignore: unused_local_variable
|
||||
Token? baseToken = pop(NullValues.Token) as Token?;
|
||||
Token? sealedToken = pop(NullValues.Token) as Token?;
|
||||
// TODO(johnniwinther): Report error on 'inline' here; it can't be used on
|
||||
|
@ -2381,6 +2375,9 @@ class OutlineBuilder extends StackListenerImpl {
|
|||
charEndOffset,
|
||||
isMacro: macroToken != null,
|
||||
isSealed: sealedToken != null,
|
||||
isBase: baseToken != null,
|
||||
isInterface: interfaceToken != null,
|
||||
isFinal: finalToken != null,
|
||||
isAugmentation: augmentToken != null,
|
||||
isMixinClass: mixinToken != null);
|
||||
}
|
||||
|
|
|
@ -110,6 +110,15 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
@override
|
||||
final bool isSealed;
|
||||
|
||||
@override
|
||||
final bool isBase;
|
||||
|
||||
@override
|
||||
final bool isInterface;
|
||||
|
||||
@override
|
||||
final bool isFinal;
|
||||
|
||||
@override
|
||||
final bool isAugmentation;
|
||||
|
||||
|
@ -158,6 +167,9 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
this.isMixinDeclaration = false,
|
||||
this.isMacro = false,
|
||||
this.isSealed = false,
|
||||
this.isBase = false,
|
||||
this.isInterface = false,
|
||||
this.isFinal = false,
|
||||
this.isAugmentation = false,
|
||||
this.isMixinClass = false})
|
||||
: actualCls = initializeClass(cls, typeVariables, name, parent,
|
||||
|
@ -278,6 +290,9 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
cls.isMacro = isMacro;
|
||||
cls.isMixinClass = isMixinClass;
|
||||
cls.isSealed = isSealed;
|
||||
cls.isBase = isBase;
|
||||
cls.isInterface = isInterface;
|
||||
cls.isFinal = isFinal;
|
||||
if (interfaceBuilders != null) {
|
||||
for (int i = 0; i < interfaceBuilders!.length; ++i) {
|
||||
interfaceBuilders![i] = _checkSupertype(interfaceBuilders![i]);
|
||||
|
|
|
@ -1795,6 +1795,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
int supertypeOffset,
|
||||
{required bool isMacro,
|
||||
required bool isSealed,
|
||||
required bool isBase,
|
||||
required bool isInterface,
|
||||
required bool isFinal,
|
||||
required bool isAugmentation,
|
||||
required bool isMixinClass}) {
|
||||
_addClass(
|
||||
|
@ -1812,6 +1815,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
supertypeOffset,
|
||||
isMacro: isMacro,
|
||||
isSealed: isSealed,
|
||||
isBase: isBase,
|
||||
isInterface: isInterface,
|
||||
isFinal: isFinal,
|
||||
isAugmentation: isAugmentation,
|
||||
isMixinClass: isMixinClass);
|
||||
}
|
||||
|
@ -1828,6 +1834,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
int endOffset,
|
||||
int supertypeOffset,
|
||||
{required bool isSealed,
|
||||
required bool isBase,
|
||||
required bool isInterface,
|
||||
required bool isFinal,
|
||||
required bool isAugmentation}) {
|
||||
TypeBuilder? supertype;
|
||||
MixinApplicationBuilder? mixinApplication;
|
||||
|
@ -1855,6 +1864,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
supertypeOffset,
|
||||
isMacro: false,
|
||||
isSealed: isSealed,
|
||||
isBase: isBase,
|
||||
isInterface: isInterface,
|
||||
isFinal: isFinal,
|
||||
isAugmentation: isAugmentation,
|
||||
isMixinClass: false);
|
||||
}
|
||||
|
@ -1874,6 +1886,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
int supertypeOffset,
|
||||
{required bool isMacro,
|
||||
required bool isSealed,
|
||||
required bool isBase,
|
||||
required bool isInterface,
|
||||
required bool isFinal,
|
||||
required bool isAugmentation,
|
||||
required bool isMixinClass}) {
|
||||
// Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
|
||||
|
@ -1914,6 +1929,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
typeVariables: typeVariables,
|
||||
isMacro: false,
|
||||
isSealed: false,
|
||||
isBase: false,
|
||||
isInterface: false,
|
||||
isFinal: false,
|
||||
// TODO(johnniwinther): How can we support class with mixins?
|
||||
isAugmentation: false,
|
||||
isMixinClass: false),
|
||||
|
@ -1932,6 +1950,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
isMixinDeclaration: isMixinDeclaration,
|
||||
isMacro: isMacro,
|
||||
isSealed: isSealed,
|
||||
isBase: isBase,
|
||||
isInterface: isInterface,
|
||||
isFinal: isFinal,
|
||||
isAugmentation: isAugmentation,
|
||||
isMixinClass: isMixinClass);
|
||||
|
||||
|
@ -2286,6 +2307,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
List<TypeBuilder>? interfaces,
|
||||
required bool isMacro,
|
||||
required bool isSealed,
|
||||
required bool isBase,
|
||||
required bool isInterface,
|
||||
required bool isFinal,
|
||||
required bool isAugmentation,
|
||||
required bool isMixinClass}) {
|
||||
if (name == null) {
|
||||
|
@ -2523,6 +2547,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
mixedInTypeBuilder: isMixinDeclaration ? null : mixin,
|
||||
isMacro: isNamedMixinApplication && isMacro,
|
||||
isSealed: isNamedMixinApplication && isSealed,
|
||||
isBase: isNamedMixinApplication && isBase,
|
||||
isInterface: isNamedMixinApplication && isInterface,
|
||||
isFinal: isNamedMixinApplication && isFinal,
|
||||
isAugmentation: isNamedMixinApplication && isAugmentation,
|
||||
isMixinClass: isNamedMixinApplication && isMixinClass);
|
||||
// TODO(ahe, kmillikin): Should always be true?
|
||||
|
@ -2584,6 +2611,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
int charEndOffset,
|
||||
{required bool isMacro,
|
||||
required bool isSealed,
|
||||
required bool isBase,
|
||||
required bool isInterface,
|
||||
required bool isFinal,
|
||||
required bool isAugmentation,
|
||||
required bool isMixinClass}) {
|
||||
// Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
|
||||
|
@ -2598,6 +2628,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
interfaces: interfaces,
|
||||
isMacro: isMacro,
|
||||
isSealed: isSealed,
|
||||
isBase: isBase,
|
||||
isInterface: isInterface,
|
||||
isFinal: isFinal,
|
||||
isAugmentation: isAugmentation,
|
||||
isMixinClass: isMixinClass)!;
|
||||
checkTypeVariables(typeVariables, supertype.declaration);
|
||||
|
@ -3100,6 +3133,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
typeVariables: typeVariables,
|
||||
isMacro: false,
|
||||
isSealed: false,
|
||||
isBase: false,
|
||||
isInterface: false,
|
||||
isFinal: false,
|
||||
isAugmentation: false,
|
||||
isMixinClass: false),
|
||||
interfaceBuilders,
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
base class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
base class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
base class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
base class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,17 +2,17 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
base class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
base class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract base class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract base class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
base class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
final class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
final class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
final class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
final class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,17 +2,17 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
final class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
final class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract final class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract final class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
final class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
interface class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
interface class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
interface class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
interface class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,17 +2,17 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
interface class C = core::Object with self::M /*hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -2,19 +2,19 @@ library /*isNonNullableByDefault*/;
|
|||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class A extends core::Object {
|
||||
interface class A extends core::Object {
|
||||
synthetic constructor •() → self::A
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class B extends core::Object {
|
||||
abstract interface class B extends core::Object {
|
||||
synthetic constructor •() → self::B
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M extends core::Object /*isMixinDeclaration*/ {
|
||||
abstract interface class M extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
interface class C extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/ {
|
||||
const synthetic constructor •() → self::C
|
||||
: super core::Object::•()
|
||||
;
|
||||
|
|
|
@ -147,7 +147,7 @@ type CanonicalName {
|
|||
|
||||
type ComponentFile {
|
||||
UInt32 magic = 0x90ABCDEF;
|
||||
UInt32 formatVersion = 92;
|
||||
UInt32 formatVersion = 93;
|
||||
Byte[10] shortSdkHash;
|
||||
List<String> problemsAsJson; // Described in problems.md.
|
||||
Library[] libraries;
|
||||
|
@ -320,7 +320,7 @@ type Class extends Node {
|
|||
FileOffset fileEndOffset;
|
||||
UInt flags (isAbstract, isEnum, isAnonymousMixin, isEliminatedMixin,
|
||||
isMixinDeclaration, hasConstConstructor, isMacro, isSealed,
|
||||
isMixinClass);
|
||||
isMixinClass, isBase, isInterface, isFinal);
|
||||
StringReference name;
|
||||
List<Expression> annotations;
|
||||
List<TypeParameter> typeParameters;
|
||||
|
|
|
@ -1027,6 +1027,9 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
|
|||
static const int FlagMacro = 1 << 6;
|
||||
static const int FlagSealed = 1 << 7;
|
||||
static const int FlagMixinClass = 1 << 8;
|
||||
static const int FlagBase = 1 << 9;
|
||||
static const int FlagInterface = 1 << 10;
|
||||
static const int FlagFinal = 1 << 11;
|
||||
|
||||
int flags = 0;
|
||||
|
||||
|
@ -1050,13 +1053,34 @@ class Class extends NamedNode implements Annotatable, FileUriNode {
|
|||
flags = value ? (flags | FlagMacro) : (flags & ~FlagMacro);
|
||||
}
|
||||
|
||||
/// Whether this class is a macro class.
|
||||
/// Whether this class is a sealed class.
|
||||
bool get isSealed => flags & FlagSealed != 0;
|
||||
|
||||
void set isSealed(bool value) {
|
||||
flags = value ? (flags | FlagSealed) : (flags & ~FlagSealed);
|
||||
}
|
||||
|
||||
/// Whether this class is a base class.
|
||||
bool get isBase => flags & FlagBase != 0;
|
||||
|
||||
void set isBase(bool value) {
|
||||
flags = value ? (flags | FlagBase) : (flags & ~FlagBase);
|
||||
}
|
||||
|
||||
/// Whether this class is an interface class.
|
||||
bool get isInterface => flags & FlagInterface != 0;
|
||||
|
||||
void set isInterface(bool value) {
|
||||
flags = value ? (flags | FlagInterface) : (flags & ~FlagInterface);
|
||||
}
|
||||
|
||||
/// Whether this class is a final class.
|
||||
bool get isFinal => flags & FlagFinal != 0;
|
||||
|
||||
void set isFinal(bool value) {
|
||||
flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
|
||||
}
|
||||
|
||||
/// Whether this class is a synthetic implementation created for each
|
||||
/// mixed-in class. For example the following code:
|
||||
/// class Z extends A with B, C, D {}
|
||||
|
|
|
@ -195,7 +195,7 @@ class Tag {
|
|||
/// Internal version of kernel binary format.
|
||||
/// Bump it when making incompatible changes in kernel binaries.
|
||||
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
|
||||
static const int BinaryFormatVersion = 92;
|
||||
static const int BinaryFormatVersion = 93;
|
||||
}
|
||||
|
||||
abstract class ConstantTag {
|
||||
|
|
|
@ -1307,6 +1307,9 @@ class Printer extends Visitor<void> with VisitorVoidMixin {
|
|||
writeModifier(node.isAbstract, 'abstract');
|
||||
writeModifier(node.isMacro, 'macro');
|
||||
writeModifier(node.isSealed, 'sealed');
|
||||
writeModifier(node.isBase, 'base');
|
||||
writeModifier(node.isInterface, 'interface');
|
||||
writeModifier(node.isFinal, 'final');
|
||||
writeModifier(node.isMixinClass, 'mixin');
|
||||
writeWord('class');
|
||||
writeWord(getClassName(node));
|
||||
|
|
|
@ -755,8 +755,11 @@ class ClassHelper {
|
|||
kFlagMixinDeclaration = 1 << 4,
|
||||
kHasConstConstructor = 1 << 5,
|
||||
kIsMacro = 1 << 6,
|
||||
kisSealed = 1 << 7,
|
||||
kIsSealed = 1 << 7,
|
||||
kIsMixinClass = 1 << 8,
|
||||
kIsBase = 1 << 9,
|
||||
kIsInterface = 1 << 10,
|
||||
kIsFinal = 1 << 11,
|
||||
};
|
||||
|
||||
explicit ClassHelper(KernelReaderHelper* helper)
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace kernel {
|
|||
// package:kernel/binary.md.
|
||||
|
||||
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
|
||||
static const uint32_t kSupportedKernelFormatVersion = 92;
|
||||
static const uint32_t kSupportedKernelFormatVersion = 93;
|
||||
|
||||
// Keep in sync with package:kernel/lib/binary/tag.dart
|
||||
#define KERNEL_TAG_LIST(V) \
|
||||
|
|
Loading…
Reference in a new issue