X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Foceani.mdc;h=76c8c9b4efd96414511685e620c4d7b7e849acbd;hp=6c5b4466a229ec73a63ac565e5e5300cbd43b740;hb=275179e690be95edba2948803e350e161c7d7c7c;hpb=20651d69e0f672461c2c458ae07fe98d0c1c6c28 diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index 6c5b446..76c8c9b 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -1153,6 +1153,7 @@ all pending-scope variables become conditionally scoped. v->scope = InScope; v->in_scope = c->in_scope; c->in_scope = v; + ## variable init return v; } @@ -1299,9 +1300,15 @@ the frame needs to be reallocated as it grows so it can store those values. The local frame doesn't get values until the interpreted phase is started, so there is no need to allocate until the size is known. +We initialize the `frame_pos` to an impossible value, so that we can +tell if it was set or not later. + ###### variable fields - short frame_pos; - short global; + short frame_pos; + short global; + +###### variable init + v->frame_pos = -1; ###### parse context @@ -1538,10 +1545,12 @@ also want to know what sort of bracketing to use. if (e->to_free) { struct variable *v; do_indent(indent, "/* FREE"); - for (v = e->to_free; v; v = v->next_free) - printf(" %.*s(%c%d+%d)", v->name->name.len, v->name->name.txt, - v->global ? 'G':'L', - v->frame_pos, v->type ? v->type->size:0); + for (v = e->to_free; v; v = v->next_free) { + printf(" %.*s", v->name->name.len, v->name->name.txt); + if (v->frame_pos >= 0) + printf("(%d+%d)", v->frame_pos, + v->type ? v->type->size:0); + } printf(" */\n"); } }