| Index: pkg/compiler/lib/src/ssa/codegen.dart
 | 
| diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
 | 
| index 5cd48daf59a16f2166c19f568c28ee24c6327130..c53de9316ca87bd1f77a4122c7b5d8edcda14614 100644
 | 
| --- a/pkg/compiler/lib/src/ssa/codegen.dart
 | 
| +++ b/pkg/compiler/lib/src/ssa/codegen.dart
 | 
| @@ -2893,26 +2893,7 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
 | 
|            .getCheckedModeHelper(type, typeCast: node.isCastTypeCheck);
 | 
|      }
 | 
|  
 | 
| -    if (helper == null) {
 | 
| -      assert(type.isFunctionType);
 | 
| -      assert(node.usesMethodOnType);
 | 
| -
 | 
| -      String name = node.isCastTypeCheck ? '_asCheck' : '_assertCheck';
 | 
| -      HInstruction reifiedType = node.inputs[0];
 | 
| -      HInstruction checkedInput = node.inputs[1];
 | 
| -      use(reifiedType);
 | 
| -      js.Expression receiver = pop();
 | 
| -      use(checkedInput);
 | 
| -      Selector selector = new Selector.call(
 | 
| -          new Name(name, helpers.jsHelperLibrary), CallStructure.ONE_ARG);
 | 
| -      registry.registerDynamicUse(
 | 
| -          new DynamicUse(selector, reifiedType.instructionType));
 | 
| -      js.Name methodLiteral = backend.namer.invocationName(selector);
 | 
| -      push(js.js('#.#(#)', [receiver, methodLiteral, pop()]));
 | 
| -    } else {
 | 
| -      assert(!node.usesMethodOnType);
 | 
| -      push(helper.generateCall(this, node));
 | 
| -    }
 | 
| +    push(helper.generateCall(this, node));
 | 
|    }
 | 
|  
 | 
|    void visitTypeKnown(HTypeKnown node) {
 | 
| @@ -2920,52 +2901,6 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
 | 
|      assert(false);
 | 
|    }
 | 
|  
 | 
| -  void visitFunctionType(HFunctionType node) {
 | 
| -    FunctionType type = node.dartType;
 | 
| -    int inputCount = 0;
 | 
| -    use(node.inputs[inputCount++]);
 | 
| -    js.Expression returnType = pop();
 | 
| -
 | 
| -    List<js.Expression> parameterTypes = <js.Expression>[];
 | 
| -    for (var _ in type.parameterTypes) {
 | 
| -      use(node.inputs[inputCount++]);
 | 
| -      parameterTypes.add(pop());
 | 
| -    }
 | 
| -
 | 
| -    List<js.Expression> optionalParameterTypes = <js.Expression>[];
 | 
| -    for (var _ in type.optionalParameterTypes) {
 | 
| -      use(node.inputs[inputCount++]);
 | 
| -      optionalParameterTypes.add(pop());
 | 
| -    }
 | 
| -
 | 
| -    List<js.Property> namedParameters = <js.Property>[];
 | 
| -    for (var _ in type.namedParameters) {
 | 
| -      use(node.inputs[inputCount++]);
 | 
| -      js.Expression name = pop();
 | 
| -      use(node.inputs[inputCount++]);
 | 
| -      namedParameters.add(new js.Property(name, pop()));
 | 
| -    }
 | 
| -
 | 
| -    if (namedParameters.isEmpty) {
 | 
| -      var arguments = [returnType];
 | 
| -      if (!parameterTypes.isEmpty || !optionalParameterTypes.isEmpty) {
 | 
| -        arguments.add(new js.ArrayInitializer(parameterTypes));
 | 
| -      }
 | 
| -      if (!optionalParameterTypes.isEmpty) {
 | 
| -        arguments.add(new js.ArrayInitializer(optionalParameterTypes));
 | 
| -      }
 | 
| -      push(js.js('#(#)', [accessHelper(helpers.buildFunctionType), arguments]));
 | 
| -    } else {
 | 
| -      var arguments = [
 | 
| -        returnType,
 | 
| -        new js.ArrayInitializer(parameterTypes),
 | 
| -        new js.ObjectInitializer(namedParameters)
 | 
| -      ];
 | 
| -      push(js.js(
 | 
| -          '#(#)', [accessHelper(helpers.buildNamedFunctionType), arguments]));
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
|    void visitTypeInfoReadRaw(HTypeInfoReadRaw node) {
 | 
|      use(node.inputs[0]);
 | 
|      js.Expression receiver = pop();
 | 
| @@ -3048,76 +2983,6 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
 | 
|      });
 | 
|    }
 | 
