summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
authorWormHeamer2025-10-21 06:22:55 -0400
committerWormHeamer2025-10-21 06:22:55 -0400
commit9fb0d728d0440fc32394b6286ecadf2f4ec35fa1 (patch)
treea10892b5d94db1c6dcf5d79045680428c42aadcf /proc.c
parentb44e40db00906982485d98bebc2e3bed6c9783b9 (diff)
cleanup
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/proc.c b/proc.c
index 7e983ca..1fe00a8 100644
--- a/proc.c
+++ b/proc.c
@@ -1,5 +1,6 @@
#include <string.h>
#include "proc.h"
+#include "peephole.h"
/* procedures */
@@ -93,6 +94,7 @@ NameBinding *scope_bind(Scope *scope, Str name, Node *value, LexSpan pos, Graph
} else {
b = new(scope->arena, NameBinding);
}
+ b->nestlvl = scope->nestlvl;
b->name = name;
b->prev = scope->tail->latest;
scope->tail->latest = b;
@@ -152,6 +154,7 @@ void scope_changelist_pop(Scope *scope, Graph *g) {
}
}
+#include <assert.h>
#include <stdio.h>
/* TODO: implement merge, probably will need scratch arena to build up
* a Xar of something like struct { NameBinding *b; Node *y, *n; }. if
@@ -162,7 +165,7 @@ typedef struct {
NameBinding *b;
Node *y, *n;
} MergeChange;
-void scope_changelist_merge(Scope *scope, ScopeChangeList *y, ScopeChangeList *n, Node *region, Graph *graph, Arena *scratch) {
+void scope_changelist_merge(Scope *scope, Lexer *l, ScopeChangeList *y, ScopeChangeList *n, Node *region, Graph *graph, Arena *scratch) {
MergeChange *m = new_arr(scratch, MergeChange, y->n + n->n);
unsigned c = 0;
for (unsigned i = 0; i < y->n; i++) {
@@ -187,7 +190,11 @@ void scope_changelist_merge(Scope *scope, ScopeChangeList *y, ScopeChangeList *n
c++;
next:
}
- fprintf(stderr, "%u\n", c);
+ for (unsigned i = 0; i < c; i++) {
+ Node *phi = node_new(graph, N_PHI, region, m[i].y, m[i].n);
+ phi = node_peephole(phi, graph, l);
+ scope_update(scope, m[i].b, phi, graph);
+ }
}
void scope_changelist_discard(ScopeChangeList *l, Graph *g) {