             if functionType.argumentTypes.count > 0 {
                 output.append("            case .\(name)(let a):\n")
                 for (i, type) in functionType.argumentTypes.enumerated() {
-                    output.append("                try check(a.o\(i + 1), with: .\(type)Type, step: i, function: function, stack: stack, stepStack: stepStack)\n")
+                    output.append("                try check(a.o\(i + 1), with: .\(type)Type, function: function, stack: stack, stepStack: stepStack)\n")
                 }
             } else {
                 output.append("            case .\(name):\n")

                    if let returnType = runtime.returnValue {
                        let stepStack = stepStack.appending(function.steps.count)
                        guard function.hasReturnStep else { throw DecodeError(cause: .returnMissing, stack: stepStack) }
                        try check(function.returnStep, with: returnType, step: function.steps.count, function: function, stack: stack, stepStack: stepStack)
                    } else if function.hasReturnStep { throw DecodeError(cause: .returnMismatch, stack: stepStack) }
                }
                

            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, stepStack: stepStack)\n")
                }
                if let type = functionType.returnType {
                    output.append("                runtime.results[i] = .\(type)Type\n")
