anchor.diff:        ShadowTypeInferrer inferrer,
         Factory<Expression, Statement, Initializer, Type> factory) {
       inferrer.inferMetadataKeepingHelper(factory, variable.annotations);
  -    functionJudgment.infer(
  -        inferrer, factory, _hasImplicitReturnType, fileOffset);
  +    DartType returnContext = _hasImplicitReturnType
  +        ? (inferrer.strongMode ? null : const DynamicType())
  +        : function.returnType;
  +    functionJudgment.infer(inferrer, factory, null, returnContext, fileOffset);
       var inferredType = variable.type = function.functionType;
       inferrer.listener.functionDeclaration(
           variableJudgment.createBinder(inferrer), inferredType);
  
positive.code:     implements ExpressionJudgment {
    DartType inferredType;
  
    FunctionExpressionJudgment(FunctionNode function) : super(function);
  
    @override
    DartType infer<Expression, Statement, Initializer, Type>(
        ShadowTypeInferrer inferrer,
        Factory<Expression, Statement, Initializer, Type> factory,
        DartType typeContext) {
      inferredType = inferrer.inferLocalFunction(
          factory, function, typeContext, fileOffset, null);
      inferrer.listener.functionExpression(this, fileOffset, inferredType);
      return inferredType;
    }
  
negative.code:   bool _hasImplicitReturnType = false;
  
    FunctionDeclarationJudgment(
        VariableDeclarationJudgment variable, FunctionNodeJudgment function)
        : super(variable, function);
  
    VariableDeclarationJudgment get variableJudgment => variable;
  