| Index: dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
|
| ===================================================================
|
| --- dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart (revision 29908)
|
| +++ dart/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart (working copy)
|
| @@ -35,6 +35,17 @@
|
| }
|
| }
|
|
|
| +class MalformedCheckedModeHelper extends CheckedModeHelper {
|
| + const MalformedCheckedModeHelper(String name) : super(name);
|
| +
|
| + void generateAdditionalArguments(SsaCodeGenerator codegen,
|
| + HTypeConversion node,
|
| + List<jsAst.Expression> arguments) {
|
| + ErroneousElement element = node.typeExpression.element;
|
| + arguments.add(js.string(element.message));
|
| + }
|
| +}
|
| +
|
| class PropertyCheckedModeHelper extends CheckedModeHelper {
|
| const PropertyCheckedModeHelper(String name) : super(name);
|
|
|
| @@ -338,6 +349,7 @@
|
|
|
| /// All the checked mode helpers.
|
| static const checkedModeHelpers = const [
|
| + const MalformedCheckedModeHelper('checkMalformedType'),
|
| const CheckedModeHelper('voidTypeCheck'),
|
| const CheckedModeHelper('stringTypeCast'),
|
| const CheckedModeHelper('stringTypeCheck'),
|
| @@ -988,6 +1000,9 @@
|
| }
|
| }
|
| bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE;
|
| + if (type.kind == TypeKind.MALFORMED_TYPE) {
|
| + enqueueInResolution(getThrowTypeError(), elements);
|
| + }
|
| if (!type.treatAsRaw || type.containsTypeVariables) {
|
| enqueueInResolution(getSetRuntimeTypeInfo(), elements);
|
| enqueueInResolution(getGetRuntimeTypeInfo(), elements);
|
| @@ -1323,6 +1338,11 @@
|
| {bool typeCast,
|
| bool nativeCheckOnly}) {
|
| assert(type.kind != TypeKind.TYPEDEF);
|
| + if (type.kind == TypeKind.MALFORMED_TYPE) {
|
| + // The same error is thrown for type test and type cast of a malformed
|
| + // type so we only need one check method.
|
| + return 'checkMalformedType';
|
| + }
|
| Element element = type.element;
|
| bool nativeCheck = nativeCheckOnly ||
|
| emitter.nativeEmitter.requiresNativeIsCheck(element);
|
|
|