GENERIC: skip-blank ( lexer -- )
-M: lexer skip-blank
- [ t skip ] change-lexer-column ;
-
-GENERIC: skip-word ( lexer -- )
-
<PRIVATE
-: quote? ( column text -- ? )
- { fixnum string } declare nth CHAR: " eq? ;
-
-: shebang? ( column text -- ? )
- { fixnum string } declare swap zero? [
- dup length 1 > [
- dup first-unsafe CHAR: # =
- [ second-unsafe CHAR: ! = ] [ drop f ] if
- ] [ drop f ] if
- ] [ drop f ] if ;
+: shebang? ( lexer -- lexer ? )
+ dup line>> 1 = [
+ dup column>> zero? [
+ dup line-text>> "#!" head?
+ ] [ f ] if
+ ] [ f ] if ; inline
PRIVATE>
+M: lexer skip-blank
+ shebang? [
+ [ nip length ] change-lexer-column
+ ] [
+ [ t skip ] change-lexer-column
+ ] if ;
+
+GENERIC: skip-word ( lexer -- )
+
M: lexer skip-word
[
- {
- { [ 2dup quote? ] [ drop 1 + ] }
- { [ 2dup shebang? ] [ drop 2 + ] }
- [ f skip ]
- } cond
+ 2dup nth CHAR: " eq? [ drop 1 + ] [ f skip ] if
] change-lexer-column ;
: still-parsing? ( lexer -- ? )