             case .function(let functionType):
                 output.append("            case .\(name)(let a):\n                ")
                 if functionType.returnType != nil {
-                    output.append("runtime.results[i] = \(name)Value(a.o1, in: stack, symbols: symbols)(")
+                    output.append("runtime.results[i] = \(name)Value(a.o1, in: stack, symbols: symbols, stepStack: stepStack)(")
                 } else {
-                    output.append("\(name)Value(a.o1, in: stack, symbols: symbols)(")
+                    output.append("\(name)Value(a.o1, in: stack, symbols: symbols, stepStack: stepStack)(")
                 }
                 writeCommaSeparated(functionType.argumentTypes.enumerated(), to: &output) {
                     if case .function? = parser.typesMap[$0.element] {
-                        output.append("\($0.element)Value(a.o\($0.offset + 2), in: stack, symbols: symbols)")
+                        output.append("\($0.element)Value(a.o\($0.offset + 2), in: stack, symbols: symbols, stepStack: stepStack)")
                     } else {
                         output.append("value(a.o\($0.offset + 2), in: stack) as! \(nativeType(for: $0.element))")
                     }

                        let runtime = stack[Int(a.level)]
                        if let t = runtime.results[Int(a.step)] {
                            if t != type { throw DecodeError(cause: .stepMismatch, stack: stepStack) }
                        } else {
                            guard a.step < function.steps.count, case .functionRaw(let f)? = function.steps[Int(a.step)].producer else { throw DecodeError(cause: .stepMissing, stack: stepStack) }
                            switch type {\n

                    output.append("$\($0)")
                }
                if let type = functionType.returnType {
                    output.append("])], stepStack: stepStack) as! \(nativeType(for: type)) }\n")
                } else {
                    output.append("])], stepStack: stepStack) }\n")
                }
                output.append("""
                            } else {
