diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart index e2f53d61627..8198af2f33f 100644 --- a/pkg/dev_compiler/lib/src/kernel/compiler.dart +++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart @@ -6577,10 +6577,6 @@ class ProgramCompiler extends ComputeOnceConstantVisitor if (node.arguments.positional.isEmpty && node.arguments.types.length == 1) { var type = node.arguments.types.single; - if (name == 'typeRep') return _emitType(type); - if (name == 'legacyTypeRep') { - return _emitType(type.withDeclaredNullability(Nullability.legacy)); - } if (name == 'getGenericClassStatic') { if (type is InterfaceType) { return _emitTopLevelNameNoExternalInterop(type.classNode, diff --git a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart index 4254990ad44..f1b49c5bf44 100644 --- a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart +++ b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart @@ -8,7 +8,7 @@ library dart.js; import 'dart:collection' show HashMap, ListMixin; import 'dart:_js_helper' show NoReifyGeneric, Primitives; -import 'dart:_foreign_helper' show JS; +import 'dart:_foreign_helper' show JS, TYPE_REF; import 'dart:_interceptors' show LegacyJavaScriptObject; import 'dart:_internal' show patch; import 'dart:_runtime' as dart; @@ -371,8 +371,7 @@ Object? _convertToDart(Object? o) { int ms = JS('!', '#.getTime()', o); return DateTime.fromMillisecondsSinceEpoch(ms); } else if (o is _DartObject && - !identical( - dart.getReifiedType(o), dart.typeRep())) { + !identical(dart.getReifiedType(o), TYPE_REF())) { return o._dartObj; } else { return _wrapToDart(o); diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart index 5acc52fe2af..5ac53d2e279 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart @@ -215,7 +215,7 @@ generic(typeConstructor, setBaseClass) => JS('', '''(() => { if (args.length != length && args.length != 0) { $throwInternalError('requires ' + length + ' or 0 type arguments'); } - while (args.length < length) args.push(${typeRep()}); + while (args.length < length) args.push(${TYPE_REF()}); let value = resultMap; for (let i = 0; i < length; i++) { diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart index 59036fb4826..cdb08da4f20 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart @@ -164,7 +164,7 @@ getReifiedType(obj) { if (JS_GET_FLAG('NEW_RUNTIME_TYPES')) { switch (JS('!', 'typeof #', obj)) { case "object": - if (obj == null) return typeRep(); + if (obj == null) return TYPE_REF(); if (_jsInstanceOf(obj, RecordImpl)) return getRtiForRecord(obj); if (_jsInstanceOf(obj, Object) || JS('', '#[#]', obj, _extensionType) != null) { @@ -172,28 +172,28 @@ getReifiedType(obj) { return rti.instanceType(obj); } // Otherwise assume this is a JS interop object. - return typeRep(); + return TYPE_REF(); case "function": // Dart functions are tagged with a signature. var signature = JS('', '#[#]', obj, JS_GET_NAME(JsGetName.SIGNATURE_NAME)); if (signature != null) return signature; - return typeRep(); + return TYPE_REF(); case "undefined": - return typeRep(); + return TYPE_REF(); case "number": - return JS('', 'Math.floor(#) == # ? # : #', obj, obj, typeRep(), - typeRep()); + return JS('', 'Math.floor(#) == # ? # : #', obj, obj, TYPE_REF(), + TYPE_REF()); case "boolean": - return typeRep(); + return TYPE_REF(); case "string": - return typeRep(); + return TYPE_REF(); case "symbol": - return typeRep(); + return TYPE_REF(); case "bigint": - return typeRep(); + return TYPE_REF(); default: - return typeRep(); + return TYPE_REF(); } } else { switch (JS('!', 'typeof #', obj)) { @@ -206,13 +206,13 @@ getReifiedType(obj) { return JS('', '#.constructor', obj); } var result = JS('', '#[#]', obj, _extensionType); - if (result == null) return typeRep(); + if (result == null) return TYPE_REF(); return result; case "function": // All Dart functions and callable classes must set _runtimeType var result = JS('', '#[#]', obj, _runtimeType); if (result != null) return result; - return typeRep(); + return TYPE_REF(); case "undefined": return JS('', '#', Null); case "number": @@ -222,11 +222,11 @@ getReifiedType(obj) { case "string": return JS('', '#', String); case "symbol": - return typeRep(); + return TYPE_REF(); case "bigint": - return typeRep(); + return TYPE_REF(); default: - return typeRep(); + return TYPE_REF(); } } } diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart index a1e1ee4328a..2ff032d6e3c 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart @@ -17,7 +17,9 @@ import 'dart:_foreign_helper' JS_GET_FLAG, JS_GET_NAME, JSExportName, + LEGACY_TYPE_REF, rest, + TYPE_REF, spread; import 'dart:_interceptors' show diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart index 67ca7f04b2a..18a4f8a0a7d 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart @@ -192,8 +192,8 @@ class DynamicType extends DartType { @notNull bool _isJsObject(obj) => JS_GET_FLAG("NEW_RUNTIME_TYPES") ? obj is LegacyJavaScriptObject - : JS( - '!', '# === #', getReifiedType(obj), typeRep()); + : JS('!', '# === #', getReifiedType(obj), + TYPE_REF()); /// Asserts that [f] is a native JS function and returns it if so. /// @@ -1499,22 +1499,6 @@ external bool _jsInstanceOf(obj, cls); @notNull external bool _equalType(type, cls); -/// Extracts the type argument as an unwrapped type preserving all forms of -/// nullability. -/// -/// Acts as a way to bypass extra calls of [wrapType] and [unwrapType]. For -/// example `typeRep()` emits `dart.nullable(core.Object)` directly. -@notNull -external Type typeRep(); - -/// Extracts the type argument as an unwrapped type and performs a shallow -/// replacement of the nullability to a legacy type. -/// -/// Acts as a way to bypass extra calls of [wrapType] and [unwrapType]. For -/// example `legacyTypeRep()` emits `dart.legacy(core.Object)` directly. -@notNull -external Type legacyTypeRep(); - @notNull bool _isFutureOr(type) { var genericClass = getGenericClass(type); @@ -1546,14 +1530,14 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { // "Left Top". if (_equalType(t1, dynamic) || JS('!', '# === #', t1, void_)) { - return _isSubtype(typeRep(), t2, strictMode); + return _isSubtype(TYPE_REF(), t2, strictMode); } // "Right Object". if (_equalType(t2, Object)) { if (_isFutureOr(t1)) { var t1TypeArg = JS('', '#[0]', getGenericArgs(t1)); - return _isSubtype(t1TypeArg, typeRep(), strictMode); + return _isSubtype(t1TypeArg, TYPE_REF(), strictMode); } if (_jsInstanceOf(t1, LegacyType)) { @@ -1571,7 +1555,7 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { if (_equalType(t1, Null)) { if (_isFutureOr(t2)) { var t2TypeArg = JS('', '#[0]', getGenericArgs(t2)); - return _isSubtype(typeRep(), t2TypeArg, strictMode); + return _isSubtype(TYPE_REF(), t2TypeArg, strictMode); } return _equalType(t2, Null) || @@ -1612,7 +1596,7 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { // "Left Nullable". if (_jsInstanceOf(t1, NullableType)) { return _isSubtype(JS('!', '#', t1).type, t2, strictMode) && - _isSubtype(typeRep(), t2, strictMode); + _isSubtype(TYPE_REF(), t2, strictMode); } if (_isFutureOr(t2)) { @@ -1627,7 +1611,7 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { // "Right Nullable". if (_jsInstanceOf(t2, NullableType)) { return _isSubtype(t1, JS('!', '#', t2).type, strictMode) || - _isSubtype(t1, typeRep(), strictMode); + _isSubtype(t1, TYPE_REF(), strictMode); } // Abstract Record. @@ -1665,7 +1649,7 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { // non-`@staticInterop` package:js types <: LegacyJavaScriptObject if (_isInterfaceSubtype( - t1, typeRep(), strictMode) && + t1, TYPE_REF(), strictMode) && // TODO(srujzs): We don't have a mechanism to determine if *some* // PackageJSType implements t2. This will possibly require keeping a map // of these relationships for this subtyping check. For now, this will @@ -1676,7 +1660,7 @@ bool _isSubtype(t1, t2, @notNull bool strictMode) { if (_isInterfaceSubtype(t1, _packageJSTypeForSubtyping, strictMode) && _isInterfaceSubtype( - typeRep(), t2, strictMode)) { + TYPE_REF(), t2, strictMode)) { return true; } diff --git a/sdk/lib/_internal/js_dev_runtime/private/foreign_helper.dart b/sdk/lib/_internal/js_dev_runtime/private/foreign_helper.dart index bd4f4f48be9..b7ddb465eca 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/foreign_helper.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/foreign_helper.dart @@ -326,11 +326,13 @@ external RAW_DART_FUNCTION_REF(Function function); /// Returns a reference to the internal value that represents [T]. /// /// Static calls to this function are inserted directly by the compiler. +@notNull external Rti TYPE_REF(); /// Returns a reference to the internal value that represents [T]*. /// /// Static calls to this function are inserted directly by the compiler. +@notNull external Rti LEGACY_TYPE_REF(); /// JavaScript string concatenation. Inputs must be Strings. diff --git a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart index 9222adf9d11..b2652e04fb5 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart @@ -7,8 +7,7 @@ library dart._interceptors; import 'dart:collection'; import 'dart:_internal' hide Symbol; import 'dart:_js_helper'; -import 'dart:_foreign_helper' - show JS, JS_EMBEDDED_GLOBAL, JS_GET_FLAG, JSExportName; +import 'dart:_foreign_helper' show JS, JS_GET_FLAG, TYPE_REF; import 'dart:math' show Random, ln2; import 'dart:_rti' as rti show createRuntimeType, Rti; import 'dart:_runtime' as dart; diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_array.dart b/sdk/lib/_internal/js_dev_runtime/private/js_array.dart index 631801ea709..34ba38a3c71 100644 --- a/sdk/lib/_internal/js_dev_runtime/private/js_array.dart +++ b/sdk/lib/_internal/js_dev_runtime/private/js_array.dart @@ -49,7 +49,7 @@ class JSArray extends JavaScriptObject /// NOTE: The name of this getter is directly tied to the result of compiling /// `JS_EMBEDDED_GLOBAL('', ARRAY_RTI_PROPERTY)`. Object get arrayRti => JS_GET_FLAG('NEW_RUNTIME_TYPES') - ? dart.typeRep>() + ? TYPE_REF>() : throw dart.throwUnimplementedInCurrentRti(); /// Unsupported action, only provided here to help diagnosis of an accidental diff --git a/tests/dartdevc/runtime_utils.dart b/tests/dartdevc/runtime_utils.dart index 5b14053b69d..8fea4f70506 100644 --- a/tests/dartdevc/runtime_utils.dart +++ b/tests/dartdevc/runtime_utils.dart @@ -2,7 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'dart:_runtime' show gFnType, typeRep, isSubtypeOf; +import 'dart:_foreign_helper' show TYPE_REF; +import 'dart:_runtime' show gFnType, isSubtypeOf; import 'package:expect/expect.dart'; @@ -10,7 +11,8 @@ import 'package:expect/expect.dart'; /// the form: void -> void. /// // TODO(nshahan): The generic function type is created as a legacy type. -genericFunction(bound) => gFnType((T) => [typeRep(), []], (T) => [bound]); +genericFunction(bound) => + gFnType((T) => [TYPE_REF(), []], (T) => [bound]); /// Returns an unwrapped generic function type with a bounded type argument in /// the form: [argumentType] -> T. diff --git a/tests/dartdevc/runtime_utils_nnbd.dart b/tests/dartdevc/runtime_utils_nnbd.dart index 3d106551bac..733c1e05999 100644 --- a/tests/dartdevc/runtime_utils_nnbd.dart +++ b/tests/dartdevc/runtime_utils_nnbd.dart @@ -2,13 +2,13 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'dart:_foreign_helper' show JS; -import 'dart:_runtime' show gFnType, typeRep; +import 'dart:_foreign_helper' show JS, TYPE_REF; +import 'dart:_runtime' show gFnType; /// Returns an unwrapped generic function type with a bounded type argument in /// the form: void -> void. Object genericFunction(Object bound) => - gFnType((T) => [typeRep(), []], (T) => [bound]); + gFnType((T) => [TYPE_REF(), []], (T) => [bound]); /// Returns an unwrapped generic function type with a bounded type argument in /// the form: [argumentType] -> T. diff --git a/tests/dartdevc/subtype_test.dart b/tests/dartdevc/subtype_test.dart index e6d5448efeb..22d565f54ab 100644 --- a/tests/dartdevc/subtype_test.dart +++ b/tests/dartdevc/subtype_test.dart @@ -4,7 +4,7 @@ // Requirements=nnbd-strong -import 'dart:_runtime' show typeRep, legacyTypeRep; +import 'dart:_foreign_helper' show LEGACY_TYPE_REF, TYPE_REF; import 'dart:async' show FutureOr; import 'runtime_utils.dart' @@ -30,258 +30,261 @@ class F extends E {} void main() { // Top type symmetry. // Object? <:> dynamic - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // Object? <:> void - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // void <:> dynamic - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // Bottom is subtype of top. // Never <: dynamic - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: void - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Object is between top and bottom. // Object <: Object? - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Never <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Null is between top and bottom. // Null <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: Null - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Class is between Object and bottom. // A <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Nullable types are a union of T and Null. // A <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Null <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A? <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Legacy types will eventually be migrated to T or T? but until then are // symmetric with both. // Object* <:> Object - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Object* <:> Object? - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Bottom Types // Null <: Object* - checkSubtype(typeRep(), legacyTypeRep()); + checkSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Never <: Object* - checkSubtype(typeRep(), legacyTypeRep()); + checkSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // A* <:> A - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <:> A? - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <: Object - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <: Object? - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Null <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Never <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Futures. // Null <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Object <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Object? <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Object <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Object <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Object <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype( + TYPE_REF>(), TYPE_REF>()); // FutureOr <: Future - checkSubtype(typeRep>(), typeRep>()); + checkSubtype(TYPE_REF>(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // B <: <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Future <: Future - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Interface subtypes. // A <: A - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // B <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: B - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Functions. // A -> B <: Function - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: A -> B - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: B -> B - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: A -> A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Generic Function Subtypes. // Bound is a built in type. // void -> void <: void -> void checkSubtype( - genericFunction(typeRep()), genericFunction(typeRep())); + genericFunction(TYPE_REF()), genericFunction(TYPE_REF())); // A -> T <: B -> T - checkProperSubtype(functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + checkProperSubtype(functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // T -> B <: T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a function type. // B> void -> void <: B> void -> void - checkSubtype(genericFunction(typeRep()), - genericFunction(typeRep())); + checkSubtype(genericFunction(TYPE_REF()), + genericFunction(TYPE_REF())); // B> A -> T <: B> B -> T checkProperSubtype( - functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // B> T -> B <: B> T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype( + functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a user defined class. // void -> void <: void -> void - checkSubtype(genericFunction(typeRep()), genericFunction(typeRep())); + checkSubtype(genericFunction(TYPE_REF()), genericFunction(TYPE_REF())); // A -> T <: B -> T - checkProperSubtype(functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + checkProperSubtype(functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // T -> B <: T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a Future. // > void -> void <: > void -> void - checkSubtype(genericFunction(typeRep>()), - genericFunction(typeRep>())); + checkSubtype(genericFunction(TYPE_REF>()), + genericFunction(TYPE_REF>())); // > A -> T <: > B -> T - checkProperSubtype(functionGenericReturn(typeRep>(), typeRep()), - functionGenericReturn(typeRep>(), typeRep())); + checkProperSubtype( + functionGenericReturn(TYPE_REF>(), TYPE_REF()), + functionGenericReturn(TYPE_REF>(), TYPE_REF())); // > T -> B <: > T -> A - checkProperSubtype(functionGenericArg(typeRep>(), typeRep()), - functionGenericArg(typeRep>(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF>(), TYPE_REF()), + functionGenericArg(TYPE_REF>(), TYPE_REF())); // Bound is a FutureOr. // > void -> void <: // > void -> void - checkSubtype(genericFunction(typeRep>()), - genericFunction(typeRep>())); + checkSubtype(genericFunction(TYPE_REF>()), + genericFunction(TYPE_REF>())); // > A -> T <: > B -> T checkProperSubtype( - functionGenericReturn(typeRep>(), typeRep()), - functionGenericReturn(typeRep>(), typeRep())); + functionGenericReturn(TYPE_REF>(), TYPE_REF()), + functionGenericReturn(TYPE_REF>(), TYPE_REF())); // > T -> B <: > T -> A - checkProperSubtype(functionGenericArg(typeRep>(), typeRep()), - functionGenericArg(typeRep>(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF>(), TYPE_REF()), + functionGenericArg(TYPE_REF>(), TYPE_REF())); // Generics. // D <:> D - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // D <: D - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // F <: E - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // F <: E - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // E <: E - checkProperSubtype(typeRep>(), typeRep()); + checkProperSubtype(TYPE_REF>(), TYPE_REF()); // E <: E - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Nullable interface subtypes. // B <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // B? <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C? <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Mixed mode. // B* <: A - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // B* <: A? - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <\: B - checkSubtypeFailure(legacyTypeRep(), typeRep()); + checkSubtypeFailure(LEGACY_TYPE_REF(), TYPE_REF()); // B? <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // B <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // A <: B* - checkSubtypeFailure(typeRep(), legacyTypeRep()); + checkSubtypeFailure(TYPE_REF(), LEGACY_TYPE_REF()); // A? <: B* - checkSubtypeFailure(typeRep(), legacyTypeRep()); + checkSubtypeFailure(TYPE_REF(), LEGACY_TYPE_REF()); // Allowed in weak mode. // dynamic <\: Object - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // void <\: Object - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // Object? <\: Object - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // A? <\: Object - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // A? <\: A - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // Null <\: Never - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // Null <\: Object - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // Null <\: A - checkSubtypeFailure(typeRep(), typeRep()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF()); // Null <\: FutureOr - checkSubtypeFailure(typeRep(), typeRep>()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF>()); // Null <\: Future - checkSubtypeFailure(typeRep(), typeRep>()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF>()); // FutureOr <\: Future - checkSubtypeFailure(typeRep>(), typeRep>()); + checkSubtypeFailure(TYPE_REF>(), TYPE_REF>()); // Null <\: Future - checkSubtypeFailure(typeRep(), typeRep>()); + checkSubtypeFailure(TYPE_REF(), TYPE_REF>()); // FutureOr <\: Object - checkSubtypeFailure(typeRep>(), typeRep()); + checkSubtypeFailure(TYPE_REF>(), TYPE_REF()); // FutureOr <\: Object - checkSubtypeFailure(typeRep>(), typeRep()); + checkSubtypeFailure(TYPE_REF>(), TYPE_REF()); // FutureOr <\: Object - checkSubtypeFailure(typeRep>(), typeRep()); + checkSubtypeFailure(TYPE_REF>(), TYPE_REF()); } diff --git a/tests/dartdevc/subtype_weak_test.dart b/tests/dartdevc/subtype_weak_test.dart index 205d2f1e016..cddd9d7e207 100644 --- a/tests/dartdevc/subtype_weak_test.dart +++ b/tests/dartdevc/subtype_weak_test.dart @@ -4,7 +4,7 @@ // Requirements=nnbd-weak -import 'dart:_runtime' show typeRep, legacyTypeRep; +import 'dart:_foreign_helper' show LEGACY_TYPE_REF, TYPE_REF; import 'dart:async'; import 'runtime_utils.dart' @@ -30,258 +30,261 @@ class F extends E {} void main() { // Top type symmetry. // Object? <:> dynamic - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // Object? <:> void - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // void <:> dynamic - checkMutualSubtype(typeRep(), typeRep()); + checkMutualSubtype(TYPE_REF(), TYPE_REF()); // Bottom is subtype of top. // Never <: dynamic - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: void - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Object is between top and bottom. // Object <: Object? - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Never <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Null is between top and bottom. // Null <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: Null - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Class is between Object and bottom. // A <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Never <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Nullable types are a union of T and Null. // A <: A? - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Null <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A? <: Object? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Legacy types will eventually be migrated to T or T? but until then are // symmetric with both. // Object* <:> Object - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Object* <:> Object? - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Bottom Types // Null <: Object* - checkSubtype(typeRep(), legacyTypeRep()); + checkSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Never <: Object* - checkSubtype(typeRep(), legacyTypeRep()); + checkSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // A* <:> A - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <:> A? - checkMutualSubtype(legacyTypeRep(), typeRep()); + checkMutualSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <: Object - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <: Object? - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // Null <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Never <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // Futures. // Null <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Object <: FutureOr - checkSubtype(typeRep(), typeRep>()); + checkSubtype(TYPE_REF(), TYPE_REF>()); // Object? <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Object <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Object <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Object <:> FutureOr - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype( + TYPE_REF>(), TYPE_REF>()); // FutureOr <: Future - checkSubtype(typeRep>(), typeRep>()); + checkSubtype(TYPE_REF>(), TYPE_REF>()); // Future <: FutureOr - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // B <: <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Future <: Future - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Interface subtypes. // A <: A - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // B <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: B - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Functions. // A -> B <: Function - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: A -> B - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: B -> B - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A -> B <: A -> A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Generic Function Subtypes. // Bound is a built in type. // void -> void <: void -> void checkSubtype( - genericFunction(typeRep()), genericFunction(typeRep())); + genericFunction(TYPE_REF()), genericFunction(TYPE_REF())); // A -> T <: B -> T - checkProperSubtype(functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + checkProperSubtype(functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // T -> B <: T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a function type. // B> void -> void <: B> void -> void - checkSubtype(genericFunction(typeRep()), - genericFunction(typeRep())); + checkSubtype(genericFunction(TYPE_REF()), + genericFunction(TYPE_REF())); // B> A -> T <: B> B -> T checkProperSubtype( - functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // B> T -> B <: B> T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype( + functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a user defined class. // void -> void <: void -> void - checkSubtype(genericFunction(typeRep()), genericFunction(typeRep())); + checkSubtype(genericFunction(TYPE_REF()), genericFunction(TYPE_REF())); // A -> T <: B -> T - checkProperSubtype(functionGenericReturn(typeRep(), typeRep()), - functionGenericReturn(typeRep(), typeRep())); + checkProperSubtype(functionGenericReturn(TYPE_REF(), TYPE_REF()), + functionGenericReturn(TYPE_REF(), TYPE_REF())); // T -> B <: T -> A - checkProperSubtype(functionGenericArg(typeRep(), typeRep()), - functionGenericArg(typeRep(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF(), TYPE_REF()), + functionGenericArg(TYPE_REF(), TYPE_REF())); // Bound is a Future. // > void -> void <: > void -> void - checkSubtype(genericFunction(typeRep>()), - genericFunction(typeRep>())); + checkSubtype(genericFunction(TYPE_REF>()), + genericFunction(TYPE_REF>())); // > A -> T <: > B -> T - checkProperSubtype(functionGenericReturn(typeRep>(), typeRep()), - functionGenericReturn(typeRep>(), typeRep())); + checkProperSubtype( + functionGenericReturn(TYPE_REF>(), TYPE_REF()), + functionGenericReturn(TYPE_REF>(), TYPE_REF())); // > T -> B <: > T -> A - checkProperSubtype(functionGenericArg(typeRep>(), typeRep()), - functionGenericArg(typeRep>(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF>(), TYPE_REF()), + functionGenericArg(TYPE_REF>(), TYPE_REF())); // Bound is a FutureOr. // > void -> void <: // > void -> void - checkSubtype(genericFunction(typeRep>()), - genericFunction(typeRep>())); + checkSubtype(genericFunction(TYPE_REF>()), + genericFunction(TYPE_REF>())); // > A -> T <: > B -> T checkProperSubtype( - functionGenericReturn(typeRep>(), typeRep()), - functionGenericReturn(typeRep>(), typeRep())); + functionGenericReturn(TYPE_REF>(), TYPE_REF()), + functionGenericReturn(TYPE_REF>(), TYPE_REF())); // > T -> B <: > T -> A - checkProperSubtype(functionGenericArg(typeRep>(), typeRep()), - functionGenericArg(typeRep>(), typeRep())); + checkProperSubtype(functionGenericArg(TYPE_REF>(), TYPE_REF()), + functionGenericArg(TYPE_REF>(), TYPE_REF())); // Generics. // D <:> D - checkMutualSubtype(typeRep(), typeRep>()); + checkMutualSubtype(TYPE_REF(), TYPE_REF>()); // D <: D - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // F <: E - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // F <: E - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // E <: E - checkProperSubtype(typeRep>(), typeRep()); + checkProperSubtype(TYPE_REF>(), TYPE_REF()); // E <: E - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype(TYPE_REF>(), TYPE_REF>()); // Nullable interface subtypes. // B <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // B? <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // C? <: A? - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Mixed mode. // B* <: A - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // B* <: A? - checkProperSubtype(legacyTypeRep(), typeRep()); + checkProperSubtype(LEGACY_TYPE_REF(), TYPE_REF()); // A* <\: B - checkSubtypeFailure(legacyTypeRep(), typeRep()); + checkSubtypeFailure(LEGACY_TYPE_REF(), TYPE_REF()); // B? <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // B <: A* - checkProperSubtype(typeRep(), legacyTypeRep()); + checkProperSubtype(TYPE_REF(), LEGACY_TYPE_REF()); // A <: B* - checkSubtypeFailure(typeRep(), legacyTypeRep()); + checkSubtypeFailure(TYPE_REF(), LEGACY_TYPE_REF()); // A? <: B* - checkSubtypeFailure(typeRep(), legacyTypeRep()); + checkSubtypeFailure(TYPE_REF(), LEGACY_TYPE_REF()); // Allowed in weak mode. // dynamic <: Object - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // void <: Object - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Object? <: Object - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // A? <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // A? <: A - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Null <: Never - checkSubtype(typeRep(), typeRep()); + checkSubtype(TYPE_REF(), TYPE_REF()); // Null <: Object - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Null <: A - checkProperSubtype(typeRep(), typeRep()); + checkProperSubtype(TYPE_REF(), TYPE_REF()); // Null <: FutureOr - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // Null <: Future - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // FutureOr <: Future - checkSubtype(typeRep>(), typeRep>()); + checkSubtype(TYPE_REF>(), TYPE_REF>()); // Null <: Future - checkProperSubtype(typeRep(), typeRep>()); + checkProperSubtype(TYPE_REF(), TYPE_REF>()); // FutureOr <: Object - checkSubtype(typeRep>(), typeRep()); + checkSubtype(TYPE_REF>(), TYPE_REF()); // FutureOr <: Object - checkSubtype(typeRep>(), typeRep()); + checkSubtype(TYPE_REF>(), TYPE_REF()); // FutureOr <: Object - checkSubtype(typeRep>(), typeRep()); + checkSubtype(TYPE_REF>(), TYPE_REF()); } diff --git a/tests/dartdevc/type_normalization_test.dart b/tests/dartdevc/type_normalization_test.dart index 2ae889c4695..fb446d4488c 100644 --- a/tests/dartdevc/type_normalization_test.dart +++ b/tests/dartdevc/type_normalization_test.dart @@ -4,7 +4,8 @@ // Requirements=nnbd -import 'dart:_runtime' show legacy, nullable, typeRep, legacyTypeRep; +import 'dart:_foreign_helper' show LEGACY_TYPE_REF, TYPE_REF; +import 'dart:_runtime' show legacy, nullable; import 'package:expect/expect.dart'; @@ -12,26 +13,26 @@ class A {} void main() { // A?? == A? - Expect.identical(nullable(typeRep()), typeRep()); + Expect.identical(nullable(TYPE_REF()), TYPE_REF()); // A?* == A? - Expect.identical(legacy(typeRep()), typeRep()); + Expect.identical(legacy(TYPE_REF()), TYPE_REF()); // A*? == A? - Expect.identical(nullable(legacyTypeRep()), typeRep()); + Expect.identical(nullable(LEGACY_TYPE_REF()), TYPE_REF()); // A** == A* - Expect.identical(legacy(legacyTypeRep()), legacyTypeRep()); + Expect.identical(legacy(LEGACY_TYPE_REF()), LEGACY_TYPE_REF()); // The tests below need explicit wrapping in nullable and legacy to ensure // they appear at runtime and the runtime library normalizes them correctly. // Null? == Null - Expect.identical(nullable(typeRep()), typeRep()); + Expect.identical(nullable(TYPE_REF()), TYPE_REF()); // Never? == Null - Expect.identical(nullable(typeRep()), typeRep()); + Expect.identical(nullable(TYPE_REF()), TYPE_REF()); // dynamic? == dynamic - Expect.identical(nullable(typeRep()), typeRep()); + Expect.identical(nullable(TYPE_REF()), TYPE_REF()); // void? == void - Expect.identical(nullable(typeRep()), typeRep()); + Expect.identical(nullable(TYPE_REF()), TYPE_REF()); // dynamic* == dynamic - Expect.identical(legacy(typeRep()), typeRep()); + Expect.identical(legacy(TYPE_REF()), TYPE_REF()); // void* == void - Expect.identical(legacy(typeRep()), typeRep()); + Expect.identical(legacy(TYPE_REF()), TYPE_REF()); } diff --git a/tests/dartdevc/variance_subtype_test.dart b/tests/dartdevc/variance_subtype_test.dart index 72009871158..f4a12a6368c 100644 --- a/tests/dartdevc/variance_subtype_test.dart +++ b/tests/dartdevc/variance_subtype_test.dart @@ -6,7 +6,7 @@ // Tests runtime subtyping with explicit variance modifiers. -import 'dart:_runtime' show typeRep; +import 'dart:_foreign_helper' show TYPE_REF; import 'dart:async' show FutureOr; import 'runtime_utils.dart'; @@ -27,163 +27,164 @@ class LegacyCovariant {} void main() { // Covariant <: Covariant - checkProperSubtype(typeRep>(), typeRep>()); + checkProperSubtype( + TYPE_REF>(), TYPE_REF>()); // Covariant <: Covariant - checkSubtype(typeRep>(), typeRep>()); + checkSubtype(TYPE_REF>(), TYPE_REF>()); // Contravariant <: Contravariant checkProperSubtype( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Contravariant <: Contravariant checkSubtype( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Invariant <: Invariant - checkSubtype(typeRep>(), typeRep>()); + checkSubtype(TYPE_REF>(), TYPE_REF>()); // Invariant <:> Invariant checkMutualSubtype( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Invariant> <:> Invariant checkMutualSubtype( - typeRep>>(), typeRep>()); + TYPE_REF>>(), TYPE_REF>()); // Invariant> <:> Invariant?> - checkMutualSubtype( - typeRep>>(), typeRep?>>()); + checkMutualSubtype(TYPE_REF>>(), + TYPE_REF?>>()); // LegacyCovariant <: LegacyCovariant checkProperSubtype( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // List> <: Iterable> - checkProperSubtype(typeRep>>(), - typeRep>>()); + checkProperSubtype(TYPE_REF>>(), + TYPE_REF>>()); // List> <: Iterable> - checkProperSubtype(typeRep>>(), - typeRep>>()); + checkProperSubtype(TYPE_REF>>(), + TYPE_REF>>()); // List> <: Iterable> - checkProperSubtype(typeRep>>(), - typeRep>>()); + checkProperSubtype(TYPE_REF>>(), + TYPE_REF>>()); // List> <: Iterable> - checkProperSubtype(typeRep>>(), - typeRep>>()); + checkProperSubtype(TYPE_REF>>(), + TYPE_REF>>()); // String -> Covariant <: String -> Covariant - checkProperSubtype(typeRep Function(String)>(), - typeRep Function(String)>()); + checkProperSubtype(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Covariant -> String <: Covariant -> String - checkProperSubtype(typeRep)>(), - typeRep)>()); + checkProperSubtype(TYPE_REF)>(), + TYPE_REF)>()); // String -> Contravariant <: String -> Contravariant - checkProperSubtype(typeRep Function(String)>(), - typeRep Function(String)>()); + checkProperSubtype(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Contravariant -> String <: Contravariant -> String - checkProperSubtype(typeRep)>(), - typeRep)>()); + checkProperSubtype(TYPE_REF)>(), + TYPE_REF)>()); // String -> Invariant <: String -> Invariant - checkSubtype(typeRep)>(), - typeRep)>()); + checkSubtype(TYPE_REF)>(), + TYPE_REF)>()); // Invariant -> String <: Invariant -> String - checkSubtype(typeRep)>(), - typeRep)>()); + checkSubtype(TYPE_REF)>(), + TYPE_REF)>()); // String -> LegacyCovariant <: String -> LegacyCovariant - checkProperSubtype(typeRep Function(String)>(), - typeRep Function(String)>()); + checkProperSubtype(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // LegacyCovariant -> String <: LegacyCovariant -> String - checkProperSubtype(typeRep)>(), - typeRep)>()); + checkProperSubtype(TYPE_REF)>(), + TYPE_REF)>()); // Covariant checkSubtypeFailure( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Contravariant checkSubtypeFailure( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Invariant checkSubtypeFailure( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // Invariant checkSubtypeFailure( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // LegacyCovariant checkSubtypeFailure( - typeRep>(), typeRep>()); + TYPE_REF>(), TYPE_REF>()); // List> > - checkSubtypeFailure(typeRep>>(), - typeRep>>()); + checkSubtypeFailure(TYPE_REF>>(), + TYPE_REF>>()); // List> > - checkSubtypeFailure(typeRep>>(), - typeRep>>()); + checkSubtypeFailure(TYPE_REF>>(), + TYPE_REF>>()); // List> > - checkSubtypeFailure(typeRep>>(), - typeRep>>()); + checkSubtypeFailure(TYPE_REF>>(), + TYPE_REF>>()); // List> > - checkSubtypeFailure(typeRep>>(), - typeRep>>()); + checkSubtypeFailure(TYPE_REF>>(), + TYPE_REF>>()); // List> > - checkSubtypeFailure(typeRep>>(), - typeRep>>()); + checkSubtypeFailure(TYPE_REF>>(), + TYPE_REF>>()); // String -> Covariant Covariant - checkSubtypeFailure(typeRep Function(String)>(), - typeRep Function(String)>()); + checkSubtypeFailure(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Covariant -> String -> String - checkSubtypeFailure(typeRep)>(), - typeRep)>()); + checkSubtypeFailure(TYPE_REF)>(), + TYPE_REF)>()); // String -> Contravariant Contravariant - checkSubtypeFailure(typeRep Function(String)>(), - typeRep Function(String)>()); + checkSubtypeFailure(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Contravariant -> String -> String - checkSubtypeFailure(typeRep)>(), - typeRep)>()); + checkSubtypeFailure(TYPE_REF)>(), + TYPE_REF)>()); // String -> Invariant Invariant - checkSubtypeFailure(typeRep Function(String)>(), - typeRep Function(String)>()); + checkSubtypeFailure(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Invariant -> String -> String - checkSubtypeFailure(typeRep)>(), - typeRep)>()); + checkSubtypeFailure(TYPE_REF)>(), + TYPE_REF)>()); // String -> Invariant Invariant - checkSubtypeFailure(typeRep Function(String)>(), - typeRep Function(String)>()); + checkSubtypeFailure(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // Invariant -> String <: Invariant -> String - checkSubtypeFailure(typeRep)>(), - typeRep)>()); + checkSubtypeFailure(TYPE_REF)>(), + TYPE_REF)>()); // String -> LegacyCovariant LegacyCovariant - checkSubtypeFailure(typeRep Function(String)>(), - typeRep Function(String)>()); + checkSubtypeFailure(TYPE_REF Function(String)>(), + TYPE_REF Function(String)>()); // LegacyCovariant -> String -> String - checkSubtypeFailure(typeRep)>(), - typeRep)>()); + checkSubtypeFailure(TYPE_REF)>(), + TYPE_REF)>()); } diff --git a/tests/dartdevc/variance_test.dart b/tests/dartdevc/variance_test.dart index f3bcf75c6a4..dcc70885ef5 100644 --- a/tests/dartdevc/variance_test.dart +++ b/tests/dartdevc/variance_test.dart @@ -6,8 +6,8 @@ // Tests the emission of explicit variance modifiers. -import 'dart:_runtime' - show getGenericArgVariances, Variance, typeRep; +import 'dart:_foreign_helper' show TYPE_REF; +import 'dart:_runtime' show getGenericArgVariances, Variance; import 'package:expect/expect.dart'; @@ -32,20 +32,20 @@ List? getVariances(Object type) { } main() { - Expect.listEquals([Variance.contravariant], getVariances(typeRep())!); + Expect.listEquals([Variance.contravariant], getVariances(TYPE_REF())!); - Expect.listEquals([Variance.covariant], getVariances(typeRep())!); + Expect.listEquals([Variance.covariant], getVariances(TYPE_REF())!); - Expect.listEquals([Variance.invariant], getVariances(typeRep())!); + Expect.listEquals([Variance.invariant], getVariances(TYPE_REF())!); // Implicit variance is not emitted into the generated code. - Expect.isNull(getVariances(typeRep())); + Expect.isNull(getVariances(TYPE_REF())); Expect.listEquals( [Variance.invariant, Variance.covariant, Variance.contravariant], - getVariances(typeRep())!); + getVariances(TYPE_REF())!); - Expect.listEquals([Variance.contravariant], getVariances(typeRep())!); + Expect.listEquals([Variance.contravariant], getVariances(TYPE_REF())!); - Expect.listEquals([Variance.invariant], getVariances(typeRep())!); + Expect.listEquals([Variance.invariant], getVariances(TYPE_REF())!); }