diff options
| -rw-r--r-- | pez.c | 15 | ||||
| -rw-r--r-- | pez.h | 1 | ||||
| -rw-r--r-- | test.pez | 1 |
3 files changed, 12 insertions, 5 deletions
@@ -475,14 +475,21 @@ delproto(PezContext *cx, Proto *pr) } static void -closeups(PezContext *cx, Val *vals) +closeups(PezContext *cx, Val *ptr) { - for (Upval *up = cx->openup, *next; up; up = next) { + for (Upval *up = cx->openup, *prev = NULL, *next; up; up = next) { next = up->nextup; - if (up->ptr >= vals) { - cx->openup = next; + if (up->ptr >= ptr) { + if (prev) { + prev->nextup = next; + } + if (up == cx->openup) { + cx->openup = next; + } up->slot = *up->ptr; up->ptr = &up->slot; + } else { + prev = up; } } } @@ -20,6 +20,7 @@ enum { PEZ_TTuple, PEZ_TRecord, PEZ_TArray, + PEZ_TDilambda }; typedef enum PezError { @@ -7,7 +7,6 @@ @Array2d: {[w, h] @data: array#fill[w * h, 0] - @w = w dilambda[ {[x, y] data[x + (y * w)] }, {[x, y, new] data[x + (y * w)] = new } |