Merge branch 'master' of git://factorcode.org/git/factor
commit
280e3bbf98
|
@ -145,6 +145,8 @@ void unix_constants()
|
||||||
constant(PROT_WRITE);
|
constant(PROT_WRITE);
|
||||||
constant(MAP_FILE);
|
constant(MAP_FILE);
|
||||||
constant(MAP_SHARED);
|
constant(MAP_SHARED);
|
||||||
|
grovel(pid_t);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -158,6 +160,10 @@ int main() {
|
||||||
openbsd_stat();
|
openbsd_stat();
|
||||||
openbsd_types();
|
openbsd_types();
|
||||||
#endif
|
#endif
|
||||||
|
grovel(blkcnt_t);
|
||||||
|
grovel(blksize_t);
|
||||||
|
//grovel(fflags_t);
|
||||||
|
grovel(ssize_t);
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
unix_types();
|
unix_types();
|
||||||
|
|
|
@ -156,7 +156,7 @@ M: x86-backend %unbox-small-struct ( size -- )
|
||||||
|
|
||||||
M: x86-backend struct-small-enough? ( size -- ? )
|
M: x86-backend struct-small-enough? ( size -- ? )
|
||||||
{ 1 2 4 8 } member?
|
{ 1 2 4 8 } member?
|
||||||
os { "linux" "solaris" } member? not and ;
|
os { "linux" "netbsd" "solaris" } member? not and ;
|
||||||
|
|
||||||
M: x86-backend %return ( -- ) 0 %unwind ;
|
M: x86-backend %return ( -- ) 0 %unwind ;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov.
|
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: init kernel system namespaces io io.encodings io.encodings.utf8 ;
|
USING: init kernel system namespaces io io.encodings
|
||||||
|
io.encodings.utf8 init assocs ;
|
||||||
IN: io.backend
|
IN: io.backend
|
||||||
|
|
||||||
SYMBOL: io-backend
|
SYMBOL: io-backend
|
||||||
|
@ -22,7 +23,8 @@ HOOK: normalize-pathname io-backend ( str -- newstr )
|
||||||
M: object normalize-directory normalize-pathname ;
|
M: object normalize-directory normalize-pathname ;
|
||||||
|
|
||||||
: set-io-backend ( io-backend -- )
|
: set-io-backend ( io-backend -- )
|
||||||
io-backend set-global init-io init-stdio ;
|
io-backend set-global init-io init-stdio
|
||||||
|
"io.files" init-hooks get at call ;
|
||||||
|
|
||||||
[ init-io embedded? [ init-stdio ] unless ]
|
[ init-io embedded? [ init-stdio ] unless ]
|
||||||
"io.backend" add-init-hook
|
"io.backend" add-init-hook
|
||||||
|
|
|
@ -7,6 +7,56 @@ io.encodings.utf8 ;
|
||||||
[ ] [ "blahblah" temp-file make-directory ] unit-test
|
[ ] [ "blahblah" temp-file make-directory ] unit-test
|
||||||
[ t ] [ "blahblah" temp-file directory? ] unit-test
|
[ t ] [ "blahblah" temp-file directory? ] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
[ temp-directory "loldir" append-path delete-directory ] ignore-errors
|
||||||
|
temp-directory [
|
||||||
|
"loldir" make-directory
|
||||||
|
] with-directory
|
||||||
|
temp-directory "loldir" append-path exists?
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ ] [
|
||||||
|
[ temp-directory "loldir" append-path delete-directory ] ignore-errors
|
||||||
|
temp-directory [
|
||||||
|
"loldir" make-directory
|
||||||
|
"loldir" delete-directory
|
||||||
|
] with-directory
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ "file1 contents" ] [
|
||||||
|
[ temp-directory "loldir" append-path delete-directory ] ignore-errors
|
||||||
|
temp-directory [
|
||||||
|
"file1 contents" "file1" utf8 set-file-contents
|
||||||
|
"file1" "file2" copy-file
|
||||||
|
"file2" utf8 file-contents
|
||||||
|
] with-directory
|
||||||
|
"file1" temp-file delete-file
|
||||||
|
"file2" temp-file delete-file
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ "file3 contents" ] [
|
||||||
|
temp-directory [
|
||||||
|
"file3 contents" "file3" utf8 set-file-contents
|
||||||
|
"file3" "file4" move-file
|
||||||
|
"file4" utf8 file-contents
|
||||||
|
] with-directory
|
||||||
|
"file4" temp-file delete-file
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ ] [
|
||||||
|
temp-directory [
|
||||||
|
"file5" touch-file
|
||||||
|
"file5" delete-file
|
||||||
|
] with-directory
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ ] [
|
||||||
|
temp-directory [
|
||||||
|
"file6" touch-file
|
||||||
|
"file6" link-info drop
|
||||||
|
] with-directory
|
||||||
|
] unit-test
|
||||||
|
|
||||||
[ "passwd" ] [ "/etc/passwd" file-name ] unit-test
|
[ "passwd" ] [ "/etc/passwd" file-name ] unit-test
|
||||||
[ "awk" ] [ "/usr/libexec/awk/" file-name ] unit-test
|
[ "awk" ] [ "/usr/libexec/awk/" file-name ] unit-test
|
||||||
[ "awk" ] [ "/usr/libexec/awk///" file-name ] unit-test
|
[ "awk" ] [ "/usr/libexec/awk///" file-name ] unit-test
|
||||||
|
|
|
@ -45,6 +45,8 @@ HOOK: (file-appender) io-backend ( path -- stream )
|
||||||
! Pathnames
|
! Pathnames
|
||||||
: path-separator? ( ch -- ? ) windows? "/\\" "/" ? member? ;
|
: path-separator? ( ch -- ? ) windows? "/\\" "/" ? member? ;
|
||||||
|
|
||||||
|
: path-separator ( -- string ) windows? "\\" "/" ? ;
|
||||||
|
|
||||||
: right-trim-separators ( str -- newstr )
|
: right-trim-separators ( str -- newstr )
|
||||||
[ path-separator? ] right-trim ;
|
[ path-separator? ] right-trim ;
|
||||||
|
|
||||||
|
@ -170,7 +172,7 @@ SYMBOL: current-directory
|
||||||
|
|
||||||
M: object cwd ( -- path ) "." ;
|
M: object cwd ( -- path ) "." ;
|
||||||
|
|
||||||
[ cwd current-directory set-global ] "current-directory" add-init-hook
|
[ cwd current-directory set-global ] "io.files" add-init-hook
|
||||||
|
|
||||||
: with-directory ( path quot -- )
|
: with-directory ( path quot -- )
|
||||||
>r normalize-pathname r>
|
>r normalize-pathname r>
|
||||||
|
|
|
@ -36,7 +36,7 @@ HELP: <mirror>
|
||||||
"TUPLE: circle center radius ;"
|
"TUPLE: circle center radius ;"
|
||||||
"C: <circle> circle"
|
"C: <circle> circle"
|
||||||
"{ 100 50 } 15 <circle> <mirror> >alist ."
|
"{ 100 50 } 15 <circle> <mirror> >alist ."
|
||||||
"{ { \"center\" { 100 50 } } { \"radius\" 15 } }"
|
"{ { \"delegate\" f } { \"center\" { 100 50 } } { \"radius\" 15 } }"
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2005, 2007 Slava Pestov.
|
! Copyright (C) 2005, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: parser kernel namespaces sequences definitions io.files
|
USING: parser kernel namespaces sequences definitions io.files
|
||||||
inspector continuations tuples tools.crossref tools.vocabs
|
inspector continuations tuples tools.crossref tools.vocabs
|
||||||
io prettyprint source-files assocs vocabs vocabs.loader ;
|
io prettyprint source-files assocs vocabs vocabs.loader
|
||||||
|
io.backend splitting ;
|
||||||
IN: editors
|
IN: editors
|
||||||
|
|
||||||
TUPLE: no-edit-hook ;
|
TUPLE: no-edit-hook ;
|
||||||
|
@ -25,11 +26,8 @@ SYMBOL: edit-hook
|
||||||
require ;
|
require ;
|
||||||
|
|
||||||
: edit-location ( file line -- )
|
: edit-location ( file line -- )
|
||||||
edit-hook get [
|
>r normalize-pathname "\\\\?\\" ?head drop r>
|
||||||
call
|
edit-hook get [ call ] [ no-edit-hook edit-location ] if* ;
|
||||||
] [
|
|
||||||
no-edit-hook edit-location
|
|
||||||
] if* ;
|
|
||||||
|
|
||||||
: edit ( defspec -- )
|
: edit ( defspec -- )
|
||||||
where [ first2 edit-location ] when* ;
|
where [ first2 edit-location ] when* ;
|
||||||
|
|
|
@ -8,7 +8,7 @@ io.encodings.utf8 ;
|
||||||
IN: editors.jedit
|
IN: editors.jedit
|
||||||
|
|
||||||
: jedit-server-info ( -- port auth )
|
: jedit-server-info ( -- port auth )
|
||||||
home "/.jedit/server" append-path ascii [
|
home ".jedit/server" append-path ascii [
|
||||||
readln drop
|
readln drop
|
||||||
readln string>number
|
readln string>number
|
||||||
readln string>number
|
readln string>number
|
||||||
|
|
|
@ -5,7 +5,7 @@ IN: editors.ultraedit
|
||||||
: ultraedit-path ( -- path )
|
: ultraedit-path ( -- path )
|
||||||
\ ultraedit-path get-global [
|
\ ultraedit-path get-global [
|
||||||
program-files
|
program-files
|
||||||
"\\IDM Computer Solutions\\UltraEdit-32\\uedit32.exe" append-path
|
"IDM Computer Solutions\\UltraEdit-32\\uedit32.exe" append-path
|
||||||
] unless* ;
|
] unless* ;
|
||||||
|
|
||||||
: ultraedit ( file line -- )
|
: ultraedit ( file line -- )
|
||||||
|
|
|
@ -5,10 +5,10 @@ IN: editors.wordpad
|
||||||
|
|
||||||
: wordpad-path ( -- path )
|
: wordpad-path ( -- path )
|
||||||
\ wordpad-path get [
|
\ wordpad-path get [
|
||||||
program-files "\\Windows NT\\Accessories\\wordpad.exe" append-path
|
program-files "Windows NT\\Accessories\\wordpad.exe" append-path
|
||||||
] unless* ;
|
] unless* ;
|
||||||
|
|
||||||
: wordpad ( file line -- )
|
: wordpad ( file line -- )
|
||||||
drop wordpad-path swap 2array run-detached drop ;
|
drop wordpad-path swap 2array dup . run-detached drop ;
|
||||||
|
|
||||||
[ wordpad ] edit-hook set-global
|
[ wordpad ] edit-hook set-global
|
||||||
|
|
|
@ -7,11 +7,11 @@ calendar io.encodings.binary ;
|
||||||
|
|
||||||
IN: io.unix.files
|
IN: io.unix.files
|
||||||
|
|
||||||
M: unix-io cwd
|
M: unix-io cwd ( -- path )
|
||||||
MAXPATHLEN [ <byte-array> ] [ ] bi getcwd
|
MAXPATHLEN [ <byte-array> ] [ ] bi getcwd
|
||||||
[ (io-error) ] unless* ;
|
[ (io-error) ] unless* ;
|
||||||
|
|
||||||
M: unix-io cd
|
M: unix-io cd ( path -- )
|
||||||
chdir io-error ;
|
chdir io-error ;
|
||||||
|
|
||||||
: read-flags O_RDONLY ; inline
|
: read-flags O_RDONLY ; inline
|
||||||
|
@ -39,25 +39,26 @@ M: unix-io (file-writer) ( path -- stream )
|
||||||
M: unix-io (file-appender) ( path -- stream )
|
M: unix-io (file-appender) ( path -- stream )
|
||||||
open-append <writer> ;
|
open-append <writer> ;
|
||||||
|
|
||||||
: touch-mode
|
: touch-mode ( -- n )
|
||||||
{ O_WRONLY O_APPEND O_CREAT O_EXCL } flags ; foldable
|
{ O_WRONLY O_APPEND O_CREAT O_EXCL } flags ; foldable
|
||||||
|
|
||||||
M: unix-io touch-file ( path -- )
|
M: unix-io touch-file ( path -- )
|
||||||
|
normalize-pathname
|
||||||
touch-mode file-mode open
|
touch-mode file-mode open
|
||||||
dup 0 < [ err_no EEXIST = [ err_no io-error ] unless ] when
|
dup 0 < [ err_no EEXIST = [ err_no io-error ] unless ] when
|
||||||
close ;
|
close ;
|
||||||
|
|
||||||
M: unix-io move-file ( from to -- )
|
M: unix-io move-file ( from to -- )
|
||||||
rename io-error ;
|
[ normalize-pathname ] 2apply rename io-error ;
|
||||||
|
|
||||||
M: unix-io delete-file ( path -- )
|
M: unix-io delete-file ( path -- )
|
||||||
unlink io-error ;
|
normalize-pathname unlink io-error ;
|
||||||
|
|
||||||
M: unix-io make-directory ( path -- )
|
M: unix-io make-directory ( path -- )
|
||||||
OCT: 777 mkdir io-error ;
|
normalize-pathname OCT: 777 mkdir io-error ;
|
||||||
|
|
||||||
M: unix-io delete-directory ( path -- )
|
M: unix-io delete-directory ( path -- )
|
||||||
rmdir io-error ;
|
normalize-pathname rmdir io-error ;
|
||||||
|
|
||||||
: (copy-file) ( from to -- )
|
: (copy-file) ( from to -- )
|
||||||
dup parent-directory make-directories
|
dup parent-directory make-directories
|
||||||
|
@ -68,6 +69,7 @@ M: unix-io delete-directory ( path -- )
|
||||||
] with-disposal ;
|
] with-disposal ;
|
||||||
|
|
||||||
M: unix-io copy-file ( from to -- )
|
M: unix-io copy-file ( from to -- )
|
||||||
|
[ normalize-pathname ] 2apply
|
||||||
[ (copy-file) ]
|
[ (copy-file) ]
|
||||||
[ swap file-info file-info-permissions chmod io-error ]
|
[ swap file-info file-info-permissions chmod io-error ]
|
||||||
2bi ;
|
2bi ;
|
||||||
|
|
|
@ -143,3 +143,31 @@ IN: peg.ebnf.tests
|
||||||
{ f } [
|
{ f } [
|
||||||
"Z" [EBNF foo=[^A-Z] EBNF] call
|
"Z" [EBNF foo=[^A-Z] EBNF] call
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
#! Test direct left recursion. Currently left recursion should cause a
|
||||||
|
#! failure of that parser.
|
||||||
|
#! Not using packrat, so recursion causes data stack overflow
|
||||||
|
"1+1" [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call
|
||||||
|
] must-fail
|
||||||
|
|
||||||
|
{ V{ 49 } } [
|
||||||
|
#! Test direct left recursion. Currently left recursion should cause a
|
||||||
|
#! failure of that parser.
|
||||||
|
#! Using packrat, so first part of expr fails, causing 2nd choice to be used
|
||||||
|
"1+1" [ [EBNF num=([0-9])+ expr=expr "+" num | num EBNF] call ] with-packrat parse-result-ast
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
#! Test indirect left recursion. Currently left recursion should cause a
|
||||||
|
#! failure of that parser.
|
||||||
|
#! Not using packrat, so recursion causes data stack overflow
|
||||||
|
"1+1" [EBNF num=([0-9])+ x=expr expr=x "+" num | num EBNF] call
|
||||||
|
] must-fail
|
||||||
|
|
||||||
|
{ V{ 49 } } [
|
||||||
|
#! Test indirect left recursion. Currently left recursion should cause a
|
||||||
|
#! failure of that parser.
|
||||||
|
#! Using packrat, so first part of expr fails, causing 2nd choice to be used
|
||||||
|
"1+1" [ [EBNF num=([0-9])+ x=expr expr=x "+" num | num EBNF] call ] with-packrat parse-result-ast
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -266,7 +266,7 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
|
||||||
] [ ] make delay sp ;
|
] [ ] make delay sp ;
|
||||||
|
|
||||||
: transform-ebnf ( string -- object )
|
: transform-ebnf ( string -- object )
|
||||||
'ebnf' parse parse-result-ast transform ;
|
'ebnf' packrat-parse parse-result-ast transform ;
|
||||||
|
|
||||||
: check-parse-result ( result -- result )
|
: check-parse-result ( result -- result )
|
||||||
dup [
|
dup [
|
||||||
|
@ -281,7 +281,7 @@ M: ebnf-non-terminal (transform) ( ast -- parser )
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: ebnf>quot ( string -- hashtable quot )
|
: ebnf>quot ( string -- hashtable quot )
|
||||||
'ebnf' parse check-parse-result
|
'ebnf' packrat-parse check-parse-result
|
||||||
parse-result-ast transform dup main swap at compile 1quotation ;
|
parse-result-ast transform dup main swap at compile 1quotation ;
|
||||||
|
|
||||||
: [EBNF "EBNF]" parse-multiline-string ebnf>quot nip parsed ; parsing
|
: [EBNF "EBNF]" parse-multiline-string ebnf>quot nip parsed ; parsing
|
||||||
|
|
|
@ -12,7 +12,7 @@ HELP: parse
|
||||||
{ $description
|
{ $description
|
||||||
"Given the input string, parse it using the given parser. The result is a <parse-result> object if "
|
"Given the input string, parse it using the given parser. The result is a <parse-result> object if "
|
||||||
"the parse was successful, otherwise it is f." }
|
"the parse was successful, otherwise it is f." }
|
||||||
{ $see-also compile with-packrat } ;
|
{ $see-also compile with-packrat packrat-parse } ;
|
||||||
|
|
||||||
HELP: with-packrat
|
HELP: with-packrat
|
||||||
{ $values
|
{ $values
|
||||||
|
@ -23,8 +23,30 @@ HELP: with-packrat
|
||||||
"Calls the quotation with a packrat cache in scope. Usually the quotation will "
|
"Calls the quotation with a packrat cache in scope. Usually the quotation will "
|
||||||
"call " { $link parse } " or call a word produced by " { $link compile } "."
|
"call " { $link parse } " or call a word produced by " { $link compile } "."
|
||||||
"The cache is used to avoid the possible exponential time performace that pegs "
|
"The cache is used to avoid the possible exponential time performace that pegs "
|
||||||
"can have, instead giving linear time at the cost of increased memory usage." }
|
"can have, instead giving linear time at the cost of increased memory usage. "
|
||||||
{ $see-also compile parse } ;
|
"Use of this packrat option also allows direct and indirect recursion to "
|
||||||
|
"be handled in the parser without entering an infinite loop." }
|
||||||
|
{ $see-also compile parse packrat-parse packrat-call } ;
|
||||||
|
|
||||||
|
HELP: packrat-parse
|
||||||
|
{ $values
|
||||||
|
{ "input" "a string" }
|
||||||
|
{ "parser" "a parser" }
|
||||||
|
{ "result" "a parse-result or f" }
|
||||||
|
}
|
||||||
|
{ $description
|
||||||
|
"Compiles and calls the parser with a packrat cache in scope." }
|
||||||
|
{ $see-also compile parse packrat-call with-packrat } ;
|
||||||
|
|
||||||
|
HELP: packrat-call
|
||||||
|
{ $values
|
||||||
|
{ "input" "a string" }
|
||||||
|
{ "quot" "a quotation with stack effect ( input -- result )" }
|
||||||
|
{ "result" "a parse-result or f" }
|
||||||
|
}
|
||||||
|
{ $description
|
||||||
|
"Calls the compiled parser with a packrat cache in scope." }
|
||||||
|
{ $see-also compile packrat-call packrat-parse with-packrat } ;
|
||||||
|
|
||||||
HELP: compile
|
HELP: compile
|
||||||
{ $values
|
{ $values
|
||||||
|
@ -36,7 +58,7 @@ HELP: compile
|
||||||
"The mapping from parser to compiled word is kept in a cache. If you later change "
|
"The mapping from parser to compiled word is kept in a cache. If you later change "
|
||||||
"the definition of a parser you'll need to clear this cache with "
|
"the definition of a parser you'll need to clear this cache with "
|
||||||
{ $link reset-compiled-parsers } " before using " { $link compile } " on that parser again." }
|
{ $link reset-compiled-parsers } " before using " { $link compile } " on that parser again." }
|
||||||
{ $see-also compile with-packrat reset-compiled-parsers } ;
|
{ $see-also compile with-packrat reset-compiled-parsers packrat-call packrat-parse } ;
|
||||||
|
|
||||||
HELP: reset-compiled-parsers
|
HELP: reset-compiled-parsers
|
||||||
{ $description
|
{ $description
|
||||||
|
|
|
@ -158,3 +158,41 @@ IN: peg.tests
|
||||||
"a]" "[" token hide "a" token "]" token hide 3array seq parse
|
"a]" "[" token hide "a" token "]" token hide 3array seq parse
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
{ V{ "1" "-" "1" } V{ "1" "+" "1" } } [
|
||||||
|
[
|
||||||
|
[ "1" token , "-" token , "1" token , ] seq* ,
|
||||||
|
[ "1" token , "+" token , "1" token , ] seq* ,
|
||||||
|
] choice*
|
||||||
|
"1-1" over parse parse-result-ast swap
|
||||||
|
"1+1" swap parse parse-result-ast
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ V{ "1" "-" "1" } V{ "1" "+" "1" } } [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
[ "1" token , "-" token , "1" token , ] seq* ,
|
||||||
|
[ "1" token , "+" token , "1" token , ] seq* ,
|
||||||
|
] choice*
|
||||||
|
"1-1" over parse parse-result-ast swap
|
||||||
|
] with-packrat
|
||||||
|
[
|
||||||
|
"1+1" swap parse parse-result-ast
|
||||||
|
] with-packrat
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
: expr ( -- parser )
|
||||||
|
#! Test direct left recursion. Currently left recursion should cause a
|
||||||
|
#! failure of that parser.
|
||||||
|
[ expr ] delay "+" token "1" token 3seq "1" token 2choice ;
|
||||||
|
|
||||||
|
[
|
||||||
|
#! Not using packrat, so recursion causes data stack overflow
|
||||||
|
"1+1" expr parse parse-result-ast
|
||||||
|
] must-fail
|
||||||
|
|
||||||
|
{ "1" } [
|
||||||
|
#! Using packrat, so expr fails, causing the 2nd choice to be used.
|
||||||
|
"1+1" expr [ parse ] with-packrat parse-result-ast
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
|
|
@ -24,13 +24,32 @@ SYMBOL: packrat
|
||||||
|
|
||||||
GENERIC: (compile) ( parser -- quot )
|
GENERIC: (compile) ( parser -- quot )
|
||||||
|
|
||||||
:: run-packrat-parser ( input quot c -- result )
|
: input-from ( input -- n )
|
||||||
input slice? [ input slice-from ] [ 0 ] if
|
#! Return the index from the original string that the
|
||||||
quot c [ drop H{ } clone ] cache
|
#! input slice is based on.
|
||||||
[
|
dup slice? [ slice-from ] [ drop 0 ] if ;
|
||||||
drop input quot call
|
|
||||||
|
: input-cache ( quot cache -- cache )
|
||||||
|
#! From the packrat cache, obtain the cache for the parser quotation
|
||||||
|
#! that maps the input string position to the parser result.
|
||||||
|
[ drop H{ } clone ] cache ;
|
||||||
|
|
||||||
|
:: cached-result ( n input-cache input quot -- result )
|
||||||
|
#! Get the cached result for input position n
|
||||||
|
#! from the input cache. If the item is not in the cache,
|
||||||
|
#! call 'quot' with 'input' on the stack to get the result
|
||||||
|
#! and store that in the cache and return it.
|
||||||
|
n input-cache [
|
||||||
|
drop
|
||||||
|
f n input-cache set-at
|
||||||
|
input quot call
|
||||||
] cache ; inline
|
] cache ; inline
|
||||||
|
|
||||||
|
:: run-packrat-parser ( input quot c -- result )
|
||||||
|
input input-from
|
||||||
|
quot c input-cache
|
||||||
|
input quot cached-result ; inline
|
||||||
|
|
||||||
: run-parser ( input quot -- result )
|
: run-parser ( input quot -- result )
|
||||||
#! If a packrat cache is available, use memoization for
|
#! If a packrat cache is available, use memoization for
|
||||||
#! packrat parsing, otherwise do a standard peg call.
|
#! packrat parsing, otherwise do a standard peg call.
|
||||||
|
@ -48,11 +67,17 @@ GENERIC: (compile) ( parser -- quot )
|
||||||
[ compiled-parser ] with-compilation-unit ;
|
[ compiled-parser ] with-compilation-unit ;
|
||||||
|
|
||||||
: parse ( state parser -- result )
|
: parse ( state parser -- result )
|
||||||
compile execute ;
|
compile execute ; inline
|
||||||
|
|
||||||
: with-packrat ( quot -- result )
|
: with-packrat ( quot -- result )
|
||||||
#! Run the quotation with a packrat cache active.
|
#! Run the quotation with a packrat cache active.
|
||||||
[ H{ } clone packrat ] dip with-variable ;
|
[ H{ } clone packrat ] dip with-variable ; inline
|
||||||
|
|
||||||
|
: packrat-parse ( state parser -- result )
|
||||||
|
[ parse ] with-packrat ;
|
||||||
|
|
||||||
|
: packrat-call ( state quot -- result )
|
||||||
|
with-packrat ; inline
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
|
@ -313,7 +338,7 @@ MEMO: 3seq ( parser1 parser2 parser3 -- parser )
|
||||||
MEMO: 4seq ( parser1 parser2 parser3 parser4 -- parser )
|
MEMO: 4seq ( parser1 parser2 parser3 parser4 -- parser )
|
||||||
4array seq ;
|
4array seq ;
|
||||||
|
|
||||||
MEMO: seq* ( quot -- paser )
|
: seq* ( quot -- paser )
|
||||||
{ } make seq ; inline
|
{ } make seq ; inline
|
||||||
|
|
||||||
MEMO: choice ( seq -- parser )
|
MEMO: choice ( seq -- parser )
|
||||||
|
@ -328,7 +353,7 @@ MEMO: 3choice ( parser1 parser2 parser3 -- parser )
|
||||||
MEMO: 4choice ( parser1 parser2 parser3 parser4 -- parser )
|
MEMO: 4choice ( parser1 parser2 parser3 parser4 -- parser )
|
||||||
4array choice ;
|
4array choice ;
|
||||||
|
|
||||||
MEMO: choice* ( quot -- paser )
|
: choice* ( quot -- paser )
|
||||||
{ } make choice ; inline
|
{ } make choice ; inline
|
||||||
|
|
||||||
MEMO: repeat0 ( parser -- parser )
|
MEMO: repeat0 ( parser -- parser )
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
IN: tools.deploy.tests
|
IN: tools.deploy.tests
|
||||||
USING: tools.test system io.files kernel tools.deploy.config
|
USING: tools.test system io.files kernel tools.deploy.config
|
||||||
tools.deploy.backend math sequences io.launcher arrays
|
tools.deploy.backend math sequences io.launcher arrays
|
||||||
namespaces ;
|
namespaces continuations ;
|
||||||
|
|
||||||
: shake-and-bake ( vocab -- )
|
: shake-and-bake ( vocab -- )
|
||||||
"." resource-path [
|
[ "test.image" temp-file delete-file ] ignore-errors
|
||||||
|
"resource:" [
|
||||||
>r vm
|
>r vm
|
||||||
"test.image" temp-file
|
"test.image" temp-file
|
||||||
r> dup deploy-config make-deploy-image
|
r> dup deploy-config make-deploy-image
|
||||||
|
|
|
@ -62,11 +62,12 @@ T{ macosx-deploy-implementation } deploy-implementation set-global
|
||||||
|
|
||||||
M: macosx-deploy-implementation deploy* ( vocab -- )
|
M: macosx-deploy-implementation deploy* ( vocab -- )
|
||||||
".app deploy tool" assert.app
|
".app deploy tool" assert.app
|
||||||
"." resource-path cd
|
"resource:" [
|
||||||
dup deploy-config [
|
dup deploy-config [
|
||||||
bundle-name dup exists? [ delete-tree ] [ drop ] if
|
bundle-name dup exists? [ delete-tree ] [ drop ] if
|
||||||
[ bundle-name create-app-dir ] keep
|
[ bundle-name create-app-dir ] keep
|
||||||
[ bundle-name deploy.app-image ] keep
|
[ bundle-name deploy.app-image ] keep
|
||||||
namespace make-deploy-image
|
namespace make-deploy-image
|
||||||
bundle-name show-in-finder
|
bundle-name show-in-finder
|
||||||
] bind ;
|
] bind
|
||||||
|
] with-directory ;
|
||||||
|
|
|
@ -81,7 +81,7 @@ IN: tools.deploy.shaker
|
||||||
[
|
[
|
||||||
"class" ,
|
"class" ,
|
||||||
"metaclass" ,
|
"metaclass" ,
|
||||||
"slot-names" ,
|
"layout" ,
|
||||||
deploy-ui? get [
|
deploy-ui? get [
|
||||||
"gestures" ,
|
"gestures" ,
|
||||||
"commands" ,
|
"commands" ,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2005, 2006 Slava Pestov.
|
! Copyright (C) 2005, 2006 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien.syntax combinators system vocabs.loader ;
|
||||||
IN: unix
|
IN: unix
|
||||||
USING: alien.syntax ;
|
|
||||||
|
|
||||||
! FreeBSD
|
! FreeBSD
|
||||||
|
|
||||||
|
@ -15,8 +15,6 @@ USING: alien.syntax ;
|
||||||
: O_TRUNC HEX: 0400 ; inline
|
: O_TRUNC HEX: 0400 ; inline
|
||||||
: O_EXCL HEX: 0800 ; inline
|
: O_EXCL HEX: 0800 ; inline
|
||||||
|
|
||||||
: FD_SETSIZE 1024 ; inline
|
|
||||||
|
|
||||||
: SOL_SOCKET HEX: ffff ; inline
|
: SOL_SOCKET HEX: ffff ; inline
|
||||||
: SO_REUSEADDR HEX: 4 ; inline
|
: SO_REUSEADDR HEX: 4 ; inline
|
||||||
: SO_OOBINLINE HEX: 100 ; inline
|
: SO_OOBINLINE HEX: 100 ; inline
|
||||||
|
@ -83,3 +81,10 @@ C-STRUCT: sockaddr-un
|
||||||
: SEEK_SET 0 ; inline
|
: SEEK_SET 0 ; inline
|
||||||
: SEEK_CUR 1 ; inline
|
: SEEK_CUR 1 ; inline
|
||||||
: SEEK_END 2 ; inline
|
: SEEK_END 2 ; inline
|
||||||
|
|
||||||
|
os {
|
||||||
|
{ "macosx" [ "unix.bsd.macosx" require ] }
|
||||||
|
{ "freebsd" [ "unix.bsd.freebsd" require ] }
|
||||||
|
{ "openbsd" [ "unix.bsd.openbsd" require ] }
|
||||||
|
{ "netbsd" [ "unix.bsd.netbsd" require ] }
|
||||||
|
} case
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
IN: unix
|
||||||
|
|
||||||
|
: FD_SETSIZE 1024 ;
|
|
@ -0,0 +1,3 @@
|
||||||
|
IN: unix
|
||||||
|
|
||||||
|
: FD_SETSIZE 1024 ; inline
|
|
@ -0,0 +1,3 @@
|
||||||
|
IN: unix
|
||||||
|
|
||||||
|
: FD_SETSIZE 256 ; inline
|
|
@ -0,0 +1,3 @@
|
||||||
|
IN: unix
|
||||||
|
|
||||||
|
: FD_SETSIZE 1024 ; inline
|
|
@ -0,0 +1,13 @@
|
||||||
|
USE: alien.syntax
|
||||||
|
IN: unix.kqueue
|
||||||
|
|
||||||
|
C-STRUCT: kevent
|
||||||
|
{ "ulong" "ident" } ! identifier for this event
|
||||||
|
{ "short" "filter" } ! filter for event
|
||||||
|
{ "ushort" "flags" } ! action flags for kqueue
|
||||||
|
{ "uint" "fflags" } ! filter flag value
|
||||||
|
{ "long" "data" } ! filter data value
|
||||||
|
{ "void*" "udata" } ! opaque user data identifier
|
||||||
|
;
|
||||||
|
|
||||||
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
|
@ -1,21 +1,12 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax system sequences vocabs.loader ;
|
||||||
IN: unix.kqueue
|
IN: unix.kqueue
|
||||||
|
|
||||||
|
<< "unix.kqueue." os append require >>
|
||||||
|
|
||||||
FUNCTION: int kqueue ( ) ;
|
FUNCTION: int kqueue ( ) ;
|
||||||
|
|
||||||
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
|
||||||
|
|
||||||
C-STRUCT: kevent
|
|
||||||
{ "ulong" "ident" } ! identifier for this event
|
|
||||||
{ "short" "filter" } ! filter for event
|
|
||||||
{ "ushort" "flags" } ! action flags for kqueue
|
|
||||||
{ "uint" "fflags" } ! filter flag value
|
|
||||||
{ "long" "data" } ! filter data value
|
|
||||||
{ "void*" "udata" } ! opaque user data identifier
|
|
||||||
;
|
|
||||||
|
|
||||||
: EVFILT_READ -1 ; inline
|
: EVFILT_READ -1 ; inline
|
||||||
: EVFILT_WRITE -2 ; inline
|
: EVFILT_WRITE -2 ; inline
|
||||||
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
: EVFILT_AIO -3 ; inline ! attached to aio requests
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
USE: alien.syntax
|
||||||
|
IN: unix.kqueue
|
||||||
|
|
||||||
|
C-STRUCT: kevent
|
||||||
|
{ "ulong" "ident" } ! identifier for this event
|
||||||
|
{ "short" "filter" } ! filter for event
|
||||||
|
{ "ushort" "flags" } ! action flags for kqueue
|
||||||
|
{ "uint" "fflags" } ! filter flag value
|
||||||
|
{ "long" "data" } ! filter data value
|
||||||
|
{ "void*" "udata" } ! opaque user data identifier
|
||||||
|
;
|
||||||
|
|
||||||
|
FUNCTION: int kevent ( int kq, kevent* changelist, int nchanges, kevent* eventlist, int nevents, timespec* timeout ) ;
|
|
@ -0,0 +1,14 @@
|
||||||
|
USE: alien.syntax
|
||||||
|
IN: unix.kqueue
|
||||||
|
|
||||||
|
C-STRUCT: kevent
|
||||||
|
{ "ulong" "ident" } ! identifier for this event
|
||||||
|
{ "uint" "filter" } ! filter for event
|
||||||
|
{ "uint" "flags" } ! action flags for kqueue
|
||||||
|
{ "uint" "fflags" } ! filter flag value
|
||||||
|
{ "longlong" "data" } ! filter data value
|
||||||
|
{ "void*" "udata" } ! opaque user data identifier
|
||||||
|
;
|
||||||
|
|
||||||
|
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
USE: alien.syntax
|
||||||
|
IN: unix.kqueue
|
||||||
|
|
||||||
|
C-STRUCT: kevent
|
||||||
|
{ "ulong" "ident" } ! identifier for this event
|
||||||
|
{ "uint" "filter" } ! filter for event
|
||||||
|
{ "uint" "flags" } ! action flags for kqueue
|
||||||
|
{ "uint" "fflags" } ! filter flag value
|
||||||
|
{ "longlong" "data" } ! filter data value
|
||||||
|
{ "void*" "udata" } ! opaque user data identifier
|
||||||
|
;
|
||||||
|
|
||||||
|
FUNCTION: int kevent ( int kq, kevent* changelist, size_t nchanges, kevent* eventlist, size_t nevents, timespec* timeout ) ;
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
USING: kernel alien.syntax math ;
|
||||||
|
IN: unix.stat
|
||||||
|
|
||||||
|
! NetBSD 4.0
|
||||||
|
|
||||||
|
C-STRUCT: stat
|
||||||
|
{ "dev_t" "st_dev" }
|
||||||
|
{ "mode_t" "st_mode" }
|
||||||
|
{ "ino_t" "st_ino" }
|
||||||
|
{ "nlink_t" "st_nlink" }
|
||||||
|
{ "uid_t" "st_uid" }
|
||||||
|
{ "gid_t" "st_gid" }
|
||||||
|
{ "dev_t" "st_rdev" }
|
||||||
|
{ "timespec" "st_atim" }
|
||||||
|
{ "timespec" "st_mtim" }
|
||||||
|
{ "timespec" "st_ctim" }
|
||||||
|
{ "timespec" "st_birthtim" }
|
||||||
|
{ "off_t" "st_size" }
|
||||||
|
{ "blkcnt_t" "st_blocks" }
|
||||||
|
{ "blksize_t" "st_blksize" }
|
||||||
|
{ "uint32_t" "st_flags" }
|
||||||
|
{ "uint32_t" "st_gen" }
|
||||||
|
{ { "uint32_t" 2 } "st_qspare" } ;
|
||||||
|
|
||||||
|
FUNCTION: int __stat30 ( char* pathname, stat* buf ) ;
|
||||||
|
FUNCTION: int __lstat30 ( char* pathname, stat* buf ) ;
|
||||||
|
|
||||||
|
: stat __stat30 ;
|
||||||
|
: lstat __lstat30 ;
|
|
@ -0,0 +1,29 @@
|
||||||
|
USING: kernel alien.syntax math ;
|
||||||
|
IN: unix.stat
|
||||||
|
|
||||||
|
! NetBSD 4.0
|
||||||
|
|
||||||
|
C-STRUCT: stat
|
||||||
|
{ "dev_t" "st_dev" }
|
||||||
|
{ "ino_t" "st_ino" }
|
||||||
|
{ "mode_t" "st_mode" }
|
||||||
|
{ "nlink_t" "st_nlink" }
|
||||||
|
{ "uid_t" "st_uid" }
|
||||||
|
{ "gid_t" "st_gid" }
|
||||||
|
{ "dev_t" "st_rdev" }
|
||||||
|
{ "timespec" "st_atim" }
|
||||||
|
{ "timespec" "st_mtim" }
|
||||||
|
{ "timespec" "st_ctim" }
|
||||||
|
{ "off_t" "st_size" }
|
||||||
|
{ "blkcnt_t" "st_blocks" }
|
||||||
|
{ "blksize_t" "st_blksize" }
|
||||||
|
{ "uint32_t" "st_flags" }
|
||||||
|
{ "uint32_t" "st_gen" }
|
||||||
|
{ "uint32_t" "st_spare0" }
|
||||||
|
{ "timespec" "st_birthtim" } ;
|
||||||
|
|
||||||
|
FUNCTION: int __stat13 ( char* pathname, stat* buf ) ;
|
||||||
|
FUNCTION: int __lstat13 ( char* pathname, stat* buf ) ;
|
||||||
|
|
||||||
|
: stat __stat13 ; inline
|
||||||
|
: lstat __lstat13 ; inline
|
|
@ -1,26 +1,7 @@
|
||||||
USING: kernel alien.syntax math ;
|
USING: layouts combinators vocabs.loader ;
|
||||||
IN: unix.stat
|
IN: unix.stat
|
||||||
|
|
||||||
! NetBSD 4.0
|
cell-bits {
|
||||||
|
{ 32 [ "unix.stat.netbsd.32" require ] }
|
||||||
C-STRUCT: stat
|
{ 64 [ "unix.stat.netbsd.64" require ] }
|
||||||
{ "dev_t" "st_dev" }
|
} case
|
||||||
{ "mode_t" "st_mode" }
|
|
||||||
{ "ino_t" "st_ino" }
|
|
||||||
{ "nlink_t" "st_nlink" }
|
|
||||||
{ "uid_t" "st_uid" }
|
|
||||||
{ "gid_t" "st_gid" }
|
|
||||||
{ "dev_t" "st_rdev" }
|
|
||||||
{ "timespec" "st_atim" }
|
|
||||||
{ "timespec" "st_mtim" }
|
|
||||||
{ "timespec" "st_ctim" }
|
|
||||||
{ "timespec" "st_birthtim" }
|
|
||||||
{ "off_t" "st_size" }
|
|
||||||
{ "blkcnt_t" "st_blocks" }
|
|
||||||
{ "blksize_t" "st_blksize" }
|
|
||||||
{ "uint32_t" "st_flags" }
|
|
||||||
{ "uint32_t" "st_gen" }
|
|
||||||
{ { "uint32_t" 2 } "st_qspare" } ;
|
|
||||||
|
|
||||||
FUNCTION: int stat ( char* pathname, stat* buf ) ;
|
|
||||||
FUNCTION: int lstat ( char* pathname, stat* buf ) ;
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
USING: alien.syntax ;
|
||||||
|
IN: unix.types
|
||||||
|
|
||||||
|
! NetBSD 4.0
|
||||||
|
|
||||||
|
TYPEDEF: __uint64_t ino_t
|
|
@ -0,0 +1,6 @@
|
||||||
|
USING: alien.syntax ;
|
||||||
|
IN: unix.types
|
||||||
|
|
||||||
|
! NetBSD 4.0
|
||||||
|
|
||||||
|
TYPEDEF: __uint32_t ino_t
|
|
@ -1,4 +1,4 @@
|
||||||
USING: alien.syntax ;
|
USING: alien.syntax combinators layouts vocabs.loader ;
|
||||||
IN: unix.types
|
IN: unix.types
|
||||||
|
|
||||||
! NetBSD 4.0
|
! NetBSD 4.0
|
||||||
|
@ -18,7 +18,6 @@ TYPEDEF: ulonglong u_int64_t
|
||||||
|
|
||||||
TYPEDEF: __uint32_t __dev_t
|
TYPEDEF: __uint32_t __dev_t
|
||||||
TYPEDEF: __uint32_t dev_t
|
TYPEDEF: __uint32_t dev_t
|
||||||
TYPEDEF: __uint64_t ino_t
|
|
||||||
TYPEDEF: __uint32_t mode_t
|
TYPEDEF: __uint32_t mode_t
|
||||||
TYPEDEF: __uint32_t nlink_t
|
TYPEDEF: __uint32_t nlink_t
|
||||||
TYPEDEF: __uint32_t uid_t
|
TYPEDEF: __uint32_t uid_t
|
||||||
|
@ -26,7 +25,12 @@ TYPEDEF: __uint32_t gid_t
|
||||||
TYPEDEF: __int64_t off_t
|
TYPEDEF: __int64_t off_t
|
||||||
TYPEDEF: __int64_t blkcnt_t
|
TYPEDEF: __int64_t blkcnt_t
|
||||||
TYPEDEF: __uint32_t blksize_t
|
TYPEDEF: __uint32_t blksize_t
|
||||||
TYPEDEF: __uint32_t fflags_t
|
TYPEDEF: long ssize_t
|
||||||
TYPEDEF: int ssize_t
|
|
||||||
TYPEDEF: int pid_t
|
TYPEDEF: int pid_t
|
||||||
TYPEDEF: int time_t
|
TYPEDEF: int time_t
|
||||||
|
|
||||||
|
cell-bits {
|
||||||
|
{ 32 [ "unix.types.netbsd.32" require ] }
|
||||||
|
{ 64 [ "unix.types.netbsd.64" require ] }
|
||||||
|
} case
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,5 @@ FUNCTION: ssize_t write ( int fd, void* buf, size_t nbytes ) ;
|
||||||
{ [ linux? ] [ "unix.linux" require ] }
|
{ [ linux? ] [ "unix.linux" require ] }
|
||||||
{ [ bsd? ] [ "unix.bsd" require ] }
|
{ [ bsd? ] [ "unix.bsd" require ] }
|
||||||
{ [ solaris? ] [ "unix.solaris" require ] }
|
{ [ solaris? ] [ "unix.solaris" require ] }
|
||||||
{ [ t ] [ ] }
|
|
||||||
} cond
|
} cond
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@ update_boot_images() {
|
||||||
echo "Deleting old images..."
|
echo "Deleting old images..."
|
||||||
rm checksums.txt* > /dev/null 2>&1
|
rm checksums.txt* > /dev/null 2>&1
|
||||||
rm $BOOT_IMAGE.* > /dev/null 2>&1
|
rm $BOOT_IMAGE.* > /dev/null 2>&1
|
||||||
rm staging.*.image > /dev/null 2>&1
|
rm temp/staging.*.image > /dev/null 2>&1
|
||||||
if [[ -f $BOOT_IMAGE ]] ; then
|
if [[ -f $BOOT_IMAGE ]] ; then
|
||||||
get_url http://factorcode.org/images/latest/checksums.txt
|
get_url http://factorcode.org/images/latest/checksums.txt
|
||||||
factorcode_md5=`cat checksums.txt|grep $BOOT_IMAGE|cut -f2 -d' '`;
|
factorcode_md5=`cat checksums.txt|grep $BOOT_IMAGE|cut -f2 -d' '`;
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#include <ucontext.h>
|
||||||
|
|
||||||
|
#define ucontext_stack_pointer(uap) ((void *)_UC_MACHINE_SP((ucontext_t *)uap))
|
|
@ -0,0 +1,4 @@
|
||||||
|
#include <ucontext.h>
|
||||||
|
|
||||||
|
#define ucontext_stack_pointer(uap) \
|
||||||
|
((void *)(((ucontext_t *)(uap))->uc_mcontext.__gregs[_REG_URSP]))
|
|
@ -1,6 +1,5 @@
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
|
|
||||||
#define ucontext_stack_pointer(uap) ((void *)_UC_MACHINE_SP((ucontext_t *)uap))
|
|
||||||
#define UAP_PROGRAM_COUNTER(uap) _UC_MACHINE_PC((ucontext_t *)uap)
|
#define UAP_PROGRAM_COUNTER(uap) _UC_MACHINE_PC((ucontext_t *)uap)
|
||||||
|
|
||||||
#define UNKNOWN_TYPE_P(file) ((file)->d_type == DT_UNKNOWN)
|
#define UNKNOWN_TYPE_P(file) ((file)->d_type == DT_UNKNOWN)
|
||||||
|
|
|
@ -67,20 +67,29 @@
|
||||||
#endif
|
#endif
|
||||||
#elif defined(__NetBSD__)
|
#elif defined(__NetBSD__)
|
||||||
#define FACTOR_OS_STRING "netbsd"
|
#define FACTOR_OS_STRING "netbsd"
|
||||||
|
|
||||||
|
#if defined(FACTOR_X86)
|
||||||
|
#include "os-netbsd-x86.32.h"
|
||||||
|
#elif defined(FACTOR_AMD64)
|
||||||
|
#include "os-netbsd-x86.64.h"
|
||||||
|
#else
|
||||||
|
#error "Unsupported NetBSD flavor"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "os-netbsd.h"
|
#include "os-netbsd.h"
|
||||||
#elif defined(linux)
|
#elif defined(linux)
|
||||||
#define FACTOR_OS_STRING "linux"
|
#define FACTOR_OS_STRING "linux"
|
||||||
#include "os-linux.h"
|
#include "os-linux.h"
|
||||||
|
|
||||||
#if defined(FACTOR_X86)
|
#if defined(FACTOR_X86)
|
||||||
#include "os-linux-x86-32.h"
|
#include "os-linux-x86.32.h"
|
||||||
#elif defined(FACTOR_PPC)
|
#elif defined(FACTOR_PPC)
|
||||||
#include "os-unix-ucontext.h"
|
#include "os-unix-ucontext.h"
|
||||||
#include "os-linux-ppc.h"
|
#include "os-linux-ppc.h"
|
||||||
#elif defined(FACTOR_ARM)
|
#elif defined(FACTOR_ARM)
|
||||||
#include "os-linux-arm.h"
|
#include "os-linux-arm.h"
|
||||||
#elif defined(FACTOR_AMD64)
|
#elif defined(FACTOR_AMD64)
|
||||||
#include "os-linux-x86-64.h"
|
#include "os-linux-x86.64.h"
|
||||||
#else
|
#else
|
||||||
#error "Unsupported Linux flavor"
|
#error "Unsupported Linux flavor"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue