From 076ab42dc37caaa946769ec79faee57af0865bb3 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Thu, 17 Sep 2009 22:07:21 -0500 Subject: [PATCH] move some allocation words that don't really have much to do with c types out of alien.c-types into a new alien.data vocab --- basis/alien/arrays/arrays-docs.factor | 2 +- basis/alien/arrays/arrays.factor | 4 +- basis/alien/c-types/c-types-docs.factor | 181 ++---------------- basis/alien/c-types/c-types.factor | 103 ++-------- basis/alien/data/authors.txt | 1 + basis/alien/data/data-docs.factor | 148 ++++++++++++++ basis/alien/data/data.factor | 83 ++++++++ basis/alien/data/summary.txt | 1 + basis/alien/fortran/fortran-tests.factor | 4 +- basis/alien/fortran/fortran.factor | 2 +- .../remote-control/remote-control.factor | 2 +- basis/alien/structs/structs-docs.factor | 2 +- basis/alien/structs/structs-tests.factor | 2 +- basis/bit-arrays/bit-arrays.factor | 2 +- basis/checksums/openssl/openssl.factor | 6 +- .../struct/prettyprint/prettyprint.factor | 2 +- basis/classes/struct/struct-tests.factor | 2 +- basis/classes/struct/struct.factor | 2 +- basis/cocoa/enumeration/enumeration.factor | 11 +- basis/cocoa/plists/plists.factor | 4 +- basis/compiler/tests/intrinsics.factor | 2 +- basis/cpu/ppc/ppc.factor | 2 +- basis/db/postgresql/lib/lib.factor | 10 +- basis/db/sqlite/lib/lib.factor | 2 +- basis/environment/unix/unix.factor | 7 +- basis/environment/winnt/winnt.factor | 11 +- basis/game-input/dinput/dinput.factor | 2 +- .../dinput/keys-array/keys-array.factor | 4 +- basis/game-input/iokit/iokit.factor | 3 +- basis/images/memory/memory.factor | 6 +- .../windows/nt/privileges/privileges.factor | 2 +- basis/io/buffers/buffers-tests.factor | 6 +- basis/io/buffers/buffers.factor | 4 +- basis/io/files/info/windows/windows.factor | 2 +- basis/io/files/windows/windows.factor | 2 +- basis/io/mmap/mmap.factor | 2 +- basis/io/monitors/windows/nt/nt.factor | 4 +- .../io/sockets/secure/openssl/openssl.factor | 8 +- basis/io/sockets/sockets.factor | 2 +- basis/io/sockets/unix/unix.factor | 2 +- basis/io/sockets/windows/nt/nt.factor | 2 +- basis/libc/libc.factor | 20 +- basis/math/blas/matrices/matrices.factor | 14 +- .../vectors/simd/intrinsics/intrinsics.factor | 2 +- basis/opengl/shaders/shaders.factor | 2 +- basis/random/windows/windows.factor | 2 +- .../specialized-arrays-tests.factor | 2 +- .../specialized-arrays.factor | 2 +- basis/tools/deploy/config/config-docs.factor | 2 +- basis/tools/disassembler/disassembler.factor | 2 +- basis/tools/disassembler/udis/udis.factor | 2 +- basis/ui/backend/cocoa/views/views.factor | 10 +- basis/ui/backend/windows/windows.factor | 2 +- basis/unix/process/process.factor | 6 +- basis/unix/utilities/utilities.factor | 2 +- basis/unix/utmpx/utmpx.factor | 8 +- basis/windows/com/com.factor | 2 +- basis/windows/com/wrapper/wrapper.factor | 12 +- .../windows/dinput/constants/constants.factor | 9 +- .../dragdrop-listener.factor | 9 +- basis/windows/errors/errors.factor | 11 +- basis/windows/offscreen/offscreen.factor | 6 +- basis/windows/ole32/ole32.factor | 4 +- basis/x11/xlib/xlib.factor | 6 +- core/alien/strings/strings-tests.factor | 2 +- extra/alien/inline/syntax/syntax-tests.factor | 2 +- extra/alien/marshall/marshall-docs.factor | 2 +- extra/alien/marshall/marshall.factor | 2 +- extra/alien/marshall/private/private.factor | 2 +- extra/alien/marshall/structs/structs.factor | 2 +- extra/audio/wav/wav.factor | 2 +- extra/benchmark/yuv-to-rgb/yuv-to-rgb.factor | 2 +- extra/ecdsa/ecdsa.factor | 2 +- extra/gpu/render/render.factor | 2 +- extra/gpu/shaders/shaders.factor | 14 +- extra/gpu/state/state.factor | 6 +- extra/half-floats/half-floats-tests.factor | 2 +- extra/half-floats/half-floats.factor | 2 +- extra/io/serial/unix/unix.factor | 7 +- extra/memory/piles/piles.factor | 2 +- extra/system-info/windows/ce/ce.factor | 2 +- 81 files changed, 426 insertions(+), 415 deletions(-) create mode 100644 basis/alien/data/authors.txt create mode 100644 basis/alien/data/data-docs.factor create mode 100644 basis/alien/data/data.factor create mode 100644 basis/alien/data/summary.txt diff --git a/basis/alien/arrays/arrays-docs.factor b/basis/alien/arrays/arrays-docs.factor index db4a7bf595..74174485fe 100755 --- a/basis/alien/arrays/arrays-docs.factor +++ b/basis/alien/arrays/arrays-docs.factor @@ -1,5 +1,5 @@ +USING: help.syntax help.markup byte-arrays alien.c-types alien.data ; IN: alien.arrays -USING: help.syntax help.markup byte-arrays alien.c-types ; ARTICLE: "c-arrays" "C arrays" "C arrays are allocated in the same manner as other C data; see " { $link "c-byte-arrays" } " and " { $link "malloc" } "." diff --git a/basis/alien/arrays/arrays.factor b/basis/alien/arrays/arrays.factor index 52c6afa4df..ee75d22c2c 100755 --- a/basis/alien/arrays/arrays.factor +++ b/basis/alien/arrays/arrays.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.strings alien.c-types alien.accessors -arrays words sequences math kernel namespaces fry libc cpu.architecture +USING: alien alien.strings alien.c-types alien.data alien.accessors +arrays words sequences math kernel namespaces fry cpu.architecture io.encodings.utf8 accessors ; IN: alien.arrays diff --git a/basis/alien/c-types/c-types-docs.factor b/basis/alien/c-types/c-types-docs.factor index d9e1f7124a..a9613d2c9f 100755 --- a/basis/alien/c-types/c-types-docs.factor +++ b/basis/alien/c-types/c-types-docs.factor @@ -1,7 +1,25 @@ -IN: alien.c-types USING: alien help.syntax help.markup libc kernel.private byte-arrays math strings hashtables alien.syntax alien.strings sequences io.encodings.string debugger destructors vocabs.loader ; +IN: alien.c-types + +HELP: byte-length +{ $values { "seq" "A byte array or float array" } { "n" "a non-negative integer" } } +{ $contract "Outputs the size of the byte array, struct, or specialized array data in bytes." } ; + +HELP: heap-size +{ $values { "type" string } { "size" integer } } +{ $description "Outputs the number of bytes needed for a heap-allocated value of this C type." } +{ $examples + "On a 32-bit system, you will get the following output:" + { $unchecked-example "USE: alien\n\"void*\" heap-size ." "4" } +} +{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ; + +HELP: stack-size +{ $values { "type" string } { "size" integer } } +{ $description "Outputs the number of bytes to reserve on the C stack by a value of this C type. In most cases this is equal to " { $link heap-size } ", except on some platforms where C structs are passed by invisible reference, in which case a C struct type only uses as much space as a pointer on the C stack." } +{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ; HELP: { $values { "type" hashtable } } @@ -20,24 +38,6 @@ HELP: c-type { $description "Looks up a C type by name." } { $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ; -HELP: heap-size -{ $values { "type" string } { "size" integer } } -{ $description "Outputs the number of bytes needed for a heap-allocated value of this C type." } -{ $examples - "On a 32-bit system, you will get the following output:" - { $unchecked-example "USE: alien\n\"void*\" heap-size ." "4" } -} -{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ; - -HELP: stack-size -{ $values { "type" string } { "size" integer } } -{ $description "Outputs the number of bytes to reserve on the C stack by a value of this C type. In most cases this is equal to " { $link heap-size } ", except on some platforms where C structs are passed by invisible reference, in which case a C struct type only uses as much space as a pointer on the C stack." } -{ $errors "Throws a " { $link no-c-type } " error if the type does not exist." } ; - -HELP: byte-length -{ $values { "seq" "A byte array or float array" } { "n" "a non-negative integer" } } -{ $contract "Outputs the size of the byte array or float array data in bytes as presented to the C library interface." } ; - HELP: c-getter { $values { "name" string } { "quot" { $quotation "( c-ptr n -- obj )" } } } { $description "Outputs a quotation which reads values of this C type from a C structure." } @@ -48,49 +48,6 @@ HELP: c-setter { $description "Outputs a quotation which writes values of this C type to a C structure." } { $errors "Throws an error if the type does not exist." } ; -HELP: -{ $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." } -{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. 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." } ; - -HELP: -{ $values { "type" "a C type" } { "array" byte-array } } -{ $description "Creates a byte array suitable for holding a value with the given C type." } -{ $errors "Throws an " { $link no-c-type } " error if the type does not exist." } ; - -{ malloc-object } related-words - -HELP: memory>byte-array -{ $values { "alien" c-ptr } { "len" "a non-negative integer" } { "byte-array" byte-array } } -{ $description "Reads " { $snippet "len" } " bytes starting from " { $snippet "base" } " and stores them in a new byte array." } ; - -HELP: byte-array>memory -{ $values { "byte-array" byte-array } { "base" c-ptr } } -{ $description "Writes a byte array to memory starting from the " { $snippet "base" } " address." } -{ $warning "This word is unsafe. Improper use can corrupt memory." } ; - -HELP: malloc-array -{ $values { "n" "a non-negative integer" } { "type" "a C type" } { "alien" alien } } -{ $description "Allocates an unmanaged memory block large enough to hold " { $snippet "n" } " values of a C type, then wraps the memory in a sequence object using " { $link } "." } -{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } -{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } -{ $errors "Throws an error if the type does not exist, if the requested size is negative, if a direct specialized array class appropriate to the type is not loaded, or if memory allocation fails." } ; - -HELP: malloc-object -{ $values { "type" "a C type" } { "alien" alien } } -{ $description "Allocates an unmanaged memory block large enough to hold a value of a C type." } -{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } -{ $errors "Throws an error if the type does not exist or if memory allocation fails." } ; - -HELP: malloc-byte-array -{ $values { "byte-array" byte-array } { "alien" alien } } -{ $description "Allocates an unmanaged memory block of the same size as the byte array, and copies the contents of the byte array there." } -{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } -{ $errors "Throws an error if memory allocation fails." } ; - -{ malloc-array } related-words - HELP: box-parameter { $values { "n" integer } { "ctype" string } } { $description "Generates code for converting a C value stored at offset " { $snippet "n" } " from the top of the stack into a Factor object to be pushed on the data stack." } @@ -116,48 +73,6 @@ HELP: define-out { $description "Defines a word " { $snippet "<" { $emphasis "name" } ">" } " with stack effect " { $snippet "( value -- array )" } ". This word allocates a byte array large enough to hold a value with C type " { $snippet "name" } ", and writes the value at the top of the stack to the array." } { $notes "This is an internal word called when defining C types, there is no need to call it on your own." } ; -{ string>alien alien>string malloc-string } related-words - -HELP: malloc-string -{ $values { "string" string } { "encoding" "an encoding descriptor" } { "alien" c-ptr } } -{ $description "Encodes a string together with a trailing null code point using the given encoding, and stores the resulting bytes in a freshly-allocated unmanaged memory block." } -{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } -{ $errors "Throws an error if one of the following conditions occurs:" - { $list - "the string contains null code points" - "the string contains characters not representable using the encoding specified" - "memory allocation fails" - } -} ; - -HELP: require-c-array -{ $values { "c-type" "a C type" } } -{ $description "Generates a specialized array of " { $snippet "c-type" } " using the " { $link } " or " { $link } " vocabularies." } -{ $notes "This word must be called inside a compilation unit. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence types loaded." } ; - -HELP: -{ $values { "alien" c-ptr } { "len" integer } { "c-type" "a C type" } { "array" "a specialized direct array" } } -{ $description "Constructs a new specialized array of length " { $snippet "len" } " and element type " { $snippet "c-type" } " over the range of memory referenced by " { $snippet "alien" } "." } -{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } ; - -ARTICLE: "c-strings" "C strings" -"C string types are arrays with shape " { $snippet "{ \"char*\" encoding }" } ", where " { $snippet "encoding" } " is an encoding descriptor. The type " { $snippet "\"char*\"" } " is an alias for " { $snippet "{ \"char*\" utf8 }" } ". See " { $link "encodings-descriptors" } " for information about encoding descriptors." -$nl -"Passing a Factor string to a C function expecting a C string allocates a " { $link byte-array } " in the Factor heap; the string is then converted to the requested format and a raw pointer is passed to the function." -$nl -"If the conversion fails, for example if the string contains null bytes or characters with values higher than 255, a " { $link c-string-error. } " is thrown." -$nl -"Care must be taken if the C function expects a " { $snippet "char*" } " with a length in bytes, rather than a null-terminated " { $snippet "char*" } "; passing the result of calling " { $link length } " on the string object will not suffice. This is because a Factor string of " { $emphasis "n" } " characters will not necessarily encode to " { $emphasis "n" } " bytes. The correct idiom for C functions which take a string with a length is to first encode the string using " { $link encode } ", and then pass the resulting byte array together with the length of this byte array." -$nl -"Sometimes a C function has a parameter type of " { $snippet "void*" } ", and various data types, among them strings, can be passed in. In this case, strings are not automatically converted to aliens, and instead you must call one of these words:" -{ $subsection string>alien } -{ $subsection malloc-string } -"The first allocates " { $link byte-array } "s, and the latter allocates manually-managed memory which is not moved by the garbage collector and has to be explicitly freed by calling " { $link free } ". See " { $link "byte-arrays-gc" } " for a discussion of the two approaches." -$nl -"A word to read strings from arbitrary addresses:" -{ $subsection alien>string } -"For example, if a C function returns a " { $snippet "char*" } " but stipulates that the caller must deallocate the memory afterward, you must define the function as returning " { $snippet "void*" } ", and call one of the above words before passing the pointer to " { $link free } "." ; - ARTICLE: "byte-arrays-gc" "Byte arrays and the garbage collector" "The Factor garbage collector can move byte arrays around, and it is only safe to pass byte arrays to C functions if the garbage collector will not run while C code still has a reference to the data." $nl @@ -234,61 +149,3 @@ $nl "Fixed-size arrays differ from pointers in that they are allocated inside structures and unions; however when used as function parameters they behave exactly like pointers and thus the dimensions only serve as documentation." $nl "Structure and union types are specified by the name of the structure or union." ; - -ARTICLE: "c-byte-arrays" "Passing data in byte arrays" -"Instances of the " { $link byte-array } " class can be passed to C functions; the C function receives a pointer to the first element of the array." -$nl -"Byte arrays can be allocated directly with a byte count using the " { $link } " word. However in most cases, instead of computing a size in bytes directly, it is easier to use a higher-level word which expects C type and outputs a byte array large enough to hold that type:" -{ $subsection } -{ $subsection } -{ $warning -"The Factor garbage collector can move byte arrays around, and code passing byte arrays to C must obey important guidelines. See " { $link "byte-arrays-gc" } "." } -{ $see-also "c-arrays" } ; - -ARTICLE: "malloc" "Manual memory management" -"Sometimes data passed to C functions must be allocated at a fixed address. See " { $link "byte-arrays-gc" } " for an explanation of when this is the case." -$nl -"Allocating a C datum with a fixed address:" -{ $subsection malloc-object } -{ $subsection malloc-array } -{ $subsection malloc-byte-array } -"There is a set of words in the " { $vocab-link "libc" } " vocabulary which directly call C standard library memory management functions:" -{ $subsection malloc } -{ $subsection calloc } -{ $subsection realloc } -"You must always free pointers returned by any of the above words when the block of memory is no longer in use:" -{ $subsection free } -"Utilities for automatically freeing memory in conjunction with " { $link with-destructors } ":" -{ $subsection &free } -{ $subsection |free } -"The " { $link &free } " and " { $link |free } " words are generated using " { $link "alien.destructors" } "." -$nl -"You can unsafely copy a range of bytes from one memory location to another:" -{ $subsection memcpy } -"You can copy a range of bytes from memory into a byte array:" -{ $subsection memory>byte-array } -"You can copy a byte array to memory unsafely:" -{ $subsection byte-array>memory } ; - -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." -$nl -"Furthermore, Factor's garbage collector can move objects in memory; for a discussion of the consequences, see " { $link "byte-arrays-gc" } "." -{ $subsection "c-types-specs" } -{ $subsection "c-byte-arrays" } -{ $subsection "malloc" } -{ $subsection "c-strings" } -{ $subsection "c-arrays" } -{ $subsection "c-out-params" } -"Important guidelines for passing data in byte arrays:" -{ $subsection "byte-arrays-gc" } -"C-style enumerated types are supported:" -{ $subsection POSTPONE: C-ENUM: } -"C types can be aliased for convenience and consitency with native library documentation:" -{ $subsection POSTPONE: TYPEDEF: } -"New C types can be defined:" -{ $subsection "c-structs" } -{ $subsection "c-unions" } -"A utility for defining " { $link "destructors" } " for deallocating memory:" -{ $subsection "alien.destructors" } -{ $see-also "aliens" } ; diff --git a/basis/alien/c-types/c-types.factor b/basis/alien/c-types/c-types.factor index 6d63987265..fa27e29c04 100755 --- a/basis/alien/c-types/c-types.factor +++ b/basis/alien/c-types/c-types.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2004, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: byte-arrays arrays assocs kernel kernel.private libc math +USING: byte-arrays arrays assocs kernel kernel.private math namespaces make parser sequences strings words splitting math.parser cpu.architecture alien alien.accessors alien.strings quotations layouts system compiler.units io io.files io.encodings.binary @@ -22,8 +22,6 @@ SYMBOLS: DEFER: DEFER: *char -: little-endian? ( -- ? ) 1 *char 1 = ; foldable - TUPLE: abstract-c-type { class class initial: object } { boxed-class class initial: object } @@ -104,43 +102,6 @@ M: c-type-name c-struct? ! These words being foldable means that words need to be ! recompiled if a C type is redefined. Even so, folding the ! size facilitates some optimizations. -GENERIC: heap-size ( type -- size ) foldable - -M: c-type-name heap-size c-type heap-size ; - -M: abstract-c-type heap-size size>> ; - -GENERIC: require-c-array ( c-type -- ) - -M: array require-c-array first require-c-array ; - -GENERIC: c-array-constructor ( c-type -- word ) - -GENERIC: c-(array)-constructor ( c-type -- word ) - -GENERIC: c-direct-array-constructor ( c-type -- word ) - -GENERIC: ( len c-type -- array ) - -M: c-type-name - c-array-constructor execute( len -- array ) ; inline - -GENERIC: (c-array) ( len c-type -- array ) - -M: c-type-name (c-array) - c-(array)-constructor execute( len -- array ) ; inline - -GENERIC: ( alien len c-type -- array ) - -M: c-type-name - c-direct-array-constructor execute( alien len -- array ) ; inline - -: malloc-array ( n type -- alien ) - [ heap-size calloc ] [ ] 2bi ; inline - -: (malloc-array) ( n type -- alien ) - [ heap-size * malloc ] [ ] 2bi ; inline - GENERIC: c-type-class ( name -- class ) M: abstract-c-type c-type-class class>> ; @@ -239,22 +200,19 @@ M: c-type unbox-return f swap c-type-unbox ; M: c-type-name unbox-return c-type unbox-return ; -GENERIC: stack-size ( type -- size ) foldable +: little-endian? ( -- ? ) 1 *char 1 = ; foldable -M: c-type-name stack-size c-type stack-size ; +GENERIC: heap-size ( type -- size ) foldable -M: c-type stack-size size>> cell align ; +M: c-type-name heap-size c-type heap-size ; -MIXIN: value-type +M: abstract-c-type heap-size size>> ; -M: value-type c-type-rep drop int-rep ; +GENERIC: stack-size ( type -- size ) foldable -M: value-type c-type-getter - drop [ swap ] ; +M: c-type-name stack-size c-type stack-size ; -M: value-type c-type-setter ( type -- quot ) - [ c-type-getter ] [ c-type-unboxer-quot ] [ heap-size ] tri - '[ @ swap @ _ memcpy ] ; +M: c-type stack-size size>> cell align ; GENERIC: byte-length ( seq -- n ) flushable @@ -262,6 +220,8 @@ M: byte-array byte-length length ; inline M: f byte-length drop 0 ; inline +MIXIN: value-type + : c-getter ( name -- quot ) c-type-getter [ [ "Cannot read struct fields with this type" throw ] @@ -275,36 +235,6 @@ M: f byte-length drop 0 ; inline [ "Cannot write struct fields with this type" throw ] ] unless* ; -: ( type -- array ) - heap-size ; inline - -: (c-object) ( type -- array ) - heap-size (byte-array) ; inline - -: malloc-object ( type -- alien ) - 1 swap heap-size calloc ; inline - -: (malloc-object) ( type -- alien ) - heap-size malloc ; inline - -: malloc-byte-array ( byte-array -- alien ) - dup byte-length [ nip malloc dup ] 2keep memcpy ; - -: memory>byte-array ( alien len -- byte-array ) - [ nip (byte-array) dup ] 2keep memcpy ; - -: malloc-string ( string encoding -- alien ) - string>alien malloc-byte-array ; - -M: memory-stream stream-read - [ - [ index>> ] [ alien>> ] bi - swap memory>byte-array - ] [ [ + ] change-index drop ] 2bi ; - -: byte-array>memory ( byte-array base -- ) - swap dup byte-length memcpy ; inline - : array-accessor ( type quot -- def ) [ \ swap , [ heap-size , [ * >fixnum ] % ] [ % ] bi* @@ -352,22 +282,15 @@ M: long-long-type box-return ( type -- ) : define-out ( name -- ) [ "alien.c-types" constructor-word ] - [ dup c-setter '[ _ [ 0 @ ] keep ] ] bi + [ dup c-setter '[ _ heap-size [ 0 @ ] keep ] ] bi (( value -- c-ptr )) define-inline ; -: >c-bool ( ? -- int ) 1 0 ? ; inline - -: c-bool> ( int -- ? ) 0 = not ; inline - : define-primitive-type ( type name -- ) [ typedef ] [ name>> define-deref ] [ name>> define-out ] tri ; -: malloc-file-contents ( path -- alien len ) - binary file-contents [ malloc-byte-array ] [ length ] bi ; - : if-void ( type true false -- ) pick void? [ drop nip call ] [ nip call ] if ; inline @@ -510,8 +433,8 @@ SYMBOLS: \ uchar define-primitive-type - [ alien-unsigned-1 c-bool> ] >>getter - [ [ >c-bool ] 2dip set-alien-unsigned-1 ] >>setter + [ alien-unsigned-1 0 = not ] >>getter + [ [ 1 0 ? ] 2dip set-alien-unsigned-1 ] >>setter 1 >>size 1 >>align "box_boolean" >>boxer diff --git a/basis/alien/data/authors.txt b/basis/alien/data/authors.txt new file mode 100644 index 0000000000..1901f27a24 --- /dev/null +++ b/basis/alien/data/authors.txt @@ -0,0 +1 @@ +Slava Pestov diff --git a/basis/alien/data/data-docs.factor b/basis/alien/data/data-docs.factor new file mode 100644 index 0000000000..19bfaaa8ce --- /dev/null +++ b/basis/alien/data/data-docs.factor @@ -0,0 +1,148 @@ +USING: alien alien.c-types help.syntax help.markup libc kernel.private +byte-arrays math strings hashtables alien.syntax alien.strings sequences +io.encodings.string debugger destructors vocabs.loader ; +IN: alien.data + +HELP: +{ $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." } +{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. 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." } ; + +HELP: +{ $values { "type" "a C type" } { "array" byte-array } } +{ $description "Creates a byte array suitable for holding a value with the given C type." } +{ $errors "Throws an " { $link no-c-type } " error if the type does not exist." } ; + +{ malloc-object } related-words + +HELP: memory>byte-array +{ $values { "alien" c-ptr } { "len" "a non-negative integer" } { "byte-array" byte-array } } +{ $description "Reads " { $snippet "len" } " bytes starting from " { $snippet "base" } " and stores them in a new byte array." } ; + +HELP: byte-array>memory +{ $values { "byte-array" byte-array } { "base" c-ptr } } +{ $description "Writes a byte array to memory starting from the " { $snippet "base" } " address." } +{ $warning "This word is unsafe. Improper use can corrupt memory." } ; + +HELP: malloc-array +{ $values { "n" "a non-negative integer" } { "type" "a C type" } { "alien" alien } } +{ $description "Allocates an unmanaged memory block large enough to hold " { $snippet "n" } " values of a C type, then wraps the memory in a sequence object using " { $link } "." } +{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } +{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } +{ $errors "Throws an error if the type does not exist, if the requested size is negative, if a direct specialized array class appropriate to the type is not loaded, or if memory allocation fails." } ; + +HELP: malloc-object +{ $values { "type" "a C type" } { "alien" alien } } +{ $description "Allocates an unmanaged memory block large enough to hold a value of a C type." } +{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } +{ $errors "Throws an error if the type does not exist or if memory allocation fails." } ; + +HELP: malloc-byte-array +{ $values { "byte-array" byte-array } { "alien" alien } } +{ $description "Allocates an unmanaged memory block of the same size as the byte array, and copies the contents of the byte array there." } +{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } +{ $errors "Throws an error if memory allocation fails." } ; + +{ malloc-array } related-words + +{ string>alien alien>string malloc-string } related-words + +ARTICLE: "malloc" "Manual memory management" +"Sometimes data passed to C functions must be allocated at a fixed address. See " { $link "byte-arrays-gc" } " for an explanation of when this is the case." +$nl +"Allocating a C datum with a fixed address:" +{ $subsection malloc-object } +{ $subsection malloc-array } +{ $subsection malloc-byte-array } +"There is a set of words in the " { $vocab-link "libc" } " vocabulary which directly call C standard library memory management functions:" +{ $subsection malloc } +{ $subsection calloc } +{ $subsection realloc } +"You must always free pointers returned by any of the above words when the block of memory is no longer in use:" +{ $subsection free } +"Utilities for automatically freeing memory in conjunction with " { $link with-destructors } ":" +{ $subsection &free } +{ $subsection |free } +"The " { $link &free } " and " { $link |free } " words are generated using " { $link "alien.destructors" } "." +$nl +"You can unsafely copy a range of bytes from one memory location to another:" +{ $subsection memcpy } +"You can copy a range of bytes from memory into a byte array:" +{ $subsection memory>byte-array } +"You can copy a byte array to memory unsafely:" +{ $subsection byte-array>memory } ; + + +ARTICLE: "c-byte-arrays" "Passing data in byte arrays" +"Instances of the " { $link byte-array } " class can be passed to C functions; the C function receives a pointer to the first element of the array." +$nl +"Byte arrays can be allocated directly with a byte count using the " { $link } " word. However in most cases, instead of computing a size in bytes directly, it is easier to use a higher-level word which expects C type and outputs a byte array large enough to hold that type:" +{ $subsection } +{ $subsection } +{ $warning +"The Factor garbage collector can move byte arrays around, and code passing byte arrays to C must obey important guidelines. See " { $link "byte-arrays-gc" } "." } +{ $see-also "c-arrays" } ; + +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." +$nl +"Furthermore, Factor's garbage collector can move objects in memory; for a discussion of the consequences, see " { $link "byte-arrays-gc" } "." +{ $subsection "c-types-specs" } +{ $subsection "c-byte-arrays" } +{ $subsection "malloc" } +{ $subsection "c-strings" } +{ $subsection "c-arrays" } +{ $subsection "c-out-params" } +"Important guidelines for passing data in byte arrays:" +{ $subsection "byte-arrays-gc" } +"C-style enumerated types are supported:" +{ $subsection POSTPONE: C-ENUM: } +"C types can be aliased for convenience and consitency with native library documentation:" +{ $subsection POSTPONE: TYPEDEF: } +"New C types can be defined:" +{ $subsection "c-structs" } +{ $subsection "c-unions" } +"A utility for defining " { $link "destructors" } " for deallocating memory:" +{ $subsection "alien.destructors" } +{ $see-also "aliens" } ; +HELP: malloc-string +{ $values { "string" string } { "encoding" "an encoding descriptor" } { "alien" c-ptr } } +{ $description "Encodes a string together with a trailing null code point using the given encoding, and stores the resulting bytes in a freshly-allocated unmanaged memory block." } +{ $warning "Don't forget to deallocate the memory with a call to " { $link free } "." } +{ $errors "Throws an error if one of the following conditions occurs:" + { $list + "the string contains null code points" + "the string contains characters not representable using the encoding specified" + "memory allocation fails" + } +} ; + +HELP: require-c-array +{ $values { "c-type" "a C type" } } +{ $description "Generates a specialized array of " { $snippet "c-type" } " using the " { $link } " or " { $link } " vocabularies." } +{ $notes "This word must be called inside a compilation unit. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence types loaded." } ; + +HELP: +{ $values { "alien" c-ptr } { "len" integer } { "c-type" "a C type" } { "array" "a specialized direct array" } } +{ $description "Constructs a new specialized array of length " { $snippet "len" } " and element type " { $snippet "c-type" } " over the range of memory referenced by " { $snippet "alien" } "." } +{ $notes "The appropriate specialized array vocabulary must be loaded; otherwise, an error will be thrown. The vocabulary can be loaded with the " { $link require-c-array } " word. See the " { $vocab-link "specialized-arrays" } " vocabulary for details on the underlying sequence type constructed." } ; + +ARTICLE: "c-strings" "C strings" +"C string types are arrays with shape " { $snippet "{ \"char*\" encoding }" } ", where " { $snippet "encoding" } " is an encoding descriptor. The type " { $snippet "\"char*\"" } " is an alias for " { $snippet "{ \"char*\" utf8 }" } ". See " { $link "encodings-descriptors" } " for information about encoding descriptors." +$nl +"Passing a Factor string to a C function expecting a C string allocates a " { $link byte-array } " in the Factor heap; the string is then converted to the requested format and a raw pointer is passed to the function." +$nl +"If the conversion fails, for example if the string contains null bytes or characters with values higher than 255, a " { $link c-string-error. } " is thrown." +$nl +"Care must be taken if the C function expects a " { $snippet "char*" } " with a length in bytes, rather than a null-terminated " { $snippet "char*" } "; passing the result of calling " { $link length } " on the string object will not suffice. This is because a Factor string of " { $emphasis "n" } " characters will not necessarily encode to " { $emphasis "n" } " bytes. The correct idiom for C functions which take a string with a length is to first encode the string using " { $link encode } ", and then pass the resulting byte array together with the length of this byte array." +$nl +"Sometimes a C function has a parameter type of " { $snippet "void*" } ", and various data types, among them strings, can be passed in. In this case, strings are not automatically converted to aliens, and instead you must call one of these words:" +{ $subsection string>alien } +{ $subsection malloc-string } +"The first allocates " { $link byte-array } "s, and the latter allocates manually-managed memory which is not moved by the garbage collector and has to be explicitly freed by calling " { $link free } ". See " { $link "byte-arrays-gc" } " for a discussion of the two approaches." +$nl +"A word to read strings from arbitrary addresses:" +{ $subsection alien>string } +"For example, if a C function returns a " { $snippet "char*" } " but stipulates that the caller must deallocate the memory afterward, you must define the function as returning " { $snippet "void*" } ", and call one of the above words before passing the pointer to " { $link free } "." ; + diff --git a/basis/alien/data/data.factor b/basis/alien/data/data.factor new file mode 100644 index 0000000000..1f2c5160e1 --- /dev/null +++ b/basis/alien/data/data.factor @@ -0,0 +1,83 @@ +! (c)2009 Slava Pestov, Joe Groff bsd license +USING: accessors alien alien.c-types alien.strings arrays +byte-arrays cpu.architecture fry io io.encodings.binary +io.files io.streams.memory kernel libc math sequences ; +IN: alien.data + +GENERIC: require-c-array ( c-type -- ) + +M: array require-c-array first require-c-array ; + +GENERIC: c-array-constructor ( c-type -- word ) + +GENERIC: c-(array)-constructor ( c-type -- word ) + +GENERIC: c-direct-array-constructor ( c-type -- word ) + +GENERIC: ( len c-type -- array ) + +M: c-type-name + c-array-constructor execute( len -- array ) ; inline + +GENERIC: (c-array) ( len c-type -- array ) + +M: c-type-name (c-array) + c-(array)-constructor execute( len -- array ) ; inline + +GENERIC: ( alien len c-type -- array ) + +M: c-type-name + c-direct-array-constructor execute( alien len -- array ) ; inline + +: malloc-array ( n type -- alien ) + [ heap-size calloc ] [ ] 2bi ; inline + +: (malloc-array) ( n type -- alien ) + [ heap-size * malloc ] [ ] 2bi ; inline + +: ( type -- array ) + heap-size ; inline + +: (c-object) ( type -- array ) + heap-size (byte-array) ; inline + +: malloc-object ( type -- alien ) + 1 swap heap-size calloc ; inline + +: (malloc-object) ( type -- alien ) + heap-size malloc ; inline + +: malloc-byte-array ( byte-array -- alien ) + dup byte-length [ nip malloc dup ] 2keep memcpy ; + +: memory>byte-array ( alien len -- byte-array ) + [ nip (byte-array) dup ] 2keep memcpy ; + +: malloc-string ( string encoding -- alien ) + string>alien malloc-byte-array ; + +: malloc-file-contents ( path -- alien len ) + binary file-contents [ malloc-byte-array ] [ length ] bi ; + +M: memory-stream stream-read + [ + [ index>> ] [ alien>> ] bi + swap memory>byte-array + ] [ [ + ] change-index drop ] 2bi ; + +: byte-array>memory ( byte-array base -- ) + swap dup byte-length memcpy ; inline + +: >c-bool ( ? -- int ) 1 0 ? ; inline + +: c-bool> ( int -- ? ) 0 = not ; inline + +M: value-type c-type-rep drop int-rep ; + +M: value-type c-type-getter + drop [ swap ] ; + +M: value-type c-type-setter ( type -- quot ) + [ c-type-getter ] [ c-type-unboxer-quot ] [ heap-size ] tri + '[ @ swap @ _ memcpy ] ; + diff --git a/basis/alien/data/summary.txt b/basis/alien/data/summary.txt new file mode 100644 index 0000000000..addddb2da4 --- /dev/null +++ b/basis/alien/data/summary.txt @@ -0,0 +1 @@ +Words for allocating objects and arrays of C types diff --git a/basis/alien/fortran/fortran-tests.factor b/basis/alien/fortran/fortran-tests.factor index 9d893b95c4..238207f192 100644 --- a/basis/alien/fortran/fortran-tests.factor +++ b/basis/alien/fortran/fortran-tests.factor @@ -1,7 +1,7 @@ ! (c) 2009 Joe Groff, see BSD license USING: accessors alien alien.c-types alien.complex -alien.fortran alien.fortran.private alien.strings classes.struct -arrays assocs byte-arrays combinators fry +alien.data alien.fortran alien.fortran.private alien.strings +classes.struct arrays assocs byte-arrays combinators fry generalizations io.encodings.ascii kernel macros macros.expander namespaces sequences shuffle tools.test ; IN: alien.fortran.tests diff --git a/basis/alien/fortran/fortran.factor b/basis/alien/fortran/fortran.factor index 3670a376e1..bf8721b549 100644 --- a/basis/alien/fortran/fortran.factor +++ b/basis/alien/fortran/fortran.factor @@ -1,5 +1,5 @@ ! (c) 2009 Joe Groff, see BSD license -USING: accessors alien alien.c-types alien.complex grouping +USING: accessors alien alien.c-types alien.complex alien.data grouping alien.strings alien.syntax arrays ascii assocs byte-arrays combinators combinators.short-circuit fry generalizations kernel lexer macros math math.parser namespaces parser sequences diff --git a/basis/alien/remote-control/remote-control.factor b/basis/alien/remote-control/remote-control.factor index b72c79e478..4ccd0e7488 100644 --- a/basis/alien/remote-control/remote-control.factor +++ b/basis/alien/remote-control/remote-control.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien alien.c-types alien.strings parser +USING: accessors alien alien.data alien.strings parser threads words kernel.private kernel io.encodings.utf8 eval ; IN: alien.remote-control diff --git a/basis/alien/structs/structs-docs.factor b/basis/alien/structs/structs-docs.factor index 62a3817fec..d0485ae4ba 100644 --- a/basis/alien/structs/structs-docs.factor +++ b/basis/alien/structs/structs-docs.factor @@ -1,4 +1,4 @@ -USING: alien.c-types strings help.markup help.syntax alien.syntax +USING: alien.c-types alien.data strings help.markup help.syntax alien.syntax sequences io arrays kernel words assocs namespaces ; IN: alien.structs diff --git a/basis/alien/structs/structs-tests.factor b/basis/alien/structs/structs-tests.factor index 3f84377d5c..d22aa5ee45 100755 --- a/basis/alien/structs/structs-tests.factor +++ b/basis/alien/structs/structs-tests.factor @@ -1,4 +1,4 @@ -USING: alien alien.syntax alien.c-types kernel tools.test +USING: alien alien.syntax alien.c-types alien.data kernel tools.test sequences system libc words vocabs namespaces layouts ; IN: alien.structs.tests diff --git a/basis/bit-arrays/bit-arrays.factor b/basis/bit-arrays/bit-arrays.factor index 0f87cf4cb6..f5613da6b5 100644 --- a/basis/bit-arrays/bit-arrays.factor +++ b/basis/bit-arrays/bit-arrays.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2007, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types accessors math alien.accessors kernel +USING: alien.c-types alien.data accessors math alien.accessors kernel kernel.private sequences sequences.private byte-arrays parser prettyprint.custom fry ; IN: bit-arrays diff --git a/basis/checksums/openssl/openssl.factor b/basis/checksums/openssl/openssl.factor index 6f21d96e86..673500b62a 100644 --- a/basis/checksums/openssl/openssl.factor +++ b/basis/checksums/openssl/openssl.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors byte-arrays alien.c-types kernel continuations -destructors sequences io openssl openssl.libcrypto checksums -checksums.stream ; +USING: accessors byte-arrays alien.c-types alien.data kernel +continuations destructors sequences io openssl openssl.libcrypto +checksums checksums.stream ; IN: checksums.openssl ERROR: unknown-digest name ; diff --git a/basis/classes/struct/prettyprint/prettyprint.factor b/basis/classes/struct/prettyprint/prettyprint.factor index 7f57e8568a..43d24e5716 100644 --- a/basis/classes/struct/prettyprint/prettyprint.factor +++ b/basis/classes/struct/prettyprint/prettyprint.factor @@ -1,5 +1,5 @@ ! (c)Joe Groff bsd license -USING: accessors alien alien.c-types alien.prettyprint arrays +USING: accessors alien alien.c-types alien.data alien.prettyprint arrays assocs classes classes.struct combinators combinators.short-circuit continuations fry kernel libc make math math.parser mirrors prettyprint.backend prettyprint.custom prettyprint.sections diff --git a/basis/classes/struct/struct-tests.factor b/basis/classes/struct/struct-tests.factor index e9e45487f9..b60bfa375b 100755 --- a/basis/classes/struct/struct-tests.factor +++ b/basis/classes/struct/struct-tests.factor @@ -1,5 +1,5 @@ ! (c)Joe Groff bsd license -USING: accessors alien alien.c-types ascii +USING: accessors alien alien.c-types alien.data ascii assocs byte-arrays classes.struct classes.tuple.private combinators compiler.tree.debugger compiler.units destructors io.encodings.utf8 io.pathnames io.streams.string kernel libc diff --git a/basis/classes/struct/struct.factor b/basis/classes/struct/struct.factor index dabdead10c..7e99328652 100755 --- a/basis/classes/struct/struct.factor +++ b/basis/classes/struct/struct.factor @@ -1,5 +1,5 @@ ! (c)Joe Groff bsd license -USING: accessors alien alien.c-types alien.parser arrays +USING: accessors alien alien.c-types alien.data alien.parser arrays byte-arrays classes classes.parser classes.tuple classes.tuple.parser classes.tuple.private combinators combinators.short-circuit combinators.smart cpu.architecture definitions functors.backend diff --git a/basis/cocoa/enumeration/enumeration.factor b/basis/cocoa/enumeration/enumeration.factor index caa83331ab..c7bdf625d9 100755 --- a/basis/cocoa/enumeration/enumeration.factor +++ b/basis/cocoa/enumeration/enumeration.factor @@ -1,17 +1,16 @@ ! Copyright (C) 2008 Joe Groff. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors kernel classes.struct cocoa cocoa.types alien.c-types -locals math sequences vectors fry libc destructors ; +USING: accessors kernel classes.struct cocoa cocoa.runtime cocoa.types alien.data +locals math sequences vectors fry libc destructors specialized-arrays ; +SPECIALIZED-ARRAY: id IN: cocoa.enumeration -<< "id" require-c-array >> - CONSTANT: NS-EACH-BUFFER-SIZE 16 : with-enumeration-buffers ( quot -- ) '[ NSFastEnumerationState malloc-struct &free - NS-EACH-BUFFER-SIZE "id" malloc-array &free + NS-EACH-BUFFER-SIZE id malloc-array &free NS-EACH-BUFFER-SIZE @ ] with-destructors ; inline @@ -19,7 +18,7 @@ CONSTANT: NS-EACH-BUFFER-SIZE 16 :: (NSFastEnumeration-each) ( object quot: ( elt -- ) state stackbuf count -- ) object state stackbuf count -> countByEnumeratingWithState:objects:count: :> items-count items-count 0 = [ - state itemsPtr>> [ items-count "id" ] [ stackbuf ] if* :> items + state itemsPtr>> [ items-count id ] [ stackbuf ] if* :> items items-count iota [ items nth quot call ] each object quot state stackbuf count (NSFastEnumeration-each) ] unless ; inline recursive diff --git a/basis/cocoa/plists/plists.factor b/basis/cocoa/plists/plists.factor index ceb097bb3a..86b13b2ddc 100644 --- a/basis/cocoa/plists/plists.factor +++ b/basis/cocoa/plists/plists.factor @@ -4,8 +4,8 @@ USING: strings arrays hashtables assocs sequences fry macros cocoa.messages cocoa.classes cocoa.application cocoa kernel namespaces io.backend math cocoa.enumeration byte-arrays -combinators alien.c-types words core-foundation quotations -core-foundation.data core-foundation.utilities ; +combinators alien.c-types alien.data words core-foundation +quotations core-foundation.data core-foundation.utilities ; IN: cocoa.plists : >plist ( value -- plist ) >cf -> autorelease ; diff --git a/basis/compiler/tests/intrinsics.factor b/basis/compiler/tests/intrinsics.factor index dc2f5d9257..24114e0ccb 100644 --- a/basis/compiler/tests/intrinsics.factor +++ b/basis/compiler/tests/intrinsics.factor @@ -3,7 +3,7 @@ math math.constants math.private math.integers.private sequences strings tools.test words continuations sequences.private hashtables.private byte-arrays system random layouts vectors sbufs strings.private slots.private alien math.order -alien.accessors alien.c-types alien.syntax alien.strings +alien.accessors alien.c-types alien.data alien.syntax alien.strings namespaces libc io.encodings.ascii classes compiler ; FROM: math => float ; IN: compiler.tests.intrinsics diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor index 063f3b37b1..72ad543307 100644 --- a/basis/cpu/ppc/ppc.factor +++ b/basis/cpu/ppc/ppc.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs sequences kernel combinators make math math.order math.ranges system namespaces locals layouts words -alien alien.accessors alien.c-types literals cpu.architecture +alien alien.accessors alien.c-types alien.data literals cpu.architecture cpu.ppc.assembler cpu.ppc.assembler.backend compiler.cfg.registers compiler.cfg.instructions compiler.cfg.comparisons compiler.codegen.fixup compiler.cfg.intrinsics diff --git a/basis/db/postgresql/lib/lib.factor b/basis/db/postgresql/lib/lib.factor index 2278afe4ed..5398e669ed 100644 --- a/basis/db/postgresql/lib/lib.factor +++ b/basis/db/postgresql/lib/lib.factor @@ -2,11 +2,11 @@ ! See http://factorcode.org/license.txt for BSD license. USING: arrays continuations db io kernel math namespaces quotations sequences db.postgresql.ffi alien alien.c-types -db.types tools.walker ascii splitting math.parser combinators -libc calendar.format byte-arrays destructors prettyprint -accessors strings serialize io.encodings.binary io.encodings.utf8 -alien.strings io.streams.byte-array summary present urls -specialized-arrays db.private ; +alien.data db.types tools.walker ascii splitting math.parser +combinators libc calendar.format byte-arrays destructors +prettyprint accessors strings serialize io.encodings.binary +io.encodings.utf8 alien.strings io.streams.byte-array summary +present urls specialized-arrays db.private ; SPECIALIZED-ARRAY: uint SPECIALIZED-ARRAY: void* IN: db.postgresql.lib diff --git a/basis/db/sqlite/lib/lib.factor b/basis/db/sqlite/lib/lib.factor index 3565b09856..163026f5ff 100644 --- a/basis/db/sqlite/lib/lib.factor +++ b/basis/db/sqlite/lib/lib.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Chris Double, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types arrays assocs kernel math math.parser +USING: alien.c-types alien.data arrays assocs kernel math math.parser namespaces sequences db.sqlite.ffi db combinators continuations db.types calendar.format serialize io.streams.byte-array byte-arrays io.encodings.binary diff --git a/basis/environment/unix/unix.factor b/basis/environment/unix/unix.factor index 84dfbbd43e..3fc8c2f79b 100644 --- a/basis/environment/unix/unix.factor +++ b/basis/environment/unix/unix.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.strings alien.syntax kernel -layouts sequences system unix environment io.encodings.utf8 -unix.utilities vocabs.loader combinators alien.accessors ; +USING: alien alien.c-types alien.data alien.strings +alien.syntax kernel layouts sequences system unix +environment io.encodings.utf8 unix.utilities vocabs.loader +combinators alien.accessors ; IN: environment.unix HOOK: environ os ( -- void* ) diff --git a/basis/environment/winnt/winnt.factor b/basis/environment/winnt/winnt.factor index 518a7d5d7a..cba92a0e3c 100755 --- a/basis/environment/winnt/winnt.factor +++ b/basis/environment/winnt/winnt.factor @@ -1,15 +1,14 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: alien.strings fry io.encodings.utf16n kernel -splitting windows windows.kernel32 system environment -alien.c-types sequences windows.errors io.streams.memory -io.encodings io ; +splitting windows windows.kernel32 windows.types system +environment alien.data sequences windows.errors +io.streams.memory io.encodings io ; +SPECIALIZED-ARRAY: TCHAR IN: environment.winnt -<< "TCHAR" require-c-array >> - M: winnt os-env ( key -- value ) - MAX_UNICODE_PATH "TCHAR" + MAX_UNICODE_PATH TCHAR [ dup length GetEnvironmentVariable ] keep over 0 = [ 2drop f ] [ diff --git a/basis/game-input/dinput/dinput.factor b/basis/game-input/dinput/dinput.factor index a7489f26a2..16bea60ea5 100755 --- a/basis/game-input/dinput/dinput.factor +++ b/basis/game-input/dinput/dinput.factor @@ -6,7 +6,7 @@ math.rectangles namespaces parser sequences shuffle specialized-arrays ui.backend.windows vectors windows.com windows.dinput windows.dinput.constants windows.errors windows.kernel32 windows.messages windows.ole32 -windows.user32 classes.struct ; +windows.user32 classes.struct alien.data ; SPECIALIZED-ARRAY: DIDEVICEOBJECTDATA IN: game-input.dinput diff --git a/basis/game-input/dinput/keys-array/keys-array.factor b/basis/game-input/dinput/keys-array/keys-array.factor index 9a84747dd8..a8813b0397 100755 --- a/basis/game-input/dinput/keys-array/keys-array.factor +++ b/basis/game-input/dinput/keys-array/keys-array.factor @@ -1,5 +1,5 @@ -USING: sequences sequences.private math alien.c-types -accessors ; +USING: sequences sequences.private math +accessors alien.data ; IN: game-input.dinput.keys-array TUPLE: keys-array diff --git a/basis/game-input/iokit/iokit.factor b/basis/game-input/iokit/iokit.factor index 71d547ad29..85f058f283 100755 --- a/basis/game-input/iokit/iokit.factor +++ b/basis/game-input/iokit/iokit.factor @@ -3,7 +3,8 @@ kernel cocoa.enumeration destructors math.parser cocoa.application sequences locals combinators.short-circuit threads namespaces assocs arrays combinators hints alien core-foundation.run-loop accessors sequences.private -alien.c-types math parser game-input vectors bit-arrays ; +alien.c-types alien.data math parser game-input vectors +bit-arrays ; IN: game-input.iokit SINGLETON: iokit-game-input-backend diff --git a/basis/images/memory/memory.factor b/basis/images/memory/memory.factor index 1a977b604e..ccf891d770 100644 --- a/basis/images/memory/memory.factor +++ b/basis/images/memory/memory.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types destructors fry images kernel -libc math sequences ; +USING: accessors alien.c-types alien.data destructors fry images +kernel libc math sequences ; IN: images.memory ! Some code shared by core-graphics and cairo for constructing @@ -27,4 +27,4 @@ PRIVATE> : make-memory-bitmap ( dim quot -- image ) '[ [ malloc-bitmap-data ] keep _ [ ] 2bi - ] with-destructors ; inline \ No newline at end of file + ] with-destructors ; inline diff --git a/basis/io/backend/windows/nt/privileges/privileges.factor b/basis/io/backend/windows/nt/privileges/privileges.factor index 57878ba75b..bb9e0edc33 100755 --- a/basis/io/backend/windows/nt/privileges/privileges.factor +++ b/basis/io/backend/windows/nt/privileges/privileges.factor @@ -1,4 +1,4 @@ -USING: alien alien.c-types alien.syntax arrays continuations +USING: alien alien.c-types alien.data alien.syntax arrays continuations destructors generic io.mmap io.ports io.backend.windows io.files.windows kernel libc math math.bitwise namespaces quotations sequences windows windows.advapi32 windows.kernel32 io.backend system accessors diff --git a/basis/io/buffers/buffers-tests.factor b/basis/io/buffers/buffers-tests.factor index 4425e08106..d366df7c54 100644 --- a/basis/io/buffers/buffers-tests.factor +++ b/basis/io/buffers/buffers-tests.factor @@ -1,7 +1,7 @@ IN: io.buffers.tests -USING: alien alien.c-types io.buffers kernel kernel.private libc -sequences tools.test namespaces byte-arrays strings accessors -destructors ; +USING: alien alien.c-types alien.data io.buffers kernel +kernel.private libc sequences tools.test namespaces byte-arrays +strings accessors destructors ; : buffer-set ( string buffer -- ) over >byte-array over ptr>> byte-array>memory diff --git a/basis/io/buffers/buffers.factor b/basis/io/buffers/buffers.factor index 82c5326b1d..aa9cedf340 100644 --- a/basis/io/buffers/buffers.factor +++ b/basis/io/buffers/buffers.factor @@ -2,8 +2,8 @@ ! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien alien.accessors alien.c-types -alien.syntax kernel libc math sequences byte-arrays strings -hints math.order destructors combinators ; +alien.data alien.syntax kernel libc math sequences byte-arrays +strings hints math.order destructors combinators ; IN: io.buffers TUPLE: buffer diff --git a/basis/io/files/info/windows/windows.factor b/basis/io/files/info/windows/windows.factor index bb3a412669..5ae21fcfee 100755 --- a/basis/io/files/info/windows/windows.factor +++ b/basis/io/files/info/windows/windows.factor @@ -6,7 +6,7 @@ windows.time windows accessors alien.c-types combinators generalizations system alien.strings io.encodings.utf16n sequences splitting windows.errors fry continuations destructors calendar ascii combinators.short-circuit locals classes.struct -specialized-arrays ; +specialized-arrays alien.data ; SPECIALIZED-ARRAY: ushort IN: io.files.info.windows diff --git a/basis/io/files/windows/windows.factor b/basis/io/files/windows/windows.factor index 43463bd3f1..ca5c9b3c4a 100755 --- a/basis/io/files/windows/windows.factor +++ b/basis/io/files/windows/windows.factor @@ -6,7 +6,7 @@ io.backend.windows kernel math splitting fry alien.strings windows windows.kernel32 windows.time calendar combinators math.functions sequences namespaces make words system destructors accessors math.bitwise continuations windows.errors -arrays byte-arrays generalizations ; +arrays byte-arrays generalizations alien.data ; IN: io.files.windows : open-file ( path access-mode create-mode flags -- handle ) diff --git a/basis/io/mmap/mmap.factor b/basis/io/mmap/mmap.factor index 704a585dd4..a866232760 100644 --- a/basis/io/mmap/mmap.factor +++ b/basis/io/mmap/mmap.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: continuations destructors io.files io.files.info io.backend kernel quotations system alien alien.accessors -accessors vocabs.loader combinators alien.c-types +accessors vocabs.loader combinators alien.c-types alien.data math ; IN: io.mmap diff --git a/basis/io/monitors/windows/nt/nt.factor b/basis/io/monitors/windows/nt/nt.factor index 3d837d79d8..9cd8bc4df8 100755 --- a/basis/io/monitors/windows/nt/nt.factor +++ b/basis/io/monitors/windows/nt/nt.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Doug Coleman, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.strings libc destructors locals -kernel math assocs namespaces make continuations sequences +USING: alien alien.c-types alien.data alien.strings libc destructors +locals kernel math assocs namespaces make continuations sequences hashtables sorting arrays combinators math.bitwise strings system accessors threads splitting io.backend io.backend.windows io.backend.windows.nt io.files.windows.nt io.monitors io.ports diff --git a/basis/io/sockets/secure/openssl/openssl.factor b/basis/io/sockets/secure/openssl/openssl.factor index 8f596da0bd..6d01a66cf0 100644 --- a/basis/io/sockets/secure/openssl/openssl.factor +++ b/basis/io/sockets/secure/openssl/openssl.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2007, 2008, Slava Pestov, Elie CHAFTARI. ! See http://factorcode.org/license.txt for BSD license. USING: accessors byte-arrays kernel sequences namespaces math -math.order combinators init alien alien.c-types alien.strings -libc continuations destructors summary splitting assocs random -math.parser locals unicode.case openssl openssl.libcrypto -openssl.libssl io.backend io.ports io.pathnames +math.order combinators init alien alien.c-types alien.data +alien.strings libc continuations destructors summary splitting +assocs random math.parser locals unicode.case openssl +openssl.libcrypto openssl.libssl io.backend io.ports io.pathnames io.encodings.8-bit io.timeouts io.sockets.secure ; IN: io.sockets.secure.openssl diff --git a/basis/io/sockets/sockets.factor b/basis/io/sockets/sockets.factor index 601d269d5c..a542575446 100755 --- a/basis/io/sockets/sockets.factor +++ b/basis/io/sockets/sockets.factor @@ -6,7 +6,7 @@ arrays io.encodings io.ports io.streams.duplex io.encodings.ascii alien.strings io.binary accessors destructors classes byte-arrays parser alien.c-types math.parser splitting grouping math assocs summary system vocabs.loader combinators present fry vocabs.parser -classes.struct ; +classes.struct alien.data ; IN: io.sockets << { diff --git a/basis/io/sockets/unix/unix.factor b/basis/io/sockets/unix/unix.factor index e892c6a7ef..fa46a71ca0 100755 --- a/basis/io/sockets/unix/unix.factor +++ b/basis/io/sockets/unix/unix.factor @@ -5,7 +5,7 @@ threads sequences byte-arrays io.binary io.backend.unix io.streams.duplex io.backend io.pathnames io.sockets.private io.files.private io.encodings.utf8 math.parser continuations libc combinators system accessors destructors unix locals init -classes.struct ; +classes.struct alien.data ; EXCLUDE: namespaces => bind ; EXCLUDE: io => read write ; diff --git a/basis/io/sockets/windows/nt/nt.factor b/basis/io/sockets/windows/nt/nt.factor index f423a42b65..7cc21c9611 100755 --- a/basis/io/sockets/windows/nt/nt.factor +++ b/basis/io/sockets/windows/nt/nt.factor @@ -1,4 +1,4 @@ -USING: alien alien.accessors alien.c-types byte-arrays +USING: alien alien.accessors alien.c-types alien.data byte-arrays continuations destructors io.ports io.timeouts io.sockets io.sockets.private io namespaces io.streams.duplex io.backend.windows io.sockets.windows io.backend.windows.nt diff --git a/basis/libc/libc.factor b/basis/libc/libc.factor index 4142e40c68..fe56c83516 100644 --- a/basis/libc/libc.factor +++ b/basis/libc/libc.factor @@ -2,29 +2,29 @@ ! Copyright (C) 2007, 2009 Slava Pestov ! Copyright (C) 2007, 2008 Doug Coleman ! See http://factorcode.org/license.txt for BSD license. -USING: alien assocs continuations alien.destructors kernel +USING: alien alien.c-types assocs continuations alien.destructors kernel namespaces accessors sets summary destructors destructors.private ; IN: libc : errno ( -- int ) - "int" "factor" "err_no" { } alien-invoke ; + int "factor" "err_no" { } alien-invoke ; : clear-errno ( -- ) - "void" "factor" "clear_err_no" { } alien-invoke ; + void "factor" "clear_err_no" { } alien-invoke ; >c-ptr [ delete-malloc ] [ (free) ] bi ; : memcpy ( dst src size -- ) - "void" "libc" "memcpy" { "void*" "void*" "ulong" } alien-invoke ; + void "libc" "memcpy" { void* void* ulong } alien-invoke ; : memcmp ( a b size -- cmp ) - "int" "libc" "memcmp" { "void*" "void*" "ulong" } alien-invoke ; + int "libc" "memcmp" { void* void* ulong } alien-invoke ; : memory= ( a b size -- ? ) memcmp 0 = ; : strlen ( alien -- len ) - "size_t" "libc" "strlen" { "char*" } alien-invoke ; + size_t "libc" "strlen" { char* } alien-invoke ; DESTRUCTOR: free diff --git a/basis/math/blas/matrices/matrices.factor b/basis/math/blas/matrices/matrices.factor index 4212f32b2d..aa9681bb2e 100755 --- a/basis/math/blas/matrices/matrices.factor +++ b/basis/math/blas/matrices/matrices.factor @@ -1,10 +1,10 @@ -USING: accessors alien alien.c-types arrays byte-arrays combinators -combinators.short-circuit fry kernel locals macros -math math.blas.ffi math.blas.vectors math.blas.vectors.private -math.complex math.functions math.order functors words -sequences sequences.merged sequences.private shuffle -parser prettyprint.backend prettyprint.custom ascii -specialized-arrays ; +USING: accessors alien alien.c-types alien.data arrays +byte-arrays combinators combinators.short-circuit fry +kernel locals macros math math.blas.ffi math.blas.vectors +math.blas.vectors.private math.complex math.functions +math.order functors words sequences sequences.merged +sequences.private shuffle parser prettyprint.backend +prettyprint.custom ascii specialized-arrays ; FROM: alien.c-types => float ; SPECIALIZED-ARRAY: float SPECIALIZED-ARRAY: double diff --git a/basis/math/vectors/simd/intrinsics/intrinsics.factor b/basis/math/vectors/simd/intrinsics/intrinsics.factor index 28547f8cf9..914d1ef169 100644 --- a/basis/math/vectors/simd/intrinsics/intrinsics.factor +++ b/basis/math/vectors/simd/intrinsics/intrinsics.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: kernel alien alien.c-types cpu.architecture libc ; +USING: kernel alien alien.data cpu.architecture libc ; IN: math.vectors.simd.intrinsics ERROR: bad-simd-call ; diff --git a/basis/opengl/shaders/shaders.factor b/basis/opengl/shaders/shaders.factor index 26ffd0cf88..562cbc91ce 100755 --- a/basis/opengl/shaders/shaders.factor +++ b/basis/opengl/shaders/shaders.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Joe Groff. ! See http://factorcode.org/license.txt for BSD license. USING: kernel opengl.gl alien.c-types continuations namespaces -assocs alien alien.strings libc opengl math sequences combinators +assocs alien alien.data alien.strings libc opengl math sequences combinators macros arrays io.encodings.ascii fry specialized-arrays destructors accessors ; SPECIALIZED-ARRAY: uint diff --git a/basis/random/windows/windows.factor b/basis/random/windows/windows.factor index 83b1fab0d0..d959b191c9 100644 --- a/basis/random/windows/windows.factor +++ b/basis/random/windows/windows.factor @@ -1,4 +1,4 @@ -USING: accessors alien.c-types byte-arrays +USING: accessors alien.c-types alien.data byte-arrays combinators.short-circuit continuations destructors init kernel locals namespaces random windows.advapi32 windows.errors windows.kernel32 math.bitwise ; diff --git a/basis/specialized-arrays/specialized-arrays-tests.factor b/basis/specialized-arrays/specialized-arrays-tests.factor index e289efb077..5d88f42d50 100755 --- a/basis/specialized-arrays/specialized-arrays-tests.factor +++ b/basis/specialized-arrays/specialized-arrays-tests.factor @@ -4,7 +4,7 @@ specialized-arrays.private sequences alien.c-types accessors kernel arrays combinators compiler compiler.units classes.struct combinators.smart compiler.tree.debugger math libc destructors sequences.private multiline eval words vocabs namespaces -assocs prettyprint ; +assocs prettyprint alien.data ; FROM: alien.c-types => float ; SPECIALIZED-ARRAY: int diff --git a/basis/specialized-arrays/specialized-arrays.factor b/basis/specialized-arrays/specialized-arrays.factor index 0490ede304..6931c83677 100755 --- a/basis/specialized-arrays/specialized-arrays.factor +++ b/basis/specialized-arrays/specialized-arrays.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien alien.c-types alien.parser assocs +USING: accessors alien alien.c-types alien.data alien.parser assocs byte-arrays classes compiler.units functors kernel lexer libc math math.vectors.specialization namespaces parser prettyprint.custom sequences sequences.private strings summary vocabs vocabs.loader diff --git a/basis/tools/deploy/config/config-docs.factor b/basis/tools/deploy/config/config-docs.factor index bd612c644a..12016168fb 100644 --- a/basis/tools/deploy/config/config-docs.factor +++ b/basis/tools/deploy/config/config-docs.factor @@ -1,4 +1,4 @@ -USING: help.markup help.syntax words alien.c-types assocs +USING: help.markup help.syntax words alien.c-types alien.data assocs kernel math ; IN: tools.deploy.config diff --git a/basis/tools/disassembler/disassembler.factor b/basis/tools/disassembler/disassembler.factor index 0a8ab0b116..16408c0eb8 100755 --- a/basis/tools/disassembler/disassembler.factor +++ b/basis/tools/disassembler/disassembler.factor @@ -2,7 +2,7 @@ ! See http://factorcode.org/license.txt for BSD license. USING: alien alien.c-types arrays byte-arrays combinators destructors generic io kernel libc math sequences system tr -vocabs.loader words ; +vocabs.loader words alien.data ; IN: tools.disassembler GENERIC: disassemble ( obj -- ) diff --git a/basis/tools/disassembler/udis/udis.factor b/basis/tools/disassembler/udis/udis.factor index 2f0456ab62..aaa54ae527 100755 --- a/basis/tools/disassembler/udis/udis.factor +++ b/basis/tools/disassembler/udis/udis.factor @@ -4,7 +4,7 @@ USING: tools.disassembler namespaces combinators alien alien.syntax alien.c-types lexer parser kernel sequences layouts math math.order alien.libraries math.parser system make fry arrays libc destructors -tools.disassembler.utils splitting ; +tools.disassembler.utils splitting alien.data ; IN: tools.disassembler.udis << diff --git a/basis/ui/backend/cocoa/views/views.factor b/basis/ui/backend/cocoa/views/views.factor index 6ae56af030..a49d22735d 100644 --- a/basis/ui/backend/cocoa/views/views.factor +++ b/basis/ui/backend/cocoa/views/views.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2006, 2008 Slava Pestov ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien alien.c-types alien.strings arrays assocs -cocoa kernel math cocoa.messages cocoa.subclassing cocoa.classes -cocoa.views cocoa.application cocoa.pasteboard cocoa.types -cocoa.windows sequences io.encodings.utf8 ui ui.private ui.gadgets -ui.gadgets.private ui.gadgets.worlds ui.gestures +USING: accessors alien alien.c-types alien.data alien.strings +arrays assocs cocoa kernel math cocoa.messages cocoa.subclassing +cocoa.classes cocoa.views cocoa.application cocoa.pasteboard +cocoa.types cocoa.windows sequences io.encodings.utf8 ui ui.private +ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures core-foundation.strings core-graphics core-graphics.types threads combinators math.rectangles ; IN: ui.backend.cocoa.views diff --git a/basis/ui/backend/windows/windows.factor b/basis/ui/backend/windows/windows.factor index 2be6e70df8..5e2c25ea30 100755 --- a/basis/ui/backend/windows/windows.factor +++ b/basis/ui/backend/windows/windows.factor @@ -13,7 +13,7 @@ opengl ui.render math.bitwise locals accessors math.rectangles math.order calendar ascii sets io.encodings.utf16n windows.errors literals ui.pixel-formats ui.pixel-formats.private memoize classes -specialized-arrays classes.struct ; +specialized-arrays classes.struct alien.data ; SPECIALIZED-ARRAY: POINT IN: ui.backend.windows diff --git a/basis/unix/process/process.factor b/basis/unix/process/process.factor index 131d8dda5d..2912f8b744 100644 --- a/basis/unix/process/process.factor +++ b/basis/unix/process/process.factor @@ -1,6 +1,6 @@ -USING: kernel alien.c-types alien.strings sequences math alien.syntax -unix namespaces continuations threads assocs io.backend.unix -io.encodings.utf8 unix.utilities fry ; +USING: kernel alien.c-types alien.data alien.strings sequences +math alien.syntax unix namespaces continuations threads assocs +io.backend.unix io.encodings.utf8 unix.utilities fry ; IN: unix.process ! Low-level Unix process launching utilities. These are used diff --git a/basis/unix/utilities/utilities.factor b/basis/unix/utilities/utilities.factor index 8d141ccb24..919b2ae8a2 100644 --- a/basis/unix/utilities/utilities.factor +++ b/basis/unix/utilities/utilities.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.strings +USING: alien alien.c-types alien.data alien.strings combinators.short-circuit fry kernel layouts sequences accessors specialized-arrays ; IN: unix.utilities diff --git a/basis/unix/utmpx/utmpx.factor b/basis/unix/utmpx/utmpx.factor index 6e72f7d114..f6ccf6858b 100644 --- a/basis/unix/utmpx/utmpx.factor +++ b/basis/unix/utmpx/utmpx.factor @@ -1,9 +1,9 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types alien.syntax combinators continuations -io.encodings.string io.encodings.utf8 kernel sequences strings -unix calendar system accessors unix.time calendar.unix -vocabs.loader ; +USING: alien.c-types alien.data alien.syntax combinators +continuations io.encodings.string io.encodings.utf8 kernel +sequences strings unix calendar system accessors unix.time +calendar.unix vocabs.loader ; IN: unix.utmpx CONSTANT: EMPTY 0 diff --git a/basis/windows/com/com.factor b/basis/windows/com/com.factor index d485692a91..e06f5b6071 100644 --- a/basis/windows/com/com.factor +++ b/basis/windows/com/com.factor @@ -1,6 +1,6 @@ USING: alien alien.c-types alien.destructors windows.com.syntax windows.ole32 windows.types continuations kernel alien.syntax -libc destructors accessors ; +libc destructors accessors alien.data ; IN: windows.com LIBRARY: ole32 diff --git a/basis/windows/com/wrapper/wrapper.factor b/basis/windows/com/wrapper/wrapper.factor index e69fc5b820..e4f0ef0654 100755 --- a/basis/windows/com/wrapper/wrapper.factor +++ b/basis/windows/com/wrapper/wrapper.factor @@ -1,9 +1,9 @@ -USING: alien alien.c-types alien.accessors windows.com.syntax -init windows.com.syntax.private windows.com continuations kernel -namespaces windows.ole32 libc vocabs assocs accessors arrays -sequences quotations combinators math words compiler.units -destructors fry math.parser generalizations sets -specialized-arrays windows.kernel32 classes.struct ; +USING: alien alien.c-types alien.data alien.accessors +windows.com.syntax init windows.com.syntax.private windows.com +continuations kernel namespaces windows.ole32 libc vocabs +assocs accessors arrays sequences quotations combinators math +words compiler.units destructors fry math.parser generalizations +sets specialized-arrays windows.kernel32 classes.struct ; SPECIALIZED-ARRAY: void* IN: windows.com.wrapper diff --git a/basis/windows/dinput/constants/constants.factor b/basis/windows/dinput/constants/constants.factor index 270c2fa3dd..3c0509c49d 100755 --- a/basis/windows/dinput/constants/constants.factor +++ b/basis/windows/dinput/constants/constants.factor @@ -1,8 +1,9 @@ USING: windows.dinput windows.kernel32 windows.ole32 windows.com -windows.com.syntax alien alien.c-types alien.syntax kernel system namespaces -combinators sequences fry math accessors macros words quotations -libc continuations generalizations splitting locals assocs init -specialized-arrays memoize classes.struct strings arrays ; +windows.com.syntax alien alien.c-types alien.data alien.syntax +kernel system namespaces combinators sequences fry math accessors +macros words quotations libc continuations generalizations +splitting locals assocs init specialized-arrays memoize +classes.struct strings arrays ; SPECIALIZED-ARRAY: DIOBJECTDATAFORMAT IN: windows.dinput.constants diff --git a/basis/windows/dragdrop-listener/dragdrop-listener.factor b/basis/windows/dragdrop-listener/dragdrop-listener.factor index bd6512341f..bb8e60cdf5 100755 --- a/basis/windows/dragdrop-listener/dragdrop-listener.factor +++ b/basis/windows/dragdrop-listener/dragdrop-listener.factor @@ -1,17 +1,16 @@ USING: alien.strings io.encodings.utf16n windows.com windows.com.wrapper combinators windows.kernel32 windows.ole32 -windows.shell32 kernel accessors +windows.shell32 kernel accessors windows.types prettyprint namespaces ui.tools.listener ui.tools.workspace -alien.c-types alien sequences math ; +alien.data alien sequences math ; +SPECIALIZED-ARRAY: WCHAR IN: windows.dragdrop-listener -<< "WCHAR" require-c-array >> - : filenames-from-hdrop ( hdrop -- filenames ) dup HEX: FFFFFFFF f 0 DragQueryFile ! get count of files [ 2dup f 0 DragQueryFile 1 + ! get size of filename buffer - dup "WCHAR" + dup WCHAR [ swap DragQueryFile drop ] keep utf16n alien>string ] with map ; diff --git a/basis/windows/errors/errors.factor b/basis/windows/errors/errors.factor index d2ee337726..483494ba0c 100755 --- a/basis/windows/errors/errors.factor +++ b/basis/windows/errors/errors.factor @@ -1,11 +1,10 @@ -USING: alien.c-types kernel locals math math.bitwise +USING: alien.data kernel locals math math.bitwise windows.kernel32 sequences byte-arrays unicode.categories io.encodings.string io.encodings.utf16n alien.strings -arrays literals ; +arrays literals windows.types ; +SPECIALIZED-ARRAY: TCHAR IN: windows.errors -<< "TCHAR" require-c-array >> - CONSTANT: ERROR_SUCCESS 0 CONSTANT: ERROR_INVALID_FUNCTION 1 CONSTANT: ERROR_FILE_NOT_FOUND 2 @@ -698,8 +697,6 @@ CONSTANT: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF : make-lang-id ( lang1 lang2 -- n ) 10 shift bitor ; inline -<< "TCHAR" require-c-array >> - ERROR: error-message-failed id ; :: n>win32-error-string ( id -- string ) { @@ -709,7 +706,7 @@ ERROR: error-message-failed id ; f id LANG_NEUTRAL SUBLANG_DEFAULT make-lang-id - 32768 [ "TCHAR" ] [ ] bi + 32768 [ TCHAR ] [ ] bi f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip utf16n alien>string [ blank? ] trim ; diff --git a/basis/windows/offscreen/offscreen.factor b/basis/windows/offscreen/offscreen.factor index 63cfd92ba1..e38477c98c 100755 --- a/basis/windows/offscreen/offscreen.factor +++ b/basis/windows/offscreen/offscreen.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2009 Joe Groff, Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types kernel combinators sequences -math windows.gdi32 windows.types images destructors -accessors fry locals classes.struct ; +USING: alien.c-types alien.data kernel combinators +sequences math windows.gdi32 windows.types images +destructors accessors fry locals classes.struct ; IN: windows.offscreen : (bitmap-info) ( dim -- BITMAPINFO ) diff --git a/basis/windows/ole32/ole32.factor b/basis/windows/ole32/ole32.factor index 9e117c8522..fe47a7f923 100755 --- a/basis/windows/ole32/ole32.factor +++ b/basis/windows/ole32/ole32.factor @@ -1,5 +1,5 @@ -USING: alien alien.syntax alien.c-types alien.strings math -kernel sequences windows.errors windows.types io accessors +USING: alien alien.syntax alien.c-types alien.data alien.strings +math kernel sequences windows.errors windows.types io accessors math.order namespaces make math.parser windows.kernel32 combinators locals specialized-arrays literals splitting grouping classes.struct combinators.smart ; diff --git a/basis/x11/xlib/xlib.factor b/basis/x11/xlib/xlib.factor index 98305e8304..0cd7704cf8 100644 --- a/basis/x11/xlib/xlib.factor +++ b/basis/x11/xlib/xlib.factor @@ -10,9 +10,9 @@ ! add to this library and are wondering what part of the file to ! modify, just find the function or data structure in the manual ! and note the section. -USING: accessors kernel arrays alien alien.c-types alien.strings -alien.syntax classes.struct math math.bitwise words sequences -namespaces continuations io io.encodings.ascii x11.syntax ; +USING: accessors kernel arrays alien alien.c-types alien.data +alien.strings alien.syntax classes.struct math math.bitwise words +sequences namespaces continuations io io.encodings.ascii x11.syntax ; FROM: alien.c-types => short ; IN: x11.xlib diff --git a/core/alien/strings/strings-tests.factor b/core/alien/strings/strings-tests.factor index 6a0a42253b..c1b5a9e159 100644 --- a/core/alien/strings/strings-tests.factor +++ b/core/alien/strings/strings-tests.factor @@ -1,4 +1,4 @@ -USING: alien.strings alien.c-types tools.test kernel libc +USING: alien.strings alien.c-types alien.data tools.test kernel libc io.encodings.8-bit io.encodings.utf8 io.encodings.utf16 io.encodings.utf16n io.encodings.ascii alien io.encodings.string ; IN: alien.strings.tests diff --git a/extra/alien/inline/syntax/syntax-tests.factor b/extra/alien/inline/syntax/syntax-tests.factor index e6a0b8b7d8..c49b2b5aae 100644 --- a/extra/alien/inline/syntax/syntax-tests.factor +++ b/extra/alien/inline/syntax/syntax-tests.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Jeremy Hughes. ! See http://factorcode.org/license.txt for BSD license. USING: alien.inline alien.inline.syntax io.directories io.files -kernel namespaces tools.test alien.c-types alien.structs ; +kernel namespaces tools.test alien.c-types alien.data alien.structs ; IN: alien.inline.syntax.tests DELETE-C-LIBRARY: test diff --git a/extra/alien/marshall/marshall-docs.factor b/extra/alien/marshall/marshall-docs.factor index 361753a0d3..5d6ec29912 100644 --- a/extra/alien/marshall/marshall-docs.factor +++ b/extra/alien/marshall/marshall-docs.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Jeremy Hughes. ! See http://factorcode.org/license.txt for BSD license. USING: help.markup help.syntax kernel quotations sequences -strings alien alien.c-types math byte-arrays ; +strings alien alien.c-types alien.data math byte-arrays ; IN: alien.marshall float short ; diff --git a/extra/alien/marshall/private/private.factor b/extra/alien/marshall/private/private.factor index c85b722d11..d138282ff3 100644 --- a/extra/alien/marshall/private/private.factor +++ b/extra/alien/marshall/private/private.factor @@ -3,7 +3,7 @@ USING: accessors alien alien.c-types alien.inline arrays combinators fry functors kernel lexer libc macros math sequences specialized-arrays libc.private -combinators.short-circuit ; +combinators.short-circuit alien.data ; SPECIALIZED-ARRAY: void* IN: alien.marshall.private diff --git a/extra/alien/marshall/structs/structs.factor b/extra/alien/marshall/structs/structs.factor index 54bcab45f2..3f9c8e3a7e 100644 --- a/extra/alien/marshall/structs/structs.factor +++ b/extra/alien/marshall/structs/structs.factor @@ -3,7 +3,7 @@ USING: accessors alien.c-types alien.marshall arrays assocs classes.tuple combinators destructors generalizations generic kernel libc locals parser quotations sequences slots words -alien.structs lexer vocabs.parser fry effects ; +alien.structs lexer vocabs.parser fry effects alien.data ; IN: alien.marshall.structs float ; SPECIALIZED-ARRAY: int diff --git a/extra/half-floats/half-floats-tests.factor b/extra/half-floats/half-floats-tests.factor index cf3d7d3690..ad3d156bc4 100644 --- a/extra/half-floats/half-floats-tests.factor +++ b/extra/half-floats/half-floats-tests.factor @@ -1,5 +1,5 @@ USING: alien.c-types alien.syntax half-floats kernel math tools.test -specialized-arrays ; +specialized-arrays alien.data ; SPECIALIZED-ARRAY: half IN: half-floats.tests diff --git a/extra/half-floats/half-floats.factor b/extra/half-floats/half-floats.factor index 2c089e4330..4d78068c03 100755 --- a/extra/half-floats/half-floats.factor +++ b/extra/half-floats/half-floats.factor @@ -1,5 +1,5 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alien.c-types alien.syntax kernel math math.order ; +USING: accessors alien.c-types alien.data alien.syntax kernel math math.order ; IN: half-floats : half>bits ( float -- bits ) diff --git a/extra/io/serial/unix/unix.factor b/extra/io/serial/unix/unix.factor index 1ba8031dfc..57c30dde15 100644 --- a/extra/io/serial/unix/unix.factor +++ b/extra/io/serial/unix/unix.factor @@ -1,8 +1,9 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types alien.syntax combinators io.ports -io.streams.duplex system kernel math math.bitwise -vocabs.loader unix io.serial io.serial.unix.termios io.backend.unix ; +USING: accessors alien.c-types alien.syntax alien.data +combinators io.ports io.streams.duplex system kernel +math math.bitwise vocabs.loader unix io.serial +io.serial.unix.termios io.backend.unix ; IN: io.serial.unix << { diff --git a/extra/memory/piles/piles.factor b/extra/memory/piles/piles.factor index 46729c42be..a5602273d2 100644 --- a/extra/memory/piles/piles.factor +++ b/extra/memory/piles/piles.factor @@ -1,5 +1,5 @@ ! (c)2009 Joe Groff bsd license -USING: accessors alien alien.c-types destructors kernel libc math ; +USING: accessors alien alien.c-types alien.data destructors kernel libc math ; IN: memory.piles TUPLE: pile diff --git a/extra/system-info/windows/ce/ce.factor b/extra/system-info/windows/ce/ce.factor index 13c7cb9433..8c4f81a117 100755 --- a/extra/system-info/windows/ce/ce.factor +++ b/extra/system-info/windows/ce/ce.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2008 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien.c-types system-info kernel math namespaces +USING: alien.c-types alien.data system-info kernel math namespaces windows windows.kernel32 system-info.backend system ; IN: system-info.windows.ce -- 2.34.1