UFile (package = ) [public class ReturnSum {...]
    UClass (name = ReturnSum) [public class ReturnSum {...}]
        UMethod (name = foo) [public static fun foo() : int {...}]
            UBlockExpression [{...}] = Nothing
                UDeclarationsExpression [var x: int = 1 + 2] = Undetermined
                    ULocalVariable (name = x) [var x: int = 1 + 2]
                        UBinaryExpression (operator = +) [1 + 2] = 3
                            ULiteralExpression (value = 1) [1] = 1
                            ULiteralExpression (value = 2) [2] = 2
                UDeclarationsExpression [var y: int = 3 + 4] = Undetermined
                    ULocalVariable (name = y) [var y: int = 3 + 4]
                        UBinaryExpression (operator = +) [3 + 4] = 7
                            ULiteralExpression (value = 3) [3] = 3
                            ULiteralExpression (value = 4) [4] = 4
                UDeclarationsExpression [var z: int = x + y] = Undetermined
                    ULocalVariable (name = z) [var z: int = x + y]
                        UBinaryExpression (operator = +) [x + y] = 10 (depending on: (var x = 3), (var y = 7))
                            USimpleNameReferenceExpression (identifier = x) [x] = (var x = 3)
                            USimpleNameReferenceExpression (identifier = y) [y] = (var y = 7)
                UReturnExpression [return z + z] = Nothing
                    UBinaryExpression (operator = +) [z + z] = 20 (depending on: (var z = 10 (depending on: (var x = 3), (var y = 7))))
                        USimpleNameReferenceExpression (identifier = z) [z] = (var z = 10 (depending on: (var x = 3), (var y = 7)))
                        USimpleNameReferenceExpression (identifier = z) [z] = (var z = 10 (depending on: (var x = 3), (var y = 7)))
