diff options
| author | WormHeamer | 2025-10-21 05:47:19 -0400 |
|---|---|---|
| committer | WormHeamer | 2025-10-21 05:47:19 -0400 |
| commit | 3ca04326ddb36b8551acf417ef195d1572bb3d47 (patch) | |
| tree | 5b9d1d7bf90fcf60f883ca7ebe864b3a2281e2a5 /proc.h | |
| parent | ac15eb8b0ca41d502d8a26c360ff65f2b4a18d88 (diff) | |
almost there...
Diffstat (limited to 'proc.h')
| -rw-r--r-- | proc.h | 28 |
1 files changed, 15 insertions, 13 deletions
@@ -9,6 +9,7 @@ typedef struct NameBinding { LexSpan src_pos; Str name; Node *node; + unsigned nestlvl; } NameBinding; typedef struct ScopeFrame { @@ -17,35 +18,36 @@ typedef struct ScopeFrame { } ScopeFrame; typedef struct { - Str name; - Value *from, *to; + NameBinding *bind; + Node *from, *to; LexSpan from_pos, to_pos; } ScopeChange; -typedef XAR(ScopeChange) ScopeChangeList; - -typedef struct { - Str name; - Value *from, *to; - LexSpan from_pos, to_pos; -} ScopeChange; - -typedef struct { - Arena *arena; +typedef struct ScopeChangeList { XAR(ScopeChange); + struct ScopeChangeList *prev; + Arena *arena; } ScopeChangeList; typedef struct { Arena *arena; ScopeFrame *tail, *free_scope; NameBinding *free_bind; + ScopeChangeList *changes; + unsigned nestlvl; } Scope; ScopeFrame *scope_push(Scope *scope); ScopeFrame *scope_pop(Scope *scope, Graph *g); NameBinding *scope_find(Scope *scope, Str name); NameBinding *scope_bind(Scope *scope, Str name, Node *value, LexSpan pos, Graph *g); -NameBinding *scope_update(NameBinding *b, Node *to, Graph *g); +NameBinding *scope_update(Scope *scope, NameBinding *b, Node *to, Graph *g); + +void scope_changelist_update(ScopeChangeList *l, NameBinding *b, Node *from, Node *to, Graph *g); +void scope_changelist_push(Scope *scope, ScopeChangeList *l, Arena *a); +void scope_changelist_pop(Scope *scope, Graph *g); +void scope_changelist_merge(Scope *scope, ScopeChangeList *y, ScopeChangeList *n, Node *region, Graph *graph, Arena *scratch); +void scope_changelist_discard(ScopeChangeList *l, Graph *g); typedef struct { Str name; |
