X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Fscan.c;h=573a00df9d327f42445cda0c7ccb6492bc093f95;hb=b92e8417c7b44c8ce39829dca4eb8ab26f8b5494;hp=6e9fc618e1568727ef04c6c41f4bf5ae951b9538;hpb=ff5e81803b409939e921211f1ffd46cb24df33e9;p=pspp diff --git a/src/language/lexer/scan.c b/src/language/lexer/scan.c index 6e9fc618e1..573a00df9d 100644 --- a/src/language/lexer/scan.c +++ b/src/language/lexer/scan.c @@ -410,7 +410,7 @@ scan_type_to_string (enum scan_type type) #undef SCAN_TYPE default: - return token_type_to_name (type); + return token_type_to_name ((enum token_type) type); } } @@ -593,16 +593,17 @@ scanner_push (struct scanner *scanner, enum segment_type type, NOT_REACHED (); } -/* Initializes SLEX for parsing INPUT in the specified MODE. +/* Initializes SLEX for parsing INPUT, which is LENGTH bytes long, in the + specified MODE. SLEX has no internal state to free, but it retains a reference to INPUT, so INPUT must not be modified or freed while SLEX is still in use. */ void -string_lexer_init (struct string_lexer *slex, const char *input, +string_lexer_init (struct string_lexer *slex, const char *input, size_t length, enum segmenter_mode mode) { slex->input = input; - slex->length = strlen (input) + 1; + slex->length = length; slex->offset = 0; segmenter_init (&slex->segmenter, mode); } @@ -624,7 +625,7 @@ string_lexer_next (struct string_lexer *slex, struct token *token) enum segment_type type; int n; - n = segmenter_push (&slex->segmenter, s, left, &type); + n = segmenter_push (&slex->segmenter, s, left, true, &type); assert (n >= 0); slex->offset += n;