Hi there!
---
After parse:
---
Found Expression:
{
  "type": "Identifier",
  "name": "GoodGreeter"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "name"
}
---
Found Expression:
{
  "type": "ETSTypeReference",
  "part": {
    "type": "ETSTypeReferencePart",
    "name": {
      "type": "Identifier",
      "name": "string"
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReferencePart",
  "name": {
    "type": "Identifier",
    "name": "string"
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "string"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "b"
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "fooExample"
}
---
Found Expression:
{
  "type": "FunctionExpression",
  "function": {
    "type": "ScriptFunction",
    "id": {
      "type": "Identifier",
      "name": "fooExample"
    },
    "generator": false,
    "async": false,
    "expression": false,
    "params": [],
    "returnType": {
      "type": "ETSPrimitiveType"
    },
    "body": {
      "type": "BlockStatement",
      "statements": []
    }
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "fooExample"
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "$_invoke"
}
---
Found Expression:
{
  "type": "FunctionExpression",
  "function": {
    "type": "ScriptFunction",
    "id": {
      "type": "Identifier",
      "name": "$_invoke"
    },
    "generator": false,
    "async": false,
    "expression": false,
    "params": [],
    "returnType": {
      "type": "ETSPrimitiveType"
    },
    "body": {
      "type": "BlockStatement",
      "statements": [
        {
          "type": "ReturnStatement",
          "argument": {
            "type": "NumberLiteral",
            "value": 5
          }
        }
      ]
    }
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "$_invoke"
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "NumberLiteral",
  "value": 5
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "constructor"
}
---
Found Expression:
{
  "type": "FunctionExpression",
  "function": {
    "type": "ScriptFunction",
    "id": {
      "type": "Identifier",
      "name": "constructor"
    },
    "generator": false,
    "async": false,
    "expression": false,
    "params": [],
    "body": {
      "type": "BlockStatement",
      "statements": [
        {
          "type": "ExpressionStatement",
          "expression": {
            "type": "AssignmentExpression",
            "operator": "=",
            "left": {
              "type": "MemberExpression",
              "object": {
                "type": "ThisExpression"
              },
              "property": {
                "type": "Identifier",
                "name": "name"
              },
              "computed": false,
              "optional": false
            },
            "right": {
              "type": "StringLiteral",
              "value": "hello"
            }
          }
        },
        {
          "type": "ExpressionStatement",
          "expression": {
            "type": "AssignmentExpression",
            "operator": "=",
            "left": {
              "type": "MemberExpression",
              "object": {
                "type": "ThisExpression"
              },
              "property": {
                "type": "Identifier",
                "name": "b"
              },
              "computed": false,
              "optional": false
            },
            "right": {
              "type": "NumberLiteral",
              "value": 7
            }
          }
        }
      ]
    }
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "constructor"
}
---
Found Expression:
{
  "type": "AssignmentExpression",
  "operator": "=",
  "left": {
    "type": "MemberExpression",
    "object": {
      "type": "ThisExpression"
    },
    "property": {
      "type": "Identifier",
      "name": "name"
    },
    "computed": false,
    "optional": false
  },
  "right": {
    "type": "StringLiteral",
    "value": "hello"
  }
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "ThisExpression"
  },
  "property": {
    "type": "Identifier",
    "name": "name"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "ThisExpression"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "name"
}
---
Found Expression:
{
  "type": "StringLiteral",
  "value": "hello"
}
---
Found Expression:
{
  "type": "AssignmentExpression",
  "operator": "=",
  "left": {
    "type": "MemberExpression",
    "object": {
      "type": "ThisExpression"
    },
    "property": {
      "type": "Identifier",
      "name": "b"
    },
    "computed": false,
    "optional": false
  },
  "right": {
    "type": "NumberLiteral",
    "value": 7
  }
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "ThisExpression"
  },
  "property": {
    "type": "Identifier",
    "name": "b"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "ThisExpression"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "b"
}
---
Found Expression:
{
  "type": "NumberLiteral",
  "value": 7
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "a"
}
---
Found Expression:
{
  "type": "CallExpression",
  "callee": {
    "type": "Identifier",
    "name": "GoodGreeter"
  },
  "arguments": [],
  "optional": false
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "GoodGreeter"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "c",
  "typeAnnotation": {
    "type": "ETSTypeReference",
    "part": {
      "type": "ETSTypeReferencePart",
      "name": {
        "type": "Identifier",
        "name": "GoodGreeter"
      }
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReference",
  "part": {
    "type": "ETSTypeReferencePart",
    "name": {
      "type": "Identifier",
      "name": "GoodGreeter"
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReferencePart",
  "name": {
    "type": "Identifier",
    "name": "GoodGreeter"
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "GoodGreeter"
}
---
Found Expression:
{
  "type": "ETSNewClassInstanceExpression",
  "typeReference": {
    "type": "ETSTypeReference",
    "part": {
      "type": "ETSTypeReferencePart",
      "name": {
        "type": "Identifier",
        "name": "GoodGreeter"
      }
    }
  },
  "arguments": []
}
---
Found Expression:
{
  "type": "ETSTypeReference",
  "part": {
    "type": "ETSTypeReferencePart",
    "name": {
      "type": "Identifier",
      "name": "GoodGreeter"
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReferencePart",
  "name": {
    "type": "Identifier",
    "name": "GoodGreeter"
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "GoodGreeter"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "main"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "m",
  "typeAnnotation": {
    "type": "ETSPrimitiveType"
  }
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "NumberLiteral",
  "value": 1
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "n",
  "typeAnnotation": {
    "type": "ETSPrimitiveType"
  }
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "NumberLiteral",
  "value": 2
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "f",
  "typeAnnotation": {
    "type": "ETSPrimitiveType"
  }
}
---
Found Expression:
{
  "type": "ETSPrimitiveType"
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "Identifier",
    "name": "c"
  },
  "property": {
    "type": "Identifier",
    "name": "b"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "c"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "b"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "k",
  "typeAnnotation": {
    "type": "ETSTypeReference",
    "part": {
      "type": "ETSTypeReferencePart",
      "name": {
        "type": "Identifier",
        "name": "string"
      }
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReference",
  "part": {
    "type": "ETSTypeReferencePart",
    "name": {
      "type": "Identifier",
      "name": "string"
    }
  }
}
---
Found Expression:
{
  "type": "ETSTypeReferencePart",
  "name": {
    "type": "Identifier",
    "name": "string"
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "string"
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "Identifier",
    "name": "c"
  },
  "property": {
    "type": "Identifier",
    "name": "name"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "c"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "name"
}
---
Found Expression:
{
  "type": "CallExpression",
  "callee": {
    "type": "MemberExpression",
    "object": {
      "type": "Identifier",
      "name": "console"
    },
    "property": {
      "type": "Identifier",
      "name": "log"
    },
    "computed": false,
    "optional": false
  },
  "arguments": [
    {
      "type": "BinaryExpression",
      "operator": "+",
      "left": {
        "type": "Identifier",
        "name": "m"
      },
      "right": {
        "type": "Identifier",
        "name": "n"
      }
    }
  ],
  "optional": false
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "Identifier",
    "name": "console"
  },
  "property": {
    "type": "Identifier",
    "name": "log"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "console"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "log"
}
---
Found Expression:
{
  "type": "BinaryExpression",
  "operator": "+",
  "left": {
    "type": "Identifier",
    "name": "m"
  },
  "right": {
    "type": "Identifier",
    "name": "n"
  }
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "m"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "n"
}
---
Found Expression:
{
  "type": "CallExpression",
  "callee": {
    "type": "MemberExpression",
    "object": {
      "type": "Identifier",
      "name": "console"
    },
    "property": {
      "type": "Identifier",
      "name": "log"
    },
    "computed": false,
    "optional": false
  },
  "arguments": [
    {
      "type": "Identifier",
      "name": "k"
    }
  ],
  "optional": false
}
---
Found Expression:
{
  "type": "MemberExpression",
  "object": {
    "type": "Identifier",
    "name": "console"
  },
  "property": {
    "type": "Identifier",
    "name": "log"
  },
  "computed": false,
  "optional": false
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "console"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "log"
}
---
Found Expression:
{
  "type": "Identifier",
  "name": "k"
}
---
After check:
---
After lowerings:
---
