library test;
import self as self;
import "dart:core" as core;

static method test() → void {
  {
    function f<S extends core::Object = dynamic>(core::int x) → core::String
      return null;
    <S extends core::Object = dynamic>(core::int) → core::String v = f;
    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
    v = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::String'.
    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
                                                                ^" in (<T extends core::Object = dynamic>(core::String x) → core::String => "hello") as{TypeError} <S extends core::Object = dynamic>(core::int) → core::String;
    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
                                                                           ^" in 3 as{TypeError} core::String;
    v = <T extends core::Object = dynamic>(core::int x) → core::String {
      return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                              ^" in 3 as{TypeError} core::String;
    };
  }
  {
    function f<S extends core::Object = dynamic>(core::int x) → core::String
      return null;
    <S extends core::Object = dynamic>(core::int) → core::String v = f;
    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
    v = <T extends core::Object = dynamic>(core::int x) → core::String => "hello";
    v = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
        3;
        ^" in 3 as{TypeError} core::String;
    v = <T extends core::Object = dynamic>(core::int x) → core::String {
      return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
                                              ^" in 3 as{TypeError} core::String;
    };
    v = <T extends core::Object = dynamic>(core::int x) → core::String {
      return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
      return /*error:RETURN_OF_INVALID_TYPE*/ x;
                                              ^" in x as{TypeError} core::String;
    };
  }
  {
    function f<S extends core::Object = dynamic>(core::int x) → core::List<core::String>
      return null;
    <S extends core::Object = dynamic>(core::int) → core::List<core::String> v = f;
    v = <T extends core::Object = dynamic>(core::int x) → core::Null => null;
    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>["hello"];
    v = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object = dynamic>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object = dynamic>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
                                                                      ^" in (<T extends core::Object = dynamic>(core::String x) → core::List<core::String> => <core::String>["hello"]) as{TypeError} <S extends core::Object = dynamic>(core::int) → core::List<core::String>;
    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> => <core::String>[let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                     ^" in 3 as{TypeError} core::String];
    v = <T extends core::Object = dynamic>(core::int x) → core::List<core::String> {
      return <core::String>[let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
                                                   ^" in 3 as{TypeError} core::String];
    };
  }
  {
    function int2int<S extends core::Object = dynamic>(core::int x) → core::int
      return null;
    function int2String<T extends core::Object = dynamic>(core::int x) → core::String
      return null;
    function string2String<T extends core::Object = dynamic>(core::String x) → core::String
      return null;
    <S extends core::Object = dynamic>(core::int) → core::int x = int2int;
    x = <T extends core::Object = dynamic>(core::int x) → core::int => x;
    x = <T extends core::Object = dynamic>(core::int x) → core::int => x.{core::num::+}(1);
    <T extends core::Object = dynamic>(core::int) → core::String y = int2String;
    y = <T extends core::Object = dynamic>(core::int x) → core::String => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
        x;
        ^" in x as{TypeError} core::String;
    y = <T extends core::Object = dynamic>(core::int x) → core::String => (let final core::int #t11 = x in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
Try correcting the name to the name of an existing method, or defining a method named 'substring'.
        .substring(3);
         ^^^^^^^^^") as{TypeError} core::String;
    <T extends core::Object = dynamic>(core::String) → core::String z = string2String;
    z = <T extends core::Object = dynamic>(core::String x) → core::String => x.{core::String::substring}(3);
  }
}
static method main() → dynamic {}
