From 801e922ddd37ec15ccb8dd16cca9c587b7c1d6fb Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 17 Sep 2014 17:10:58 -0400 Subject: hide the parser state this shouldn't be public (none of the parser stuff should be), but the way i was doing before with redefining certain types from parser.h was causing warnings on clang. --- src/screen.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'src/screen.c') diff --git a/src/screen.c b/src/screen.c index 5ba16e7..8e8f783 100644 --- a/src/screen.c +++ b/src/screen.c @@ -6,6 +6,11 @@ #include "vt100.h" #include "parser.h" +struct vt100_parser_state { + yyscan_t scanner; + YY_BUFFER_STATE state; +}; + static void vt100_screen_get_string( VT100Screen *vt, struct vt100_loc *start, struct vt100_loc *end, char **strp, size_t *lenp, int formatted); @@ -33,7 +38,8 @@ VT100Screen *vt100_screen_new(int rows, int cols) void vt100_screen_init(VT100Screen *vt) { vt->grid = calloc(1, sizeof(struct vt100_grid)); - vt100_parser_yylex_init_extra(vt, &vt->scanner); + vt->parser_state = calloc(1, sizeof(struct vt100_parser_state)); + vt100_parser_yylex_init_extra(vt, &vt->parser_state->scanner); } void vt100_screen_set_window_size(VT100Screen *vt, int rows, int cols) @@ -105,11 +111,12 @@ void vt100_screen_set_scrollback_length(VT100Screen *vt, int rows) int vt100_screen_process_string(VT100Screen *vt, char *buf, size_t len) { + struct vt100_parser_state *state = vt->parser_state; int remaining; - vt->state = vt100_parser_yy_scan_bytes(buf, len, vt->scanner); - remaining = vt100_parser_yylex(vt->scanner); - vt100_parser_yy_delete_buffer(vt->state, vt->scanner); + state->state = vt100_parser_yy_scan_bytes(buf, len, state->scanner); + remaining = vt100_parser_yylex(state->scanner); + vt100_parser_yy_delete_buffer(state->state, state->scanner); return len - remaining; } @@ -745,7 +752,8 @@ void vt100_screen_cleanup(VT100Screen *vt) free(vt->title); free(vt->icon_name); - vt100_parser_yylex_destroy(vt->scanner); + vt100_parser_yylex_destroy(vt->parser_state->scanner); + free(vt->parser_state); } void vt100_screen_delete(VT100Screen *vt) -- cgit v1.2.3-54-g00ecf