mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 17:04:56 +00:00
(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:
parent
6e7a900283
commit
d735f1f12d
52
CHANGELOG.md
52
CHANGELOG.md
|
@ -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
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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');
|
||||||
|
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 &&
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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\)')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {}
|
||||||
|
|
|
@ -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};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 + '';
|
||||||
|
|
|
@ -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]*/
|
||||||
|
|
|
@ -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]*/
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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>]*/
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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>();
|
||||||
|
|
|
@ -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) {}
|
||||||
|
|
|
@ -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]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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]*/ ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>[];
|
||||||
|
|
|
@ -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>[],
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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> {}
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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*/
|
||||||
|
|
|
@ -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>() {
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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>> {}
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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*/
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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*/
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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*/
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in a new issue