|  
 | 
| -  void visitReadTypeVariable(HReadTypeVariable node) {
 | 
| -    TypeVariableEntity element = node.dartType.element;
 | 
| -    FunctionEntity helperElement = helpers.convertRtiToRuntimeType;
 | 
| -    registry.registerStaticUse(
 | 
| -        new StaticUse.staticInvoke(helperElement, CallStructure.ONE_ARG));
 | 
| -
 | 
| -    use(node.inputs[0]);
 | 
| -    if (node.hasReceiver) {
 | 
| -      if (backend.interceptorData.isInterceptorClass(element.typeDeclaration)) {
 | 
| -        int index = element.index;
 | 
| -        js.Expression receiver = pop();
 | 
| -        js.Expression helper =
 | 
| -            backend.emitter.staticFunctionAccess(helperElement);
 | 
| -        js.Expression rtiFieldName = backend.namer.rtiFieldJsName;
 | 
| -        push(js.js(r'#(#.# && #.#[#])', [
 | 
| -          helper,
 | 
| -          receiver,
 | 
| -          rtiFieldName,
 | 
| -          receiver,
 | 
| -          rtiFieldName,
 | 
| -          js.js.number(index)
 | 
| -        ]));
 | 
| -      } else {
 | 
| -        backend.emitter.registerReadTypeVariable(element);
 | 
| -        push(js.js(
 | 
| -            '#.#()', [pop(), backend.namer.nameForReadTypeVariable(element)]));
 | 
| -      }
 | 
| -    } else {
 | 
| -      push(js.js('#(#)',
 | 
| -          [backend.emitter.staticFunctionAccess(helperElement), pop()]));
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void visitInterfaceType(HInterfaceType node) {
 | 
| -    List<js.Expression> typeArguments = <js.Expression>[];
 | 
| -    for (HInstruction type in node.inputs) {
 | 
| -      use(type);
 | 
| -      typeArguments.add(pop());
 | 
| -    }
 | 
| -    InterfaceType type = node.dartType;
 | 
| -    ClassEntity cls = type.element;
 | 
| -    var arguments = [backend.emitter.typeAccess(cls)];
 | 
| -    if (!typeArguments.isEmpty) {
 | 
| -      arguments.add(new js.ArrayInitializer(typeArguments));
 | 
| -    }
 | 
| -    push(js.js('#(#)', [
 | 
| -      accessHelper(helpers.buildInterfaceType, arguments.length),
 | 
| -      arguments
 | 
| -    ]));
 | 
| -  }
 | 
| -
 | 
| -  void visitVoidType(HVoidType node) {
 | 
| -    push(js.js('#()', accessHelper(helpers.getVoidRuntimeType)));
 | 
| -  }
 | 
| -
 | 
| -  void visitDynamicType(HDynamicType node) {
 | 
| -    push(js.js('#()', accessHelper(helpers.getDynamicRuntimeType)));
 | 
| -  }
 | 
| -
 | 
| -  js.PropertyAccess accessHelper(FunctionEntity helper,
 | 
| -      [int argumentCount = 0]) {
 | 
| -    if (helper == null) {
 | 
| -      // For mocked-up tests.
 | 
| -      return js.js('(void 0).dummy');
 | 
| -    }
 | 
| -    registry.registerStaticUse(new StaticUse.staticInvoke(
 | 
| -        helper, new CallStructure.unnamed(argumentCount)));
 | 
| -    return backend.emitter.staticFunctionAccess(helper);
 | 
| -  }
 | 
| -
 | 
|    @override
 | 
|    void visitRef(HRef node) {
 | 
|      visit(node.value);
 | 
| 
 |