(dart2js): enable new-rti by default

This change:
* adds the `--use-old-rti` flag to revert to the old behavior
* enables the new behavior by default
* changes the -rti- builders to run the old rti instead of the new rti
* documents the change in CHANGELOG.md

I've kept around the logic as `useNewRti` to avoid swapping all the conditions
in the compiler.

Change-Id: I773ac33b658cb60f72e0b6beef83375abec31bad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127492
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Stephen Adams <sra@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
This commit is contained in:
Sigmund Cherem 2020-01-04 00:44:25 +00:00 committed by commit-bot@chromium.org
parent 6e7a900283
commit d735f1f12d
83 changed files with 400 additions and 1228 deletions

View file

@ -54,6 +54,58 @@ The Linter was updated to `0.1.106`, which includes:
dependencies by default. Instead they are precompiled on first `pub run`. dependencies by default. Instead they are precompiled on first `pub run`.
Use `pub get --precompile` to get the previous behavior. Use `pub get --precompile` to get the previous behavior.
#### dart2js
A new representation of runtime types was enabled by default.
This change is part of a long term goal of making runtime checks cheaper and
more flexible for upcoming changes in the language. The new representation
disentangles how types and classes are represented and makes types first-class
to the compiler. This makes it possible to do certain kind of optimizations on
type checks that were not possible before and will enable us to model
non-nullable types in the near future.
This change should not affect the semantics of your application, but it has some
relatively small visible effects that we want to highlight:
* Types are now canonicalized, this fixes a long standing bug that Types could
not be used in switch cases (issue [17207][]).
* Code-size changes may be visible, but the difference is small overall. It is
more visible on smaller apps because the new implementation includes more
helper methods. On large apps we have even seen an overall code-size
reduction.
* Certain checks are a lot faster. This is less noticeable if you are compiling
apps with `-O3` where checks are omitted altogether. Even with `-O3`, the
performance of some `is` checks used by your app may improve.
* When using `-O3` and `-O4` incorrect type annotations could surface as errors.
The old type representation was accidentally lenient on some invalid type
annotations. We have only encountered this issue on programs that were not
tested properly at the js-interop program boundary.
* `Type.toString` has a small change that is rarely visible. For a long time
dart2js has had support to erase unused type variables. Today, when dart2js is
given `--lax-runtime-type-to-string` (currently included in `-O2`, `-O3`, and
`-O4`) and it decides to erase the type variable of a class `Foo<T>`, then it
compiles expressions like `foo.runtimeType.toString()` to print `Foo`. With
the new representation, this will show `Foo<erased>` instead. This change may
be visible in error messages produced by type checks involving erased types.
Because types and classes are represented separately, we will likely reevaluate
restrictions of deferred libraries in the near future. For example, we could
support referring to deferred types because types can be downloaded while
classes are not.
In the unlikely case you run into any issues, please file a bug so we can
investigate. You can temporarily force the old type representation by passing
`--use-old-rti` to dart2js if necessary, but our goal is to delete the old type
representation soon.
[17207]: https://github.com/dart-lang/sdk/issues/17207
## 2.7.0 - 2019-12-11 ## 2.7.0 - 2019-12-11
**Extension methods** -- which we shipped in preview in 2.6.0 -- are no longer **Extension methods** -- which we shipped in preview in 2.6.0 -- are no longer

View file

