{"record":{"id":"42d520d0efeb292e","repo":"apple/pkl","slug":"toomanyfunctionparameters","errorCode":"tooManyFunctionParameters","errorMessage":"tooManyFunctionParameters","messagePattern":"tooManyFunctionParameters","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java","lineNumber":1335,"sourceCode":"              sourceSection,\n              scope.getQualifiedName(),\n              t,\n              bodyExpr,\n              b == null ? -1 : b.slot(),\n              bindingExpr);\n        });\n  }\n\n  @Override\n  public ExpressionNode visitFunctionLiteralExpr(FunctionLiteralExpr expr) {\n    var sourceSection = createSourceSection(expr);\n    var params = expr.getParameterList();\n    var descriptorBuilderAndBindings = createFrameDescriptorBuilderAndSlotVariables(params);\n    var paramCount = params.getParameters().size();\n    var descriptorBuilder = descriptorBuilderAndBindings.first;\n    var bindings = descriptorBuilderAndBindings.second;\n    if (paramCount > 5) {\n      throw exceptionBuilder()\n          .evalError(\"tooManyFunctionParameters\")\n          .withSourceSection(sourceSection)\n          .build();\n    }\n\n    var isCustomThisScope = symbolTable.getCurrentScope().isCustomThisScope();\n\n    return symbolTable.enterLambda(\n        bindings,\n        descriptorBuilder,\n        scope -> {\n          var exprNode = visitExpr(expr.getExpr());\n          var functionNode =\n              new UnresolvedFunctionNode(\n                  language,\n                  scope.buildFrameDescriptor(),\n                  new Lambda(sourceSection, scope.getQualifiedName()),\n                  paramCount,","sourceCodeStart":1317,"sourceCodeEnd":1353,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java#L1317-L1353","documentation":"Pkl function types and lambdas support at most 5 parameters. When the builder constructs a function node whose parameter list exceeds 5, it throws tooManyFunctionParameters — enforced because of frame-descriptor and call-convention limits in the runtime.","triggerScenarios":"Declaring a function or lambda with 6+ parameters, e.g. `(a, b, c, d, e, f) -> ...`, or a typed function type `function6` usage.","commonSituations":"Porting code from languages with high-arity lambdas, or defining a callback with many config knobs as separate parameters.","solutions":["Reduce arity to 5 or fewer by grouping related parameters into an object or listing.","Accept a single config object (`(ctx) -> ...`) and read fields from it.","Split the function into smaller composed functions."],"exampleFix":"// before\n(a, b, c, d, e, f) -> a + b + c + d + e + f\n// after\n(ctx) -> ctx.a + ctx.b + ctx.c + ctx.d + ctx.e + ctx.f","handlingStrategy":"validation","validationCode":"// Reject high-arity lambdas at generation time:\nif (params.length > 5) throw new Error('Pkl lambdas support at most 5 parameters');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Cap function/lambda parameter counts at 5 by design.","Group many related options into a single config-object parameter."],"tags":["pkl","function","arity"],"backgroundTag":"too-many-parameters","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}