//===================
var v_0 = "foo";
var v_1 = {p_0: "foo"};
v_1.p_0 = 1.1;
var v_2 = {p_0: "foo", p_1: 1.1};
var v_3 = {p_0: "foo"};
var v_4 = v_2.p_1;
var v_5: {p_0?: {p_0({p_0: {p_0: string}}): {p_0: string}}, p_1: number} = v_1.p_0;
var v_6 = v_2.p_1;
var v_7 = f1;
var v_8 = "foo";
var v_9 = 1.1;
var v_10 = v_6;
var v_11: {p_0: number} = v_3.p_0;
assert_type(v_5, {p_0: {p_0: null}, p_1: 1.1});
assert_type(v_11, {p_0: 1.1});
function f1(param: {p_0: {p_0: string}}): {p_0: string} {
  assert_type(param, {p_0: {p_0: "foo"}});
  return {p_0: "foo"};
}


/*
Error: 
Type_error:
Error: -:35
 35: v_1.p_0 = 1.1;
               ^^^ number. This type is incompatible with
 34: var v_1 = {p_0: "foo"};
                     ^^^^^ string

Error: -:39
 39: var v_5: {p_0?: {p_0({p_0: {p_0: string}}): {p_0: string}}, p_1: number} = v_1.p_0;
                                                                                ^^^^^^^ number. This type is incompatible with
 39: var v_5: {p_0?: {p_0({p_0: {p_0: string}}): {p_0: string}}, p_1: number} = v_1.p_0;
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ object type

Error: -:45
 45: var v_11: {p_0: number} = v_3.p_0;
                               ^^^^^^^ string. This type is incompatible with
 45: var v_11: {p_0: number} = v_3.p_0;
               ^^^^^^^^^^^^^ object type


Found 3 errors

*/
//===================
var v_12 = 1.1;
var v_13 = {p_0: "foo", p_1: {p_0: "foo"}};
var v_14: (number) => {p_0: string} = 1.1;
v_13.p_1 = {p_0: "foo"};
var v_15 = {p_0: "foo"};
var v_16: string = {p_0: {p_0: "foo", p_1: {p_0: "foo"}}};
var v_17 = v_16;
v_15.p_0 = v_16;
var v_18 = {p_0: "foo", p_1: {p_0: "foo"}};
var v_19 = {p_0: {p_0: {p_0: "foo", p_1: {p_0: "foo"}}}, p_1: v_14};
v_15.p_0 = v_17;
var v_20 = v_15.p_0;
v_13.p_0 = "foo";
var v_21 = v_12;
var v_22 = {p_0: "foo"};
v_15.p_0 = v_16;
var v_23 = v_16;
v_15.p_0 = v_13.p_0;

/*
Error: 
Type_error:
Error: -:35
 35: var v_14: (number) => {p_0: string} = 1.1;
                                           ^^^ number. This type is incompatible with
 35: var v_14: (number) => {p_0: string} = 1.1;
               ^^^^^^^^^^^^^^^^^^^^^^^^^ function type

Error: -:38
 38: var v_16: string = {p_0: {p_0: "foo", p_1: {p_0: "foo"}}};
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ object literal. This type is incompatible with
 38: var v_16: string = {p_0: {p_0: "foo", p_1: {p_0: "foo"}}};
               ^^^^^^ string


Found 2 errors

*/
//===================
var v_24 = {p_0: 1.1, p_1: 1.1};
var v_25: string = "foo";
var v_26 = "foo";
var v_27 = {p_0: {p_0: f20, p_1: f20}, p_1: f20};
var v_28 = {p_0: {p_0: f20, p_1: f20}, p_1: f20};
var v_29 = {p_0: {p_0: f20, p_1: f20}, p_1: f20};
v_27.p_1({p_0: f20, p_1: f20});
var v_30 = {p_0: v_27.p_1, p_1: v_28};
var v_31 = v_26;
var v_32 = v_24.p_1;
var v_33 = v_30.p_0;
v_28.p_1 = {p_0: 1.1, p_1: 1.1};
var v_34 = "foo";
function f20(param: number): {p_0: number, p_1: number} {
  assert_type(param, 1.1);
  return {p_0: 1.1, p_1: 1.1};
}
function f29(
  param: (
    {
      p_0: number,
      p_1?: ({p_0: number, p_1: number}) => {p_0: number, p_1: number},
    },
  ) => ({p_0: number, p_1: number}) => {p_0: number, p_1: number},
): {p_0?: (number) => {p_0: number, p_1: number}} {
  return {p_0: v_27.p_1, p_1: v_28};
}


/*
Error: 
Type_error:
Error: -:39
 39: v_27.p_1({p_0: f20, p_1: f20});
              ^^^^^^^^^^^^^^^^^^^^ object literal. This type is incompatible with the expected param type of
 46: function f20(param: number): {p_0: number, p_1: number} {
                         ^^^^^^ number


Found 1 error

*/
