             2over next-char swap push
             (parse-multiline-string)
         ] if
-    ] if ; inline recursive
+    ] if ;
 
 ERROR: trailing-characters string ;
 
 : (parse-multiline-string) ( accum lexer string -- )
+    { sbuf lexer fixnum } declare
     over still-parsing? [
         2dup first find-next-token [
             parse-found-token

<PRIVATE

: (unescape-string) ( accum str i/f -- accum )
    [
        cut-slice [ over push-all ] dip
        rest-slice next-escape [ over push ] dip
        CHAR: \\ over index (unescape-string)
    ] [
        over push-all
    ] if* ; inline recursive

PRIVATE>


<PRIVATE

: (parse-string) ( accum str -- accum m )
    { sbuf slice } declare
    dup [ "\"\\" member? ] find [
        [ cut-slice [ over push-all ] dip rest-slice ] dip
        CHAR: " = [
