{"record":{"id":"632bdd569cc158f6","repo":"apple/pkl","slug":"invalidconstobjectmembermodifier","errorCode":"invalidConstObjectMemberModifier","errorMessage":"invalidConstObjectMemberModifier","messagePattern":"invalidConstObjectMemberModifier","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java","lineNumber":2609,"sourceCode":"      }\n      previous = member.span();\n    }\n  }\n\n  private ObjectMember doVisitObjectProperty(ObjectProperty prop) {\n    var modifierNodes = prop.getModifiers();\n    var propertyName = prop.getIdentifier();\n    var modifiers =\n        doVisitModifiers(\n            modifierNodes, VmModifier.VALID_OBJECT_MEMBER_MODIFIERS, \"invalidObjectMemberModifier\");\n    if (VmModifier.isConst(modifiers) && !VmModifier.isLocal(modifiers)) {\n      @SuppressWarnings(\"OptionalGetWithoutIsPresent\")\n      var constModifierCtx =\n          modifierNodes.stream()\n              .filter((it) -> it.getValue() == ModifierValue.CONST)\n              .findFirst()\n              .get();\n      throw exceptionBuilder()\n          .evalError(\"invalidConstObjectMemberModifier\")\n          .withSourceSection(createSourceSection(constModifierCtx))\n          .build();\n    }\n    return doVisitObjectProperty(\n        createSourceSection(prop),\n        createSourceSection(propertyName),\n        modifiers,\n        propertyName.getValue(),\n        prop.getTypeAnnotation(),\n        prop.getExpr(),\n        prop.getBodyList());\n  }\n\n  private ObjectMember doVisitObjectProperty(\n      Node node,\n      List<? extends Modifier> modifierNodes,\n      Identifier propertyName,","sourceCodeStart":2591,"sourceCodeEnd":2627,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java#L2591-L2627","documentation":"The `const` modifier is not permitted on this kind of object member. When visiting an object property in this context (first overload, line 2609), the builder validates the modifier list and, if it contains `ModifierValue.CONST` where disallowed, throws after locating the offending `const` token for the source section.","triggerScenarios":"Writing `const` on an object property/member form where the grammar context forbids it — e.g. a member of an amending object or an object member that is not a local/module-level definition, such as `obj { const x = 1 }` in a context that only allows plain members.","commonSituations":"Copy-pasting a module-level `const x = ...` into an object body; adding `const` inside an override/amendment to try to freeze a value; confusing Pkl's `const` (definition-site immutability for definitions) with object-member semantics.","solutions":["Remove the `const` modifier from the object member.","Define the value as a module-level `const` and reference it inside the object.","If immutability within the object is the goal, rely on Pkl's default single-assignment property semantics — no modifier is needed."],"exampleFix":"// before\nobj {\n  const x = 42\n}\n// after\nx = 42\n// or at module level\nconst x = 42\nobj { y = x }","handlingStrategy":"validation","validationCode":"// strip 'const' from inside object bodies before evaluation\nif (/\\{[^}]*\\bconst\\b[^}]*=/s.test(src))\n  throw new Error('const is not a valid object member modifier; use it at module level');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use `const` only for module-level (and class-level) definitions.","Inside objects, rely on default single-assignment semantics — no modifier needed.","Use `local` for hidden object-level helpers."],"tags":["pkl","modifiers","object-members","compile-error"],"backgroundTag":"invalid-modifier-usage","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}