| Index: pkg/compiler/lib/src/ssa/builder.dart | 
| diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart | 
| index 1a754fd18f29628daabe4c52d8651e26dd3bbd0d..1740338b4d33aeaab31424c029d95085f7f477e0 100644 | 
| --- a/pkg/compiler/lib/src/ssa/builder.dart | 
| +++ b/pkg/compiler/lib/src/ssa/builder.dart | 
| @@ -2587,13 +2587,17 @@ class SsaBuilder extends ast.Visitor | 
| "${localsHandler.contextClass}."); | 
| } | 
|  | 
| -  /// Build a [HTypeConversion] for convertion [original] to type [type]. | 
| +  /// Build a [HTypeConversion] for converting [original] to type [type]. | 
| /// | 
| /// Invariant: [type] must be valid in the context. | 
| /// See [LocalsHandler.substInContext]. | 
| HInstruction buildTypeConversion( | 
| HInstruction original, DartType type, int kind) { | 
| if (type == null) return original; | 
| +    // GENERIC_METHODS: The following statement was added for parsing and | 
| +    // ignoring method type variables; must be generalized for full support of | 
| +    // generic methods. | 
| +    type = type.dynamifyMethodTypeVariableType; | 
| type = type.unaliased; | 
| assert(assertTypeInContext(type, original)); | 
| if (type.isInterfaceType && !type.treatAsRaw) { | 
| @@ -3814,8 +3818,15 @@ class SsaBuilder extends ast.Visitor | 
| void visitAs(ast.Send node, ast.Node expression, DartType type, _) { | 
| HInstruction expressionInstruction = visitAndPop(expression); | 
| if (type.isMalformed) { | 
| -      ErroneousElement element = type.element; | 
| -      generateTypeError(node, element.message); | 
| +      String message; | 
| +      if (type is MalformedType) { | 
| +        ErroneousElement element = type.element; | 
| +        message = element.message; | 
| +      } else { | 
| +        assert(type is MethodTypeVariableType); | 
| +        message = "Method type variables are not reified."; | 
| +      } | 
| +      generateTypeError(node, message); | 
| } else { | 
| HInstruction converted = buildTypeConversion(expressionInstruction, | 
| localsHandler.substInContext(type), HTypeConversion.CAST_TYPE_CHECK); | 
| @@ -3841,7 +3852,20 @@ class SsaBuilder extends ast.Visitor | 
| HInstruction buildIsNode( | 
| ast.Node node, DartType type, HInstruction expression) { | 
| type = localsHandler.substInContext(type).unaliased; | 
| -    if (type.isFunctionType) { | 
| +    if (type.isMalformed) { | 
| +      String message; | 
| +      if (type is MethodTypeVariableType) { | 
| +        message = "Method type variables are not reified, " | 
| +            "so they cannot be tested with an `is` expression."; | 
| +      } else { | 
| +        assert(type is MalformedType); | 
| +        ErroneousElement element = type.element; | 
| +        message = element.message; | 
| +      } | 
| +      generateTypeError(node, message); | 
| +      HInstruction call = pop(); | 
| +      return new HIs.compound(type, expression, call, backend.boolType); | 
| +    } else if (type.isFunctionType) { | 
| List arguments = [buildFunctionType(type), expression]; | 
| pushInvokeDynamic( | 
| node, | 
| @@ -3876,11 +3900,6 @@ class SsaBuilder extends ast.Visitor | 
| pushInvokeStatic(node, helper, inputs, typeMask: backend.boolType); | 
| HInstruction call = pop(); | 
| return new HIs.compound(type, expression, call, backend.boolType); | 
| -    } else if (type.isMalformed) { | 
| -      ErroneousElement element = type.element; | 
| -      generateTypeError(node, element.message); | 
| -      HInstruction call = pop(); | 
| -      return new HIs.compound(type, expression, call, backend.boolType); | 
| } else { | 
| if (backend.hasDirectCheckFor(type)) { | 
| return new HIs.direct(type, expression, backend.boolType); | 
| @@ -5346,12 +5365,19 @@ class SsaBuilder extends ast.Visitor | 
| /// Generate the literal for [typeVariable] in the current context. | 
| void generateTypeVariableLiteral( | 
| ast.Send node, TypeVariableType typeVariable) { | 
| -    DartType type = localsHandler.substInContext(typeVariable); | 
| -    HInstruction value = analyzeTypeArgument(type, | 
| -        sourceInformation: sourceInformationBuilder.buildGet(node)); | 
| -    pushInvokeStatic(node, helpers.runtimeTypeToString, [value], | 
| -        typeMask: backend.stringType); | 
| -    pushInvokeStatic(node, helpers.createRuntimeType, [pop()]); | 
| +    // GENERIC_METHODS: This provides thin support for method type variables | 
| +    // by treating them as malformed when evaluated as a literal. For full | 
| +    // support of generic methods this must be revised. | 
| +    if (typeVariable is MethodTypeVariableType) { | 
| +      generateTypeError(node, "Method type variables are not reified"); | 
| +    } else { | 
| +      DartType type = localsHandler.substInContext(typeVariable); | 
| +      HInstruction value = analyzeTypeArgument(type, | 
| +          sourceInformation: sourceInformationBuilder.buildGet(node)); | 
| +      pushInvokeStatic(node, helpers.runtimeTypeToString, [value], | 
| +          typeMask: backend.stringType); | 
| +      pushInvokeStatic(node, helpers.createRuntimeType, [pop()]); | 
| +    } | 
| } | 
|  | 
| /// Generate a call to a type literal. | 
|  |