diff options
| -rw-r--r-- | proc.h | 39 |
1 files changed, 25 insertions, 14 deletions
@@ -2,6 +2,7 @@ #define PROC_H #include "ir.h" +#include "xar.h" typedef struct NameBinding { struct NameBinding *prev; @@ -16,17 +17,35 @@ typedef struct ScopeFrame { } 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 |
