| Index: dart/frog/leg/resolver.dart
|
| diff --git a/dart/frog/leg/resolver.dart b/dart/frog/leg/resolver.dart
|
| index 3b3e8a64243d28a4ddc0401f62023f8723c55175..4e3b4f7bd252eb87df93effe1f3d0e7443c2fc85 100644
|
| --- a/dart/frog/leg/resolver.dart
|
| +++ b/dart/frog/leg/resolver.dart
|
| @@ -1263,6 +1263,9 @@ class ClassResolverVisitor extends CommonResolverVisitor<Type> {
|
| Type supertype = visit(node.superclass);
|
| if (supertype !== null && supertype.element.isExtendable()) {
|
| classElement.supertype = supertype;
|
| + if (isBlackListed(supertype)) {
|
| + error(node.superclass, MessageKind.CANNOT_EXTEND, [supertype]);
|
| + }
|
| } else if (supertype !== null) {
|
| error(node.superclass, MessageKind.TYPE_NAME_EXPECTED);
|
| }
|
| @@ -1285,6 +1288,9 @@ class ClassResolverVisitor extends CommonResolverVisitor<Type> {
|
| if (interfaceType !== null && interfaceType.element.isExtendable()) {
|
| classElement.interfaces =
|
| classElement.interfaces.prepend(interfaceType);
|
| + if (isBlackListed(interfaceType)) {
|
| + error(link.head, MessageKind.CANNOT_IMPLEMENT, [interfaceType]);
|
| + }
|
| } else {
|
| error(link.head, MessageKind.TYPE_NAME_EXPECTED);
|
| }
|
| @@ -1414,6 +1420,22 @@ class ClassResolverVisitor extends CommonResolverVisitor<Type> {
|
| new Block(new NodeList.empty()),
|
| null, null, null, null);
|
| }
|
| +
|
| + isBlackListed(Type type) {
|
| + LibraryElement lib = classElement.getLibrary();
|
| + return
|
| + lib !== compiler.coreLibrary &&
|
| + lib !== compiler.coreImplLibrary &&
|
| + lib !== compiler.jsHelperLibrary &&
|
| + (type.element === compiler.dynamicClass ||
|
| + type.element === compiler.boolClass ||
|
| + type.element === compiler.numClass ||
|
| + type.element === compiler.intClass ||
|
| + type.element === compiler.doubleClass ||
|
| + type.element === compiler.stringClass ||
|
| + type.element === compiler.nullClass ||
|
| + type.element === compiler.functionClass);
|
| + }
|
| }
|
|
|
| class VariableDefinitionsVisitor extends CommonResolverVisitor<SourceString> {
|
|
|