From 3ca04326ddb36b8551acf417ef195d1572bb3d47 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Tue, 21 Oct 2025 05:47:19 -0400 Subject: almost there... --- proc.h | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'proc.h') diff --git a/proc.h b/proc.h index 0aaa5dc..3ef49a9 100644 --- a/proc.h +++ b/proc.h @@ -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; -- cgit v1.2.3