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) {