Merge branch 'master' of git://factorcode.org/git/factor
commit
e5faf8167c
|
@ -8,7 +8,8 @@ $nl
|
|||
"The main entry point to the optimizing compiler:"
|
||||
{ $subsection optimized-recompile-hook }
|
||||
"Removing a word's optimized definition:"
|
||||
{ $subsection decompile } ;
|
||||
{ $subsection decompile }
|
||||
"These words are not usually used directly. Instead, use " { $link "compilation-units" } "." ;
|
||||
|
||||
ARTICLE: "compiler" "Optimizing compiler"
|
||||
"Factor is a fully compiled language implementation with two distinct compilers:"
|
||||
|
|
|
@ -9,7 +9,9 @@ $nl
|
|||
$nl
|
||||
"The parser groups all definitions in a source file into one compilation unit, and parsing words do not need to concern themselves with compilation units. However, if definitions are being created at run time, a compilation unit must be created explicitly:"
|
||||
{ $subsection with-compilation-unit }
|
||||
"Words called to associate a definition with a source file location:"
|
||||
"Compiling a set of words:"
|
||||
{ $subsection compile }
|
||||
"Words called to associate a definition with a compilation unit and a source file location:"
|
||||
{ $subsection remember-definition }
|
||||
{ $subsection remember-class }
|
||||
"Forward reference checking (see " { $link "definition-checking" } "):"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
IN: io.files.tests
|
||||
USING: tools.test io.files io threads kernel continuations io.encodings.ascii ;
|
||||
USING: tools.test io.files io threads kernel continuations io.encodings.ascii
|
||||
io.files.unique sequences strings accessors ;
|
||||
|
||||
[ ] [ "blahblah" temp-file dup exists? [ delete-directory ] [ drop ] if ] unit-test
|
||||
[ ] [ "blahblah" temp-file make-directory ] unit-test
|
||||
|
@ -131,3 +132,15 @@ USING: tools.test io.files io threads kernel continuations io.encodings.ascii ;
|
|||
[ ] [ "append-test" temp-file dup exists? [ delete-file ] [ drop ] if ] unit-test
|
||||
|
||||
[ ] [ "append-test" ascii <file-appender> dispose ] unit-test
|
||||
|
||||
|
||||
|
||||
[ 123 ] [
|
||||
"core" ".test" [
|
||||
[
|
||||
ascii [
|
||||
123 CHAR: a <repetition> >string write
|
||||
] with-file-writer
|
||||
] keep file-info size>>
|
||||
] with-unique-file
|
||||
] unit-test
|
||||
|
|
|
@ -227,6 +227,9 @@ HELP: foldable
|
|||
}
|
||||
"The last restriction ensures that words such as " { $link clone } " do not satisfy the foldable word contract. Indeed, " { $link clone } " will output a mutable object if its input is mutable, and so it is undesirable to evaluate it at compile-time, since doing so would give incorrect semantics for code that clones mutable objects and proceeds to mutate them."
|
||||
}
|
||||
{ $notes
|
||||
"Folding optimizations are not applied if the call site of a word is in the same source file as the word. This is a side-effect of the compilation unit system; see " { $link "compilation-units" } "."
|
||||
}
|
||||
{ $examples "Most operations on numbers are foldable. For example, " { $snippet "2 2 +" } " compiles to a literal 4, since " { $link + } " is declared foldable." } ;
|
||||
|
||||
HELP: flushable
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
USING: io.backend ;
|
||||
IN: io.files.unique.backend
|
||||
|
||||
HOOK: (make-unique-file) io-backend ( path -- stream )
|
||||
HOOK: (make-unique-file) io-backend ( path -- )
|
||||
HOOK: temporary-path io-backend ( -- path )
|
||||
|
|
|
@ -6,18 +6,16 @@ ARTICLE: "unique" "Making and using unique files"
|
|||
"Files:"
|
||||
{ $subsection make-unique-file }
|
||||
{ $subsection with-unique-file }
|
||||
{ $subsection with-temporary-file }
|
||||
"Directories:"
|
||||
{ $subsection make-unique-directory }
|
||||
{ $subsection with-unique-directory }
|
||||
{ $subsection with-temporary-directory } ;
|
||||
{ $subsection with-unique-directory } ;
|
||||
|
||||
ABOUT: "unique"
|
||||
|
||||
HELP: make-unique-file ( prefix suffix -- path stream )
|
||||
{ $values { "prefix" "a string" } { "suffix" "a string" }
|
||||
{ "path" "a pathname string" } { "stream" "an output stream" } }
|
||||
{ $description "Creates a file that is guaranteed not to exist in a platform-specific temporary directory. The file name is composed of a prefix, a number of random digits and letters, and the suffix. Returns the full pathname and a " { $link <writer> } " stream." }
|
||||
{ "path" "a pathname string" } }
|
||||
{ $description "Creates a file that is guaranteed not to exist in a platform-specific temporary directory. The file name is composed of a prefix, a number of random digits and letters, and the suffix. Returns the full pathname." }
|
||||
{ $errors "Throws an error if a new unique file cannot be created after a number of tries. Since each try generates a new random name, the most likely error is incorrect directory permissions on the temporary directory." }
|
||||
{ $see-also with-unique-file } ;
|
||||
|
||||
|
@ -27,24 +25,12 @@ HELP: make-unique-directory ( -- path )
|
|||
{ $errors "Throws an error if the directory cannot be created after a number of tries. Since each try generates a new random name, the most likely error is incorrect directory permissions on the temporary directory." }
|
||||
{ $see-also with-unique-directory } ;
|
||||
|
||||
HELP: with-unique-file ( quot -- path )
|
||||
{ $values { "quot" "a quotation" } { "path" "a pathname string" } }
|
||||
{ $description "Creates a file with " { $link make-unique-file } " and calls " { $link with-stream } " on the newly created file. Returns the full pathname after the stream has been closed." }
|
||||
{ $notes "The unique file will remain after calling this word." }
|
||||
{ $see-also with-temporary-file } ;
|
||||
|
||||
HELP: with-unique-directory ( quot -- path )
|
||||
{ $values { "quot" "a quotation" } { "path" "a pathname string" } }
|
||||
{ $description "Creates a directory with " { $link make-unique-directory } " and calls " { $link with-directory } " on the newly created directory. Returns the full pathname after the quotation has been called." }
|
||||
{ $notes "The directory will remain after calling this word." }
|
||||
{ $see-also with-temporary-directory } ;
|
||||
|
||||
HELP: with-temporary-file ( quot -- )
|
||||
HELP: with-unique-file ( prefix suffix quot -- )
|
||||
{ $values { "quot" "a quotation" } }
|
||||
{ $description "Creates a file with " { $link make-unique-file } " and calls " { $link with-stream } " on the newly created file. The file is deleted after the quotation returns." }
|
||||
{ $see-also with-unique-file } ;
|
||||
{ $description "Creates a file with " { $link make-unique-file } " and calls the quotation with the path name on the stack." }
|
||||
{ $notes "The unique file will be deleted after calling this word." } ;
|
||||
|
||||
HELP: with-temporary-directory ( quot -- )
|
||||
HELP: with-unique-directory ( quot -- )
|
||||
{ $values { "quot" "a quotation" } }
|
||||
{ $description "Creates a directory with " { $link make-unique-directory } " and calls " { $link with-directory } " on the newly created directory. The directory is deleted after the quotation returns." }
|
||||
{ $see-also with-unique-directory } ;
|
||||
{ $description "Creates a directory with " { $link make-unique-directory } " and calls the quotation with the pathname on the stack." }
|
||||
{ $notes "The directory will be deleted after calling this word." } ;
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math math.bitfields combinators.lib math.parser
|
||||
random sequences sequences.lib continuations namespaces
|
||||
io.files io.backend io.nonblocking io arrays
|
||||
io.files.unique.backend system combinators vocabs.loader ;
|
||||
io.files io arrays io.files.unique.backend system
|
||||
combinators vocabs.loader ;
|
||||
IN: io.files.unique
|
||||
|
||||
<PRIVATE
|
||||
|
@ -21,18 +21,15 @@ IN: io.files.unique
|
|||
: unique-retries ( -- n ) 10 ; inline
|
||||
PRIVATE>
|
||||
|
||||
: make-unique-file ( prefix suffix -- path stream )
|
||||
: make-unique-file ( prefix suffix -- path )
|
||||
temporary-path -rot
|
||||
[
|
||||
unique-length random-name swap 3append append-path
|
||||
dup (make-unique-file)
|
||||
] 3curry unique-retries retry ;
|
||||
|
||||
: with-unique-file ( quot -- path )
|
||||
>r f f make-unique-file r> rot [ with-stream ] dip ; inline
|
||||
|
||||
: with-temporary-file ( quot -- )
|
||||
with-unique-file delete-file ; inline
|
||||
: with-unique-file ( prefix suffix quot -- )
|
||||
>r make-unique-file r> keep delete-file ; inline
|
||||
|
||||
: make-unique-directory ( -- path )
|
||||
[
|
||||
|
@ -40,12 +37,9 @@ PRIVATE>
|
|||
dup make-directory
|
||||
] unique-retries retry ;
|
||||
|
||||
: with-unique-directory ( quot -- path )
|
||||
: with-unique-directory ( quot -- )
|
||||
>r make-unique-directory r>
|
||||
[ with-directory ] curry keep ; inline
|
||||
|
||||
: with-temporary-directory ( quot -- )
|
||||
with-unique-directory delete-tree ; inline
|
||||
[ with-directory ] curry keep delete-tree ; inline
|
||||
|
||||
{
|
||||
{ [ unix? ] [ "io.unix.files.unique" ] }
|
||||
|
|
|
@ -5,8 +5,7 @@ IN: io.unix.files.unique
|
|||
: open-unique-flags ( -- flags )
|
||||
{ O_RDWR O_CREAT O_EXCL } flags ;
|
||||
|
||||
M: unix-io (make-unique-file) ( path -- duplex-stream )
|
||||
open-unique-flags file-mode open dup io-error
|
||||
<writer> ;
|
||||
M: unix-io (make-unique-file) ( path -- )
|
||||
open-unique-flags file-mode open dup io-error close ;
|
||||
|
||||
M: unix-io temporary-path ( -- path ) "/tmp" ;
|
||||
|
|
|
@ -2,8 +2,9 @@ USING: kernel system io.files.unique.backend
|
|||
windows.kernel32 io.windows io.nonblocking ;
|
||||
IN: io.windows.files.unique
|
||||
|
||||
M: windows-io (make-unique-file) ( path -- stream )
|
||||
GENERIC_WRITE CREATE_NEW 0 open-file 0 <win32-file> <writer> ;
|
||||
M: windows-io (make-unique-file) ( path -- )
|
||||
GENERIC_WRITE CREATE_NEW 0 open-file
|
||||
CloseHandle win32-error=0/f ;
|
||||
|
||||
M: windows-io temporary-path ( -- path )
|
||||
"TEMP" os-env ;
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
USING: kernel tools.test files.unique ;
|
||||
IN: unix.stat.tests
|
||||
|
||||
[ 123 ] [
|
||||
123 CHAR: a <repetition> [
|
||||
write
|
||||
] with-unique-file file-size>>
|
||||
] unit-test
|
Loading…
Reference in New Issue