Stop pointer parameters leaking value-pool slots
Create structure parameters before allocating their representation, then keep pointer references in the call variable's inline slot. Add an 8,000-call regression and document the remaining by-value structure escape limitation. Co-authored-by: andrew <andrew@aklabs.net> Co-authored-by: OpenAI Codex (GPT-5) <noreply@openai.com>
This commit is contained in:
@@ -266,6 +266,13 @@ The function saw 99; the caller still has 5. To change a caller's record on purp
|
||||
a pointer — `DEF POKEIT(P@ AS PTR TO CRATE)` — and reach through it with `->`. Neither is
|
||||
a special rule: both fall out of the parameter being assigned like any other variable.
|
||||
|
||||
A pointer parameter's own reference is kept in the call variable's inline slot, so repeated
|
||||
calls do not spend the value pool. Its target remains the caller's structure. A by-value
|
||||
structure parameter is different: its copied slots remain in the value pool because
|
||||
`POINT Q@ AT B@` may retain a pointer to that copy after the function returns. Until escape
|
||||
analysis can distinguish that case, **do not call a by-value structure-parameter function in
|
||||
a loop**; bind a host global and rebind it per instance instead.
|
||||
|
||||
## What is checked, and what is not
|
||||
|
||||
A field name is checked against the set the type declared, and the refusal lists the
|
||||
|
||||
Reference in New Issue
Block a user