mirror of
https://github.com/dart-lang/sdk
synced 2024-07-25 04:15:45 +00:00
[dart2js] Group modular and global kernel transformations.
This CL reorganizes our collection of kernel transformations into "modular" and "global" ones. Modular (phase 0a) transformations are those that can be run on each library before we have "linked" the full program AST. Global (phase 0b) transformations are those that are run over the full program AST. Although we colloquially refer to multiple transformations of each kind, there is actually a single modular (resp. global) `Transformer`, which merges all the required transformations into a single AST pass. Change-Id: I8f53cba6fc9a8aab106188ec3597ab194dd0cde0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/330170 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com>
This commit is contained in:
parent
13791e4fee
commit
580384a28e
|
@ -21,9 +21,7 @@ import 'package:kernel/type_environment.dart';
|
|||
|
||||
import '../options.dart';
|
||||
import 'invocation_mirror_constants.dart';
|
||||
import 'transformations/clone_mixin_methods_with_super.dart' as transformMixins
|
||||
show transformLibraries;
|
||||
import 'transformations/lowering.dart' as lowering show transformLibraries;
|
||||
import 'transformations/modular/lowering.dart' as modularTransforms;
|
||||
|
||||
const Iterable<String> _allowedDartSchemePaths = [
|
||||
'async',
|
||||
|
@ -72,14 +70,11 @@ class Dart2jsTarget extends Target {
|
|||
final String name;
|
||||
|
||||
final CompilerOptions? options;
|
||||
final bool canPerformGlobalTransforms;
|
||||
final bool supportsUnevaluatedConstants;
|
||||
Map<String, ir.Class>? _nativeClasses;
|
||||
|
||||
Dart2jsTarget(this.name, this.flags,
|
||||
{this.options,
|
||||
this.canPerformGlobalTransforms = true,
|
||||
this.supportsUnevaluatedConstants = true});
|
||||
{this.options, this.supportsUnevaluatedConstants = true});
|
||||
|
||||
@override
|
||||
bool get enableNoSuchMethodForwarders => true;
|
||||
|
@ -178,12 +173,9 @@ class Dart2jsTarget extends Target {
|
|||
jsUtilOptimizer.visitLibrary(library);
|
||||
}
|
||||
}
|
||||
lowering.transformLibraries(libraries, coreTypes, hierarchy, options);
|
||||
logger?.call("Lowering transformations performed");
|
||||
if (canPerformGlobalTransforms) {
|
||||
transformMixins.transformLibraries(libraries);
|
||||
logger?.call("Mixin transformations performed");
|
||||
}
|
||||
modularTransforms.transformLibraries(
|
||||
libraries, coreTypes, hierarchy, options);
|
||||
logger?.call("Modular transformations performed");
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -41,7 +41,7 @@ import '../js_backend/runtime_types_resolution.dart';
|
|||
import '../js_model/elements.dart';
|
||||
import '../js_model/locals.dart';
|
||||
import '../kernel/dart2js_target.dart';
|
||||
import '../kernel/transformations/late_lowering.dart' as late_lowering
|
||||
import '../kernel/transformations/modular/late_lowering.dart' as late_lowering
|
||||
show
|
||||
isBackingFieldForLateInstanceField,
|
||||
isBackingFieldForLateFinalInstanceField;
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:kernel/ast.dart';
|
||||
import 'package:kernel/clone.dart';
|
||||
import 'package:kernel/type_algebra.dart';
|
||||
|
||||
/// Transforms the libraries in [libraries] by cloning any mixed in methods that
|
||||
/// use super.
|
||||
void transformLibraries(List<Library> libraries) {
|
||||
_CloneMixinMethodsWithSuper.transform(libraries);
|
||||
}
|
||||
|
||||
class _CloneMixinMethodsWithSuper {
|
||||
/// Transform the given new [libraries]. It is expected that all other
|
||||
/// libraries have already been transformed.
|
||||
static void transform(List<Library> libraries) {
|
||||
// Clone any mixed in methods that uses super.
|
||||
var processedClasses = Set<Class>();
|
||||
for (var library in libraries) {
|
||||
for (var cls in library.classes) {
|
||||
if (processedClasses.add(cls)) {
|
||||
transformClass(cls);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Transforms a given class by cloning any mixed in methods that use super.
|
||||
static void transformClass(Class cls) {
|
||||
var mixedInClass = cls.mixedInClass;
|
||||
if (mixedInClass == null) return;
|
||||
var mixedInType = cls.mixedInType!;
|
||||
bool hasProcedureMaps = false;
|
||||
Map<Name, Procedure> existingNonSetters = {};
|
||||
Map<Name, Procedure> existingSetters = {};
|
||||
|
||||
void ensureExistingProcedureMaps() {
|
||||
if (hasProcedureMaps) return;
|
||||
for (Procedure procedure in cls.procedures) {
|
||||
if (procedure.kind == ProcedureKind.Setter) {
|
||||
existingSetters[procedure.name] = procedure;
|
||||
} else {
|
||||
existingNonSetters[procedure.name] = procedure;
|
||||
}
|
||||
}
|
||||
hasProcedureMaps = true;
|
||||
}
|
||||
|
||||
CloneVisitorWithMembers? cloneVisitor;
|
||||
for (var field in mixedInClass.mixin.fields) {
|
||||
if (field.containsSuperCalls) {
|
||||
cloneVisitor ??= MixinApplicationCloner(cls,
|
||||
typeSubstitution: getSubstitutionMap(mixedInType));
|
||||
// TODO(jensj): Provide a "referenceFrom" if we need to support
|
||||
// the incremental compiler.
|
||||
ensureExistingProcedureMaps();
|
||||
Procedure? existingGetter = existingNonSetters[field.name];
|
||||
Procedure? existingSetter = existingSetters[field.name];
|
||||
Field clone = cloneVisitor.cloneField(
|
||||
field, null, existingGetter?.reference, existingSetter?.reference);
|
||||
cls.addField(clone);
|
||||
clone.transformerFlags = field.transformerFlags;
|
||||
if (existingGetter != null) {
|
||||
cls.procedures.remove(existingGetter);
|
||||
}
|
||||
if (existingSetter != null) {
|
||||
cls.procedures.remove(existingSetter);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
for (var procedure in mixedInClass.mixin.procedures) {
|
||||
if (procedure.containsSuperCalls) {
|
||||
cloneVisitor ??= MixinApplicationCloner(cls,
|
||||
typeSubstitution: getSubstitutionMap(mixedInType));
|
||||
// TODO(jensj): Provide a "referenceFrom" if we need to support
|
||||
// the incremental compiler.
|
||||
ensureExistingProcedureMaps();
|
||||
Procedure? existingProcedure = procedure.kind == ProcedureKind.Setter
|
||||
? existingSetters[procedure.name]
|
||||
: existingNonSetters[procedure.name];
|
||||
if (existingProcedure != null) {
|
||||
cls.procedures.remove(existingProcedure);
|
||||
}
|
||||
Procedure clone = cloneVisitor.cloneProcedure(
|
||||
procedure, existingProcedure?.reference);
|
||||
cls.addProcedure(clone);
|
||||
clone.transformerFlags = procedure.transformerFlags;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:kernel/ast.dart';
|
||||
import 'package:kernel/clone.dart';
|
||||
import 'package:kernel/type_algebra.dart';
|
||||
|
||||
/// Transforms a given class by cloning any mixed in methods that use super.
|
||||
void transformClass(Class cls) {
|
||||
var mixedInClass = cls.mixedInClass;
|
||||
if (mixedInClass == null) return;
|
||||
var mixedInType = cls.mixedInType!;
|
||||
bool hasProcedureMaps = false;
|
||||
Map<Name, Procedure> existingNonSetters = {};
|
||||
Map<Name, Procedure> existingSetters = {};
|
||||
|
||||
void ensureExistingProcedureMaps() {
|
||||
if (hasProcedureMaps) return;
|
||||
for (Procedure procedure in cls.procedures) {
|
||||
if (procedure.kind == ProcedureKind.Setter) {
|
||||
existingSetters[procedure.name] = procedure;
|
||||
} else {
|
||||
existingNonSetters[procedure.name] = procedure;
|
||||
}
|
||||
}
|
||||
hasProcedureMaps = true;
|
||||
}
|
||||
|
||||
CloneVisitorWithMembers? cloneVisitor;
|
||||
for (var field in mixedInClass.mixin.fields) {
|
||||
if (field.containsSuperCalls) {
|
||||
cloneVisitor ??= MixinApplicationCloner(cls,
|
||||
typeSubstitution: getSubstitutionMap(mixedInType));
|
||||
// TODO(jensj): Provide a "referenceFrom" if we need to support
|
||||
// the incremental compiler.
|
||||
ensureExistingProcedureMaps();
|
||||
Procedure? existingGetter = existingNonSetters[field.name];
|
||||
Procedure? existingSetter = existingSetters[field.name];
|
||||
Field clone = cloneVisitor.cloneField(
|
||||
field, null, existingGetter?.reference, existingSetter?.reference);
|
||||
cls.addField(clone);
|
||||
clone.transformerFlags = field.transformerFlags;
|
||||
if (existingGetter != null) {
|
||||
cls.procedures.remove(existingGetter);
|
||||
}
|
||||
if (existingSetter != null) {
|
||||
cls.procedures.remove(existingSetter);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
for (var procedure in mixedInClass.mixin.procedures) {
|
||||
if (procedure.containsSuperCalls) {
|
||||
cloneVisitor ??= MixinApplicationCloner(cls,
|
||||
typeSubstitution: getSubstitutionMap(mixedInType));
|
||||
// TODO(jensj): Provide a "referenceFrom" if we need to support
|
||||
// the incremental compiler.
|
||||
ensureExistingProcedureMaps();
|
||||
Procedure? existingProcedure = procedure.kind == ProcedureKind.Setter
|
||||
? existingSetters[procedure.name]
|
||||
: existingNonSetters[procedure.name];
|
||||
if (existingProcedure != null) {
|
||||
cls.procedures.remove(existingProcedure);
|
||||
}
|
||||
Procedure clone =
|
||||
cloneVisitor.cloneProcedure(procedure, existingProcedure?.reference);
|
||||
cls.addProcedure(clone);
|
||||
clone.transformerFlags = procedure.transformerFlags;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:kernel/ast.dart';
|
||||
|
||||
import 'clone_mixin_methods_with_super.dart' as transformMixins;
|
||||
|
||||
void transformLibraries(List<Library> libraries) {
|
||||
final transformer = _Lowering();
|
||||
libraries.forEach(transformer.visitLibrary);
|
||||
}
|
||||
|
||||
class _Lowering extends Transformer {
|
||||
@override
|
||||
Class visitClass(Class node) {
|
||||
node.transformChildren(this);
|
||||
transformMixins.transformClass(node);
|
||||
return node;
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ import 'package:kernel/ast.dart';
|
|||
import 'package:kernel/core_types.dart';
|
||||
import 'package:kernel/type_algebra.dart';
|
||||
|
||||
import '../../options.dart';
|
||||
import '../../../options.dart';
|
||||
|
||||
class _Reader {
|
||||
final Procedure _procedure;
|
|
@ -6,7 +6,7 @@ import 'package:kernel/ast.dart';
|
|||
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
|
||||
import 'package:kernel/core_types.dart' show CoreTypes;
|
||||
|
||||
import '../../options.dart';
|
||||
import '../../../options.dart';
|
||||
import 'async_lowering.dart';
|
||||
import 'await_lowering.dart';
|
||||
import 'factory_specializer.dart';
|
|
@ -20,6 +20,7 @@ enum FeatureStatus {
|
|||
canary,
|
||||
}
|
||||
|
||||
// TODO(fishythefish): Add an API to associate numbered phases with stages.
|
||||
enum Dart2JSStage {
|
||||
all(null,
|
||||
fromDillFlag: Dart2JSStage.allFromDill,
|
||||
|
@ -76,6 +77,21 @@ enum Dart2JSStage {
|
|||
bool get shouldComputeModularAnalysis =>
|
||||
this == Dart2JSStage.modularAnalysis ||
|
||||
this == Dart2JSStage.modularAnalysisFromDill;
|
||||
|
||||
/// Global kernel transformations should be run in phase 0b, i.e. after
|
||||
/// concatenating dills, but before serializing the output of phase 0.
|
||||
/// We also need to include modular analysis, or else the modular test suite
|
||||
/// breaks when it deserializes module data because it reads transformed AST
|
||||
/// nodes when it's expecting untransformed ones.
|
||||
// TODO(fishythefish, natebiggs): Address the modular analysis inconsistency.
|
||||
// Ideally, modular analysis shouldn't require global transformations to be
|
||||
// run again, so we need to either delete modular analysis or make the data
|
||||
// less brittle in the presence of AST modifications.
|
||||
// TODO(fishythefish): Add AST metadata to ensure transformations aren't rerun
|
||||
// unnecessarily.
|
||||
bool get shouldRunGlobalTransforms =>
|
||||
this.index <= Dart2JSStage.modularAnalysisFromDill.index;
|
||||
|
||||
bool get canUseModularAnalysis =>
|
||||
this == Dart2JSStage.modularAnalysis ||
|
||||
this.index >= Dart2JSStage.modularAnalysisFromDill.index;
|
||||
|
|
|
@ -23,8 +23,7 @@ import '../common.dart';
|
|||
import '../kernel/front_end_adapter.dart';
|
||||
import '../kernel/dart2js_target.dart'
|
||||
show Dart2jsTarget, implicitlyUsedLibraries;
|
||||
import '../kernel/transformations/clone_mixin_methods_with_super.dart'
|
||||
as transformMixins show transformLibraries;
|
||||
import '../kernel/transformations/global/lowering.dart' as globalTransforms;
|
||||
import '../options.dart';
|
||||
|
||||
class Input {
|
||||
|
@ -121,23 +120,20 @@ class _LoadFromKernelResult {
|
|||
this.component, this.entryLibrary, this.moduleLibraries);
|
||||
}
|
||||
|
||||
void _doGlobalTransforms(Component component) {
|
||||
transformMixins.transformLibraries(component.libraries);
|
||||
}
|
||||
|
||||
// Perform any backend-specific transforms here that can be done on both
|
||||
// serialized components and components from source.
|
||||
// TODO(srujzs): Can we combine this with the above?
|
||||
void _doTransformsOnKernelLoad(Component? component) {
|
||||
if (component == null) return;
|
||||
// referenceFromIndex is only necessary in the case where a module
|
||||
// containing a stub definition is invalidated, and then reloaded, because
|
||||
// we need to keep existing references to that stub valid. Here, we have the
|
||||
// whole program, and therefore do not need it.
|
||||
ir.CoreTypes coreTypes = ir.CoreTypes(component);
|
||||
StaticInteropClassEraser(coreTypes, null,
|
||||
additionalCoreLibraries: {'_js_types', 'js_interop'})
|
||||
.visitComponent(component);
|
||||
void _doTransformsOnKernelLoad(Component component, CompilerOptions options) {
|
||||
if (options.stage.shouldRunGlobalTransforms) {
|
||||
globalTransforms.transformLibraries(component.libraries);
|
||||
// referenceFromIndex is only necessary in the case where a module
|
||||
// containing a stub definition is invalidated, and then reloaded, because
|
||||
// we need to keep existing references to that stub valid. Here, we have the
|
||||
// whole program, and therefore do not need it.
|
||||
ir.CoreTypes coreTypes = ir.CoreTypes(component);
|
||||
StaticInteropClassEraser(coreTypes, null,
|
||||
additionalCoreLibraries: {'_js_types', 'js_interop'})
|
||||
.visitComponent(component);
|
||||
}
|
||||
}
|
||||
|
||||
Future<_LoadFromKernelResult> _loadFromKernel(CompilerOptions options,
|
||||
|
@ -200,11 +196,7 @@ Future<_LoadFromKernelResult> _loadFromKernel(CompilerOptions options,
|
|||
component.setMainMethodAndMode(mainMethod, true, component.mode);
|
||||
}
|
||||
|
||||
// We apply global transforms when running phase 0.
|
||||
if (options.stage.shouldOnlyComputeDill) {
|
||||
_doGlobalTransforms(component);
|
||||
}
|
||||
_doTransformsOnKernelLoad(component);
|
||||
_doTransformsOnKernelLoad(component, options);
|
||||
registerSources(component, compilerInput);
|
||||
return _LoadFromKernelResult(component, entryLibrary, moduleLibraries);
|
||||
}
|
||||
|
@ -232,7 +224,6 @@ Future<_LoadFromSourceResult> _loadFromSource(
|
|||
TargetFlags(
|
||||
soundNullSafety: options.nullSafetyMode == NullSafetyMode.sound),
|
||||
options: options,
|
||||
canPerformGlobalTransforms: true,
|
||||
supportsUnevaluatedConstants: !cfeConstants);
|
||||
fe.FileSystem fileSystem = CompilerFileSystem(compilerInput);
|
||||
fe.Verbosity verbosity = options.verbosity;
|
||||
|
@ -304,22 +295,24 @@ Future<_LoadFromSourceResult> _loadFromSource(
|
|||
ir.Component? component = await fe.compile(initializedCompilerState, verbose,
|
||||
fileSystem, onDiagnostic, sources, isModularCompile);
|
||||
|
||||
assert(() {
|
||||
if (component != null) {
|
||||
if (component != null) {
|
||||
assert(() {
|
||||
verifyComponent(
|
||||
target, VerificationStage.afterModularTransformations, component);
|
||||
return true;
|
||||
}());
|
||||
|
||||
_doTransformsOnKernelLoad(component, options);
|
||||
|
||||
// We have to compute canonical names on the component here to avoid missing
|
||||
// canonical names downstream.
|
||||
if (isModularCompile) {
|
||||
component.computeCanonicalNames();
|
||||
}
|
||||
return true;
|
||||
}());
|
||||
|
||||
_doTransformsOnKernelLoad(component);
|
||||
|
||||
// We have to compute canonical names on the component here to avoid missing
|
||||
// canonical names downstream.
|
||||
if (isModularCompile) {
|
||||
component?.computeCanonicalNames();
|
||||
registerSources(component, compilerInput);
|
||||
}
|
||||
registerSources(component, compilerInput);
|
||||
|
||||
return _LoadFromSourceResult(
|
||||
component, initializedCompilerState, isModularCompile ? sources : []);
|
||||
}
|
||||
|
@ -437,8 +430,8 @@ Future<Output?> run(Input input) async {
|
|||
///
|
||||
/// This registration improves how locations are presented when errors
|
||||
/// or crashes are reported by the dart2js compiler.
|
||||
void registerSources(ir.Component? component, api.CompilerInput compilerInput) {
|
||||
component?.uriToSource.forEach((uri, source) {
|
||||
void registerSources(ir.Component component, api.CompilerInput compilerInput) {
|
||||
component.uriToSource.forEach((uri, source) {
|
||||
compilerInput.registerUtf8ContentsForDiagnostics(uri, source.source);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -103,14 +103,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -103,14 +103,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -91,14 +91,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -91,14 +91,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -54,14 +54,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -47,14 +47,13 @@ abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymou
|
|||
abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
|
||||
abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
|
||||
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
|
||||
mixin-super-stub method mixinMethod(core::int* i) → core::int*
|
||||
return super.{opt2::Mixin::mixinMethod}(i);
|
||||
abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
|
||||
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
|
||||
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
|
||||
abstract member-signature method toString() → core::String*; -> core::Object::toString
|
||||
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
|
||||
method /*isNonNullableByDefault, from org-dartlang-testcase:///opt_in_lib.dart */ mixinMethod(core::int i) → core::int? {
|
||||
super.{core::Object::toString}();
|
||||
}
|
||||
}
|
||||
class SubClass extends opt::_SubClass&Class&Mixin {
|
||||
synthetic constructor •() → opt::SubClass*
|
||||
|
|
|
@ -201,35 +201,26 @@ abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class1b&Class1a&Mixin1
|
||||
: super self::Class1a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class1b extends self::_Class1b&Class1a&Mixin1 {
|
||||
synthetic constructor •() → self::Class1b
|
||||
|
@ -247,35 +238,26 @@ abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class2b&Class2a&Mixin1
|
||||
: super self::Class2a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class2b extends self::_Class2b&Class2a&Mixin1 {
|
||||
synthetic constructor •() → self::Class2b
|
||||
|
@ -293,35 +275,26 @@ abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class3b&Class3a&Mixin1
|
||||
: super self::Class3a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class3b extends self::_Class3b&Class3a&Mixin1 {
|
||||
synthetic constructor •() → self::Class3b
|
||||
|
@ -339,10 +312,16 @@ abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class4b&Class4a&Mixin2
|
||||
: super self::Class4a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -357,25 +336,10 @@ abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class4b extends self::_Class4b&Class4a&Mixin2 {
|
||||
synthetic constructor •() → self::Class4b
|
||||
|
@ -393,10 +357,16 @@ abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class5b&Class5a&Mixin2
|
||||
: super self::Class5a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -411,25 +381,10 @@ abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class5b extends self::_Class5b&Class5a&Mixin2 {
|
||||
synthetic constructor •() → self::Class5b
|
||||
|
@ -447,10 +402,16 @@ abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class6b&Class6a&Mixin2
|
||||
: super self::Class6a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -465,25 +426,10 @@ abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class6b extends self::_Class6b&Class6a&Mixin2 {
|
||||
synthetic constructor •() → self::Class6b
|
||||
|
|
|
@ -201,35 +201,26 @@ abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class1b&Class1a&Mixin1
|
||||
: super self::Class1a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class1b extends self::_Class1b&Class1a&Mixin1 {
|
||||
synthetic constructor •() → self::Class1b
|
||||
|
@ -247,35 +238,26 @@ abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class2b&Class2a&Mixin1
|
||||
: super self::Class2a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class2b extends self::_Class2b&Class2a&Mixin1 {
|
||||
synthetic constructor •() → self::Class2b
|
||||
|
@ -293,35 +275,26 @@ abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAno
|
|||
synthetic constructor •() → self::_Class3b&Class3a&Mixin1
|
||||
: super self::Class3a::•()
|
||||
;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{self::Mixin1::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{self::Mixin1::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
return super.{self::Mixin1::field2};
|
||||
mixin-super-stub set field2(core::int value) → void
|
||||
return super.{self::Mixin1::field2} = value;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{self::Mixin1::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{self::Mixin1::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{self::Mixin1::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{self::Mixin1::property2} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{self::Mixin1::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{self::Mixin1::method2}();
|
||||
method method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get field1() → core::int {
|
||||
synthesized core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class3b extends self::_Class3b&Class3a&Mixin1 {
|
||||
synthetic constructor •() → self::Class3b
|
||||
|
@ -339,10 +312,16 @@ abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class4b&Class4a&Mixin2
|
||||
: super self::Class4a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -357,25 +336,10 @@ abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class4b extends self::_Class4b&Class4a&Mixin2 {
|
||||
synthetic constructor •() → self::Class4b
|
||||
|
@ -393,10 +357,16 @@ abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class5b&Class5a&Mixin2
|
||||
: super self::Class5a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -411,25 +381,10 @@ abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class5b extends self::_Class5b&Class5a&Mixin2 {
|
||||
synthetic constructor •() → self::Class5b
|
||||
|
@ -447,10 +402,16 @@ abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnon
|
|||
synthetic constructor •() → self::_Class6b&Class6a&Mixin2
|
||||
: super self::Class6a::•()
|
||||
;
|
||||
mixin-super-stub get property1() → core::int
|
||||
return super.{mai::Mixin2::property1};
|
||||
mixin-super-stub set property1(core::int value) → void
|
||||
return super.{mai::Mixin2::property1} = value;
|
||||
mixin-super-stub get property2() → core::int
|
||||
return super.{mai::Mixin2::property2};
|
||||
mixin-super-stub set property2(core::int value) → void
|
||||
return super.{mai::Mixin2::property2} = value;
|
||||
mixin-super-stub get field1() → core::int
|
||||
return super.{mai::Mixin2::field1};
|
||||
mixin-super-stub set field1(core::int value) → void
|
||||
return super.{mai::Mixin2::field1} = value;
|
||||
mixin-super-stub get field2() → core::int
|
||||
|
@ -465,25 +426,10 @@ abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnon
|
|||
return super.{mai::Mixin2::_#Mixin2#field2#AI};
|
||||
mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
|
||||
return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
|
||||
mixin-super-stub method method1() → void
|
||||
return super.{mai::Mixin2::method1}();
|
||||
mixin-super-stub method method2() → void
|
||||
return super.{mai::Mixin2::method2}();
|
||||
method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
|
||||
super.{mai::Super1::method1}();
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
|
||||
return super.{mai::Super1::property1};
|
||||
}
|
||||
set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
|
||||
super.{mai::Super1::property1} = value;
|
||||
}
|
||||
get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
|
||||
synthesized core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
|
||||
if(_in::isSentinel(value))
|
||||
value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
|
||||
return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
|
||||
})(){() → core::int};
|
||||
return value;
|
||||
}
|
||||
}
|
||||
class Class6b extends self::_Class6b&Class6a&Mixin2 {
|
||||
synthetic constructor •() → self::Class6b
|
||||
|
|
Loading…
Reference in a new issue