/* The "get_next_char" routine for lexers generated by camllex. */ #include "interp.h" #include "mlvalues.h" #include "stacks.h" #include "str.h" struct lexer_buffer { value refill_buff; value lex_buffer; value lex_abs_pos; value lex_start_pos; value lex_curr_pos; value lex_last_pos; value lex_last_action; }; value get_next_char(lexbuf) /* ML */ struct lexer_buffer * lexbuf; { mlsize_t buffer_len, curr_pos; buffer_len = string_length(lexbuf->lex_buffer); curr_pos = Long_val(lexbuf->lex_curr_pos); if (curr_pos >= buffer_len) { Push_roots (r, 1); r[0] = (value) lexbuf; callback(lexbuf->refill_buff, (value) lexbuf); lexbuf = (struct lexer_buffer *) r[0]; curr_pos = Long_val(lexbuf->lex_curr_pos); Pop_roots (); } lexbuf->lex_curr_pos += 2; return Val_int(Byte_u(lexbuf->lex_buffer, curr_pos)); }