| Index: lib/compiler/implementation/js_backend/native_emitter.dart | 
| diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/lib/compiler/implementation/js_backend/native_emitter.dart | 
| index 0840ef05468578f0350705d3ca98603f76e2e60f..6f8adae121dd20e5f4c77ee13f1887316ad46430 100644 | 
| --- a/lib/compiler/implementation/js_backend/native_emitter.dart | 
| +++ b/lib/compiler/implementation/js_backend/native_emitter.dart | 
| @@ -184,8 +184,10 @@ function(cls, fields, methods) { | 
| // If [name] is not in [argumentsBuffer], then the parameter is | 
| // an optional parameter that was not provided for that stub. | 
| if (argumentsBuffer.indexOf(name) == -1) return; | 
| -      Type type = parameter.computeType(compiler); | 
| +      Type type = parameter.computeType(compiler).unalias(compiler); | 
| if (type is FunctionType) { | 
| +        // The parameter type is a function type either directly or through | 
| +        // typedef(s). | 
| int arity = type.computeArity(); | 
| code.add('  $name = $closureConverter($name, $arity);\n'); | 
| } | 
| @@ -359,7 +361,11 @@ function(cls, fields, methods) { | 
| compiler.cancel("Is check for type variable", element: element); | 
| return false; | 
| } | 
| -    if (element.computeType(compiler) is FunctionType) return false; | 
| +    if (element.computeType(compiler).unalias(compiler) is FunctionType) { | 
| +      // The element type is a function type either directly or through | 
| +      // typedef(s). | 
| +      return false; | 
| +    } | 
|  | 
| if (!element.isClass()) { | 
| compiler.cancel("Is check does not handle element", element: element); | 
|  |