 
                 @discardableResult
                 func run(function: Function, symbols: Symbols, arguments: [Any]) -> Any? {
-                    return run(function: function, symbols: symbols, stack: [Runtime(arguments: arguments)], callStack: [])
+                    return run(function: function, symbols: symbols, stack: [Runtime(arguments: arguments)], codePath: [])
                 }
             }\n\n
             """)

            case .function(let functionType):
                output.append("            case .\(name)(let a):\n")
                for (i, type) in ([name] + functionType.argumentTypes).enumerated() {
                    output.append("                try check(a.o\(i + 1), with: .\(type)Type, function: function, stack: stack, callStack: callStack)\n")
                }
                if let type = functionType.returnType {
                    output.append("                runtime.results[i] = .\(type)Type\n")

        for (name, type) in parser.types {
            if case .function(let functionType) = type {
                output.append("""
                        private func \(name)Value(_ a: Function.A, in stack: [Runtime<Any>], symbols: Symbols, codePath: IndexPath) -> \(name) {
                            let raw = value(a, in: stack)
                            if let function = raw as? Function {
                                let codePath = DecoderRuntime.codePath(for: a, in: codePath)
                                return { self.run(function: function, symbols: symbols, stack: stack + [Runtime(arguments: [
                    """)
                writeCommaSeparated(functionType.argumentTypes.indices, to: &output) {
                    output.append("$\($0)")
                }
                if let type = functionType.returnType {
                    output.append("])], codePath: codePath) as! \(nativeType(for: type)) }\n")
                } else {
                    output.append("])], codePath: codePath) }\n")
                }
                output.append("""
                            } else {