@ -77,6 +77,7 @@ class Flags {
static const String useContentSecurityPolicy = '--csp'; static const String useContentSecurityPolicy = '--csp';
static const String useMultiSourceInfo = '--use-multi-source-info'; static const String useMultiSourceInfo = '--use-multi-source-info';
static const String useNewSourceInfo = '--use-new-source-info'; static const String useNewSourceInfo = '--use-new-source-info';
static const String useOldRti = '--use-old-rti';
static const String verbose = '--verbose'; static const String verbose = '--verbose';
static const String progress = '--show-internal-progress'; static const String progress = '--show-internal-progress';
static const String version = '--version'; static const String version = '--version';

View file

@ -1497,8 +1497,7 @@ class CommonElementsImpl
ClassEntity _typeLiteralClass; ClassEntity _typeLiteralClass;
@override @override
ClassEntity get typeLiteralClass => ClassEntity get typeLiteralClass => _typeLiteralClass ??= _options.useNewRti
_typeLiteralClass ??= _options.experimentNewRti
? _findRtiClass('_Type') ? _findRtiClass('_Type')
: _findHelperClass('TypeImpl'); : _findHelperClass('TypeImpl');
@ -1787,7 +1786,7 @@ class CommonElementsImpl
_findHelperFunction('throwNoSuchMethod'); _findHelperFunction('throwNoSuchMethod');
@override @override
FunctionEntity get createRuntimeType => _options.experimentNewRti FunctionEntity get createRuntimeType => _options.useNewRti
? _findRtiFunction('createRuntimeType') ? _findRtiFunction('createRuntimeType')
: _findHelperFunction('createRuntimeType'); : _findHelperFunction('createRuntimeType');

View file

@ -468,6 +468,7 @@ Future<api.CompilationResult> compile(List<String> argv,
new OptionHandler(Flags.generateCodeWithCompileTimeErrors, ignoreOption), new OptionHandler(Flags.generateCodeWithCompileTimeErrors, ignoreOption),
new OptionHandler(Flags.useMultiSourceInfo, passThrough), new OptionHandler(Flags.useMultiSourceInfo, passThrough),
new OptionHandler(Flags.useNewSourceInfo, passThrough), new OptionHandler(Flags.useNewSourceInfo, passThrough),
new OptionHandler(Flags.useOldRti, passThrough),
new OptionHandler(Flags.testMode, passThrough), new OptionHandler(Flags.testMode, passThrough),
// Experimental features. // Experimental features.
@ -482,7 +483,7 @@ Future<api.CompilationResult> compile(List<String> argv,
new OptionHandler(Flags.experimentStartupFunctions, passThrough), new OptionHandler(Flags.experimentStartupFunctions, passThrough),
new OptionHandler(Flags.experimentToBoolean, passThrough), new OptionHandler(Flags.experimentToBoolean, passThrough),
new OptionHandler(Flags.experimentCallInstrumentation, passThrough), new OptionHandler(Flags.experimentCallInstrumentation, passThrough),
new OptionHandler(Flags.experimentNewRti, passThrough), new OptionHandler(Flags.experimentNewRti, ignoreOption),
// The following three options must come last. // The following three options must come last.
new OptionHandler('-D.+=.*', addInEnvironment), new OptionHandler('-D.+=.*', addInEnvironment),

View file

@ -168,7 +168,7 @@ class BackendImpacts {
BackendImpact get typeVariableBoundCheck { BackendImpact get typeVariableBoundCheck {
return _typeVariableBoundCheck ??= new BackendImpact(staticUses: [ return _typeVariableBoundCheck ??= new BackendImpact(staticUses: [
_commonElements.throwTypeError, _commonElements.throwTypeError,
if (_options.experimentNewRti) if (_options.useNewRti)
_commonElements.checkTypeBound _commonElements.checkTypeBound
else else
_commonElements.assertIsSubtype, _commonElements.assertIsSubtype,
@ -435,7 +435,7 @@ class BackendImpacts {
_commonElements.typeLiteralClass _commonElements.typeLiteralClass
], staticUses: [ ], staticUses: [
_commonElements.createRuntimeType, _commonElements.createRuntimeType,
if (_options.experimentNewRti) _commonElements.typeLiteralMaker, if (_options.useNewRti) _commonElements.typeLiteralMaker,
]); ]);
} }
@ -785,7 +785,7 @@ class BackendImpacts {
_genericInstantiation[typeArgumentCount] ??= _genericInstantiation[typeArgumentCount] ??=
new BackendImpact(staticUses: [ new BackendImpact(staticUses: [
_commonElements.getInstantiateFunction(typeArgumentCount), _commonElements.getInstantiateFunction(typeArgumentCount),
..._options.experimentNewRti ..._options.useNewRti
? [ ? [
_commonElements.instantiatedGenericFunctionTypeNewRti, _commonElements.instantiatedGenericFunctionTypeNewRti,
_commonElements.closureFunctionType _commonElements.closureFunctionType
@ -802,7 +802,7 @@ class BackendImpacts {
BackendImpact _newRtiImpact; BackendImpact _newRtiImpact;
// TODO(sra): Split into refined impacts. // TODO(sra): Split into refined impacts.
BackendImpact get newRtiImpact => _newRtiImpact ??= _options.experimentNewRti BackendImpact get newRtiImpact => _newRtiImpact ??= _options.useNewRti
? BackendImpact(staticUses: [ ? BackendImpact(staticUses: [
_commonElements.findType, _commonElements.findType,
_commonElements.instanceType, _commonElements.instanceType,

View file

@ -122,7 +122,7 @@ class CodegenEnqueuerListener extends EnqueuerListener {
} }
// TODO(fishythefish): Avoid registering unnecessary impacts. // TODO(fishythefish): Avoid registering unnecessary impacts.
if (_options.experimentNewRti && !_isNewRtiUsed) { if (_options.useNewRti && !_isNewRtiUsed) {
WorldImpactBuilderImpl newRtiImpact = new WorldImpactBuilderImpl(); WorldImpactBuilderImpl newRtiImpact = new WorldImpactBuilderImpl();
newRtiImpact.registerStaticUse(StaticUse.staticInvoke( newRtiImpact.registerStaticUse(StaticUse.staticInvoke(
_commonElements.rtiAddRulesMethod, CallStructure.TWO_ARGS)); _commonElements.rtiAddRulesMethod, CallStructure.TWO_ARGS));
@ -189,7 +189,7 @@ class CodegenEnqueuerListener extends EnqueuerListener {
_elementEnvironment.getThisType(_commonElements _elementEnvironment.getThisType(_commonElements
.getInstantiationClass(constant.typeArguments.length)))); .getInstantiationClass(constant.typeArguments.length))));
if (_options.experimentNewRti) { if (_options.useNewRti) {
impactBuilder.registerStaticUse(StaticUse.staticInvoke( impactBuilder.registerStaticUse(StaticUse.staticInvoke(
_commonElements.instantiatedGenericFunctionTypeNewRti, _commonElements.instantiatedGenericFunctionTypeNewRti,
CallStructure.TWO_ARGS)); CallStructure.TWO_ARGS));

View file

@ -238,7 +238,7 @@ class ConstantEmitter extends ModularConstantEmitter {
.toList(growable: false); .toList(growable: false);
jsAst.ArrayInitializer array = new jsAst.ArrayInitializer(elements); jsAst.ArrayInitializer array = new jsAst.ArrayInitializer(elements);
jsAst.Expression value = _makeConstantList(array); jsAst.Expression value = _makeConstantList(array);
if (_options.experimentNewRti) { if (_options.useNewRti) {
return maybeAddListTypeArgumentsNewRti(constant, constant.type, value); return maybeAddListTypeArgumentsNewRti(constant, constant.type, value);
} else { } else {
return maybeAddTypeArguments(constant, constant.type, value); return maybeAddTypeArguments(constant, constant.type, value);
@ -261,7 +261,7 @@ class ConstantEmitter extends ModularConstantEmitter {
]; ];
if (_rtiNeed.classNeedsTypeArguments(classElement)) { if (_rtiNeed.classNeedsTypeArguments(classElement)) {
if (_options.experimentNewRti) { if (_options.useNewRti) {
arguments.add(_reifiedTypeNewRti(sourceType)); arguments.add(_reifiedTypeNewRti(sourceType));
} else { } else {
arguments arguments
@ -352,7 +352,7 @@ class ConstantEmitter extends ModularConstantEmitter {
} }
if (_rtiNeed.classNeedsTypeArguments(classElement)) { if (_rtiNeed.classNeedsTypeArguments(classElement)) {
if (_options.experimentNewRti) { if (_options.useNewRti) {
arguments.add(_reifiedTypeNewRti(constant.type)); arguments.add(_reifiedTypeNewRti(constant.type));
} else { } else {
arguments arguments
@ -373,7 +373,7 @@ class ConstantEmitter extends ModularConstantEmitter {
jsAst.Expression visitType(TypeConstantValue constant, [_]) { jsAst.Expression visitType(TypeConstantValue constant, [_]) {
DartType type = constant.representedType.unaliased; DartType type = constant.representedType.unaliased;
if (_options.experimentNewRti) { if (_options.useNewRti) {
assert(!type.containsTypeVariables); assert(!type.containsTypeVariables);
jsAst.Expression recipe = _rtiRecipeEncoder.encodeGroundRecipe( jsAst.Expression recipe = _rtiRecipeEncoder.encodeGroundRecipe(
@ -428,7 +428,7 @@ class ConstantEmitter extends ModularConstantEmitter {
} }
}); });
if (_rtiNeed.classNeedsTypeArguments(constant.type.element)) { if (_rtiNeed.classNeedsTypeArguments(constant.type.element)) {
if (_options.experimentNewRti) { if (_options.useNewRti) {
fields.add(_reifiedTypeNewRti(constant.type)); fields.add(_reifiedTypeNewRti(constant.type));
} else { } else {
fields fields
@ -446,7 +446,7 @@ class ConstantEmitter extends ModularConstantEmitter {
List<jsAst.Expression> fields = <jsAst.Expression>[ List<jsAst.Expression> fields = <jsAst.Expression>[
_constantReferenceGenerator(constant.function) _constantReferenceGenerator(constant.function)
]; ];
if (_options.experimentNewRti) { if (_options.useNewRti) {
fields fields
.add(_reifiedTypeNewRti(InterfaceType(cls, constant.typeArguments))); .add(_reifiedTypeNewRti(InterfaceType(cls, constant.typeArguments)));
} else { } else {
@ -502,7 +502,7 @@ class ConstantEmitter extends ModularConstantEmitter {
} }
jsAst.Expression _reifiedTypeNewRti(DartType type) { jsAst.Expression _reifiedTypeNewRti(DartType type) {
assert(_options.experimentNewRti); assert(_options.useNewRti);
assert(!type.containsTypeVariables); assert(!type.containsTypeVariables);
return TypeReference(TypeExpressionRecipe(type))..forConstant = true; return TypeReference(TypeExpressionRecipe(type))..forConstant = true;
} }

View file

@ -443,7 +443,7 @@ class ResolutionEnqueuerListener extends EnqueuerListener {
_registerBackendImpact(impactBuilder, _impacts.traceHelper); _registerBackendImpact(impactBuilder, _impacts.traceHelper);
} }
if (_options.experimentNewRti) { if (_options.useNewRti) {
_registerBackendImpact(impactBuilder, _impacts.rtiAddRules); _registerBackendImpact(impactBuilder, _impacts.rtiAddRules);
} }

View file

@ -81,7 +81,7 @@ class InstantiationStubGenerator {
parameters.add(new jsAst.Parameter(jsName)); parameters.add(new jsAst.Parameter(jsName));
} }
if (_options.experimentNewRti) { if (_options.useNewRti) {
for (int i = 0; i < targetSelector.typeArgumentCount; i++) { for (int i = 0; i < targetSelector.typeArgumentCount; i++) {
arguments.add(js('this.#.#[#]', [ arguments.add(js('this.#.#[#]', [
_namer.rtiFieldJsName, _namer.rtiFieldJsName,
@ -122,7 +122,7 @@ class InstantiationStubGenerator {
jsAst.Name operatorSignature = jsAst.Name operatorSignature =
_namer.asName(_namer.fixedNames.operatorSignature); _namer.asName(_namer.fixedNames.operatorSignature);
jsAst.Fun function = _options.experimentNewRti jsAst.Fun function = _options.useNewRti
? _generateSignatureNewRti(functionField) ? _generateSignatureNewRti(functionField)
: _generateSignatureLegacy(functionField); : _generateSignatureLegacy(functionField);

View file

@ -203,7 +203,7 @@ class MetadataCollector implements jsAst.TokenFinalizer {
jsAst.Expression addTypeInOutputUnit(DartType type, OutputUnit outputUnit) { jsAst.Expression addTypeInOutputUnit(DartType type, OutputUnit outputUnit) {
_typesMap[outputUnit] ??= new Map<DartType, _BoundMetadataEntry>(); _typesMap[outputUnit] ??= new Map<DartType, _BoundMetadataEntry>();
return _typesMap[outputUnit].putIfAbsent(type, () { return _typesMap[outputUnit].putIfAbsent(type, () {
if (_options.experimentNewRti) { if (_options.useNewRti) {
return new _BoundMetadataEntry(_computeTypeRepresentationNewRti(type)); return new _BoundMetadataEntry(_computeTypeRepresentationNewRti(type));
} else { } else {
return new _BoundMetadataEntry(_computeTypeRepresentation(type)); return new _BoundMetadataEntry(_computeTypeRepresentation(type));

View file

@ -36,7 +36,7 @@ class ParameterStubGenerator {
final NativeEmitter _nativeEmitter; final NativeEmitter _nativeEmitter;
final Namer _namer; final Namer _namer;
final RuntimeTypesEncoder _rtiEncoder; final RuntimeTypesEncoder _rtiEncoder;
final RecipeEncoder _rtiRecipeEncoder; // `null` if not experimentNewRti. final RecipeEncoder _rtiRecipeEncoder; // `null` if not useNewRti.
final NativeData _nativeData; final NativeData _nativeData;
final InterceptorData _interceptorData; final InterceptorData _interceptorData;
final CodegenWorld _codegenWorld; final CodegenWorld _codegenWorld;

View file

@ -246,7 +246,7 @@ class ProgramBuilder {
_markEagerClasses(); _markEagerClasses();
if (_options.experimentNewRti) { if (_options.useNewRti) {
associateNamedTypeVariablesNewRti(); associateNamedTypeVariablesNewRti();
} }
@ -986,7 +986,7 @@ class ProgramBuilder {
js.Expression _generateFunctionType(ClassEntity /*?*/ enclosingClass, js.Expression _generateFunctionType(ClassEntity /*?*/ enclosingClass,
FunctionType type, OutputUnit outputUnit) => FunctionType type, OutputUnit outputUnit) =>
_options.experimentNewRti _options.useNewRti
? _generateFunctionTypeNewRti(enclosingClass, type, outputUnit) ? _generateFunctionTypeNewRti(enclosingClass, type, outputUnit)
: _generateFunctionTypeLegacy(enclosingClass, type, outputUnit); : _generateFunctionTypeLegacy(enclosingClass, type, outputUnit);
@ -1036,7 +1036,7 @@ class ProgramBuilder {
_task.nativeEmitter, _task.nativeEmitter,
_namer, _namer,
_rtiEncoder, _rtiEncoder,
_options.experimentNewRti ? _rtiRecipeEncoder : null, _options.useNewRti ? _rtiRecipeEncoder : null,
_nativeData, _nativeData,
_interceptorData, _interceptorData,
_codegenWorld, _codegenWorld,

View file

@ -184,7 +184,7 @@ class RuntimeTypeGenerator {
checkedClass, _namer.operatorIs(checkedClass), js('1')); checkedClass, _namer.operatorIs(checkedClass), js('1'));
} }
Substitution substitution = check.substitution; Substitution substitution = check.substitution;
if (substitution != null && !_options.experimentNewRti) { if (substitution != null && !_options.useNewRti) {
jsAst.Expression body = jsAst.Expression body =
_getSubstitutionCode(emitterTask.emitter, substitution); _getSubstitutionCode(emitterTask.emitter, substitution);
result.addSubstitution( result.addSubstitution(

View file

@ -626,7 +626,7 @@ class FragmentEmitter {
this._nativeEmitter, this._nativeEmitter,
this._closedWorld, this._closedWorld,
this._codegenWorld) { this._codegenWorld) {
if (_options.experimentNewRti) { if (_options.useNewRti) {
_recipeEncoder = RecipeEncoderImpl( _recipeEncoder = RecipeEncoderImpl(
_closedWorld, _closedWorld,
_options.disableRtiOptimization _options.disableRtiOptimization
@ -711,8 +711,7 @@ class FragmentEmitter {
emitEmbeddedGlobalsPart2(program, deferredLoadingState), emitEmbeddedGlobalsPart2(program, deferredLoadingState),
'typeRules': emitTypeRules(fragment), 'typeRules': emitTypeRules(fragment),
'variances': emitVariances(fragment), 'variances': emitVariances(fragment),
'sharedTypeRtis': 'sharedTypeRtis': _options.useNewRti ? TypeReferenceResource() : [],
_options.experimentNewRti ? TypeReferenceResource() : [],
'nativeSupport': emitNativeSupport(fragment), 'nativeSupport': emitNativeSupport(fragment),
'jsInteropSupport': jsInteropAnalysis.buildJsInteropBootstrap( 'jsInteropSupport': jsInteropAnalysis.buildJsInteropBootstrap(
_codegenWorld, _closedWorld.nativeData, _namer) ?? _codegenWorld, _closedWorld.nativeData, _namer) ??
@ -843,8 +842,7 @@ class FragmentEmitter {
'types': deferredTypes, 'types': deferredTypes,
'nativeSupport': nativeSupport, 'nativeSupport': nativeSupport,
'typesOffset': _namer.typesOffsetName, 'typesOffset': _namer.typesOffsetName,
'sharedTypeRtis': 'sharedTypeRtis': _options.useNewRti ? TypeReferenceResource() : [],
_options.experimentNewRti ? TypeReferenceResource() : [],
}); });
if (_options.experimentStartupFunctions) { if (_options.experimentStartupFunctions) {
@ -855,7 +853,7 @@ class FragmentEmitter {
} }
void finalizeTypeReferences(js.Node code) { void finalizeTypeReferences(js.Node code) {
if (!_options.experimentNewRti) return; if (!_options.useNewRti) return;
TypeReferenceFinalizer finalizer = TypeReferenceFinalizerImpl( TypeReferenceFinalizer finalizer = TypeReferenceFinalizerImpl(
_emitter, _commonElements, _recipeEncoder, _options.enableMinification); _emitter, _commonElements, _recipeEncoder, _options.enableMinification);
@ -1931,7 +1929,7 @@ class FragmentEmitter {
js.string(TYPE_TO_INTERCEPTOR_MAP), js.LiteralNull())); js.string(TYPE_TO_INTERCEPTOR_MAP), js.LiteralNull()));
} }
if (_options.experimentNewRti) { if (_options.useNewRti) {
globals.add(js.Property(js.string(RTI_UNIVERSE), createRtiUniverse())); globals.add(js.Property(js.string(RTI_UNIVERSE), createRtiUniverse()));
} }
@ -1972,7 +1970,7 @@ class FragmentEmitter {
} }
js.Block emitTypeRules(Fragment fragment) { js.Block emitTypeRules(Fragment fragment) {
if (!_options.experimentNewRti) return js.Block.empty(); if (!_options.useNewRti) return js.Block.empty();
List<js.Statement> statements = []; List<js.Statement> statements = [];
bool addJsObjectRedirections = false; bool addJsObjectRedirections = false;
@ -2063,7 +2061,7 @@ class FragmentEmitter {
} }
js.Statement emitVariances(Fragment fragment) { js.Statement emitVariances(Fragment fragment) {
if (!_options.enableVariance || !_options.experimentNewRti) { if (!_options.enableVariance || !_options.useNewRti) {
return js.EmptyStatement(); return js.EmptyStatement();
} }

View file

@ -217,7 +217,7 @@ class JsBackendStrategy implements BackendStrategy {
rtiSubstitutions = runtimeTypesImpl; rtiSubstitutions = runtimeTypesImpl;
} }
RecipeEncoder rtiRecipeEncoder = _compiler.options.experimentNewRti RecipeEncoder rtiRecipeEncoder = _compiler.options.useNewRti
? new RecipeEncoderImpl( ? new RecipeEncoderImpl(
closedWorld, closedWorld,
rtiSubstitutions, rtiSubstitutions,

View file

@ -328,8 +328,8 @@ class CompilerOptions implements DiagnosticOptions {
/// called. /// called.
bool experimentCallInstrumentation = false; bool experimentCallInstrumentation = false;
/// Experimental use of the new (Q2 2019) RTI system. /// Whether to use the new RTI representation (default).
bool experimentNewRti = false; bool useNewRti = true;
/// The path to the file that contains the profiled allocations. /// The path to the file that contains the profiled allocations.
/// ///
@ -410,7 +410,7 @@ class CompilerOptions implements DiagnosticOptions {
..experimentToBoolean = _hasOption(options, Flags.experimentToBoolean) ..experimentToBoolean = _hasOption(options, Flags.experimentToBoolean)
..experimentCallInstrumentation = ..experimentCallInstrumentation =
_hasOption(options, Flags.experimentCallInstrumentation) _hasOption(options, Flags.experimentCallInstrumentation)
..experimentNewRti = _hasOption(options, Flags.experimentNewRti) ..useNewRti = !_hasOption(options, Flags.useOldRti)
..generateSourceMap = !_hasOption(options, Flags.noSourceMaps) ..generateSourceMap = !_hasOption(options, Flags.noSourceMaps)
..outputUri = _extractUriOption(options, '--out=') ..outputUri = _extractUriOption(options, '--out=')
..platformBinaries = ..platformBinaries =
@ -475,9 +475,10 @@ class CompilerOptions implements DiagnosticOptions {
} }
if (benchmarkingExperiment) { if (benchmarkingExperiment) {
// TODO(sra): Set flags implied by '--benchmarking-x'. Initially this will // TODO(sra): Set flags implied by '--benchmarking-x'. At this time we
// be --experiment-new-rti, and later NNBD. // use it to run the old-rti to continue comparing data with new-rti, but
experimentNewRti = true; // we should remove it once we start benchmarking NNBD.
useNewRti = false;
} }
if (optimizationLevel != null) { if (optimizationLevel != null) {

View file

@ -380,7 +380,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
case 'USE_CONTENT_SECURITY_POLICY': case 'USE_CONTENT_SECURITY_POLICY':
return options.useContentSecurityPolicy; return options.useContentSecurityPolicy;
case 'USE_NEW_RTI': case 'USE_NEW_RTI':
return options.experimentNewRti; return options.useNewRti;
case 'VARIANCE': case 'VARIANCE':
return options.enableVariance; return options.enableVariance;
default: default:
@ -517,7 +517,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
"Unexpected function signature: " "Unexpected function signature: "
"$targetElement inside a non-closure: $target"); "$targetElement inside a non-closure: $target");
} }
if (options.experimentNewRti) { if (options.useNewRti) {
_buildMethodSignatureNewRti(originalClosureNode); _buildMethodSignatureNewRti(originalClosureNode);
} else { } else {
_buildMethodSignature(originalClosureNode); _buildMethodSignature(originalClosureNode);
@ -805,7 +805,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
bool needsTypeArguments = bool needsTypeArguments =
closedWorld.rtiNeed.classNeedsTypeArguments(cls); closedWorld.rtiNeed.classNeedsTypeArguments(cls);
if (needsTypeArguments) { if (needsTypeArguments) {
if (options.experimentNewRti) { if (options.useNewRti) {
InterfaceType thisType = _elementEnvironment.getThisType(cls); InterfaceType thisType = _elementEnvironment.getThisType(cls);
HInstruction typeArgument = _typeBuilder.analyzeTypeArgumentNewRti( HInstruction typeArgument = _typeBuilder.analyzeTypeArgumentNewRti(
thisType, sourceElement, thisType, sourceElement,
@ -1376,7 +1376,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
if (elementType.containsFreeTypeVariables) { if (elementType.containsFreeTypeVariables) {
// Type must be computed in the entry function, where the type variables // Type must be computed in the entry function, where the type variables
// are in scope, and passed to the body function. // are in scope, and passed to the body function.
if (options.experimentNewRti) { if (options.useNewRti) {
inputs inputs
.add(_typeBuilder.analyzeTypeArgumentNewRti(elementType, function)); .add(_typeBuilder.analyzeTypeArgumentNewRti(elementType, function));
} else { } else {
@ -1500,8 +1500,9 @@ class KernelSsaGraphBuilder extends ir.Visitor {
bound is! VoidType && bound is! VoidType &&
bound != _commonElements.objectType) { bound != _commonElements.objectType) {
registry.registerTypeUse(TypeUse.typeVariableBoundCheck(bound)); registry.registerTypeUse(TypeUse.typeVariableBoundCheck(bound));
if (options.experimentNewRti) { if (options.useNewRti) {
_checkTypeBound(newParameter, bound, local.name); // TODO(sigmund): method name here is not minified, should it be?
_checkTypeBound(newParameter, bound, local.name, method.name);
} else { } else {
_assertIsType( _assertIsType(
newParameter, newParameter,
@ -3104,7 +3105,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
if (!_rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) { if (!_rtiNeed.classNeedsTypeArguments(type.element) || type.treatAsRaw) {
return object; return object;
} }
if (options.experimentNewRti) { if (options.useNewRti) {
// [type] could be `List<T>`, so ensure it is `JSArray<T>`. // [type] could be `List<T>`, so ensure it is `JSArray<T>`.
InterfaceType arrayType = InterfaceType arrayType =
InterfaceType(_commonElements.jsArrayClass, type.typeArguments); InterfaceType(_commonElements.jsArrayClass, type.typeArguments);
@ -4046,7 +4047,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
List<HInstruction> inputs = <HInstruction>[closure]; List<HInstruction> inputs = <HInstruction>[closure];
List<DartType> typeArguments = <DartType>[]; List<DartType> typeArguments = <DartType>[];
if (options.experimentNewRti) { if (options.useNewRti) {
closedWorld.registerExtractTypeArguments(cls); closedWorld.registerExtractTypeArguments(cls);
HInstruction instanceType = HInstruction instanceType =
HInstanceEnvironment(object, _abstractValueDomain.dynamicType); HInstanceEnvironment(object, _abstractValueDomain.dynamicType);
@ -4695,7 +4696,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
void _handleForeignGetJSArrayInteropRti(ir.StaticInvocation invocation) { void _handleForeignGetJSArrayInteropRti(ir.StaticInvocation invocation) {
if (_unexpectedForeignArguments(invocation, if (_unexpectedForeignArguments(invocation,
minPositional: 0, maxPositional: 0) || minPositional: 0, maxPositional: 0) ||
!options.experimentNewRti) { !options.useNewRti) {
// Result expected on stack. // Result expected on stack.
stack.add(graph.addConstantNull(closedWorld)); stack.add(graph.addConstantNull(closedWorld));
return; return;
@ -5334,18 +5335,21 @@ class KernelSsaGraphBuilder extends ir.Visitor {
add(assertIsSubtype); add(assertIsSubtype);
} }
void _checkTypeBound( void _checkTypeBound(HInstruction typeInstruction, DartType bound,
HInstruction typeInstruction, DartType bound, String variableName) { String variableName, String methodName) {
HInstruction boundInstruction = _typeBuilder.analyzeTypeArgumentNewRti( HInstruction boundInstruction = _typeBuilder.analyzeTypeArgumentNewRti(
localsHandler.substInContext(bound), sourceElement); localsHandler.substInContext(bound), sourceElement);
HInstruction variableNameInstruction = HInstruction variableNameInstruction =
graph.addConstantString(variableName, closedWorld); graph.addConstantString(variableName, closedWorld);
HInstruction methodNameInstruction =
graph.addConstantString(methodName, closedWorld);
FunctionEntity element = _commonElements.checkTypeBound; FunctionEntity element = _commonElements.checkTypeBound;
var inputs = <HInstruction>[ var inputs = <HInstruction>[
typeInstruction, typeInstruction,
boundInstruction, boundInstruction,
variableNameInstruction variableNameInstruction,
methodNameInstruction,
]; ];
HInstruction checkBound = new HInvokeStatic( HInstruction checkBound = new HInvokeStatic(
element, inputs, typeInstruction.instructionType, const <DartType>[]); element, inputs, typeInstruction.instructionType, const <DartType>[]);
@ -5430,7 +5434,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
return; return;
} }
if (options.experimentNewRti) { if (options.useNewRti) {
HInstruction rti = HInstruction rti =
_typeBuilder.analyzeTypeArgumentNewRti(typeValue, sourceElement); _typeBuilder.analyzeTypeArgumentNewRti(typeValue, sourceElement);
AbstractValueWithPrecision checkedType = AbstractValueWithPrecision checkedType =
@ -6055,7 +6059,7 @@ class KernelSsaGraphBuilder extends ir.Visitor {
FunctionEntity function, TypeVariableType typeVariable) { FunctionEntity function, TypeVariableType typeVariable) {
DartType bound = DartType bound =
_elementEnvironment.getTypeVariableDefaultType(typeVariable.element); _elementEnvironment.getTypeVariableDefaultType(typeVariable.element);
if (bound.containsTypeVariables && !options.experimentNewRti) { if (bound.containsTypeVariables && !options.useNewRti) {
// TODO(33422): Support type variables in default // TODO(33422): Support type variables in default
// types. Temporarily using the "any" type (encoded as -2) to // types. Temporarily using the "any" type (encoded as -2) to
// avoid failing on bounds checks. // avoid failing on bounds checks.

View file

@ -689,7 +689,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
node.block.addBefore(node, splitInstruction); node.block.addBefore(node, splitInstruction);
HInstruction typeInfo; HInstruction typeInfo;
if (_options.experimentNewRti) { if (_options.useNewRti) {
typeInfo = HLoadType.type( typeInfo = HLoadType.type(
_closedWorld.elementEnvironment.createInterfaceType( _closedWorld.elementEnvironment.createInterfaceType(
commonElements.jsArrayClass, [commonElements.stringType]), commonElements.jsArrayClass, [commonElements.stringType]),
@ -1409,7 +1409,7 @@ class SsaInstructionSimplifier extends HBaseVisitor
DartType fieldType = _closedWorld.elementEnvironment.getFieldType(field); DartType fieldType = _closedWorld.elementEnvironment.getFieldType(field);
if (_options.experimentNewRti) { if (_options.useNewRti) {
AbstractValueWithPrecision checkedType = AbstractValueWithPrecision checkedType =
_abstractValueDomain.createFromStaticType(fieldType, nullable: true); _abstractValueDomain.createFromStaticType(fieldType, nullable: true);
if (checkedType.isPrecise && if (checkedType.isPrecise &&

View file

@ -206,7 +206,7 @@ class SsaFunctionCompiler implements FunctionCompiler {
FunctionEntity startFunction = commonElements.asyncHelperStartSync; FunctionEntity startFunction = commonElements.asyncHelperStartSync;
FunctionEntity completerFactory = commonElements.asyncAwaitCompleterFactory; FunctionEntity completerFactory = commonElements.asyncAwaitCompleterFactory;
List<js.Expression> itemTypeExpression = _options.experimentNewRti List<js.Expression> itemTypeExpression = _options.useNewRti
? _fetchItemTypeNewRti(commonElements, registry, elementType) ? _fetchItemTypeNewRti(commonElements, registry, elementType)
: _fetchItemType(codegen, emitter, elementType); : _fetchItemType(codegen, emitter, elementType);
@ -243,7 +243,7 @@ class SsaFunctionCompiler implements FunctionCompiler {
js.Expression code, js.Expression code,
DartType asyncTypeParameter, DartType asyncTypeParameter,
js.Name name) { js.Name name) {
List<js.Expression> itemTypeExpression = _options.experimentNewRti List<js.Expression> itemTypeExpression = _options.useNewRti
? _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter) ? _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter)
: _fetchItemType(codegen, emitter, asyncTypeParameter); : _fetchItemType(codegen, emitter, asyncTypeParameter);
@ -279,7 +279,7 @@ class SsaFunctionCompiler implements FunctionCompiler {
js.Expression code, js.Expression code,
DartType asyncTypeParameter, DartType asyncTypeParameter,
js.Name name) { js.Name name) {
List<js.Expression> itemTypeExpression = _options.experimentNewRti List<js.Expression> itemTypeExpression = _options.useNewRti
? _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter) ? _fetchItemTypeNewRti(commonElements, registry, asyncTypeParameter)
: _fetchItemType(codegen, emitter, asyncTypeParameter); : _fetchItemType(codegen, emitter, asyncTypeParameter);

View file

@ -251,7 +251,7 @@ abstract class TypeBuilder {
HInstruction analyzeTypeArgument( HInstruction analyzeTypeArgument(
DartType argument, MemberEntity sourceElement, DartType argument, MemberEntity sourceElement,
{SourceInformation sourceInformation}) { {SourceInformation sourceInformation}) {
if (builder.options.experimentNewRti) { if (builder.options.useNewRti) {
return analyzeTypeArgumentNewRti(argument, sourceElement, return analyzeTypeArgumentNewRti(argument, sourceElement,
sourceInformation: sourceInformation); sourceInformation: sourceInformation);
} }
@ -425,7 +425,7 @@ abstract class TypeBuilder {
HInstruction buildTypeConversion( HInstruction buildTypeConversion(
HInstruction original, DartType type, int kind, HInstruction original, DartType type, int kind,
{SourceInformation sourceInformation}) { {SourceInformation sourceInformation}) {
if (builder.options.experimentNewRti) { if (builder.options.useNewRti) {
return buildAsCheck(original, type, return buildAsCheck(original, type,
isTypeError: kind == HTypeConversion.TYPE_CHECK, isTypeError: kind == HTypeConversion.TYPE_CHECK,
sourceInformation: sourceInformation); sourceInformation: sourceInformation);

View file

@ -849,11 +849,11 @@ _generalTypeCheckImplementation(object) {
} }
/// Called from generated code. /// Called from generated code.
checkTypeBound(Rti type, Rti bound, variable) { checkTypeBound(Rti type, Rti bound, variable, methodName) {
if (isSubtype(_theUniverse(), type, bound)) return type; if (isSubtype(_theUniverse(), type, bound)) return type;
String message = "Type '${_rtiToString(type, null)}'" String message = "The type argument '${_rtiToString(type, null)}' is not"
" is not a subtype of type '${_rtiToString(bound, null)}'" " a subtype of the type variable bound '${_rtiToString(bound, null)}'"
" of '${_Utils.asString(variable)}'"; " of type variable '${_Utils.asString(variable)}' in '$methodName'.";
throw _TypeError.fromMessage(message); throw _TypeError.fromMessage(message);
} }

View file

@ -849,11 +849,11 @@ _generalTypeCheckImplementation(object) {
} }
/// Called from generated code. /// Called from generated code.
checkTypeBound(Rti type, Rti bound, variable) { checkTypeBound(Rti type, Rti bound, variable, methodName) {
if (isSubtype(_theUniverse(), type, bound)) return type; if (isSubtype(_theUniverse(), type, bound)) return type;
String message = "Type '${_rtiToString(type, null)}'" String message = "The type argument '${_rtiToString(type, null)}' is not"
" is not a subtype of type '${_rtiToString(bound, null)}'" " a subtype of the type variable bound '${_rtiToString(bound, null)}'"
" of '${_Utils.asString(variable)}'"; " of type variable '${_Utils.asString(variable)}' in '$methodName'.";
throw _TypeError.fromMessage(message); throw _TypeError.fromMessage(message);
} }

View file

@ -76,7 +76,8 @@ twoClasses() async {
subClass() async { subClass() async {
checkOutput(String generated) { checkOutput(String generated) {
Expect.isTrue(generated.contains(RegExp(r'_inherit\(.\.A, .\.Object\)'))); Expect.isTrue(
generated.contains(RegExp(r'_inheritMany\(.\.Object, .*, .\.A]')));
Expect.isTrue(generated.contains(RegExp(r'_inherit\(.\.B, .\.A\)'))); Expect.isTrue(generated.contains(RegExp(r'_inherit\(.\.B, .\.A\)')));
} }

View file

@ -55,13 +55,21 @@ main() {
// Skip comments. // Skip comments.
List<String> lines = jsOutput.split("\n"); List<String> lines = jsOutput.split("\n");
RegExp commentLine = new RegExp(r' *//');
String filtered =
lines.where((String line) => !commentLine.hasMatch(line)).join("\n");
// TODO(floitsch): we will need to adjust this filter if we start using // Filter out any lines unrelated to the code above where dart2js today
// 'eval' or 'arguments' ourselves. Currently we disallow any 'eval' or // produces the text "eval" or "arguments"
// 'arguments'. // Currently this includes comments, and a few lines in the body of
// Closure.cspForwardCall and Closure.cspForwardInterceptedCall.
List<RegExp> filters = [
RegExp(r' *//'), // skip comments
RegExp(r'"Intercepted function with no arguments."'),
RegExp(r'f.apply\(s\(this\), arguments\)'),
RegExp(r'Array.prototype.push.apply\(a, arguments\)'),
];
String filtered = lines
.where((String line) => !filters.any((regexp) => regexp.hasMatch(line)))
.join("\n");
RegExp re = new RegExp(r'[^\w$](arguments|eval)[^\w$]'); RegExp re = new RegExp(r'[^\w$](arguments|eval)[^\w$]');
Expect.isFalse(re.hasMatch(filtered)); Expect.isFalse(re.hasMatch(filtered));
} }

View file

@ -9,14 +9,14 @@ main() {
promoted(null); promoted(null);
} }
/*member: explicitAs:dynamic=[String.length],type=[inst:JSBool,param:String]*/ /*member: explicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
explicitAs(String i) { explicitAs(String i) {
i.length; i.length;
// ignore: unnecessary_cast // ignore: unnecessary_cast
return i as String; return i as String;
} }
/*member: implicitAs:dynamic=[String.length],type=[inst:JSBool,param:String]*/ /*member: implicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
String implicitAs(String i) { String implicitAs(String i) {
dynamic j = i; dynamic j = i;
i.length; i.length;
@ -24,7 +24,7 @@ String implicitAs(String i) {
return j; return j;
} }
/*member: promoted:dynamic=[String.length],type=[inst:JSBool,inst:JSNull,is:String]*/ /*member: promoted:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:String]*/
String promoted(dynamic i) { String promoted(dynamic i) {
if (i is! String) return null; if (i is! String) return null;
i.length; i.length;

View file

@ -217,50 +217,13 @@ testAnonymousAsyncStar() {
return () async* {}; return () async* {};
} }
/*member: testAsyncForIn: /*member: testAsyncForIn:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
dynamic=[
_StreamIterator.cancel(0),
_StreamIterator.current,
_StreamIterator.moveNext(0)],
static=[
StreamIterator.(1),
_asyncAwait(2),
_asyncRethrow(2),
_asyncReturn(2),
_asyncStartSync(2),
_makeAsyncAwaitCompleter<dynamic>(0),
_wrapJsFunctionForAsync(1)],
type=[
impl:Stream<dynamic>,
inst:JSBool,
inst:JSNull,
inst:Null]
*/
testAsyncForIn(o) async { testAsyncForIn(o) async {
// ignore: UNUSED_LOCAL_VARIABLE // ignore: UNUSED_LOCAL_VARIABLE
await for (var e in o) {} await for (var e in o) {}
} }
/*member: testAsyncForInTyped: /*member: testAsyncForInTyped:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
dynamic=[
_StreamIterator.cancel(0),
_StreamIterator.current,
_StreamIterator.moveNext(0)],
static=[
StreamIterator.(1),
_asyncAwait(2),
_asyncRethrow(2),
_asyncReturn(2),
_asyncStartSync(2),
_makeAsyncAwaitCompleter<dynamic>(0),
_wrapJsFunctionForAsync(1)],
type=[
impl:Stream<dynamic>,
impl:int,
inst:JSBool,
inst:JSNull,
inst:Null]
*/
testAsyncForInTyped(o) async { testAsyncForInTyped(o) async {
// ignore: UNUSED_LOCAL_VARIABLE // ignore: UNUSED_LOCAL_VARIABLE
await for (int e in o) {} await for (int e in o) {}

View file

@ -137,10 +137,7 @@ class ForwardingConstructorClass = ForwardingConstructorSuperClass
testForwardingConstructor() => new ForwardingConstructorClass(null); testForwardingConstructor() => new ForwardingConstructorClass(null);
class ForwardingConstructorTypedSuperClass { class ForwardingConstructorTypedSuperClass {
/*member: ForwardingConstructorTypedSuperClass.: /*member: ForwardingConstructorTypedSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
static=[Object.(0)],
type=[inst:JSBool,param:int]
*/
ForwardingConstructorTypedSuperClass(int arg); ForwardingConstructorTypedSuperClass(int arg);
} }
@ -154,45 +151,21 @@ class ForwardingConstructorTypedClass = ForwardingConstructorTypedSuperClass
testForwardingConstructorTyped() => new ForwardingConstructorTypedClass(null); testForwardingConstructorTyped() => new ForwardingConstructorTypedClass(null);
class ForwardingConstructorGenericSuperClass<T> { class ForwardingConstructorGenericSuperClass<T> {
/*member: ForwardingConstructorGenericSuperClass.: /*member: ForwardingConstructorGenericSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ForwardingConstructorGenericSuperClass.T]*/
static=[
Object.(0),
checkSubtype(4),
checkSubtypeOfRuntimeType(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:ForwardingConstructorGenericSuperClass.T]
*/
ForwardingConstructorGenericSuperClass(T arg); ForwardingConstructorGenericSuperClass(T arg);
} }
class ForwardingConstructorGenericClass< class ForwardingConstructorGenericClass<
S> = ForwardingConstructorGenericSuperClass<S> with EmptyMixin; S> = ForwardingConstructorGenericSuperClass<S> with EmptyMixin;
/*member: testForwardingConstructorGeneric: /*member: testForwardingConstructorGeneric:static=[ForwardingConstructorGenericClass.(1),checkTypeBound(4),throwTypeError(1)],type=[inst:JSNull]*/
static=[
ForwardingConstructorGenericClass.(1),
assertIsSubtype(5),
throwTypeError(1)],
type=[inst:JSNull]
*/
testForwardingConstructorGeneric() { testForwardingConstructorGeneric() {
new ForwardingConstructorGenericClass<int>(null); new ForwardingConstructorGenericClass<int>(null);
} }
enum Enum { A } enum Enum { A }
/*strong.member: testEnum: /*member: testEnum:
static=[ static=[
Enum._name=StringConstant("Enum.A"), Enum._name=StringConstant("Enum.A"),
Enum.index=IntConstant(0)], Enum.index=IntConstant(0)],
@ -208,26 +181,7 @@ enum Enum { A }
*/ */
testEnum() => Enum.A; testEnum() => Enum.A;
/*member: staticGenericMethod: /*member: staticGenericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,inst:List<staticGenericMethod.T>,param:Object,param:staticGenericMethod.T]*/
static=[
checkSubtype(4),
checkSubtypeOfRuntimeType(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
inst:List<staticGenericMethod.T>,
param:Object,
param:staticGenericMethod.T]
*/
List<T> staticGenericMethod<T>(T arg) => [arg]; List<T> staticGenericMethod<T>(T arg) => [arg];
/*member: testStaticGenericMethod: /*member: testStaticGenericMethod:
@ -238,14 +192,7 @@ testStaticGenericMethod() {
staticGenericMethod<bool>(true); staticGenericMethod<bool>(true);
} }
/*member: testInstanceGenericMethod: /*member: testInstanceGenericMethod:dynamic=[exact:GenericClass.genericMethod<bool>(1)],static=[GenericClass.generative(0),checkTypeBound(4),throwTypeError(1)],type=[inst:JSBool]*/
dynamic=[exact:GenericClass.genericMethod<bool>(1)],
static=[
GenericClass.generative(0),
assertIsSubtype(5),
throwTypeError(1)],
type=[inst:JSBool]
*/
testInstanceGenericMethod() { testInstanceGenericMethod() {
new GenericClass<int, String>.generative().genericMethod<bool>(false); new GenericClass<int, String>.generative().genericMethod<bool>(false);
} }
@ -267,20 +214,10 @@ testMixinInstantiation() => new Sub();
/*member: testNamedMixinInstantiation:static=[NamedMixin.(0)]*/ /*member: testNamedMixinInstantiation:static=[NamedMixin.(0)]*/
testNamedMixinInstantiation() => new NamedMixin(); testNamedMixinInstantiation() => new NamedMixin();
/*member: testGenericMixinInstantiation: /*member: testGenericMixinInstantiation:static=[GenericSub.(0),checkTypeBound(4),throwTypeError(1)]*/
static=[
GenericSub.(0),
assertIsSubtype(5),
throwTypeError(1)]
*/
testGenericMixinInstantiation() => new GenericSub<int, String>(); testGenericMixinInstantiation() => new GenericSub<int, String>();
/*member: testGenericNamedMixinInstantiation: /*member: testGenericNamedMixinInstantiation:static=[GenericNamedMixin.(0),checkTypeBound(4),throwTypeError(1)]*/
static=[
GenericNamedMixin.(0),
assertIsSubtype(5),
throwTypeError(1)]
*/
testGenericNamedMixinInstantiation() => new GenericNamedMixin<int, String>(); testGenericNamedMixinInstantiation() => new GenericNamedMixin<int, String>();
class Class { class Class {
@ -291,27 +228,7 @@ class Class {
class GenericClass<X, Y> { class GenericClass<X, Y> {
const GenericClass.generative(); const GenericClass.generative();
/*member: GenericClass.genericMethod: /*member: GenericClass.genericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,inst:Map<GenericClass.X,genericMethod.T>,param:Object,param:genericMethod.T]*/
static=[
checkSubtype(4),
checkSubtypeOfRuntimeType(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
inst:Map<GenericClass.X,genericMethod.T>,
param:Object,
param:genericMethod.T]
*/
Map<X, T> genericMethod<T>(T arg) => {null: arg}; Map<X, T> genericMethod<T>(T arg) => {null: arg};
} }

View file

@ -42,7 +42,7 @@ const instanceConstantField = const Class(true, false);
const typeLiteralField = String; const typeLiteralField = String;
/*member: id:static=[checkSubtype(4),checkSubtypeOfRuntimeType(2),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),setRuntimeTypeInfo(2)],type=[inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Object,param:id.T]*/ /*member: id:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Object,param:id.T]*/
T id<T>(T t) => t; T id<T>(T t) => t;
const int Function(int) _instantiation = id; const int Function(int) _instantiation = id;

View file

@ -101,19 +101,19 @@ stringMapLiteral() => const {'foo': false};
/*member: setLiteral:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/ /*member: setLiteral:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/
setLiteral() => const {true, false}; setLiteral() => const {true, false};
/*strong.member: instanceConstant: /*member: instanceConstant:
static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)], static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)],
type=[const:Class,inst:JSBool] type=[const:Class,inst:JSBool]
*/ */
instanceConstant() => const Class(true, false); instanceConstant() => const Class(true, false);
/*member: typeLiteral:static=[createRuntimeType(1)],type=[inst:Type,inst:TypeImpl,lit:String]*/ /*member: typeLiteral:static=[createRuntimeType(1),typeLiteral(1)],type=[inst:Type,inst:_Type,lit:String]*/
typeLiteral() { typeLiteral() {
const dynamic local = String; const dynamic local = String;
return local; return local;
} }
/*member: instantiation:static=[extractFunctionTypeObjectFromInternal(1),id,instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/ /*member: instantiation:static=[closureFunctionType(1),id,instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/
instantiation() { instantiation() {
const int Function(int) local = id; const int Function(int) local = id;
return local; return local;
@ -131,103 +131,103 @@ staticTearOff() {
return local; return local;
} }
/*strong.member: nullLiteralRef:type=[inst:JSNull]*/ /*member: nullLiteralRef:type=[inst:JSNull]*/
nullLiteralRef() => nullLiteralField; nullLiteralRef() => nullLiteralField;
/*strong.member: boolLiteralRef:type=[inst:JSBool]*/ /*member: boolLiteralRef:type=[inst:JSBool]*/
boolLiteralRef() => boolLiteralField; boolLiteralRef() => boolLiteralField;
/*strong.member: intLiteralRef:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/ /*member: intLiteralRef:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
intLiteralRef() => intLiteralField; intLiteralRef() => intLiteralField;
/*strong.member: doubleLiteralRef:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/ /*member: doubleLiteralRef:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
doubleLiteralRef() => doubleLiteralField; doubleLiteralRef() => doubleLiteralField;
/*strong.member: stringLiteralRef:type=[inst:JSString]*/ /*member: stringLiteralRef:type=[inst:JSString]*/
stringLiteralRef() => stringLiteralField; stringLiteralRef() => stringLiteralField;
/*strong.member: symbolLiteralRef:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: symbolLiteralRef:static=[Symbol.(1)],type=[inst:Symbol]*/
symbolLiteralRef() => symbolLiteralField; symbolLiteralRef() => symbolLiteralField;
/*strong.member: listLiteralRef:type=[inst:JSBool,inst:List<bool>]*/ /*member: listLiteralRef:type=[inst:JSBool,inst:List<bool>]*/
listLiteralRef() => listLiteralField; listLiteralRef() => listLiteralField;
/*strong.member: mapLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool]*/ /*member: mapLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool]*/
mapLiteralRef() => mapLiteralField; mapLiteralRef() => mapLiteralField;
/*strong.member: stringMapLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:JSString]*/ /*member: stringMapLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:JSString]*/
stringMapLiteralRef() => stringMapLiteralField; stringMapLiteralRef() => stringMapLiteralField;
/*strong.member: setLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/ /*member: setLiteralRef:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/
setLiteralRef() => setLiteralField; setLiteralRef() => setLiteralField;
/*strong.member: instanceConstantRef: /*member: instanceConstantRef:
static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)], static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)],
type=[const:Class,inst:JSBool] type=[const:Class,inst:JSBool]
*/ */
instanceConstantRef() => instanceConstantField; instanceConstantRef() => instanceConstantField;
/*strong.member: typeLiteralRef:static=[createRuntimeType(1)],type=[inst:Type,inst:TypeImpl,lit:String]*/ /*member: typeLiteralRef:static=[createRuntimeType(1),typeLiteral(1)],type=[inst:Type,inst:_Type,lit:String]*/
typeLiteralRef() => typeLiteralField; typeLiteralRef() => typeLiteralField;
/*strong.member: instantiationRef:static=[extractFunctionTypeObjectFromInternal(1),id,instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/ /*member: instantiationRef:static=[closureFunctionType(1),id,instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/
instantiationRef() => instantiationField; instantiationRef() => instantiationField;
/*strong.member: topLevelTearOffRef:static=[topLevelMethod]*/ /*member: topLevelTearOffRef:static=[topLevelMethod]*/
topLevelTearOffRef() => topLevelTearOffField; topLevelTearOffRef() => topLevelTearOffField;
/*strong.member: staticTearOffRef:static=[Class.staticMethodField]*/ /*member: staticTearOffRef:static=[Class.staticMethodField]*/
staticTearOffRef() => staticTearOffField; staticTearOffRef() => staticTearOffField;
/*strong.member: nullLiteralDeferred:type=[inst:JSNull]*/ /*member: nullLiteralDeferred:type=[inst:JSNull]*/
nullLiteralDeferred() => defer.nullLiteralField; nullLiteralDeferred() => defer.nullLiteralField;
/*strong.member: boolLiteralDeferred:type=[inst:JSBool]*/ /*member: boolLiteralDeferred:type=[inst:JSBool]*/
boolLiteralDeferred() => defer.boolLiteralField; boolLiteralDeferred() => defer.boolLiteralField;
/*strong.member: intLiteralDeferred:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/ /*member: intLiteralDeferred:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
intLiteralDeferred() => defer.intLiteralField; intLiteralDeferred() => defer.intLiteralField;
/*strong.member: doubleLiteralDeferred:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/ /*member: doubleLiteralDeferred:type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
doubleLiteralDeferred() => defer.doubleLiteralField; doubleLiteralDeferred() => defer.doubleLiteralField;
/*strong.member: stringLiteralDeferred:type=[inst:JSString]*/ /*member: stringLiteralDeferred:type=[inst:JSString]*/
stringLiteralDeferred() => defer.stringLiteralField; stringLiteralDeferred() => defer.stringLiteralField;
// TODO(johnniwinther): Should we record that this is deferred? // TODO(johnniwinther): Should we record that this is deferred?
/*strong.member: symbolLiteralDeferred:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: symbolLiteralDeferred:static=[Symbol.(1)],type=[inst:Symbol]*/
symbolLiteralDeferred() => defer.symbolLiteralField; symbolLiteralDeferred() => defer.symbolLiteralField;
// TODO(johnniwinther): Should we record that this is deferred? // TODO(johnniwinther): Should we record that this is deferred?
/*strong.member: listLiteralDeferred:type=[inst:JSBool,inst:List<bool>]*/ /*member: listLiteralDeferred:type=[inst:JSBool,inst:List<bool>]*/
listLiteralDeferred() => defer.listLiteralField; listLiteralDeferred() => defer.listLiteralField;
// TODO(johnniwinther): Should we record that this is deferred? // TODO(johnniwinther): Should we record that this is deferred?
/*strong.member: mapLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool]*/ /*member: mapLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool]*/
mapLiteralDeferred() => defer.mapLiteralField; mapLiteralDeferred() => defer.mapLiteralField;
// TODO(johnniwinther): Should we record that this is deferred? // TODO(johnniwinther): Should we record that this is deferred?
/*strong.member: stringMapLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:JSString]*/ /*member: stringMapLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:JSString]*/
stringMapLiteralDeferred() => defer.stringMapLiteralField; stringMapLiteralDeferred() => defer.stringMapLiteralField;
// TODO(johnniwinther): Should we record that this is deferred? // TODO(johnniwinther): Should we record that this is deferred?
/*strong.member: setLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/ /*member: setLiteralDeferred:type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSBool,inst:_UnmodifiableSet<dynamic>]*/
setLiteralDeferred() => defer.setLiteralField; setLiteralDeferred() => defer.setLiteralField;
/*strong.member: instanceConstantDeferred: /*member: instanceConstantDeferred:
static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)], static=[Class.field2=BoolConstant(false),SuperClass.field1=BoolConstant(true)],
type=[const:Class{defer},inst:JSBool] type=[const:Class{defer},inst:JSBool]
*/ */
instanceConstantDeferred() => defer.instanceConstantField; instanceConstantDeferred() => defer.instanceConstantField;
/*strong.member: typeLiteralDeferred:static=[createRuntimeType(1)],type=[inst:Type,inst:TypeImpl,lit:String{defer}]*/ /*member: typeLiteralDeferred:static=[createRuntimeType(1),typeLiteral(1)],type=[inst:Type,inst:_Type,lit:String{defer}]*/
typeLiteralDeferred() => defer.typeLiteralField; typeLiteralDeferred() => defer.typeLiteralField;
/*strong.member: instantiationDeferred:static=[extractFunctionTypeObjectFromInternal(1),id{defer},instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/ /*member: instantiationDeferred:static=[closureFunctionType(1),id{defer},instantiate1(1),instantiatedGenericFunctionType(2)],type=[inst:Instantiation1<dynamic>]*/
instantiationDeferred() => defer.instantiationField; instantiationDeferred() => defer.instantiationField;
/*strong.member: topLevelTearOffDeferred:static=[topLevelMethod{defer}]*/ /*member: topLevelTearOffDeferred:static=[topLevelMethod{defer}]*/
topLevelTearOffDeferred() => defer.topLevelTearOffField; topLevelTearOffDeferred() => defer.topLevelTearOffField;
/*strong.member: staticTearOffDeferred:static=[Class.staticMethodField{defer}]*/ /*member: staticTearOffDeferred:static=[Class.staticMethodField{defer}]*/
staticTearOffDeferred() => defer.staticTearOffField; staticTearOffDeferred() => defer.staticTearOffField;

View file

@ -49,7 +49,7 @@ testConstructorInvoke() {
new Class.generative(); new Class.generative();
} }
/*member: testConstructorInvokeGeneric:static=[GenericClass.generative(0),assertIsSubtype(5),throwTypeError(1)]*/ /*member: testConstructorInvokeGeneric:static=[GenericClass.generative(0),checkTypeBound(4),throwTypeError(1)]*/
testConstructorInvokeGeneric() { testConstructorInvokeGeneric() {
new GenericClass<int, String>.generative(); new GenericClass<int, String>.generative();
} }
@ -69,7 +69,7 @@ testFactoryInvoke() {
new Class.fact(); new Class.fact();
} }
/*member: testFactoryInvokeGeneric:static=[GenericClass.fact(0),assertIsSubtype(5),throwTypeError(1)]*/ /*member: testFactoryInvokeGeneric:static=[GenericClass.fact(0),checkTypeBound(4),throwTypeError(1)]*/
testFactoryInvokeGeneric() { testFactoryInvokeGeneric() {
new GenericClass<int, String>.fact(); new GenericClass<int, String>.fact();
} }
@ -89,7 +89,7 @@ testRedirectingFactoryInvoke() {
new Class.redirect(); new Class.redirect();
} }
/*member: testRedirectingFactoryInvokeGeneric:static=[GenericClass.generative(0),assertIsSubtype(5),throwTypeError(1)]*/ /*member: testRedirectingFactoryInvokeGeneric:static=[GenericClass.generative(0),checkTypeBound(4),throwTypeError(1)]*/
testRedirectingFactoryInvokeGeneric() { testRedirectingFactoryInvokeGeneric() {
new GenericClass<int, String>.redirect(); new GenericClass<int, String>.redirect();
} }
@ -104,22 +104,22 @@ testRedirectingFactoryInvokeGenericDynamic() {
new GenericClass<dynamic, dynamic>.redirect(); new GenericClass<dynamic, dynamic>.redirect();
} }
/*strong.member: testConstRedirectingFactoryInvoke:type=[const:Class]*/ /*member: testConstRedirectingFactoryInvoke:type=[const:Class]*/
testConstRedirectingFactoryInvoke() { testConstRedirectingFactoryInvoke() {
const Class.redirect(); const Class.redirect();
} }
/*strong.member: testConstRedirectingFactoryInvokeGeneric:type=[const:GenericClass<int,String>]*/ /*member: testConstRedirectingFactoryInvokeGeneric:type=[const:GenericClass<int,String>]*/
testConstRedirectingFactoryInvokeGeneric() { testConstRedirectingFactoryInvokeGeneric() {
const GenericClass<int, String>.redirect(); const GenericClass<int, String>.redirect();
} }
/*strong.member: testConstRedirectingFactoryInvokeGenericRaw:type=[const:GenericClass<dynamic,dynamic>]*/ /*member: testConstRedirectingFactoryInvokeGenericRaw:type=[const:GenericClass<dynamic,dynamic>]*/
testConstRedirectingFactoryInvokeGenericRaw() { testConstRedirectingFactoryInvokeGenericRaw() {
const GenericClass.redirect(); const GenericClass.redirect();
} }
/*strong.member: testConstRedirectingFactoryInvokeGenericDynamic:type=[const:GenericClass<dynamic,dynamic>]*/ /*member: testConstRedirectingFactoryInvokeGenericDynamic:type=[const:GenericClass<dynamic,dynamic>]*/
testConstRedirectingFactoryInvokeGenericDynamic() { testConstRedirectingFactoryInvokeGenericDynamic() {
const GenericClass<dynamic, dynamic>.redirect(); const GenericClass<dynamic, dynamic>.redirect();
} }
@ -152,7 +152,7 @@ class GenericClass<X, Y> {
/*member: GenericClass.generative:static=[Object.(0)]*/ /*member: GenericClass.generative:static=[Object.(0)]*/
const GenericClass.generative(); const GenericClass.generative();
/*member: GenericClass.fact:type=[inst:JSBool,inst:JSNull,param:Object]*/ /*member: GenericClass.fact:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Object]*/
factory GenericClass.fact() => null; factory GenericClass.fact() => null;
const factory GenericClass.redirect() = GenericClass<X, Y>.generative; const factory GenericClass.redirect() = GenericClass<X, Y>.generative;

View file

@ -67,19 +67,7 @@ notEffectivelyFinalList() {
/*member: _method1:type=[inst:JSNull]*/ /*member: _method1:type=[inst:JSNull]*/
num _method1() => null; num _method1() => null;
/*member: effectivelyFinalPromoted: /*member: effectivelyFinalPromoted:dynamic=[int.+,num.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),_method1(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32,is:int]*/
dynamic=[int.+,num.+],
static=[_method1(0)],
type=[
inst:JSBool,
inst:JSDouble,
inst:JSInt,
inst:JSNumber,
inst:JSPositiveInt,
inst:JSUInt31,
inst:JSUInt32,
is:int]
*/
effectivelyFinalPromoted() { effectivelyFinalPromoted() {
dynamic c = _method1(); dynamic c = _method1();
c + 0; c + 0;
@ -91,20 +79,7 @@ effectivelyFinalPromoted() {
/*member: _method2:type=[inst:JSNull]*/ /*member: _method2:type=[inst:JSNull]*/
String _method2() => null; String _method2() => null;
/*member: effectivelyFinalPromotedInvalid: /*member: effectivelyFinalPromotedInvalid:dynamic=[String.+,int.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),_method2(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32,is:int]*/
dynamic=[String.+,int.+],
static=[_method2(0)],
type=[
inst:JSBool,
inst:JSDouble,
inst:JSInt,
inst:JSNumber,
inst:JSPositiveInt,
inst:JSString,
inst:JSUInt31,
inst:JSUInt32,
is:int]
*/
effectivelyFinalPromotedInvalid() { effectivelyFinalPromotedInvalid() {
dynamic c = _method2(); dynamic c = _method2();
c + ''; c + '';

View file

@ -105,204 +105,58 @@ testPreInc(o) => ++o;
*/ */
testPreDec(o) => --o; testPreDec(o) => --o;
/*member: testIs:type=[inst:JSBool,inst:JSNull,is:Class]*/ /*member: testIs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
testIs() => null is Class; testIs() => null is Class;
/*member: testIsGeneric: /*member: testIsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:GenericClass<int,String>]
*/
testIsGeneric() => null is GenericClass<int, String>; testIsGeneric() => null is GenericClass<int, String>;
/*member: testIsGenericRaw: /*member: testIsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
type=[inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]
*/
testIsGenericRaw() => null is GenericClass; testIsGenericRaw() => null is GenericClass;
/*member: testIsGenericDynamic: /*member: testIsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
type=[inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]
*/
testIsGenericDynamic() => null is GenericClass<dynamic, dynamic>; testIsGenericDynamic() => null is GenericClass<dynamic, dynamic>;
/*member: testIsNot:type=[inst:JSBool,inst:JSNull,is:Class]*/ /*member: testIsNot:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
testIsNot() => null is! Class; testIsNot() => null is! Class;
/*member: testIsNotGeneric: /*member: testIsNotGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:GenericClass<int,String>]
*/
testIsNotGeneric() => null is! GenericClass<int, String>; testIsNotGeneric() => null is! GenericClass<int, String>;
/*member: testIsNotGenericRaw: /*member: testIsNotGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
type=[inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]
*/
testIsNotGenericRaw() => null is! GenericClass; testIsNotGenericRaw() => null is! GenericClass;
/*member: testIsNotGenericDynamic: /*member: testIsNotGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
type=[inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]
*/
testIsNotGenericDynamic() => null is! GenericClass<dynamic, dynamic>; testIsNotGenericDynamic() => null is! GenericClass<dynamic, dynamic>;
/*member: testIsTypedef: /*member: testIsTypedef:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function()]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:dynamic Function()]
*/
testIsTypedef() => null is Typedef; testIsTypedef() => null is Typedef;
/*member: testIsTypedefGeneric: /*member: testIsTypedefGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:int Function(String)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:int Function(String)]*/
testIsTypedefGeneric() => null is GenericTypedef<int, String>; testIsTypedefGeneric() => null is GenericTypedef<int, String>;
/*member: testIsTypedefGenericRaw: /*member: testIsTypedefGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:dynamic Function(dynamic)]*/
testIsTypedefGenericRaw() => null is GenericTypedef; testIsTypedefGenericRaw() => null is GenericTypedef;
/*member: testIsTypedefGenericDynamic: /*member: testIsTypedefGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:dynamic Function(dynamic)]*/
testIsTypedefGenericDynamic() => null is GenericTypedef<dynamic, dynamic>; testIsTypedefGenericDynamic() => null is GenericTypedef<dynamic, dynamic>;
/*member: testIsTypedefDeep: /*member: testIsTypedefDeep:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:List<int Function(dynamic Function(dynamic))>]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
is:List<int Function(dynamic Function(dynamic))>]*/
testIsTypedefDeep() => null is List<GenericTypedef<int, GenericTypedef>>; testIsTypedefDeep() => null is List<GenericTypedef<int, GenericTypedef>>;
/*member: testAs: /*member: testAs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:Class,inst:Closure,inst:JSBool]*/
static=[throwRuntimeError(1)],
type=[as:Class,inst:JSBool]
*/
// ignore: UNNECESSARY_CAST // ignore: UNNECESSARY_CAST
testAs(dynamic o) => o as Class; testAs(dynamic o) => o as Class;
/*member: testAsGeneric:static=[checkSubtype(4), /*member: testAsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2),throwRuntimeError(1)],type=[as:GenericClass<int,String>,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>]*/
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2),
throwRuntimeError(1)],
type=[as:GenericClass<int,
String>,
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>]*/
// ignore: UNNECESSARY_CAST // ignore: UNNECESSARY_CAST
testAsGeneric(dynamic o) => o as GenericClass<int, String>; testAsGeneric(dynamic o) => o as GenericClass<int, String>;
/*member: testAsGenericRaw: /*member: testAsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
static=[throwRuntimeError(1)],
type=[as:GenericClass<dynamic,dynamic>,inst:JSBool]
*/
// ignore: UNNECESSARY_CAST // ignore: UNNECESSARY_CAST
testAsGenericRaw(dynamic o) => o as GenericClass; testAsGenericRaw(dynamic o) => o as GenericClass;
/*member: testAsGenericDynamic: /*member: testAsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
static=[throwRuntimeError(1)],
type=[as:GenericClass<dynamic,dynamic>,inst:JSBool]
*/
// ignore: UNNECESSARY_CAST // ignore: UNNECESSARY_CAST
testAsGenericDynamic(dynamic o) => o as GenericClass<dynamic, dynamic>; testAsGenericDynamic(dynamic o) => o as GenericClass<dynamic, dynamic>;
@ -314,7 +168,7 @@ testThrow() => throw '';
/*member: testIfNotNull:dynamic=[Object.==,foo],type=[inst:JSNull]*/ /*member: testIfNotNull:dynamic=[Object.==,foo],type=[inst:JSNull]*/
testIfNotNull(o) => o?.foo; testIfNotNull(o) => o?.foo;
/*member: testTypedIfNotNull:dynamic=[Class.==,Class.field],type=[inst:JSBool,inst:JSNull,param:Class]*/ /*member: testTypedIfNotNull:dynamic=[Class.==,Class.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class]*/
testTypedIfNotNull(Class o) => o?.field; testTypedIfNotNull(Class o) => o?.field;
/*member: testIfNotNullSet:dynamic=[Object.==,foo=],type=[inst:JSBool,inst:JSNull]*/ /*member: testIfNotNullSet:dynamic=[Object.==,foo=],type=[inst:JSBool,inst:JSNull]*/

View file

@ -12,49 +12,10 @@ class B<S, U> {}
/*member: C.:static=[Object.(0)]*/ /*member: C.:static=[Object.(0)]*/
class C implements A<int>, B<String, bool> {} class C implements A<int>, B<String, bool> {}
/*member: testA: /*member: testA:dynamic=[call<A.T>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<A<dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:A<dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:A<A.T>]*/
dynamic=[call<A.T>(0)],
static=[
checkSubtype(4),
extractTypeArguments<A<dynamic>>(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
impl:A<dynamic>,
impl:Function,
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,is:A<A.T>]
*/
testA(c, f) => extractTypeArguments<A>(c, f); testA(c, f) => extractTypeArguments<A>(c, f);
/*member: testB: /*member: testB:dynamic=[call<B.S,B.U>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<B<dynamic,dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:B<dynamic,dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:B<B.S,B.U>]*/
dynamic=[call<B.S,B.U>(0)],
static=[
checkSubtype(4),
extractTypeArguments<B<dynamic,dynamic>>(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
impl:B<dynamic,dynamic>,
impl:Function,
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
is:B<B.S,B.U>]
*/
testB(c, f) => extractTypeArguments<B>(c, f); testB(c, f) => extractTypeArguments<B>(c, f);
/*member: main:static=[C.(0),testA(2),testB(2)],type=[inst:JSNull]*/ /*member: main:static=[C.(0),testA(2),testB(2)],type=[inst:JSNull]*/

View file

@ -4,12 +4,7 @@
import "dart:async"; import "dart:async";
/*member: main: /*member: main:dynamic=[runtimeType],runtimeType=[unknown:FutureOr<int>],static=[Future.value(1),checkTypeBound(4),print(1),throwTypeError(1)],type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
dynamic=[runtimeType],
runtimeType=[unknown:FutureOr<int>],
static=[Future.value(1),assertIsSubtype(5),print(1),throwTypeError(1)],
type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]
*/
@pragma('dart2js:disableFinal') @pragma('dart2js:disableFinal')
void main() { void main() {
FutureOr<int> i = new Future<int>.value(0); FutureOr<int> i = new Future<int>.value(0);

View file

@ -28,10 +28,10 @@ main() {
testGenericClass(); testGenericClass();
} }
/*strong.member: testDefaultValuesPositional:type=[inst:JSBool,param:bool]*/ /*member: testDefaultValuesPositional:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
testDefaultValuesPositional([bool value = false]) {} testDefaultValuesPositional([bool value = false]) {}
/*strong.member: testDefaultValuesNamed:type=[inst:JSBool,param:bool]*/ /*member: testDefaultValuesNamed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
testDefaultValuesNamed({bool value: false}) {} testDefaultValuesNamed({bool value: false}) {}
class ClassFieldInitializer1 { class ClassFieldInitializer1 {
@ -84,7 +84,7 @@ testFieldInitializer3() {
/*member: ClassInstanceFieldWithInitializer.:static=[Object.(0)]*/ /*member: ClassInstanceFieldWithInitializer.:static=[Object.(0)]*/
class ClassInstanceFieldWithInitializer { class ClassInstanceFieldWithInitializer {
/*member: ClassInstanceFieldWithInitializer.field:type=[inst:JSBool,param:bool]*/ /*member: ClassInstanceFieldWithInitializer.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
var field = false; var field = false;
} }
@ -93,7 +93,7 @@ testInstanceFieldWithInitializer() => new ClassInstanceFieldWithInitializer();
/*member: ClassInstanceFieldTyped.:static=[Object.(0)]*/ /*member: ClassInstanceFieldTyped.:static=[Object.(0)]*/
class ClassInstanceFieldTyped { class ClassInstanceFieldTyped {
/*member: ClassInstanceFieldTyped.field:type=[inst:JSBool,inst:JSNull,param:int]*/ /*member: ClassInstanceFieldTyped.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
int field; int field;
} }
@ -120,27 +120,9 @@ class ClassSuperInitializer extends ClassThisInitializer {
testSuperInitializer() => new ClassSuperInitializer(); testSuperInitializer() => new ClassSuperInitializer();
class ClassGeneric<T> { class ClassGeneric<T> {
/*member: ClassGeneric.: /*member: ClassGeneric.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ClassGeneric.T]*/
static=[
Object.(0),
checkSubtype(4),
checkSubtypeOfRuntimeType(2),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:ClassGeneric.T]
*/
ClassGeneric(T arg); ClassGeneric(T arg);
} }
/*member: testGenericClass:static=[ClassGeneric.(1),assertIsSubtype(5),throwTypeError(1)],type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/ /*member: testGenericClass:static=[ClassGeneric.(1),checkTypeBound(4),throwTypeError(1)],type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
testGenericClass() => new ClassGeneric<int>(0); testGenericClass() => new ClassGeneric<int>(0);

View file

@ -14,17 +14,11 @@ class E {}
/*member: Class1.:static=[Object.(0)]*/ /*member: Class1.:static=[Object.(0)]*/
class Class1 { class Class1 {
/*member: Class1.field1:type=[inst:JSBool,inst:JSNull,param:A]*/ /*member: Class1.field1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A]*/
A field1; A field1;
} }
/*member: method1: /*member: method1:dynamic=[Class1.field1=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class1]*/
dynamic=[Class1.field1=],
type=[
impl:A,
inst:JSBool,
is:Class1]
*/
method1(dynamic o, dynamic value) { method1(dynamic o, dynamic value) {
if (o is! Class1) return; if (o is! Class1) return;
o.field1 = value; o.field1 = value;
@ -54,19 +48,11 @@ method2(dynamic o, dynamic value) {
/*member: Class3.:static=[Object.(0)]*/ /*member: Class3.:static=[Object.(0)]*/
class Class3 { class Class3 {
/*member: Class3.method3:type=[inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/ /*member: Class3.method3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
method3(A a, [B b, C c]) {} method3(A a, [B b, C c]) {}
} }
/*member: method3: /*member: method3:dynamic=[Class3.method3(3)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class3,param:B]*/
dynamic=[Class3.method3(3)],
type=[
impl:A,
impl:C,
inst:JSBool,
is:Class3,
param:B]
*/
method3(dynamic o, dynamic a, B b, dynamic c) { method3(dynamic o, dynamic a, B b, dynamic c) {
if (o is! Class3) return; if (o is! Class3) return;
o.method3(a, b, c); o.method3(a, b, c);
@ -74,21 +60,11 @@ method3(dynamic o, dynamic a, B b, dynamic c) {
/*member: Class4.:static=[Object.(0)]*/ /*member: Class4.:static=[Object.(0)]*/
class Class4 { class Class4 {
/*member: Class4.method4: /*member: Class4.method4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
type=[inst:JSBool,inst:JSNull,param:A,param:B,param:C]
*/
method4(A a, {B b, C c}) {} method4(A a, {B b, C c}) {}
} }
/*member: method4: /*member: method4:dynamic=[Class4.method4(1,b,c)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class4,param:B]*/
dynamic=[Class4.method4(1,b,c)],
type=[
impl:A,
impl:C,
inst:JSBool,
is:Class4,
param:B]
*/
method4(dynamic o, dynamic a, B b, dynamic c) { method4(dynamic o, dynamic a, B b, dynamic c) {
if (o is! Class4) return; if (o is! Class4) return;
o.method4(a, c: c, b: b); o.method4(a, c: c, b: b);
@ -166,10 +142,7 @@ class Class7 {
A Function(A) get f => null; A Function(A) get f => null;
} }
/*member: method7: /*member: method7:dynamic=[Class7.f(1),call(1)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class7]*/
dynamic=[Class7.f(1),call(1)],
type=[impl:A,inst:JSBool,is:Class7]
*/
method7(dynamic o, dynamic a) { method7(dynamic o, dynamic a) {
if (o is! Class7) return; if (o is! Class7) return;
o.f(a); o.f(a);
@ -197,10 +170,7 @@ method8(dynamic g, Iterable<int> iterable) {
return g.method(iterable); return g.method(iterable);
} }
/*member: method9: /*member: method9:dynamic=[G.field=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:int,inst:Closure,inst:JSBool,inst:JSNull,is:G,param:num]*/
dynamic=[G.field=],
type=[impl:int,inst:JSBool,inst:JSNull,is:G,param:num]
*/
method9(dynamic g, num value) { method9(dynamic g, num value) {
if (g is! G) return null; if (g is! G) return null;
return g.field = value; return g.field = value;

View file

@ -115,39 +115,13 @@ testTopLevelInvoke() {
topLevelFunction3(15, c: 16, b: 17); topLevelFunction3(15, c: 16, b: 17);
} }
/*member: topLevelFunction1Typed:type=[inst:JSBool,param:int]*/ /*member: topLevelFunction1Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
void topLevelFunction1Typed(int a) {} void topLevelFunction1Typed(int a) {}
/*member: topLevelFunction2Typed: /*member: topLevelFunction2Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:String,param:double,param:num]*/
type=[
inst:JSBool,
inst:JSNull,
param:String,
param:double,
param:num]
*/
int topLevelFunction2Typed(String a, [num b, double c]) => null; int topLevelFunction2Typed(String a, [num b, double c]) => null;
/*member: topLevelFunction3Typed: /*member: topLevelFunction3Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:List<int>,param:Map<String,bool>,param:bool]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:List<int>,
param:Map<String,bool>,
param:bool]
*/
double topLevelFunction3Typed(bool a, {List<int> b, Map<String, bool> c}) { double topLevelFunction3Typed(bool a, {List<int> b, Map<String, bool> c}) {
return null; return null;
} }
@ -188,80 +162,16 @@ testTopLevelInvokeTyped() {
topLevelFunction3Typed(false, c: {'16': false}, b: [17]); topLevelFunction3Typed(false, c: {'16': false}, b: [17]);
} }
/*member: topLevelFunctionTyped1: /*member: topLevelFunctionTyped1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:void Function(num)]
*/
topLevelFunctionTyped1(void a(num b)) {} topLevelFunctionTyped1(void a(num b)) {}
/*member: topLevelFunctionTyped2: /*member: topLevelFunctionTyped2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,[String])]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:void Function(num,[String])]
*/
topLevelFunctionTyped2(void a(num b, [String c])) {} topLevelFunctionTyped2(void a(num b, [String c])) {}
/*member: topLevelFunctionTyped3: /*member: topLevelFunctionTyped3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{String c,int d})]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:void Function(num,{String c,int d})]
*/
topLevelFunctionTyped3(void a(num b, {String c, int d})) {} topLevelFunctionTyped3(void a(num b, {String c, int d})) {}
/*member: topLevelFunctionTyped4: /*member: topLevelFunctionTyped4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{int c,String d})]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:void Function(num,{int c,String d})]
*/
topLevelFunctionTyped4(void a(num b, {String d, int c})) {} topLevelFunctionTyped4(void a(num b, {String d, int c})) {}
/*member: testTopLevelFunctionTyped: /*member: testTopLevelFunctionTyped:
@ -300,7 +210,7 @@ set topLevelSetter(_) {}
/*member: testTopLevelSetterSet:static=[set:topLevelSetter],type=[inst:JSNull]*/ /*member: testTopLevelSetterSet:static=[set:topLevelSetter],type=[inst:JSNull]*/
testTopLevelSetterSet() => topLevelSetter = null; testTopLevelSetterSet() => topLevelSetter = null;
/*member: topLevelSetterTyped=:type=[inst:JSBool,param:int]*/ /*member: topLevelSetterTyped=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
void set topLevelSetterTyped(int value) {} void set topLevelSetterTyped(int value) {}
/*member: testTopLevelSetterSetTyped:static=[set:topLevelSetterTyped],type=[inst:JSNull]*/ /*member: testTopLevelSetterSetTyped:static=[set:topLevelSetterTyped],type=[inst:JSNull]*/
@ -320,7 +230,7 @@ testTopLevelFieldLazy() => topLevelFieldLazy;
const topLevelFieldConst = null; const topLevelFieldConst = null;
/*strong.member: testTopLevelFieldConst:type=[inst:JSNull]*/ /*member: testTopLevelFieldConst:type=[inst:JSNull]*/
testTopLevelFieldConst() => topLevelFieldConst; testTopLevelFieldConst() => topLevelFieldConst;
/*member: topLevelFieldFinal:static=[throwCyclicInit(1),topLevelFunction1(1)],type=[inst:JSNull]*/ /*member: topLevelFieldFinal:static=[throwCyclicInit(1),topLevelFunction1(1)],type=[inst:JSNull]*/
@ -329,42 +239,25 @@ final topLevelFieldFinal = topLevelFunction1(null);
/*member: testTopLevelFieldFinal:static=[topLevelFieldFinal]*/ /*member: testTopLevelFieldFinal:static=[topLevelFieldFinal]*/
testTopLevelFieldFinal() => topLevelFieldFinal; testTopLevelFieldFinal() => topLevelFieldFinal;
/*member: topLevelFieldTyped:type=[inst:JSBool,inst:JSNull,param:int]*/ /*member: topLevelFieldTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
int topLevelFieldTyped; int topLevelFieldTyped;
/*member: testTopLevelFieldTyped:static=[topLevelFieldTyped]*/ /*member: testTopLevelFieldTyped:static=[topLevelFieldTyped]*/
testTopLevelFieldTyped() => topLevelFieldTyped; testTopLevelFieldTyped() => topLevelFieldTyped;
/*member: topLevelFieldGeneric1:type=[inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/ /*member: topLevelFieldGeneric1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
GenericClass topLevelFieldGeneric1; GenericClass topLevelFieldGeneric1;
/*member: testTopLevelFieldGeneric1:static=[topLevelFieldGeneric1]*/ /*member: testTopLevelFieldGeneric1:static=[topLevelFieldGeneric1]*/
testTopLevelFieldGeneric1() => topLevelFieldGeneric1; testTopLevelFieldGeneric1() => topLevelFieldGeneric1;
/*member: topLevelFieldGeneric2:type=[inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/ /*member: topLevelFieldGeneric2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
GenericClass<dynamic, dynamic> topLevelFieldGeneric2; GenericClass<dynamic, dynamic> topLevelFieldGeneric2;
/*member: testTopLevelFieldGeneric2:static=[topLevelFieldGeneric2]*/ /*member: testTopLevelFieldGeneric2:static=[topLevelFieldGeneric2]*/
testTopLevelFieldGeneric2() => topLevelFieldGeneric2; testTopLevelFieldGeneric2() => topLevelFieldGeneric2;
/*member: topLevelFieldGeneric3: /*member: topLevelFieldGeneric3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:GenericClass<int,String>]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:GenericClass<int,String>]
*/
GenericClass<int, String> topLevelFieldGeneric3; GenericClass<int, String> topLevelFieldGeneric3;
/*member: testTopLevelFieldGeneric3:static=[topLevelFieldGeneric3]*/ /*member: testTopLevelFieldGeneric3:static=[topLevelFieldGeneric3]*/
@ -489,22 +382,7 @@ testLocalFunction() {
localFunction() {} localFunction() {}
} }
/*member: testLocalFunctionTyped: /*member: testLocalFunctionTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),computeSignature(3),def:localFunction,findType(1),getRuntimeTypeArguments(3),getRuntimeTypeInfo(1),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:Function,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:String]*/
static=[
computeSignature(3),
def:localFunction,
getRuntimeTypeArguments(3),
getRuntimeTypeInfo(1),
setRuntimeTypeInfo(2)],
type=[inst:Function,
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:String]*/
testLocalFunctionTyped() { testLocalFunctionTyped() {
// ignore: UNUSED_ELEMENT // ignore: UNUSED_ELEMENT
int localFunction(String a) => null; int localFunction(String a) => null;

View file

@ -59,24 +59,7 @@ typedef void Callback<T>(T value);
/*member: GenericClass.:static=[JavaScriptObject.(0)]*/ /*member: GenericClass.:static=[JavaScriptObject.(0)]*/
@JS() @JS()
class GenericClass<T> { class GenericClass<T> {
/*member: GenericClass.method: /*member: GenericClass.method:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:void Function(GenericClass.T)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:void Function(GenericClass.T)]
*/
external GenericClass method([Callback<T> callback]); external GenericClass method([Callback<T> callback]);
} }

View file

@ -9,30 +9,11 @@ import 'dart:html' show File;
import 'package:js/js.dart'; import 'package:js/js.dart';
/*member: foo=: /*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:Function]*/
type=[
inst:JSBool,
native:ApplicationCacheErrorEvent,
native:DomError,
native:DomException,
native:ErrorEvent,
native:MediaError,
native:NavigatorUserMediaError,
native:OverconstrainedError,
native:PositionError,
native:SensorErrorEvent,
native:SpeechRecognitionError,
native:SqlError,
param:Function]
*/
@JS() @JS()
external set foo(Function f); external set foo(Function f);
/*member: _doStuff: /*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
dynamic=[File.==,File.name],
static=[defineProperty(3),print(1)],
type=[inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]
*/
void _doStuff(String name, File file) { void _doStuff(String name, File file) {
if (file == null) { if (file == null) {
print('OK'); print('OK');

View file

@ -9,43 +9,11 @@ import 'dart:html' show File;
import 'package:js/js.dart'; import 'package:js/js.dart';
/*member: foo=: /*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:File,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:void Function(String,File)]*/
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
native:ApplicationCacheErrorEvent,
native:DomError,
native:DomException,
native:ErrorEvent,
native:File,
native:MediaError,
native:NavigatorUserMediaError,
native:OverconstrainedError,
native:PositionError,
native:SensorErrorEvent,
native:SpeechRecognitionError,
native:SqlError,
param:void Function(String,File)]
*/
@JS() @JS()
external set foo(void Function(String, File) f); external set foo(void Function(String, File) f);
/*member: _doStuff: /*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
dynamic=[File.==,File.name],
static=[defineProperty(3),print(1)],
type=[inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]
*/
void _doStuff(String name, File file) { void _doStuff(String name, File file) {
if (file == null) { if (file == null) {
print('OK'); print('OK');

View file

@ -86,7 +86,7 @@ testString() => 'foo';
*/ */
testStringInterpolation() => '${true}'; testStringInterpolation() => '${true}';
/*strong.member: testStringInterpolationConst:type=[inst:JSString]*/ /*member: testStringInterpolationConst:type=[inst:JSString]*/
testStringInterpolationConst() { testStringInterpolationConst() {
const b = '${true}'; const b = '${true}';
return b; return b;
@ -102,7 +102,7 @@ testStringJuxtaposition() => 'a' 'b';
/*member: testSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: testSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/
testSymbol() => #main; testSymbol() => #main;
/*strong.member: testConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: testConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/
testConstSymbol() => const Symbol('main'); testConstSymbol() => const Symbol('main');
const complexSymbolField1 = "true".length == 4; const complexSymbolField1 = "true".length == 4;
@ -123,19 +123,16 @@ const complexSymbolField3 = const {
const complexSymbolField = const complexSymbolField =
complexSymbolField1 ? complexSymbolField2 : complexSymbolField3; complexSymbolField1 ? complexSymbolField2 : complexSymbolField3;
/*strong.member: testComplexConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: testComplexConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/
testComplexConstSymbol() => const Symbol(complexSymbolField); testComplexConstSymbol() => const Symbol(complexSymbolField);
/*strong.member: testIfNullConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/ /*member: testIfNullConstSymbol:static=[Symbol.(1)],type=[inst:Symbol]*/
testIfNullConstSymbol() => const Symbol(null ?? 'foo'); testIfNullConstSymbol() => const Symbol(null ?? 'foo');
/*member: testTypeLiteral: /*member: testTypeLiteral:static=[createRuntimeType(1),typeLiteral(1)],type=[inst:Type,inst:_Type,lit:Object]*/
static=[createRuntimeType(1)],
type=[inst:Type,inst:TypeImpl,lit:Object]
*/
testTypeLiteral() => Object; testTypeLiteral() => Object;
/*strong.member: testBoolFromEnvironment:type=[inst:JSBool]*/ /*member: testBoolFromEnvironment:type=[inst:JSBool]*/
testBoolFromEnvironment() => const bool.fromEnvironment('FOO'); testBoolFromEnvironment() => const bool.fromEnvironment('FOO');
/*member: testEmptyListLiteral:type=[inst:List<dynamic>]*/ /*member: testEmptyListLiteral:type=[inst:List<dynamic>]*/

View file

@ -56,18 +56,7 @@ testNativeMethodReturns() native;
@Native("NativeClass") @Native("NativeClass")
class NativeClass { class NativeClass {
/*member: NativeClass.field: /*member: NativeClass.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,native:JSExtendableArray<JSExtendableArray.E>,native:Object,native:String,native:bool,native:double,native:int,param:Object]*/
type=[
inst:JSBool,
inst:JSNull,
native:JSExtendableArray<JSExtendableArray.E>,
native:Object,
native:String,
native:bool,
native:double,
native:int,
param:Object]
*/
@annotation_Creates_SerializedScriptValue @annotation_Creates_SerializedScriptValue
final Object field; final Object field;
@ -76,9 +65,5 @@ class NativeClass {
} }
} }
/*member: testNativeField: /*member: testNativeField:dynamic=[NativeClass.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:NativeClass]*/
dynamic=[NativeClass.field],
static=[defineProperty(3)],
type=[inst:JSBool,param:NativeClass]
*/
testNativeField(NativeClass c) => c.field; testNativeField(NativeClass c) => c.field;

View file

@ -37,17 +37,17 @@ main() {
dynamicToNoSuchMethodTearOff(null); dynamicToNoSuchMethodTearOff(null);
} }
/*member: positiveTyped:dynamic=[SubClass.method(0)],type=[inst:JSBool,is:SubClass,param:Class]*/ /*member: positiveTyped:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass,param:Class]*/
positiveTyped(Class cls) { positiveTyped(Class cls) {
if (cls is SubClass) cls.method(); if (cls is SubClass) cls.method();
} }
/*member: positiveDynamic:dynamic=[SubClass.method(0)],type=[inst:JSBool,is:SubClass]*/ /*member: positiveDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
positiveDynamic(dynamic cls) { positiveDynamic(dynamic cls) {
if (cls is SubClass) cls.method(); if (cls is SubClass) cls.method();
} }
/*member: negativeDynamic:dynamic=[SubClass.method(0)],type=[inst:JSBool,is:SubClass]*/ /*member: negativeDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
negativeDynamic(dynamic cls) { negativeDynamic(dynamic cls) {
if (cls is! SubClass) return; if (cls is! SubClass) return;
cls.method(); cls.method();

View file

@ -60,366 +60,91 @@ class Class3 {
/*member: Class4.:static=[Object.(0)]*/ /*member: Class4.:static=[Object.(0)]*/
class Class4 {} class Class4 {}
/*member: toString1: /*member: toString1:dynamic=[Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.runtimeType,toString(0)],
runtimeType=[string:Class2<int>],
static=[
S(1),
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSString,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString1(Class2<int> c) => '${c.runtimeType}'; toString1(Class2<int> c) => '${c.runtimeType}';
/*member: toString2: /*member: toString2:dynamic=[Class2.==,Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.==,Class2.runtimeType,toString(0)],
runtimeType=[string:Class2<int>],
static=[
S(1),
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSString,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString2(Class2<int> c) => '${c?.runtimeType}'; toString2(Class2<int> c) => '${c?.runtimeType}';
/*member: toString3: /*member: toString3:dynamic=[Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.runtimeType,Type.toString(0)],
runtimeType=[string:Class2<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString3(Class2<int> c) => c.runtimeType.toString(); toString3(Class2<int> c) => c.runtimeType.toString();
/*member: toString4: /*member: toString4:dynamic=[Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.runtimeType,Type.==,Type.toString(0)],
runtimeType=[string:Class2<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString4(Class2<int> c) => c.runtimeType?.toString(); toString4(Class2<int> c) => c.runtimeType?.toString();
/*member: toString5: /*member: toString5:dynamic=[Class2.==,Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.==,Class2.runtimeType,Type.==,Type.toString(0)],
runtimeType=[string:Class2<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString5(Class2<int> c) => c?.runtimeType?.toString(); toString5(Class2<int> c) => c?.runtimeType?.toString();
/*member: toString6: /*member: toString6:dynamic=[Class2.==,Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.==,Class2.runtimeType,Type.toString(0)],
runtimeType=[string:Class2<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
toString6(Class2<int> c) => c?.runtimeType.toString(); toString6(Class2<int> c) => c?.runtimeType.toString();
/*member: unknown: /*member: unknown:dynamic=[Class2.runtimeType],runtimeType=[unknown:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
dynamic=[Class2.runtimeType],
runtimeType=[unknown:Class2<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSUnmodifiableArray<dynamic>,
param:Class2<int>]
*/
unknown(Class2<int> c) => c.runtimeType; unknown(Class2<int> c) => c.runtimeType;
/*member: equals1: /*member: equals1:dynamic=[Class1a.==,Class1a.runtimeType,Class1d.==,Class1d.runtimeType,Type.==],runtimeType=[equals:Class1a<int>/Class1d<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class1a<int>,param:Class1d<int>]*/
dynamic=[Class1a.==,Class1a.runtimeType,Class1d.==,Class1d.runtimeType,Type.==],
runtimeType=[equals:Class1a<int>/Class1d<int>],
static=[
checkSubtype(4),
getRuntimeTypeArgument(3),
getRuntimeTypeArgumentIntercepted(4),
getRuntimeTypeInfo(1),
getTypeArgumentByIndex(2),
setRuntimeTypeInfo(2)],
type=[
inst:JSArray<dynamic>,
inst:JSBool,
inst:JSExtendableArray<dynamic>,
inst:JSFixedArray<dynamic>,
inst:JSMutableArray<dynamic>,
inst:JSNull,
inst:JSUnmodifiableArray<dynamic>,
param:Class1a<int>,
param:Class1d<int>]
*/
equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType; equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;
/*member: almostEquals1: /*member: almostEquals1:dynamic=[Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals1(Class3 a) => a.runtimeType == null; almostEquals1(Class3 a) => a.runtimeType == null;
/*member: almostEquals2: /*member: almostEquals2:dynamic=[Class3.==,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals2(Class3 a) => a?.runtimeType == null; almostEquals2(Class3 a) => a?.runtimeType == null;
/*member: almostEquals3: /*member: almostEquals3:dynamic=[Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.runtimeType,Null.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals3(Class3 a) => null == a.runtimeType; almostEquals3(Class3 a) => null == a.runtimeType;
/*member: almostEquals4: /*member: almostEquals4:dynamic=[Class3.==,Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.runtimeType,Null.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals4(Class3 a) => null == a?.runtimeType; almostEquals4(Class3 a) => null == a?.runtimeType;
/*member: almostEquals5: /*member: almostEquals5:dynamic=[Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
dynamic=[Class3.field,Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,param:Class3]
*/
almostEquals5(Class3 a) => a.runtimeType == a.field; almostEquals5(Class3 a) => a.runtimeType == a.field;
/*member: almostEquals6: /*member: almostEquals6:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals6(Class3 a) => a?.runtimeType == a.field; almostEquals6(Class3 a) => a?.runtimeType == a.field;
/*member: almostEquals7: /*member: almostEquals7:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals7(Class3 a) => a.runtimeType == a?.field; almostEquals7(Class3 a) => a.runtimeType == a?.field;
/*member: almostEquals8: /*member: almostEquals8:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals8(Class3 a) => a?.runtimeType == a?.field; almostEquals8(Class3 a) => a?.runtimeType == a?.field;
/*member: almostEquals9: /*member: almostEquals9:dynamic=[Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
dynamic=[Class3.field,Class3.runtimeType,Object.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,param:Class3]
*/
almostEquals9(Class3 a) => a.field == a.runtimeType; almostEquals9(Class3 a) => a.field == a.runtimeType;
/*member: almostEquals10: /*member: almostEquals10:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals10(Class3 a) => a?.field == a.runtimeType; almostEquals10(Class3 a) => a?.field == a.runtimeType;
/*member: almostEquals11: /*member: almostEquals11:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals11(Class3 a) => a.field == a?.runtimeType; almostEquals11(Class3 a) => a.field == a?.runtimeType;
/*member: almostEquals12: /*member: almostEquals12:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals12(Class3 a) => a?.field == a?.runtimeType; almostEquals12(Class3 a) => a?.field == a?.runtimeType;
/*member: almostToString1: /*member: almostToString1:dynamic=[Class3.runtimeType,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
dynamic=[Class3.runtimeType,Type.toString],
runtimeType=[unknown:Class3],
type=[inst:JSBool,param:Class3]
*/
almostToString1(Class3 a) => a.runtimeType.toString; almostToString1(Class3 a) => a.runtimeType.toString;
/*member: almostToString2: /*member: almostToString2:dynamic=[Class3.==,Class3.runtimeType,Type.==,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.runtimeType,Type.==,Type.toString],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString2(Class3 a) => a?.runtimeType?.toString; almostToString2(Class3 a) => a?.runtimeType?.toString;
/*member: almostToString3: /*member: almostToString3:dynamic=[Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.runtimeType,Type.noSuchMethod(1)],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString3(Class3 a) => a.runtimeType.noSuchMethod(null); almostToString3(Class3 a) => a.runtimeType.noSuchMethod(null);
/*member: almostToString4: /*member: almostToString4:dynamic=[Class3.==,Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
dynamic=[Class3.==,Class3.runtimeType,Type.noSuchMethod(1)],
runtimeType=[unknown:Class3],
type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString4(Class3 a) => a?.runtimeType.noSuchMethod(null); almostToString4(Class3 a) => a?.runtimeType.noSuchMethod(null);
/*member: notEquals1: /*member: notEquals1:dynamic=[Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3,param:Class4]*/
dynamic=[Class3.runtimeType,Class4.runtimeType,Type.==],
runtimeType=[equals:Class3/Class4],
type=[inst:JSBool,param:Class3,param:Class4]
*/
notEquals1(Class3 a, Class4 b) => a.runtimeType != b.runtimeType; notEquals1(Class3 a, Class4 b) => a.runtimeType != b.runtimeType;
/*member: notEquals2: /*member: notEquals2:dynamic=[Class3.==,Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
dynamic=[Class3.==,Class3.runtimeType,Class4.runtimeType,Type.==],
runtimeType=[equals:Class3/Class4],
type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals2(Class3 a, Class4 b) => a?.runtimeType != b.runtimeType; notEquals2(Class3 a, Class4 b) => a?.runtimeType != b.runtimeType;
/*member: notEquals3: /*member: notEquals3:dynamic=[Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
dynamic=[Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],
runtimeType=[equals:Class3/Class4],
type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals3(Class3 a, Class4 b) => a.runtimeType != b?.runtimeType; notEquals3(Class3 a, Class4 b) => a.runtimeType != b?.runtimeType;
/*member: notEquals4: /*member: notEquals4:dynamic=[Class3.==,Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
dynamic=[Class3.==,Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],
runtimeType=[equals:Class3/Class4],
type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals4(Class3 a, Class4 b) => a?.runtimeType != b?.runtimeType; notEquals4(Class3 a, Class4 b) => a?.runtimeType != b?.runtimeType;
/*member: main: /*member: main:dynamic=[exact:Class1a.==],static=[Class1a.(0),Class1b.(0),Class1c.(0),Class1d.(0),Class2.(0),Class3.(0),Class4.(0),almostEquals1(1),almostEquals10(1),almostEquals11(1),almostEquals12(1),almostEquals2(1),almostEquals3(1),almostEquals4(1),almostEquals5(1),almostEquals6(1),almostEquals7(1),almostEquals8(1),almostEquals9(1),almostToString1(1),almostToString2(1),almostToString3(1),almostToString4(1),checkTypeBound(4),equals1(2),notEquals1(2),notEquals2(2),notEquals3(2),notEquals4(2),print(1),throwTypeError(1),toString1(1),toString2(1),toString3(1),toString4(1),toString5(1),toString6(1),unknown(1)]*/
dynamic=[exact:Class1a.==],
static=[
Class1a.(0),
Class1b.(0),
Class1c.(0),
Class1d.(0),
Class2.(0),
Class3.(0),
Class4.(0),
almostEquals1(1),
almostEquals10(1),
almostEquals11(1),
almostEquals12(1),
almostEquals2(1),
almostEquals3(1),
almostEquals4(1),
almostEquals5(1),
almostEquals6(1),
almostEquals7(1),
almostEquals8(1),
almostEquals9(1),
almostToString1(1),
almostToString2(1),
almostToString3(1),
almostToString4(1),
assertIsSubtype(5),
equals1(2),
notEquals1(2),
notEquals2(2),
notEquals3(2),
notEquals4(2),
print(1),
throwTypeError(1),
toString1(1),
toString2(1),
toString3(1),
toString4(1),
toString5(1),
toString6(1),
unknown(1)]
*/
main() { main() {
Class1a<int> c1a = new Class1a<int>(); Class1a<int> c1a = new Class1a<int>();
Class1b<int> c1b = new Class1b<int>(); Class1b<int> c1b = new Class1b<int>();

View file

@ -65,36 +65,13 @@ testIfThenElse() {
return 1; return 1;
} }
/*member: testForIn: /*member: testForIn:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
dynamic=[
Iterator.current,
Iterator.iterator,
Iterator.moveNext(0)],
static=[checkConcurrentModificationError(2)],
type=[
impl:Iterable<dynamic>,
inst:JSBool,
inst:JSNull,
inst:Null]
*/
testForIn(o) { testForIn(o) {
// ignore: UNUSED_LOCAL_VARIABLE // ignore: UNUSED_LOCAL_VARIABLE
for (var e in o) {} for (var e in o) {}
} }
/*member: testForInTyped: /*member: testForInTyped:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
dynamic=[
Iterator.current,
Iterator.iterator,
Iterator.moveNext(0)],
static=[checkConcurrentModificationError(2)],
type=[
impl:Iterable<dynamic>,
impl:int,
inst:JSBool,
inst:JSNull,
inst:Null]
*/
testForInTyped(o) { testForInTyped(o) {
// ignore: UNUSED_LOCAL_VARIABLE // ignore: UNUSED_LOCAL_VARIABLE
for (int e in o) {} for (int e in o) {}
@ -110,14 +87,7 @@ testTryCatch() {
try {} catch (e) {} try {} catch (e) {}
} }
/*member: testTryCatchOn: /*member: testTryCatchOn:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isString(1),_isTop(1),findType(1),instanceType(1),unwrapException(1)],type=[catch:String,inst:Closure,inst:JSBool,inst:PlainJavaScriptObject,inst:UnknownJavaScriptObject]*/
static=[unwrapException(1)],
type=[
catch:String,
inst:JSBool,
inst:PlainJavaScriptObject,
inst:UnknownJavaScriptObject]
*/
testTryCatchOn() { testTryCatchOn() {
// ignore: UNUSED_CATCH_CLAUSE // ignore: UNUSED_CATCH_CLAUSE
try {} on String catch (e) {} try {} on String catch (e) {}

View file

@ -23,14 +23,17 @@ main(List<String> args) {
print('=================================================================='); print('==================================================================');
useImpactDataForTesting = false; useImpactDataForTesting = false;
await checkTests(dataDir, const ImpactDataComputer(), await checkTests(dataDir, const ImpactDataComputer(),
args: args, testedConfigs: [strongConfig]); args: args,
supportedMarkers: [strongMarker],
testedConfigs: [strongConfig]);
print('Testing computation of ResolutionImpact through ImpactData'); print('Testing computation of ResolutionImpact through ImpactData');
print('=================================================================='); print('==================================================================');
useImpactDataForTesting = true; useImpactDataForTesting = true;
await checkTests(dataDir, const ImpactDataComputer(), await checkTests(dataDir, const ImpactDataComputer(),
args: args, args: args,
testedConfigs: allStrongConfigs); supportedMarkers: [strongMarker],
testedConfigs: [strongConfig]);
}); });
} }

View file

@ -12,8 +12,8 @@ class Class<T> {
/*current: [exact=ArrayIterator]*/ /*current: [exact=ArrayIterator]*/
/*moveNext: [exact=ArrayIterator]*/ /*moveNext: [exact=ArrayIterator]*/
for (var a in []) { for (var a in []) {
(T as dynamic) /*invoke: [exact=TypeImpl]*/ (a); (T as dynamic) /*invoke: [exact=_Type]*/ (a);
(Object as dynamic) /*invoke: [exact=TypeImpl]*/ (); (Object as dynamic) /*invoke: [exact=_Type]*/ ();
(this as dynamic) /*invoke: [exact=Class]*/ (); (this as dynamic) /*invoke: [exact=Class]*/ ();
(1 as dynamic) /*invoke: [exact=JSUInt31]*/ (); (1 as dynamic) /*invoke: [exact=JSUInt31]*/ ();
} }

View file

@ -424,7 +424,8 @@ testSwitch2() {
return a; return a;
} }
/*member: testSwitch3:Union([exact=JSString], [null|subclass=JSNumber])*/ /*strong.member: testSwitch3:Union([null|exact=JSString], [subclass=JSNumber])*/
/*omit.member: testSwitch3:Union([exact=JSString], [null|subclass=JSNumber])*/
testSwitch3() { testSwitch3() {
dynamic a = 42; dynamic a = 42;
var b; var b;
@ -461,7 +462,8 @@ testSwitch5() {
} }
} }
/*member: testContinue1:Union([exact=JSString], [null|subclass=JSNumber])*/ /*strong.member: testContinue1:Union([null|exact=JSString], [subclass=JSNumber])*/
/*omit.member: testContinue1:Union([exact=JSString], [null|subclass=JSNumber])*/
testContinue1() { testContinue1() {
dynamic a = 42; dynamic a = 42;
var b; var b;
@ -760,7 +762,7 @@ class C {
C(); C();
/*member: C.returnInt1:[subclass=JSPositiveInt]*/ /*member: C.returnInt1:[subclass=JSPositiveInt]*/
returnInt1() => /*invoke: [subclass=JSPositiveInt]*/ ++ /*[exact=C]*/ /*update: [exact=C]*/ myField; returnInt1() => /*invoke: [subclass=JSPositiveInt]*/ ++ /*update: [exact=C]*/ /*[exact=C]*/ myField;
/*member: C.returnInt2:[subclass=JSPositiveInt]*/ /*member: C.returnInt2:[subclass=JSPositiveInt]*/
returnInt2() => /*invoke: [subclass=JSPositiveInt]*/ ++this returnInt2() => /*invoke: [subclass=JSPositiveInt]*/ ++this

View file

@ -136,5 +136,5 @@ symbolLiteral() => #main;
/// Return a type literal. /// Return a type literal.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/*member: typeLiteral:[exact=TypeImpl]*/ /*member: typeLiteral:[exact=_Type]*/
typeLiteral() => Object; typeLiteral() => Object;

View file

@ -9,16 +9,16 @@ main() {
typeLiteralSubstring(); typeLiteralSubstring();
} }
/*member: typeLiteral:[exact=TypeImpl]*/ /*member: typeLiteral:[exact=_Type]*/
typeLiteral() => Object; typeLiteral() => Object;
/*member: typeLiteralToString:[exact=JSString]*/ /*member: typeLiteralToString:[null|exact=JSString]*/
typeLiteralToString() => (Object). /*invoke: [exact=TypeImpl]*/ toString(); typeLiteralToString() => (Object). /*invoke: [exact=_Type]*/ toString();
/*member: typeLiteralSubstring:[exact=JSString]*/ /*member: typeLiteralSubstring:[exact=JSString]*/
typeLiteralSubstring() { typeLiteralSubstring() {
String name = (List). /*invoke: [exact=TypeImpl]*/ toString(); String name = (List). /*invoke: [exact=_Type]*/ toString();
name = name. /*invoke: [exact=JSString]*/ substring( name = name. /*invoke: [null|exact=JSString]*/ substring(
0, name. /*invoke: [exact=JSString]*/ indexOf('<')); 0, name. /*invoke: [null|exact=JSString]*/ indexOf('<'));
return name; return name;
} }

View file

@ -5,22 +5,21 @@
// Test derived from language_2/generic_methods_dynamic_test/05 // Test derived from language_2/generic_methods_dynamic_test/05
/*omit.class: global#JSArray:deps=[List],explicit=[JSArray],needsArgs*/ /*omit.class: global#JSArray:deps=[List],explicit=[JSArray],needsArgs*/
/*strong.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/ /*strong.class: global#JSArray:deps=[ArrayIterator,List],direct,explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs*/
/*omit.class: global#List:deps=[C.bar],explicit=[List,List<B>],needsArgs*/
/*strong.class: global#List:deps=[C.bar],explicit=[List,List<B>,List<String>],indirect,needsArgs*/ /*strong.class: global#List:deps=[C.bar],explicit=[List,List<B>,List<String>],indirect,needsArgs*/
/*omit.class: global#List:deps=[C.bar],explicit=[List,List<B>],needsArgs*/
import "package:expect/expect.dart"; import "package:expect/expect.dart";
class A {} class A {}
/*omit.class: B:explicit=[List<B>]*/
/*strong.class: B:explicit=[List<B>],implicit=[B]*/ /*strong.class: B:explicit=[List<B>],implicit=[B]*/
/*omit.class: B:explicit=[List<B>]*/
class B {} class B {}
class C { class C {
/*omit.member: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
/*strong.member: C.bar:direct,explicit=[Iterable<bar.T>],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/ /*strong.member: C.bar:direct,explicit=[Iterable<bar.T>],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
/*omit.member: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
List<T> bar<T>(Iterable<T> t) => <T>[t.first]; List<T> bar<T>(Iterable<T> t) => <T>[t.first];
} }

View file

@ -4,11 +4,11 @@
import 'package:expect/expect.dart'; import 'package:expect/expect.dart';
/*strong.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/
/*omit.class: global#JSArray:deps=[List],explicit=[JSArray],needsArgs*/
/*strong.member: method:implicit=[method.T],indirect,needsArgs*/ /*strong.member: method:implicit=[method.T],indirect,needsArgs*/
/*omit.member: method:needsArgs*/ /*omit.member: method:needsArgs*/
/*strong.class: global#JSArray:deps=[ArrayIterator,List],direct,explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs*/
/*omit.class: global#JSArray:deps=[List],explicit=[JSArray],needsArgs*/
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
method<T>() { method<T>() {
return () => <T>[]; return () => <T>[];

View file

@ -58,9 +58,12 @@ const Map<String, List<String>> expectedIsChecksMap =
'A': const <String>[], 'A': const <String>[],
'B': const <String>[], 'B': const <String>[],
'C': const <String>[r'$isB'], 'C': const <String>[r'$isB'],
'D': const <String>[r'$isB', r'$asB'], // TODO(sigmund): change these tests to check that the new rti medatada
// includes the information we need to check the equivalent of D.$asB and
// F.$asB
'D': const <String>[r'$isB'],
'E': const <String>[], 'E': const <String>[],
'F': const <String>[r'$asB'], 'F': const <String>[],
'G': const <String>[], 'G': const <String>[],
'H': const <String>[r'$isG'], 'H': const <String>[r'$isG'],
'I': const <String>[], 'I': const <String>[],

View file

@ -5,12 +5,9 @@
import 'dart:html'; import 'dart:html';
/*strong.class: global#Event:checkedInstance,checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/ /*strong.class: global#Event:checkedInstance,checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
/*omit.class: global#Event:checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
/*strong.class: global#MouseEvent:checks=[$isMouseEvent],instance,typeArgument*/ /*class: global#MouseEvent:checks=[$isMouseEvent],instance,typeArgument*/
/*omit.class: global#MouseEvent:instance*/ /*class: global#KeyboardEvent:checks=[$isKeyboardEvent],instance,typeArgument*/
/*strong.class: global#KeyboardEvent:checks=[$isKeyboardEvent],instance,typeArgument*/
/*omit.class: global#KeyboardEvent:instance*/
void main() { void main() {
print('InputElement'); print('InputElement');

View file

@ -16,8 +16,7 @@ class C<T> {
method(void Function(T) f) {} method(void Function(T) f) {}
} }
/*strong.class: D:checks=[$asC],instance*/ /*class: D:checks=[],instance*/
/*omit.class: D:checks=[],instance*/
class D extends C<B> {} class D extends C<B> {}
main() { main() {

View file

@ -16,7 +16,7 @@ class B implements A {}
/*omit.class: C:*/ /*omit.class: C:*/
class C<T> {} class C<T> {}
/*strong.class: D:checks=[$asC,$isC],instance*/ /*strong.class: D:checks=[$isC],instance*/
/*omit.class: D:checks=[],instance*/ /*omit.class: D:checks=[],instance*/
class D implements C<B> {} class D implements C<B> {}

View file

@ -19,7 +19,7 @@ main() {
/*class: B1:checkedTypeArgument,checks=[],typeArgument*/ /*class: B1:checkedTypeArgument,checks=[],typeArgument*/
class B1<T> {} class B1<T> {}
/*class: C1:checkedTypeArgument,checks=[$asB1],typeArgument*/ /*class: C1:checkedTypeArgument,checks=[],typeArgument*/
class C1 extends B1<int> {} class C1 extends B1<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
@ -51,7 +51,7 @@ _test2(f) => f is A<C2 Function()>;
/*class: B3:checkedTypeArgument,checks=[],typeArgument*/ /*class: B3:checkedTypeArgument,checks=[],typeArgument*/
class B3<T> {} class B3<T> {}
/*class: C3:checkedTypeArgument,checks=[$asB3],typeArgument*/ /*class: C3:checkedTypeArgument,checks=[],typeArgument*/
class C3 extends B3<int> {} class C3 extends B3<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
@ -67,7 +67,7 @@ _test3(f) => f is A<void Function(B3<int>)>;
/*class: B4:checkedTypeArgument,checks=[],typeArgument*/ /*class: B4:checkedTypeArgument,checks=[],typeArgument*/
class B4<T> {} class B4<T> {}
/*class: C4:checks=[$asB4],typeArgument*/ /*class: C4:checks=[],typeArgument*/
class C4 extends B4<int> {} class C4 extends B4<int> {}
@pragma('dart4js:noInline') @pragma('dart4js:noInline')
@ -83,7 +83,7 @@ _test4(f) => f is A<B4<int> Function()>;
/*class: B5:checkedTypeArgument,checks=[],typeArgument*/ /*class: B5:checkedTypeArgument,checks=[],typeArgument*/
class B5<T> {} class B5<T> {}
/*class: C5:checkedTypeArgument,checks=[$asB5],typeArgument*/ /*class: C5:checkedTypeArgument,checks=[],typeArgument*/
class C5 extends B5<int> {} class C5 extends B5<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -35,7 +35,7 @@ class D {
external factory D(); external factory D();
} }
/*class: E:checkedInstance,checks=[],instance*/ /*class: E:checks=[],instance,typeLiteral*/
class E { class E {
E(); E();
} }

View file

@ -9,7 +9,7 @@ library foo;
// TODO(johnniwinther): Avoid generating duplicate is/as function when multiple // TODO(johnniwinther): Avoid generating duplicate is/as function when multiple
// jsinterop classes implement the same interface. // jsinterop classes implement the same interface.
/*class: global#JavaScriptObject:checks=[$asA,$asB,$asB,$isA,$isB,$isB],instance*/ /*class: global#JavaScriptObject:checks=[$isA,$isB,$isB],instance*/
import 'package:expect/expect.dart'; import 'package:expect/expect.dart';
import 'package:js/js.dart'; import 'package:js/js.dart';

View file

@ -7,7 +7,7 @@
@JS() @JS()
library foo; library foo;
/*class: global#JavaScriptObject:checks=[$asA,$isA]*/ /*class: global#JavaScriptObject:checks=[$isA]*/
import 'package:expect/expect.dart'; import 'package:expect/expect.dart';
import 'package:js/js.dart'; import 'package:js/js.dart';

View file

@ -2,13 +2,13 @@
// for details. All rights reserved. Use of this source code is governed by a // 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. // BSD-style license that can be found in the LICENSE file.
/*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
/*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
/*strong.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/ /*strong.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/
/*omit.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/ /*omit.class: global#JSArray:checks=[$isIterable],instance*/
/*class: global#Iterable:checkedInstance*/ /*class: global#Iterable:checkedInstance*/
/*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
/*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
class A {} class A {}
/*strong.class: B:checkedInstance,checks=[],typeArgument*/ /*strong.class: B:checkedInstance,checks=[],typeArgument*/

View file

@ -5,7 +5,7 @@
import 'package:expect/expect.dart'; import 'package:expect/expect.dart';
/*strong.class: global#JSArray:checkedInstance,checks=[$isIterable,$isList],instance*/ /*strong.class: global#JSArray:checkedInstance,checks=[$isIterable,$isList],instance*/
/*omit.class: global#JSArray:checkedInstance,checks=[$isList],instance*/ /*omit.class: global#JSArray:checks=[$isList],instance*/
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
method<T>() { method<T>() {

View file

@ -17,22 +17,22 @@ class A<U> = Object with M<U>;
/*class: B:checks=[],indirectInstance*/ /*class: B:checks=[],indirectInstance*/
class B<V> = Object with A<V>; class B<V> = Object with A<V>;
/*class: C:checks=[$asM],indirectInstance*/ /*class: C:checks=[],indirectInstance*/
class C<U> = Object with M<List<U>>; class C<U> = Object with M<List<U>>;
/*class: D:checks=[$asM],indirectInstance*/ /*class: D:checks=[],indirectInstance*/
class D<V> = Object with C<Set<V>>; class D<V> = Object with C<Set<V>>;
/*class: E:checks=[$asM],instance*/ /*class: E:checks=[],instance*/
class E extends A<num> {} class E extends A<num> {}
/*class: F:checks=[$asM],instance*/ /*class: F:checks=[],instance*/
class F extends B<String> {} class F extends B<String> {}
/*class: G:checks=[],instance*/ /*class: G:checks=[],instance*/
class G<T> extends C<T> {} class G<T> extends C<T> {}
/*class: H:checks=[$asM],instance*/ /*class: H:checks=[],instance*/
class H<T> extends D<Map<String, T>> {} class H<T> extends D<Map<String, T>> {}
main() { main() {

View file

@ -23,7 +23,7 @@ class M<T> {
/*class: A:checkedInstance*/ /*class: A:checkedInstance*/
class A<U, V> = Object with M<Map<U, V>> implements I<V>; class A<U, V> = Object with M<Map<U, V>> implements I<V>;
/*class: C:checks=[$asA,$asI,$asJ,$asM,$asS,$isA,$isI,$isJ],instance*/ /*class: C:checks=[$isA,$isI,$isJ],instance*/
class C<T, K> = S<T> with A<T, List<K>> implements J<K>; class C<T, K> = S<T> with A<T, List<K>> implements J<K>;
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -71,13 +71,13 @@ class GI<T> {}
/*class: GJ:checkedInstance,checks=[],typeArgument*/ /*class: GJ:checkedInstance,checks=[],typeArgument*/
class GJ<T> {} class GJ<T> {}
/*class: GM:checkedInstance,checks=[$asGB,$asGI,$asGJ,$isGA,$isGB,$isGI,$isGJ],typeArgument*/ /*class: GM:checkedInstance,checks=[$isGA,$isGB,$isGI,$isGJ],typeArgument*/
mixin GM<T> on GA<T>, GB<List<T>> implements GI<Iterable<T>>, GJ<Set<T>> {} mixin GM<T> on GA<T>, GB<List<T>> implements GI<Iterable<T>>, GJ<Set<T>> {}
/*class: GC:checkedInstance,checks=[$asGB,$isGA,$isGB],typeArgument*/ /*class: GC:checkedInstance,checks=[$isGA,$isGB],typeArgument*/
class GC<T> implements GA<T>, GB<List<T>> {} class GC<T> implements GA<T>, GB<List<T>> {}
/*class: GD:checkedInstance,checks=[$asGI,$asGJ,$isGI,$isGJ,$isGM],typeArgument*/ /*class: GD:checkedInstance,checks=[$isGI,$isGJ,$isGM],typeArgument*/
class GD<T> = GC<T> with GM<T>; class GD<T> = GC<T> with GM<T>;
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -47,35 +47,35 @@ class M5<Tm5> {
m5() => "M5<$Tm5>"; m5() => "M5<$Tm5>";
} }
/*class: C1:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C1:checks=[],instance*/
class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>; class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>;
/*class: C2:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C2:checks=[],instance*/
class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>; class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>;
/*class: C3:checks=[$asM1,$asM3,$asM4,$asM5],instance*/ /*class: C3:checks=[],instance*/
class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>; class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>;
/*class: C4:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C4:checks=[],instance*/
class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {} class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {}
/*class: C5:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C5:checks=[],instance*/
class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {} class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {}
/*class: C6:checks=[$asM1,$asM3,$asM4,$asM5],instance*/ /*class: C6:checks=[],instance*/
class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {} class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {}
/*class: C7:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C7:checks=[],instance*/
class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>; class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>;
/*class: C8:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C8:checks=[],instance*/
class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {} class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {}
/*class: C9:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: C9:checks=[],instance*/
class C9 = Object class C9 = Object
with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>; with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>;
/*class: CA:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/ /*class: CA:checks=[],instance*/
class CA extends Object class CA extends Object
with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>> {} with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>> {}

View file

@ -16,7 +16,7 @@ class S<Y> {
Type get getSType => Y; Type get getSType => Y;
} }
/*class: TS:checks=[$asS0,$asT],instance*/ /*class: TS:checks=[],instance*/
class TS<A, B> = T<A> with S<B>; class TS<A, B> = T<A> with S<B>;
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,7 +5,7 @@
import 'package:expect/expect.dart'; import 'package:expect/expect.dart';
// This class is inlined away. // This class is inlined away.
/*class: Class:*/ /*class: Class:checks=[],instance*/
class Class<T> { class Class<T> {
const Class(); const Class();

View file

@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a // 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. // BSD-style license that can be found in the LICENSE file.
/*class: C:checkedInstance,checks=[],instance,typeLiteral*/ /*class: C:checks=[],instance,typeLiteral*/
class C {} class C {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a // 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. // BSD-style license that can be found in the LICENSE file.
/*class: B:checkedInstance,checks=[],indirectInstance,typeLiteral*/ /*class: B:checks=[],indirectInstance,typeLiteral*/
class B {} class B {}
/*class: C:checks=[],instance*/ /*class: C:checks=[],instance*/

View file

@ -13,7 +13,7 @@ class B<T, S> {
method() => new A<S>(); method() => new A<S>();
} }
/*class: C:checks=[$asB],instance*/ /*class: C:checks=[],instance*/
class C<T> extends B<T, T> {} class C<T> extends B<T, T> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -8,7 +8,7 @@ class A<T> {}
/*class: B:checkedInstance,checks=[],indirectInstance*/ /*class: B:checkedInstance,checks=[],indirectInstance*/
class B<T> {} class B<T> {}
/*class: C:checks=[$asB],instance*/ /*class: C:checks=[],instance*/
class C<T> extends B<A<T>> {} class C<T> extends B<A<T>> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,7 +5,7 @@
/*class: B:checkedInstance,checks=[],indirectInstance*/ /*class: B:checkedInstance,checks=[],indirectInstance*/
class B<T> {} class B<T> {}
/*class: C:checks=[$asB],instance*/ /*class: C:checks=[],instance*/
class C extends B<String> {} class C extends B<String> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -11,7 +11,7 @@ class B<T> {}
/*class: C:checks=[],indirectInstance*/ /*class: C:checks=[],indirectInstance*/
class C<T> {} class C<T> {}
/*class: D:checks=[$asB,$isB],instance*/ /*class: D:checks=[$isB],instance*/
class D<T> extends C<T> implements B<A<T>> {} class D<T> extends C<T> implements B<A<T>> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -8,7 +8,7 @@ class A {}
/*class: B:checkedInstance*/ /*class: B:checkedInstance*/
class B<T> {} class B<T> {}
/*class: C:checks=[$asB,$isB],instance*/ /*class: C:checks=[$isB],instance*/
class C extends A implements B<String> {} class C extends A implements B<String> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,7 +5,7 @@
/*class: A:checkedInstance,checks=[],indirectInstance*/ /*class: A:checkedInstance,checks=[],indirectInstance*/
class A<T> {} class A<T> {}
/*class: B:checks=[$asA],instance*/ /*class: B:checks=[],instance*/
class B<S, T> extends A<T> {} // Non-trivial substitution of A. class B<S, T> extends A<T> {} // Non-trivial substitution of A.
/*class: C:checks=[],instance*/ /*class: C:checks=[],instance*/

View file

@ -5,10 +5,10 @@
/*class: A:checkedInstance,checks=[],indirectInstance*/ /*class: A:checkedInstance,checks=[],indirectInstance*/
class A<T> {} class A<T> {}
/*class: B:checks=[$asA],instance*/ /*class: B:checks=[],instance*/
class B<S, T> extends A<T> {} // Non-trivial substitution of A. class B<S, T> extends A<T> {} // Non-trivial substitution of A.
/*class: C:checks=[$asA,$asB],instance*/ /*class: C:checks=[],instance*/
class C<T> extends B<T, T> {} // Trivial substitution of A class C<T> extends B<T, T> {} // Trivial substitution of A
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -8,7 +8,7 @@ class A<T> {}
/*class: B:checkedInstance*/ /*class: B:checkedInstance*/
class B<T> {} class B<T> {}
/*class: C:checks=[$asB,$isB],instance*/ /*class: C:checks=[$isB],instance*/
class C<T> implements B<A<T>> {} class C<T> implements B<A<T>> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,7 +5,7 @@
/*class: B:checkedInstance*/ /*class: B:checkedInstance*/
class B<T> {} class B<T> {}
/*class: C:checks=[$asB,$isB],instance*/ /*class: C:checks=[$isB],instance*/
class C implements B<String> {} class C implements B<String> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,10 +5,10 @@
/*class: A:checkedInstance,checks=[],indirectInstance*/ /*class: A:checkedInstance,checks=[],indirectInstance*/
class A<T> {} class A<T> {}
/*class: B:checks=[$asA],instance*/ /*class: B:checks=[],instance*/
class B<S, T> extends A<T> {} // Non-trivial substitution of A. class B<S, T> extends A<T> {} // Non-trivial substitution of A.
/*class: C:checks=[$asA,$isA],instance*/ /*class: C:checks=[$isA],instance*/
class C<S, T> implements B<S, T> {} // Non-trivial substitution of A class C<S, T> implements B<S, T> {} // Non-trivial substitution of A
@pragma('dart2js:noInline') @pragma('dart2js:noInline')

View file

@ -5,7 +5,7 @@
/*class: A:checkedInstance,checks=[],indirectInstance*/ /*class: A:checkedInstance,checks=[],indirectInstance*/
class A<T> {} class A<T> {}
/*class: B:checks=[$asA],instance*/ /*class: B:checks=[],instance*/
class B<S, T> extends A<T> {} // Non-trivial substitution of A. class B<S, T> extends A<T> {} // Non-trivial substitution of A.
/*class: C:checks=[$isA],instance*/ /*class: C:checks=[$isA],instance*/

View file

@ -17,7 +17,7 @@ main() {
/*class: A1:checkedTypeArgument,checks=[],typeArgument*/ /*class: A1:checkedTypeArgument,checks=[],typeArgument*/
class A1<T> {} class A1<T> {}
/*class: B1:checks=[$asA1],typeArgument*/ /*class: B1:checks=[],typeArgument*/
class B1 extends A1<int> {} class B1 extends A1<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
@ -38,8 +38,8 @@ bool _test1(f) => f is A1<int> Function();
/*omit.class: A2:checkedTypeArgument,checks=[],typeArgument*/ /*omit.class: A2:checkedTypeArgument,checks=[],typeArgument*/
class A2<T> {} class A2<T> {}
/*strong.class: B2:checkedInstance,checkedTypeArgument,checks=[$asA2],typeArgument*/ /*strong.class: B2:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
/*omit.class: B2:checkedTypeArgument,checks=[$asA2],typeArgument*/ /*omit.class: B2:checkedTypeArgument,checks=[],typeArgument*/
class B2 extends A2<int> {} class B2 extends A2<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
@ -60,8 +60,8 @@ bool _test2(f) => f is void Function(A2<int>);
/*omit.class: A3:checkedTypeArgument,checks=[],typeArgument*/ /*omit.class: A3:checkedTypeArgument,checks=[],typeArgument*/
class A3<T> {} class A3<T> {}
/*strong.class: B3:checkedInstance,checkedTypeArgument,checks=[$asA3],typeArgument*/ /*strong.class: B3:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
/*omit.class: B3:checkedTypeArgument,checks=[$asA3],typeArgument*/ /*omit.class: B3:checkedTypeArgument,checks=[],typeArgument*/
class B3 extends A3<int> {} class B3 extends A3<int> {}
@pragma('dart3js:noInline') @pragma('dart3js:noInline')
@ -101,7 +101,7 @@ _test4(f) => f is B4 Function();
/*class: A5:checkedTypeArgument,checks=[],typeArgument*/ /*class: A5:checkedTypeArgument,checks=[],typeArgument*/
class A5<T> {} class A5<T> {}
/*class: B5:checks=[$asA5],typeArgument*/ /*class: B5:checks=[],typeArgument*/
class B5 extends A5<int> {} class B5 extends A5<int> {}
@pragma('dart2js:noInline') @pragma('dart2js:noInline')
@ -121,7 +121,7 @@ bool _test5(f) => f is void Function(void Function(A5<int>));
/*class: A6:checkedTypeArgument,checks=[],typeArgument*/ /*class: A6:checkedTypeArgument,checks=[],typeArgument*/
class A6<T> {} class A6<T> {}
/*class: B6:checkedTypeArgument,checks=[$asA6],typeArgument*/ /*class: B6:checkedTypeArgument,checks=[],typeArgument*/
class B6 extends A6<int> {} class B6 extends A6<int> {}
@pragma('dart6js:noInline') @pragma('dart6js:noInline')

View file

@ -385,17 +385,17 @@
"options": { "options": {
"host-checked": true "host-checked": true
}}, }},
"dart2js-new-rti-(linux|mac|win)-x64-d8": { "dart2js-old-rti-(linux|mac|win)-x64-d8": {
"options": { "options": {
"builder-tag": "new_rti", "builder-tag": "old_rti",
"dart2js-options": ["--experiment-new-rti"], "dart2js-options": ["--use-old-rti"],
"host-checked": true "host-checked": true
}}, }},
"dart2js-new-rti-minified-csp-(linux|mac|win)-x64-d8": { "dart2js-old-rti-minified-csp-(linux|mac|win)-x64-d8": {
"options": { "options": {
"builder-tag": "new_rti", "builder-tag": "old_rti",
"csp": true, "csp": true,
"dart2js-options": ["--experiment-new-rti"], "dart2js-options": ["--use-old-rti"],
"minified": true, "minified": true,
"use-sdk": true "use-sdk": true
}}, }},
@ -1674,9 +1674,9 @@
"arguments": ["dart2js_bot"] "arguments": ["dart2js_bot"]
}, },
{ {
"name": "dart2js new-rti tests", "name": "dart2js old-rti tests",
"arguments": [ "arguments": [
"-ndart2js-new-rti-linux-x64-d8", "-ndart2js-old-rti-linux-x64-d8",
"--dart2js-batch", "--dart2js-batch",
"language_2", "language_2",
"corelib_2", "corelib_2",
@ -1687,9 +1687,9 @@
"fileset": "dart2js_hostasserts" "fileset": "dart2js_hostasserts"
}, },
{ {
"name": "dart2js new-rti minified+csp tests", "name": "dart2js old-rti minified+csp tests",
"arguments": [ "arguments": [
"-ndart2js-new-rti-minified-csp-linux-x64-d8", "-ndart2js-old-rti-minified-csp-linux-x64-d8",
"--dart2js-batch", "--dart2js-batch",
"language_2", "language_2",
"corelib_2", "corelib_2",