 <PRIVATE
 
 : lexer-subseq ( i lexer -- before )
+    { fixnum lexer } declare
     [ [ column>> ] [ line-text>> ] bi swapd subseq ]
     [ column<< ] 2bi ;
 
 : rest-of-line ( lexer -- seq )
+    { lexer } declare
     [ line-text>> ] [ column>> ] bi tail-slice ;
 
 : current-char ( lexer -- ch/f )
+    { lexer } declare
     [ column>> ] [ line-text>> ] bi ?nth ;
 
 : advance-char ( lexer -- )
+    { lexer } declare
     [ 1 + ] change-column drop ;
 
 ERROR: escaped-char-expected ;
 
 : next-char ( lexer -- ch )
+    { lexer } declare
     dup still-parsing-line? [
         [ current-char ] [ advance-char ] bi
     ] [

            2over next-char swap push
            (parse-multiline-string)
        ] if
    ] if ; inline recursive

ERROR: trailing-characters string ;

: (parse-multiline-string) ( accum lexer string -- )
    over still-parsing? [
        2dup first find-next-token [
            parse-found-token

    ] [ drop f ] if ;

: end-string-parse ( accum lexer delimiter -- )
    { sbuf lexer string } declare
    length 3 = [
        take-double-quotes 3 tail-slice swap push-all
    ] [
        advance-char drop
    ] if ;

DEFER: (parse-multiline-string)

: parse-found-token ( accum lexer string i token -- )
    { sbuf lexer string fixnum fixnum } declare
    [ [ 2over ] dip swap lexer-subseq swap push-all ] dip
    CHAR: \ = [
        2over next-char swap push
