diff options
-rw-r--r-- | listbas.c | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -482,12 +482,22 @@ const char *get_bxl_ext_name(unsigned char tok) { void clear_callbacks(void); void init_callbacks(void); +int cmd_is_if; + +CALLBACK(find_cmd_if) { + cmd_is_if = 0; + if((bas_type == B_APLUS && tok == 0x06) || (bas_type != B_APLUS && tok == CMD_IF)) { + cmd_is_if = 1; + if_without_then++; /* find_then() decrements it, if there's a THEN */ + } +} + CALLBACK(find_op_then) { if(verbose) fprintf(stderr, "find_op_then lineno %d, pos %04x, tok %02x\n", lineno, pos, tok); - if(tok == OP_THEN) - if_without_then = 0; + if(cmd_is_if && tok == OP_THEN) + if_without_then--; } /* walk_code()'s API isn't really set up to be reentrant, but we @@ -495,6 +505,7 @@ CALLBACK(find_op_then) { void find_then(int lineno, unsigned short pos) { clear_callbacks(); on_exp_token = find_op_then; + on_cmd_token = find_cmd_if; walk_code(lineno, lineno); init_callbacks(); } @@ -504,11 +515,12 @@ CALLBACK(print_lineno) { first_stmt = 1; - cmd_tok = program[pos + 4]; - if_without_then = 0; - if((bas_type == B_APLUS && cmd_tok == 0x06) || (bas_type != B_APLUS && cmd_tok == CMD_IF)) { - if_without_then = 1; /* find_then() clears it, if there's a THEN */ - find_then(lineno, pos); + if(indent) { + cmd_tok = program[pos + 4]; + if_without_then = 0; + if((bas_type == B_APLUS && cmd_tok == 0x06) || (bas_type != B_APLUS && cmd_tok == CMD_IF)) { + find_then(lineno, pos); + } } if(skip_lineno) return; |