bugfixes for array handling, add statement formatting
This commit is contained in:
parent
c8cba215a5
commit
0ab7ef872b
25
compiler.c
25
compiler.c
|
|
@ -649,12 +649,12 @@ 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 */
|
||||
|
|
@ -662,7 +662,12 @@ variable(void)
|
|||
|
||||
if (match(TOKEN_EQ)) {
|
||||
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);
|
||||
} 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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue