ext/rbs_extension/lexstate.c in rbs-2.7.0 vs ext/rbs_extension/lexstate.c in rbs-2.8.0.pre.1

- old
+ new

@@ -98,13 +98,18 @@ int token_bytes(token tok) { return RANGE_BYTES(tok.range); } unsigned int peek(lexstate *state) { - unsigned int c = rb_enc_mbc_to_codepoint(RSTRING_PTR(state->string) + state->current.byte_pos, RSTRING_END(state->string), rb_enc_get(state->string)); - state->last_char = c; - return c; + if (state->current.char_pos == state->end_pos) { + state->last_char = '\0'; + return 0; + } else { + unsigned int c = rb_enc_mbc_to_codepoint(RSTRING_PTR(state->string) + state->current.byte_pos, RSTRING_END(state->string), rb_enc_get(state->string)); + state->last_char = c; + return c; + } } token next_token(lexstate *state, enum TokenType type) { token t; @@ -135,9 +140,10 @@ } } void skipn(lexstate *state, size_t size) { for (size_t i = 0; i < size; i ++) { + peek(state); skip(state); } } char *peek_token(lexstate *state, token tok) {