diff --git a/core/modern/modern.factor b/core/modern/modern.factor index 3b861ac5c7..e918612eaf 100644 --- a/core/modern/modern.factor +++ b/core/modern/modern.factor @@ -206,9 +206,9 @@ MACRO:: read-double-matched ( open-ch -- quot: ( n string tag ch -- n' string se } case ] ; -: read-double-matched-paren ( n string tag ch -- n' string seq ) char: ( read-double-matched ; -: read-double-matched-bracket ( n string tag ch -- n' string seq ) char: [ read-double-matched ; -: read-double-matched-brace ( n string tag ch -- n' string seq ) char: { read-double-matched ; +: read-double-matched-paren ( n string tag ch -- n' string seq ) char: \( read-double-matched ; +: read-double-matched-bracket ( n string tag ch -- n' string seq ) char: \[ read-double-matched ; +: read-double-matched-brace ( n string tag ch -- n' string seq ) char: \{ read-double-matched ; defer: lex defer: lex-factor @@ -248,9 +248,9 @@ MACRO:: read-matched ( ch -- quot: ( n string tag -- n' string slice' ) ) } cond ] ; -: read-bracket ( n string slice -- n' string slice' ) char: [ read-matched ; -: read-brace ( n string slice -- n' string slice' ) char: { read-matched ; -: read-paren ( n string slice -- n' string slice' ) char: ( read-matched ; +: read-bracket ( n string slice -- n' string slice' ) char: \[ read-matched ; +: read-brace ( n string slice -- n' string slice' ) char: \{ read-matched ; +: read-paren ( n string slice -- n' string slice' ) char: \( read-matched ; : read-backtick ( n string opening -- n' string obj ) [ @@ -260,10 +260,10 @@ MACRO:: read-matched ( ch -- quot: ( n string tag -- n' string slice' ) ) : read-string-payload ( n string -- n' string ) over [ - { char: \ char: \" } slice-til-separator-inclusive { + { char: \\ char: \" } slice-til-separator-inclusive { { f [ drop ] } { char: \" [ drop ] } - { char: \ [ drop next-char-from drop read-string-payload ] } + { char: \\ [ drop next-char-from drop read-string-payload ] } } case ] [ string-expected-got-eof @@ -278,7 +278,7 @@ MACRO:: read-matched ( ch -- quot: ( n string tag -- n' string slice' ) ) tag 1 cut-slice* dquote-literal make-matched-literal ; : take-comment ( n string slice -- n' string comment ) - 2over ?nth char: [ = [ + 2over ?nth char: \[ = [ [ 1 + ] 2dip 2over ?nth read-double-matched-bracket ] [ [ slice-til-eol drop dup ] dip 1 cut-slice* line-comment-literal make-delimited-literal @@ -409,16 +409,16 @@ MACRO: rules>call-lexer ( seq -- quot: ( n/f string -- n'/f string literal ) ) '[ _ slice-til-either _ case ] ; CONSTANT: factor-lexing-rules { - T{ line-comment-lexer { generator read-exclamation } { delimiter char: ! } } + T{ line-comment-lexer { generator read-exclamation } { delimiter char: \! } } T{ backtick-lexer { generator read-backtick } { delimiter char: ` } } - T{ backslash-lexer { generator read-backslash } { delimiter char: \ } } - T{ dquote-lexer { generator read-string } { delimiter char: \" } { escape char: \ } } + T{ backslash-lexer { generator read-backslash } { delimiter char: \\ } } + T{ dquote-lexer { generator read-string } { delimiter char: \" } { escape char: \\ } } T{ decorator-lexer { generator read-decorator } { delimiter char: @ } } - T{ colon-lexer { generator read-colon } { delimiter char: : } } - T{ matched-lexer { generator read-bracket } { delimiter char: [ } } - T{ matched-lexer { generator read-brace } { delimiter char: { } } - T{ matched-lexer { generator read-paren } { delimiter char: ( } } + T{ colon-lexer { generator read-colon } { delimiter char: \: } } + T{ matched-lexer { generator read-bracket } { delimiter char: \[ } } + T{ matched-lexer { generator read-brace } { delimiter char: \{ } } + T{ matched-lexer { generator read-paren } { delimiter char: \( } } T{ terminator-lexer { generator read-terminator } { delimiter char: ; } } T{ terminator-lexer { generator read-terminator } { delimiter char: ] } } @@ -450,20 +450,18 @@ CONSTANT: factor-lexing-rules { [ nip array? not ] assoc-filter ; -/* ! What a lexer body looks like, produced by make-lexer -: lex ( n/f string -- n'/f string literal ) - "!`\\\"[{(\s\r\n" slice-til-either { - { char: ! [ read-exclamation ] } - { char: ` [ read-backtick ] } - { char: \ [ read-backslash ] } - { char: \" [ read-string ] } - { char: \[ [ read-bracket ] } - { char: \{ [ read-brace ] } - { char: \( [ read-paren ] } - { char: \s [ read-token-or-whitespace ] } - { char: \r [ read-token-or-whitespace ] } - { char: \n [ read-token-or-whitespace ] } - { f [ f like dup [ make-tag-literal ] when ] } - } case ; inline -*/ +! : lex ( n/f string -- n'/f string literal ) + ! "!`\\\"[{(\s\r\n" slice-til-either { + ! { char: ! [ read-exclamation ] } + ! { char: ` [ read-backtick ] } + ! { char: \ [ read-backslash ] } + ! { char: \" [ read-string ] } + ! { char: \[ [ read-bracket ] } + ! { char: \{ [ read-brace ] } + ! { char: \( [ read-paren ] } + ! { char: \s [ read-token-or-whitespace ] } + ! { char: \r [ read-token-or-whitespace ] } + ! { char: \n [ read-token-or-whitespace ] } + ! { f [ f like dup [ make-tag-literal ] when ] } + ! } case ; inline diff --git a/core/strings/parser/parser.factor b/core/strings/parser/parser.factor index f1c4c7c627..804f5ee5ee 100644 --- a/core/strings/parser/parser.factor +++ b/core/strings/parser/parser.factor @@ -21,10 +21,12 @@ ERROR: bad-escape char ; { char: \s char: \s } { char: 0 char: \0 } { char: \\ char: \\ } + { char: \: char: \: } { char: \" char: \" } { char: \{ char: \{ } { char: \[ char: \[ } { char: \( char: \( } + { char: \! char: \! } } ?at [ bad-escape ] unless ; symbol: name>char-hook diff --git a/language/alien/fortran/fortran.factor b/language/alien/fortran/fortran.factor index 43a9dca6e3..a2873a20c3 100755 --- a/language/alien/fortran/fortran.factor +++ b/language/alien/fortran/fortran.factor @@ -442,13 +442,18 @@ MACRO: fortran-invoke ( return library function parameters -- quot ) SYNTAX: SUBROUTINE: f current-library get scan-token ")" parse-tokens - [ "()" subseq? ] reject define-fortran-function ; + [ "()" subseq? ] reject ";" expect define-fortran-function ; SYNTAX: FUNCTION: scan-token current-library get scan-token ")" parse-tokens - [ "()" subseq? ] reject define-fortran-function ; + [ "()" subseq? ] reject ";" expect define-fortran-function ; SYNTAX: LIBRARY: scan-token [ current-library set ] [ set-fortran-abi ] bi ; + +SYNTAX: library: + scan-token + [ current-library set ] + [ set-fortran-abi ] bi ; diff --git a/libs/math/blas/ffi/ffi.factor b/libs/math/blas/ffi/ffi.factor index ec7be1e7b1..788c53e172 100644 --- a/libs/math/blas/ffi/ffi.factor +++ b/libs/math/blas/ffi/ffi.factor @@ -9,7 +9,7 @@ add-fortran-library deploy-blas? get [ "blas" deploy-library ] when >> -LIBRARY: blas +library: blas ! Level 1 BLAS (scalar-vector and vector-vector)