diff options
Diffstat (limited to 'proc.h')
| -rw-r--r-- | proc.h | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -0,0 +1,51 @@ +#ifndef PROC_H +#define PROC_H + +#include "ir.h" + +typedef struct NameBinding { + struct NameBinding *prev; + LexSpan src_pos; + Str name; + Node *node; +} NameBinding; + +typedef struct ScopeFrame { + struct ScopeFrame *prev; + NameBinding *latest; +} ScopeFrame; + +typedef struct { + Arena *arena; + ScopeFrame *tail, *free_scope; + NameBinding *free_bind; +} Scope; + +typedef struct { + Str name; + Node *node; +} ScopeName; + +typedef DYNARR(ScopeName) ScopeNameList; + +typedef struct { + Str name; + Type ret_type; + Arena perm, scratch; + NodePool pool; + Graph graph; + Scope scope; +} Proc; + +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 |
