| Index: dart/sdk/lib/_internal/lib/js_rti.dart
|
| diff --git a/dart/sdk/lib/_internal/lib/js_rti.dart b/dart/sdk/lib/_internal/lib/js_rti.dart
|
| index d090dea84dc364d3fe516a582b27326e9e72f176..be747ea516fc659fcb9550bb4478e0384d2bcbdf 100644
|
| --- a/dart/sdk/lib/_internal/lib/js_rti.dart
|
| +++ b/dart/sdk/lib/_internal/lib/js_rti.dart
|
| @@ -177,6 +177,7 @@ String runtimeTypeToString(var type , {String onTypeVariable(int i)}) {
|
| return onTypeVariable(type);
|
| }
|
| } else {
|
| + // TODO(ahe): Handle function types, and be sure to always return a string.
|
| return null;
|
| }
|
| }
|
| @@ -355,73 +356,6 @@ bool areSubtypes(var s, var t) {
|
| return true;
|
| }
|
|
|
| -Object functionSubtypeCast(Object object, String signatureName,
|
| - String contextName, var context,
|
| - var typeArguments) {
|
| - if (!checkFunctionSubtype(object, signatureName,
|
| - contextName, context, typeArguments)) {
|
| - String actualType = Primitives.objectTypeName(object);
|
| - // TODO(johnniwinther): Provide better function type naming.
|
| - String typeName = signatureName;
|
| - throw new CastErrorImplementation(actualType, typeName);
|
| - }
|
| - return object;
|
| -}
|
| -
|
| -Object assertFunctionSubtype(Object object, String signatureName,
|
| - String contextName, var context,
|
| - var typeArguments) {
|
| - if (!checkFunctionSubtype(object, signatureName,
|
| - contextName, context, typeArguments)) {
|
| - // TODO(johnniwinther): Provide better function type naming.
|
| - String typeName = signatureName;
|
| - throw new TypeErrorImplementation(object, typeName);
|
| - }
|
| - return object;
|
| -}
|
| -
|
| -/**
|
| - * Checks that the type of [target] is a subtype of the function type denoted by
|
| - * [signatureName]. If the type contains type variables, [contextName] holds the
|
| - * name of the class where these were declared and either [context] holds the
|
| - * object in which the runtime values of these can be found or [typeArguments]
|
| - * contains these values as a list of runtime type information.
|
| - */
|
| -bool checkFunctionSubtype(var target, String signatureName,
|
| - String contextName, var context,
|
| - var typeArguments) {
|
| - if (isNull(target)) return true;
|
| - var interceptor = getInterceptor(target);
|
| - if (hasField(interceptor, '${JS_OPERATOR_IS_PREFIX()}_$signatureName')) {
|
| - return true;
|
| - }
|
| - var signatureLocation = JS_CURRENT_ISOLATE();
|
| - if (isNotNull(contextName)) {
|
| - signatureLocation = getField(JS('=Object', 'init.allClasses'), contextName);
|
| - }
|
| - var typeSignature =
|
| - getField(signatureLocation, '${JS_SIGNATURE_NAME()}_$signatureName');
|
| - if (isNull(typeSignature)) {
|
| - // All checks can be determined statically so the type signature has not
|
| - // been computed.
|
| - return false;
|
| - }
|
| - var targetSignatureFunction = getField(interceptor, '${JS_SIGNATURE_NAME()}');
|
| - if (isNull(targetSignatureFunction)) return false;
|
| - var targetSignature = invokeOn(targetSignatureFunction, interceptor, null);
|
| - if (isJsFunction(typeSignature)) {
|
| - if (isNotNull(typeArguments)) {
|
| - typeSignature = invoke(typeSignature, typeArguments);
|
| - } else if (isNotNull(context)) {
|
| - typeSignature =
|
| - invoke(typeSignature, getRuntimeTypeArguments(context, contextName));
|
| - } else {
|
| - typeSignature = invoke(typeSignature, null);
|
| - }
|
| - }
|
| - return isFunctionSubtype(targetSignature, typeSignature);
|
| -}
|
| -
|
| /**
|
| * Computes the signature by applying the type arguments of [context] as an
|
| * instance of [contextName] to the signature function [signature].
|
| @@ -529,11 +463,11 @@ bool isSubtype(var s, var t) {
|
| var typeOfT = isJsArray(t) ? getIndex(t, 0) : t;
|
| // Check for a subtyping flag.
|
| var name = runtimeTypeToString(typeOfT);
|
| - var test = '${JS_OPERATOR_IS_PREFIX()}${name}';
|
| - if (hasNoField(typeOfS, test)) return false;
|
| // Get the necessary substitution of the type arguments, if there is one.
|
| var substitution;
|
| if (isNotIdentical(typeOfT, typeOfS)) {
|
| + var test = '${JS_OPERATOR_IS_PREFIX()}${name}';
|
| + if (hasNoField(typeOfS, test)) return false;
|
| var field = '${JS_OPERATOR_AS_PREFIX()}${runtimeTypeToString(typeOfT)}';
|
| substitution = getField(typeOfS, field);
|
| }
|
|
|