basis/: more docs

modern-harvey2
Björn Lindqvist 2017-07-09 15:08:49 +02:00
parent 3dd7ed200f
commit 9103d1546f
4 changed files with 47 additions and 10 deletions

View File

@ -8,13 +8,27 @@ HELP: >c-array
{ $values { "seq" sequence } { "c-type" "a C type" } { "array" byte-array } } { $values { "seq" sequence } { "c-type" "a C type" } { "array" byte-array } }
{ $description "Outputs a freshly allocated byte-array whose elements are C type values from the given sequence." } { $description "Outputs a freshly allocated byte-array whose elements are C type values from the given sequence." }
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } { $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
{ $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." } ; { $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." }
{ $examples
{ $unchecked-example
"USING: alien.c-types alien.data prettyprint ;"
"{ 1.0 2.0 3.0 } alien.c-types:float >c-array ."
"float-array{ 1.0 2.0 3.0 }"
}
} ;
HELP: <c-array> HELP: <c-array>
{ $values { "len" "a non-negative integer" } { "c-type" "a C type" } { "array" byte-array } } { $values { "len" "a non-negative integer" } { "c-type" "a C type" } { "array" byte-array } }
{ $description "Creates a byte array large enough to hold " { $snippet "n" } " values of a C type." } { $description "Creates a byte array large enough to hold " { $snippet "n" } " values of a C type." }
{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } { $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." }
{ $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." } ; { $errors "Throws an error if the type does not exist, the necessary specialized array vocabulary is not loaded, or the requested size is negative." }
{ $examples
{ $unchecked-example
"USING: alien.c-types alien.data prettyprint ;"
"10 void* <c-array> ."
"void*-array{ f f f f f f f f f f }"
}
} ;
HELP: c-array{ HELP: c-array{
{ $description "Literal syntax, consists of a C-type followed by a series of values terminated by " { $snippet "}" } } { $description "Literal syntax, consists of a C-type followed by a series of values terminated by " { $snippet "}" } }
@ -138,8 +152,17 @@ ARTICLE: "c-pointers" "Passing pointers to C functions"
"The Factor garbage collector can move byte arrays around, and code passing byte arrays, or objects backed by byte arrays, must obey important guidelines. See " { $link "byte-arrays-gc" } "." } ; "The Factor garbage collector can move byte arrays around, and code passing byte arrays, or objects backed by byte arrays, must obey important guidelines. See " { $link "byte-arrays-gc" } "." } ;
ARTICLE: "c-boxes" "C value boxes" ARTICLE: "c-boxes" "C value boxes"
"Sometimes it is useful to create a byte array storing a single C value, like a struct with a single field. A pair of utility macros exist to make this more convenient:" "Sometimes it is useful to create a byte array storing a single C value, like a struct with a single field. A pair of utility words exist to make this more convenient:"
{ $subsections <ref> deref } ; { $subsections <ref> deref }
"These words can be used to in conjuction with, or instead of, " { $link with-out-parameters } " to handle \"out-parameters\". For example, if a function is declared in the following way:"
{ $code
"FUNCTION: int do_foo ( int* a )"
}
"and writes to the pointer 'a', then it can be called like this:"
{ $code
"1234 int <ref> [ do_foo ] keep int deref"
}
"The stack will then contain the two integers emitted by the 'do_foo' function." ;
ARTICLE: "c-data" "Passing data between Factor and C" ARTICLE: "c-data" "Passing data between Factor and C"
"Two defining characteristics of Factor are dynamic typing and automatic memory management, which are somewhat incompatible with the machine-level data model exposed by C. Factor's C library interface defines its own set of C data types, distinct from Factor language types, together with automatic conversion between Factor values and C types. For example, C integer types must be declared and are fixed-width, whereas Factor supports arbitrary-precision integers." "Two defining characteristics of Factor are dynamic typing and automatic memory management, which are somewhat incompatible with the machine-level data model exposed by C. Factor's C library interface defines its own set of C data types, distinct from Factor language types, together with automatic conversion between Factor values and C types. For example, C integer types must be declared and are fixed-width, whereas Factor supports arbitrary-precision integers."
@ -217,9 +240,21 @@ HELP: deref
{ $values { "c-ptr" c-ptr } { "c-type" "a C type" } { "value" object } } { $values { "c-ptr" c-ptr } { "c-type" "a C type" } { "value" object } }
{ $description "Loads a C value from a byte array." } { $description "Loads a C value from a byte array." }
{ $examples { $examples
{ $example "USING: alien.c-types alien.data prettyprint sequences ;" "321 int <ref> int deref ." "321" } { $example
"USING: alien.c-types alien.data prettyprint sequences ;"
"321 int <ref> int deref ."
"321" }
} ; } ;
ARTICLE: "c-out-params" "Output parameters in C" ARTICLE: "c-out-params" "Output parameters in C"
"A frequently-occurring idiom in C code is the \"out parameter\". If a C function returns more than one value, the caller passes pointers of the correct type, and the C function writes its return values to those locations." "A frequently-occurring idiom in C code is the \"out parameter\". If a C function returns more than one value, the caller passes pointers of the correct type, and the C function writes its return values to those locations."
{ $subsection with-out-parameters } ; { $subsection with-out-parameters }
"The idiom is commonly used for passing back an error message if the function calls fails. For example, if a function is declared in the following way:"
{ $code
"FUNCTION: int do_frob ( int arg1, char** errptr )"
}
"Then it could return 1 on error and 0 otherwise. A correct way to call it would be:"
{ $code
"1234 { c-string } [ do_frob ] with-out-parameters"
}
"which would put the functions return value and error string on the stack." ;

View File

@ -1,5 +1,6 @@
USING: bootstrap.image.private byte-arrays help.markup help.syntax USING: bootstrap.image.private byte-arrays help.markup help.syntax
io.pathnames math quotations sequences strings vectors words ; io.pathnames kernel.private math quotations sequences strings vectors
words ;
IN: bootstrap.image IN: bootstrap.image
HELP: architecture HELP: architecture
@ -37,7 +38,7 @@ HELP: make-jit-no-params
{ "quot" quotation } { "quot" quotation }
{ "code" sequence } { "code" sequence }
} }
{ $description "Like " { $link make-jit } ", except the assembler code can't contain any relocation parameters. The word is used to generate the code templatees that the JIT uses to compile quotations." } ; { $description "Like " { $link make-jit } ", except the assembler code can't contain any parameters. The word is used to generate the code templates (like " { $link JIT-3DIP } " that the JIT uses to compile quotations. The output is a two-tuple containing byte-arrays. The first item are the relocations and the second the machine code." } ;
HELP: sub-primitives HELP: sub-primitives
{ $var-description "An assoc that is set during bootstrapping. It contains symbols defining sub primitives as key, and generated assembly code for those symbols as values." } ; { $var-description "An assoc that is set during bootstrapping. It contains symbols defining sub primitives as key, and generated assembly code for those symbols as values." } ;

View File

@ -6,7 +6,7 @@ HELP: article-children
{ $description "Outputs a sequence of all subsections of " { $snippet "topic" } "." } ; { $description "Outputs a sequence of all subsections of " { $snippet "topic" } "." } ;
HELP: article-parent HELP: article-parent
{ $values { "topic" "an article name or a word" } { "parent" "an article name or a word" } } { $values { "topic" "an article name or a word" } { "parent/f" "an article name or a word" } }
{ $description "Outputs a help topic which contains " { $snippet "topic" } " as a subsection, or " { $link f } "." } ; { $description "Outputs a help topic which contains " { $snippet "topic" } " as a subsection, or " { $link f } "." } ;
HELP: help-path HELP: help-path

View File

@ -27,7 +27,8 @@ HELP: symbolic-link?
HELP: file-systems HELP: file-systems
{ $values { "array" array } } { $values { "array" array } }
{ $description "Returns an array of " { $link file-system-info } " objects returned by iterating the mount points and calling " { $link file-system-info } " on each." } ; { $description "Returns an array of " { $link file-system-info } " objects returned by iterating the mount points and calling " { $link file-system-info } " on each." }
{ $notes "File systems that the process doesn't have access to aren't included." } ;
HELP: file-system-info HELP: file-system-info
{ $values { $values