bugfixes for array handling, add statement formatting

This commit is contained in:
zongor 2026-07-04 12:42:19 -07:00
parent c8cba215a5
commit 0ab7ef872b
2 changed files with 22 additions and 8 deletions

View File

@ -649,20 +649,25 @@ variable(void)
if (match(TOKEN_LBRACKET)) {
emitter->emit_deref_prolog(arena, code, sym);
expression();
emitter->emit_address(arena, code, size);
emitter->emit_mul(arena, code, size);
emitter->emit_add(arena, code, size);
emitter->emit_address(arena, code, 2);
emitter->emit_mul(arena, code, 2);
emitter->emit_add(arena, code, 2);
/* add offset of "length"*/
emitter->emit_nat(arena, code, "2", 1);
emitter->emit_add(arena, code, size);
emitter->emit_add(arena, code, 2);
while (!match(TOKEN_RBRACKET)) {
/* eventually do something with multidimensional arrays */
}
if (match(TOKEN_EQ)) {
expression();
emitter->emit_stack_swap(arena, code, size);
expression();
if (size == 1) {
emitter->emit_stack_rot(arena, code, 1);
emitter->emit_stack_rot(arena, code, 1);
} else {
emitter->emit_stack_swap(arena, code, 2);
}
emitter->emit_ref_store(arena, code, size);
} else {
emitter->emit_deref(arena, code, size);
@ -972,6 +977,12 @@ write(void)
emitter->emit_write(arena, code);
}
void
semicolon(void)
{
emitter->emit_end_statement(arena, code);
}
ParseRule rules[] = {
/* TOKEN_ERROR */ {nil, nil, PREC_NONE},
/* TOKEN_EOF */ {nil, nil, PREC_NONE},
@ -1049,7 +1060,7 @@ ParseRule rules[] = {
/* TOKEN_COMMA */ {nil, nil, PREC_NONE},
/* TOKEN_COLON */ {nil, nil, PREC_NONE},
/* TOKEN_CARET */ {nil, nil, PREC_NONE},
/* TOKEN_SEMICOLON */ {nil, nil, PREC_NONE},
/* TOKEN_SEMICOLON */ {semicolon, nil, PREC_NONE},
/* TOKEN_ARROW_RIGHT */ {nil, nil, PREC_NONE},
/* TOKEN_SLL */ {nil, binary, PREC_NONE},
/* TOKEN_SRL */ {nil, binary, PREC_NONE},
@ -1096,7 +1107,7 @@ emit_program(char *source)
while(!match(TOKEN_EOF)) declaration();
emitter->epilogue(arena, code);
/*emitter->epilogue(arena, code);*/
}
bool

View File

@ -1451,6 +1451,9 @@ uxn_emit_address(Arena *a, List *out, u32 ptr)
void
uxn_emit_zero_block(Arena *a, List *out, u32 ptr)
{
sprintf(uxn_temp_strbuf, "%04x ", ptr);
StrBuf_append(a, out, uxn_temp_strbuf);
sprintf(uxn_temp_strbuf, "$%d ", ptr);
StrBuf_append(a, out, uxn_temp_strbuf);
}