X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Fscanner.mdc;h=777688482566796691d97f6df6cd3e8e5cf9e863;hp=9a040e1c39e97e1205dcccb5208919eb6b4203ad;hb=fcd83db1af72cf3da045ca85e89e4d9b119be651;hpb=0d310d6b1da44a35e5c8be250796a6cf2fcd0e06 diff --git a/csrc/scanner.mdc b/csrc/scanner.mdc index 9a040e1..7776884 100644 --- a/csrc/scanner.mdc +++ b/csrc/scanner.mdc @@ -807,9 +807,11 @@ information and return one token. } ###### white space + if (is_newline(ch)) + state_check_node(state); if (is_newline(ch) || (at_son(state) && ch <= ' ')) { int newlines = 0; - int was_son = at_son(state); + int was_nl = is_newline(ch); if (ignored & (1<delayed_lines = newlines; - state->out_next = was_son; + state->out_next = !was_nl; state->check_indent = 1; continue; } @@ -962,26 +964,37 @@ a flag that tells us whether or not we need to strip. } } + static void state_check_node(struct token_state *state) + { + if (!state->node) + return; + if (state->node->code.len > state->offset) + return; + + do + state->node = state->node->next; + while (state->node && state->node->code.txt == NULL); + state->offset = 0; + state->prev_offset = 0; + state->strip_offset = 0; + state->col = 0; + if (state->node == NULL) + return; + state->line = state->node->line_no; + do_strip(state); + state->col = state->node->needs_strip; + state->strip_offset = state->offset; + } + static wint_t get_char(struct token_state *state) { wchar_t next; size_t n; mbstate_t mbstate; + state_check_node(state); if (state->node == NULL) return WEOF; - if (state->node->code.len <= state->offset) { - do - state->node = state->node->next; - while (state->node && state->node->code.txt == NULL); - state->offset = 0; - if (state->node == NULL) - return WEOF; - state->line = state->node->line_no; - do_strip(state); - state->col = state->node->needs_strip; - state->strip_offset = state->offset; - } ## before get_char