diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index 757b6651fd..160dd23533 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -10,7 +10,6 @@ - type inference - handle odd base cases, with code after ifte - handle recursion with when, when* etc -- alien-call need special nodes + linearizer/generator: @@ -25,17 +24,18 @@ - save code in image - compile word twice; no more 'cannot compile' error! -+ oop: - -- union metaclass -- make M: order-independent -- bootstrapping generic words -- 2generic -- move generic, 2generic from kernel vocabulary -- generic = hashcode and math ops - ++ oop: + +- union metaclass +- make M: order-independent +- bootstrapping generic words +- 2generic +- move generic, 2generic from kernel vocabulary +- generic = hashcode and math ops + + ffi: +- port ffi to new compiler - is signed -vs- unsigned pointers an issue? - bitfields in C structs - SDL_Rect** type diff --git a/library/bootstrap/boot-stage2.factor b/library/bootstrap/boot-stage2.factor index 2ba4b55696..4dcba8c05d 100644 --- a/library/bootstrap/boot-stage2.factor +++ b/library/bootstrap/boot-stage2.factor @@ -158,7 +158,6 @@ cpu "x86" = [ [ "/library/compiler/assembly-x86.factor" "/library/compiler/generator-x86.factor" -! "/library/compiler/alien-macros.factor" ] [ dup print run-resource diff --git a/library/compiler/alien-macros.factor b/library/compiler/alien-macros.factor deleted file mode 100644 index 27f816d726..0000000000 --- a/library/compiler/alien-macros.factor +++ /dev/null @@ -1,64 +0,0 @@ -! :folding=indent:collapseFolds=1: - -! $Id$ -! -! Copyright (C) 2004 Slava Pestov. -! -! Redistribution and use in source and binary forms, with or without -! modification, are permitted provided that the following conditions are met: -! -! 1. Redistributions of source code must retain the above copyright notice, -! this list of conditions and the following disclaimer. -! -! 2. Redistributions in binary form must reproduce the above copyright notice, -! this list of conditions and the following disclaimer in the documentation -! and/or other materials provided with the distribution. -! -! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -IN: alien -USE: compiler -USE: kernel -USE: lists -USE: math -USE: namespaces - -: SELF-CALL ( name -- ) - #! Call named C function in Factor interpreter executable. - dlsym-self CALL JUMP-FIXUP ; - -: UNBOX ( name -- ) - #! Move top of datastack to C stack. - SELF-CALL EAX PUSH-R ; - -: BOX ( name -- ) - #! Move EAX to datastack. - EAX PUSH-R SELF-CALL 4 ESP R+I ; - -: PARAMETERS ( params -- count ) - #! Generate code for boxing a list of C types. - #! Return amount stack must be unwound by. - 0 swap [ - c-type [ - "unboxer" get UNBOX "width" get cell align + - ] bind - ] each ; - -: CLEANUP ( amount -- ) - dup 0 = [ drop ] [ ESP R+I ] ifte ; - -: RETURNS ( type -- ) - dup "void" = [ - drop - ] [ - c-type [ "boxer" get ] bind BOX - ] ifte ; diff --git a/library/compiler/generator-x86.factor b/library/compiler/generator-x86.factor index 92b78c375d..e44f4f3ed6 100644 --- a/library/compiler/generator-x86.factor +++ b/library/compiler/generator-x86.factor @@ -95,3 +95,17 @@ USE: words #! Jump table entries are absolute addresses. compiled-offset 0 compile-cell 0 defer-xt ] "generator" set-word-property + +! TODO: to complete alien compilation, must provide generators +! for #c-call, #box, #unbox and #cleanup. +! +! : UNBOX ( name -- ) +! #! Move top of datastack to C stack. +! SELF-CALL EAX PUSH-R ; +! +! : BOX ( name -- ) +! #! Move EAX to datastack. +! EAX PUSH-R SELF-CALL 4 ESP R+I ; +! +! : CLEANUP ( amount -- ) +! dup 0 = [ drop ] [ ESP R+I ] ifte ;