From ac15eb8b0ca41d502d8a26c360ff65f2b4a18d88 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Tue, 2 Sep 2025 01:10:48 -0400 Subject: begin work on tracking scope changes instead of merging --- proc.h | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/proc.h b/proc.h index ec3687f..0aaa5dc 100644 --- a/proc.h +++ b/proc.h @@ -2,6 +2,7 @@ #define PROC_H #include "ir.h" +#include "xar.h" typedef struct NameBinding { struct NameBinding *prev; @@ -15,18 +16,36 @@ typedef struct ScopeFrame { NameBinding *latest; } ScopeFrame; +typedef struct { + Str name; + Value *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; + XAR(ScopeChange); +} ScopeChangeList; + typedef struct { Arena *arena; ScopeFrame *tail, *free_scope; NameBinding *free_bind; } Scope; -typedef struct { - Str name; - Node *node; -} ScopeName; - -typedef DYNARR(ScopeName) ScopeNameList; +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); typedef struct { Str name; @@ -40,12 +59,4 @@ typedef struct { void proc_init(Proc *proc, Str name); void proc_free(Proc *proc); -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); -void scope_collect(Scope *scope, Graph *g, ScopeNameList *nl, Arena *arena); -void scope_uncollect(Scope *scope, Graph *g, ScopeNameList *nl); - #endif -- cgit v1.2.3