| 11 | } |
| 12 | |
| 13 | func (pfg *PHPFuncGenerator) generate(fn phpFunction) string { |
| 14 | var builder strings.Builder |
| 15 | |
| 16 | paramInfo := pfg.paramParser.analyzeParameters(fn.Params) |
| 17 | |
| 18 | funcName := NamespacedName(pfg.namespace, fn.Name) |
| 19 | _, _ = fmt.Fprintf(&builder, "PHP_FUNCTION(%s)\n{\n", funcName) |
| 20 | |
| 21 | if decl := pfg.paramParser.generateParamDeclarations(fn.Params); decl != "" { |
| 22 | builder.WriteString(decl + "\n") |
| 23 | } |
| 24 | |
| 25 | builder.WriteString(pfg.paramParser.generateParamParsing(fn.Params, paramInfo.RequiredCount) + "\n") |
| 26 | |
| 27 | builder.WriteString(pfg.generateGoCall(fn) + "\n") |
| 28 | |
| 29 | if returnCode := pfg.generateReturnCode(fn.ReturnType); returnCode != "" { |
| 30 | builder.WriteString(returnCode + "\n") |
| 31 | } |
| 32 | |
| 33 | builder.WriteString("}\n\n") |
| 34 | |
| 35 | return builder.String() |
| 36 | } |
| 37 | |
| 38 | func (pfg *PHPFuncGenerator) generateGoCall(fn phpFunction) string { |
| 39 | callParams := pfg.paramParser.generateGoCallParams(fn.Params) |