anchor.diff:    jsAst.Literal encodeRecipeWithVariablesReplaceByAny(
         ModularEmitter emitter, DartType dartType);
   
  +  /// Returns a [jsAst.Literal] representing [supertypeArgument] to be evaluated
  +  /// against a [FullTypeEnvironmentStructure] representing [declaringType]. Any
  +  /// [TypeVariableType]s appearing in [supertypeArgument] which are declared by
  +  /// [declaringType] are always encoded as indices.
  +  jsAst.Literal encodeDirectSupertypeRecipe(ModularEmitter emitter,
  +      InterfaceType declaringType, DartType supertypeArgument);
  +
     /// Converts a recipe into a fragment of code that accesses the evaluated
     /// recipe.
     // TODO(33422): Remove need for this by pushing stubs through SSA.
  
positive.code:       ]);
  
    jsAst.Literal _encodeSupertypeArgument(
        InterfaceType targetType, DartType supertypeArgument) {
      TypeEnvironmentStructure environment =
          FullTypeEnvironmentStructure(classType: targetType);
      TypeRecipe recipe = TypeExpressionRecipe(supertypeArgument);
      return _recipeEncoder.encodeRecipe(_emitter, environment, recipe);
    }
  }
  
negative.code:       ModularEmitter emitter, DartType dartType) {
      return _RecipeGenerator(this, emitter, null, TypeExpressionRecipe(dartType),
              hackTypeVariablesToAny: true)
          .run();
    }
  
    @override
    jsAst.Literal encodeDirectSupertypeRecipe(ModularEmitter emitter,
        InterfaceType declaringType, DartType supertypeArgument) {
      return _RecipeGenerator(
              this,
              emitter,
              FullTypeEnvironmentStructure(classType: declaringType),
              TypeExpressionRecipe(supertypeArgument),
              indexTypeVariablesOnDeclaringClass: true)
          .run();
    }
  
  