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

View File

@ -1451,6 +1451,9 @@ uxn_emit_address(Arena *a, List *out, u32 ptr)
void void
uxn_emit_zero_block(Arena *a, List *out, u32 ptr) 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); sprintf(uxn_temp_strbuf, "$%d ", ptr);
StrBuf_append(a, out, uxn_temp_strbuf); StrBuf_append(a, out, uxn_temp_strbuf);
} }