Merge branch 'master' of git://factorcode.org/git/factor

release
Eduardo Cavazos 2007-10-10 00:21:20 -05:00
commit 959b22e0d6
51 changed files with 493 additions and 132 deletions

View File

@ -27,11 +27,11 @@ GENERIC: alien-node-abi ( node -- str )
: alien-node-return* ( node -- ctype ) : alien-node-return* ( node -- ctype )
alien-node-return dup large-struct? [ drop "void" ] when ; alien-node-return dup large-struct? [ drop "void" ] when ;
: c-type-stack-align ( type -- align )
dup c-type-stack-align? [ c-type-align ] [ drop cell ] if ;
: parameter-align ( n type -- n delta ) : parameter-align ( n type -- n delta )
over >r over >r c-type-stack-align align dup r> - ;
dup c-type-stack-align? [ c-type-align ] [ drop cell ] if
align
dup r> - ;
: parameter-sizes ( types -- total offsets ) : parameter-sizes ( types -- total offsets )
#! Compute stack frame locations. #! Compute stack frame locations.
@ -91,24 +91,33 @@ M: float-regs inc-reg-class
[ dup class get swap inc-reg-class ] keep ; [ dup class get swap inc-reg-class ] keep ;
: alloc-parameter ( parameter -- reg reg-class ) : alloc-parameter ( parameter -- reg reg-class )
c-type c-type-reg-class dup reg-class-full? c-type-reg-class dup reg-class-full?
[ spill-param ] [ fastcall-param ] if [ spill-param ] [ fastcall-param ] if
[ param-reg ] keep ; [ param-reg ] keep ;
: (flatten-int-type) ( size -- ) : (flatten-int-type) ( size -- )
cell /i "void*" <repetition> % ; cell /i "void*" c-type <repetition> % ;
: flatten-int-type ( n type -- n ) GENERIC: flatten-value-type ( type -- )
[ parameter-align (flatten-int-type) ] keep
stack-size cell align dup (flatten-int-type) + ;
: flatten-value-type ( n type -- n ) M: object flatten-value-type , ;
dup c-type c-type-reg-class T{ int-regs } =
[ flatten-int-type ] [ , ] if ; M: struct-type flatten-value-type ( type -- )
stack-size cell align (flatten-int-type) ;
M: long-long-type flatten-value-type ( type -- )
stack-size cell align (flatten-int-type) ;
: flatten-value-types ( params -- params ) : flatten-value-types ( params -- params )
#! Convert value type structs to consecutive void*s. #! Convert value type structs to consecutive void*s.
[ 0 [ flatten-value-type ] reduce drop ] { } make ; [
0 [
c-type
[ parameter-align (flatten-int-type) ] keep
[ stack-size cell align + ] keep
flatten-value-type
] reduce drop
] { } make ;
: each-parameter ( parameters quot -- ) : each-parameter ( parameters quot -- )
>r [ parameter-sizes nip ] keep r> 2each ; inline >r [ parameter-sizes nip ] keep r> 2each ; inline
@ -127,11 +136,11 @@ M: float-regs inc-reg-class
#! Moves values from C stack to registers (if word is #! Moves values from C stack to registers (if word is
#! %load-param-reg) and registers to C stack (if word is #! %load-param-reg) and registers to C stack (if word is
#! %save-param-reg). #! %save-param-reg).
swap >r
alien-node-parameters* alien-node-parameters*
flatten-value-types flatten-value-types
[ pick >r alloc-parameter r> execute ] each-parameter r> [ >r alloc-parameter r> execute ] curry each-parameter ;
drop ; inline inline
: if-void ( type true false -- ) : if-void ( type true false -- )
pick "void" = [ drop nip call ] [ nip call ] if ; inline pick "void" = [ drop nip call ] [ nip call ] if ; inline

View File

@ -260,7 +260,7 @@ H{ } clone update-map set
{ "<tuple>" "tuples.private" } { "<tuple>" "tuples.private" }
{ "tuple>array" "tuples" } { "tuple>array" "tuples" }
{ "profiling" "tools.profiler.private" } { "profiling" "tools.profiler.private" }
{ "become" "tuples.private" } { "become" "kernel.private" }
{ "(sleep)" "threads.private" } { "(sleep)" "threads.private" }
{ "<float-array>" "float-arrays" } { "<float-array>" "float-arrays" }
{ "curry" "kernel" } { "curry" "kernel" }
@ -271,6 +271,7 @@ H{ } clone update-map set
{ "innermost-frame-scan" "kernel.private" } { "innermost-frame-scan" "kernel.private" }
{ "set-innermost-frame-quot" "kernel.private" } { "set-innermost-frame-quot" "kernel.private" }
{ "call-clear" "kernel" } { "call-clear" "kernel" }
{ "strip-compiled-quotations" "quotations" }
} }
dup length [ >r first2 r> make-primitive ] 2each dup length [ >r first2 r> make-primitive ] 2each

View File

@ -234,6 +234,50 @@ FUNCTION: test-struct-7 ffi_test_30 ;
[ B{ 1 2 3 4 5 6 7 } ] [ ffi_test_30 ] unit-test [ B{ 1 2 3 4 5 6 7 } ] [ ffi_test_30 ] unit-test
C-STRUCT: test-struct-8 { "double" "x" } { "double" "y" } ;
FUNCTION: double ffi_test_32 test-struct-8 x int y ;
[ 9.0 ] [
"test-struct-8" <c-object>
1.0 over set-test-struct-8-x
2.0 over set-test-struct-8-y
3 ffi_test_32
] unit-test
C-STRUCT: test-struct-9 { "float" "x" } { "float" "y" } ;
FUNCTION: double ffi_test_33 test-struct-9 x int y ;
[ 9.0 ] [
"test-struct-9" <c-object>
1.0 over set-test-struct-9-x
2.0 over set-test-struct-9-y
3 ffi_test_33
] unit-test
C-STRUCT: test-struct-10 { "float" "x" } { "int" "y" } ;
FUNCTION: double ffi_test_34 test-struct-10 x int y ;
[ 9.0 ] [
"test-struct-10" <c-object>
1.0 over set-test-struct-10-x
2 over set-test-struct-10-y
3 ffi_test_34
] unit-test
C-STRUCT: test-struct-11 { "int" "x" } { "int" "y" } ;
FUNCTION: double ffi_test_35 test-struct-11 x int y ;
[ 9.0 ] [
"test-struct-11" <c-object>
1 over set-test-struct-11-x
2 over set-test-struct-11-y
3 ffi_test_35
] unit-test
! Test callbacks ! Test callbacks
: callback-1 "void" { } "cdecl" [ ] alien-callback ; : callback-1 "void" { } "cdecl" [ ] alien-callback ;

View File

@ -187,3 +187,30 @@ SYMBOL: template-chosen
! This should not fail ! This should not fail
[ ] [ [ end-basic-block ] { } make drop ] unit-test [ ] [ [ end-basic-block ] { } make drop ] unit-test
] with-scope ] with-scope
! Regression
SYMBOL: templates-chosen
V{ } clone templates-chosen set
: template-choice-1 ;
\ template-choice-1
[ "template-choice-1" templates-chosen get push ]
H{
{ +input+ { { f "obj" } { [ ] "n" } } }
{ +output+ { "obj" } }
} define-intrinsic
: template-choice-2 ;
\ template-choice-2
[ "template-choice-2" templates-chosen get push drop ]
{ { f "x" } { f "y" } } define-if-intrinsic
[ ] [
[ 2 template-choice-1 template-choice-2 ] compile-quot drop
] unit-test
[ V{ "template-choice-1" "template-choice-2" } ]
[ templates-chosen get ] unit-test

View File

@ -89,7 +89,7 @@ C: <continuation> continuation
set-catchstack set-catchstack
set-namestack set-namestack
set-retainstack set-retainstack
>r set-datastack drop 4 getenv f r> >r set-datastack drop 4 getenv f 4 setenv f r>
set-callstack ; set-callstack ;
PRIVATE> PRIVATE>

View File

@ -4,7 +4,7 @@ USING: alien.c-types arrays cpu.x86.assembler
cpu.x86.architecture cpu.x86.intrinsics cpu.x86.sse2 cpu.x86.architecture cpu.x86.intrinsics cpu.x86.sse2
cpu.x86.allot cpu.architecture kernel kernel.private math cpu.x86.allot cpu.architecture kernel kernel.private math
namespaces sequences generator.registers generator.fixup system namespaces sequences generator.registers generator.fixup system
alien ; alien alien.compiler alien.structs slots splitting math.functions ;
IN: cpu.x86.64 IN: cpu.x86.64
PREDICATE: x86-backend amd64-backend PREDICATE: x86-backend amd64-backend
@ -175,3 +175,32 @@ USE: cpu.x86.intrinsics
\ set-alien-signed-4 small-reg-32 define-setter \ set-alien-signed-4 small-reg-32 define-setter
T{ x86-backend f 8 } compiler-backend set-global T{ x86-backend f 8 } compiler-backend set-global
! The ABI for passing structs by value is pretty messed up
"void*" c-type clone "__stack_value" define-primitive-type
T{ stack-params } "__stack_value" c-type set-c-type-reg-class
: struct-types&offset ( struct-type -- pairs )
struct-type-fields [
dup slot-spec-type swap slot-spec-offset 2array
] map ;
: split-struct ( pairs -- seq )
[
[ first2 8 mod zero? [ t , ] when , ] each
] { } make { t } split [ empty? not ] subset ;
: flatten-large-struct ( type -- )
heap-size cell align
cell /i "__stack_value" c-type <repetition> % ;
M: struct-type flatten-value-type ( type -- seq )
dup heap-size 16 > [
flatten-large-struct
] [
struct-types&offset split-struct [
[ c-type c-type-reg-class ] map
T{ int-regs } swap member?
"void*" "double" ? c-type ,
] each
] if ;

View File

@ -586,7 +586,7 @@ IN: cpu.x86.intrinsics
"value" operand [ swap MOV ] %alien-accessor "value" operand [ swap MOV ] %alien-accessor
] H{ ] H{
{ +input+ { { +input+ {
{ unboxed-c-ptr "value" c-ptr } { unboxed-c-ptr "value" pinned-c-ptr }
{ unboxed-c-ptr "alien" c-ptr } { unboxed-c-ptr "alien" c-ptr }
{ f "offset" fixnum } { f "offset" fixnum }
} } } }

View File

@ -0,0 +1,39 @@
IN: temporary
USING: tools.test generic kernel definitions sequences ;
TUPLE: combination-1 ;
M: combination-1 perform-combination 2drop { } [ ] each [ ] ;
SYMBOL: generic-1
generic-1 T{ combination-1 } define-generic
[ ] <method> object \ generic-1 define-method
[ ] [ { combination-1 { object generic-1 } } forget-all ] unit-test
GENERIC: some-generic
USE: arrays
M: array some-generic ;
USE: bit-arrays
M: bit-array some-generic ;
USE: byte-arrays
M: byte-array some-generic ;
TUPLE: some-class ;
M: some-class some-generic ;
TUPLE: another-class some-generic ;
[ ] [
{ some-generic some-class { another-class some-generic } }
forget-all
] unit-test

View File

@ -13,6 +13,8 @@ GENERIC: forget ( defspec -- )
M: object forget drop ; M: object forget drop ;
: forget-all ( definitions -- ) [ forget ] each ;
GENERIC: synopsis* ( defspec -- ) GENERIC: synopsis* ( defspec -- )
GENERIC: definer ( defspec -- start end ) GENERIC: definer ( defspec -- start end )

View File

@ -458,8 +458,23 @@ M: loc lazy-store
dup loc? over cached? or [ 2drop ] [ %move ] if dup loc? over cached? or [ 2drop ] [ %move ] if
] each-loc ; ] each-loc ;
: reset-phantom ( phantom -- )
#! Kill register assignments but preserve constants and
#! class information.
dup phantom-locs*
over [
dup constant? [ nip ] [
operand-class over set-operand-class
] if
] 2map
over delete-all
swap push-all ;
: reset-phantoms ( -- )
[ reset-phantom ] each-phantom ;
: finalize-contents ( -- ) : finalize-contents ( -- )
finalize-locs finalize-vregs [ delete-all ] each-phantom ; finalize-locs finalize-vregs reset-phantoms ;
: %gc ( -- ) : %gc ( -- )
0 frame-required 0 frame-required
@ -468,8 +483,8 @@ M: loc lazy-store
! Loading stacks to vregs ! Loading stacks to vregs
: free-vregs? ( int# float# -- ? ) : free-vregs? ( int# float# -- ? )
T{ float-regs f 8 } free-vregs length < T{ float-regs f 8 } free-vregs length <=
>r T{ int-regs } free-vregs length < r> and ; >r T{ int-regs } free-vregs length <= r> and ;
: phantom&spec ( phantom spec -- phantom' spec' ) : phantom&spec ( phantom spec -- phantom' spec' )
[ length f pad-left ] keep [ length f pad-left ] keep
@ -585,24 +600,18 @@ M: loc lazy-store
2dup first value-matches? 2dup first value-matches?
>r >r operand-class 2 r> ?nth class-matches? r> and ; >r >r operand-class 2 r> ?nth class-matches? r> and ;
: template-specs-match? ( -- ? )
phantom-d get +input+ get
[ spec-matches? ] phantom&spec-agree? ;
: template-matches? ( spec -- ? ) : template-matches? ( spec -- ? )
clone [ phantom-d get +input+ rot at
template-specs-match? [ spec-matches? ] phantom&spec-agree? ;
[ guess-template-vregs free-vregs? ] [ f ] if
] bind ;
: (find-template) ( templates -- pair/f )
[ second template-matches? ] find nip ;
: ensure-template-vregs ( -- ) : ensure-template-vregs ( -- )
guess-template-vregs free-vregs? [ guess-template-vregs free-vregs? [
finalize-contents compute-free-vregs finalize-contents compute-free-vregs
] unless ; ] unless ;
: clear-phantoms ( -- )
[ delete-all ] each-phantom ;
PRIVATE> PRIVATE>
: set-operand-classes ( classes -- ) : set-operand-classes ( classes -- )
@ -614,15 +623,11 @@ PRIVATE>
#! Commit all deferred stacking shuffling, and ensure the #! Commit all deferred stacking shuffling, and ensure the
#! in-memory data and retain stacks are up to date with #! in-memory data and retain stacks are up to date with
#! respect to the compiler's current picture. #! respect to the compiler's current picture.
finalize-contents finalize-heights finalize-contents
clear-phantoms
finalize-heights
fresh-objects get dup empty? swap delete-all [ %gc ] unless ; fresh-objects get dup empty? swap delete-all [ %gc ] unless ;
: do-template ( pair -- )
#! Use with return value from find-template
first2
clone [ template-inputs call template-outputs ] bind
compute-free-vregs ; inline
: with-template ( quot hash -- ) : with-template ( quot hash -- )
clone [ clone [
ensure-template-vregs ensure-template-vregs
@ -630,6 +635,10 @@ PRIVATE>
] bind ] bind
compute-free-vregs ; inline compute-free-vregs ; inline
: do-template ( pair -- )
#! Use with return value from find-template
first2 with-template ;
: fresh-object ( obj -- ) fresh-objects get push ; : fresh-object ( obj -- ) fresh-objects get push ;
: fresh-object? ( obj -- ? ) fresh-objects get memq? ; : fresh-object? ( obj -- ? ) fresh-objects get memq? ;
@ -651,10 +660,7 @@ PRIVATE>
: find-template ( templates -- pair/f ) : find-template ( templates -- pair/f )
#! Pair has shape { quot hash } #! Pair has shape { quot hash }
compute-free-vregs [ second template-matches? ] find nip ;
dup (find-template) [ ] [
finalize-contents (find-template)
] ?if ;
: operand-tag ( operand -- tag/f ) : operand-tag ( operand -- tag/f )
operand-class class-tag ; operand-class class-tag ;

View File

@ -14,6 +14,15 @@ M: generic definition drop f ;
GENERIC: perform-combination ( word combination -- quot ) GENERIC: perform-combination ( word combination -- quot )
M: object perform-combination
#! We delay the invalid method combination error for a
#! reason. If we call forget-vocab on a vocabulary which
#! defines a method combination, a generic using this
#! method combination, and a method on the generic, and the
#! method combination is forgotten first, then forgetting
#! the method will throw an error. We don't want that.
nip [ "Invalid method combination" throw ] curry ;
: make-generic ( word -- ) : make-generic ( word -- )
dup dup
dup "combination" word-prop perform-combination dup "combination" word-prop perform-combination
@ -94,7 +103,7 @@ M: method-spec forget first2 [ delete-at ] with-methods ;
dup associate implementors* ; dup associate implementors* ;
: forget-methods ( class -- ) : forget-methods ( class -- )
[ implementors ] keep [ swap 2array forget ] curry each ; [ implementors ] keep [ swap 2array ] curry map forget-all ;
M: class forget ( class -- ) M: class forget ( class -- )
dup forget-methods dup forget-methods

View File

@ -1,7 +1,9 @@
! Copyright (C) 2005, 2007 Slava Pestov. ! Copyright (C) 2005, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: memory IN: memory
USING: arrays kernel sequences vectors system ; USING: arrays kernel sequences vectors system hashtables
kernel.private sbufs growable assocs namespaces quotations
math strings combinators ;
: (each-object) ( quot -- ) : (each-object) ( quot -- )
next-object dup next-object dup
@ -14,3 +16,29 @@ USING: arrays kernel sequences vectors system ;
pusher >r each-object r> >array ; inline pusher >r each-object r> >array ; inline
: save ( -- ) image save-image ; : save ( -- ) image save-image ;
<PRIVATE
: intern-objects ( predicate -- )
instances
dup H{ } clone [ [ ] cache ] curry map
become ; inline
: prepare-compress-image ( -- seq )
[ sbuf? ] instances [ underlying ] map ;
PRIVATE>
: compress-image ( -- )
prepare-compress-image "bad-strings" [
[
{
{ [ dup quotation? ] [ t ] }
{ [ dup wrapper? ] [ t ] }
{ [ dup fixnum? ] [ f ] }
{ [ dup number? ] [ t ] }
{ [ dup string? ] [ dup "bad-strings" get memq? not ] }
{ [ t ] [ f ] }
} cond nip
] intern-objects
] with-variable ;

View File

@ -416,7 +416,7 @@ SYMBOL: parse-hook
] keep ; ] keep ;
: forget-smudged ( -- ) : forget-smudged ( -- )
smudged-usage [ forget ] each smudged-usage forget-all
over empty? [ 2dup smudged-usage-warning ] unless 2drop ; over empty? [ 2dup smudged-usage-warning ] unless 2drop ;
: record-definitions ( file -- ) : record-definitions ( file -- )

View File

@ -299,3 +299,7 @@ unit-test
[ 2 break 2 \ + (step-into) . ] (remove-breakpoints) [ 2 break 2 \ + (step-into) . ] (remove-breakpoints)
] unit-test ] unit-test
[ [ 2 . ] ] [
[ 2 \ break (step-into) . ] (remove-breakpoints)
] unit-test

View File

@ -99,7 +99,12 @@ SYMBOL: ->
building get dup empty? [ building get dup empty? [
drop \ (step-into) , drop \ (step-into) ,
] [ ] [
pop dup wrapper? [ wrapped ] when , pop dup wrapper? [
wrapped dup \ break eq?
[ drop ] [ , ] if
] [
,
] if
] if ; ] if ;
: (remove-breakpoints) ( quot -- newquot ) : (remove-breakpoints) ( quot -- newquot )

View File

@ -71,7 +71,7 @@ M: pathname where pathname-string 1 2array ;
: forget-source ( path -- ) : forget-source ( path -- )
dup source-file dup source-file
dup unxref-source dup unxref-source
source-file-definitions [ drop forget ] assoc-each source-file-definitions keys forget-all
source-files get delete-at ; source-files get delete-at ;
M: pathname forget pathname-string forget-source ; M: pathname forget pathname-string forget-source ;

View File

@ -76,7 +76,7 @@ SYMBOL: load-vocab-hook
[ ] subset ; [ ] subset ;
: forget-vocab ( vocab -- ) : forget-vocab ( vocab -- )
dup vocab-words [ nip forget ] assoc-each dup vocab-words values forget-all
vocab-name dictionary get delete-at ; vocab-name dictionary get delete-at ;
: child-vocab? ( prefix name -- ? ) : child-vocab? ( prefix name -- ? )

View File

@ -6,14 +6,14 @@ slots.private math namespaces sequences strings vectors sbufs
quotations assocs hashtables sorting math.parser words.private quotations assocs hashtables sorting math.parser words.private
vocabs ; vocabs ;
GENERIC: execute ( word -- )
M: word execute (execute) ;
: word ( -- word ) \ word get-global ; : word ( -- word ) \ word get-global ;
: set-word ( word -- ) \ word set-global ; : set-word ( word -- ) \ word set-global ;
GENERIC: execute ( word -- )
M: word execute (execute) ;
! Used by the compiler ! Used by the compiler
SYMBOL: changed-words SYMBOL: changed-words
@ -201,7 +201,6 @@ M: word (forget-word)
reveal ; reveal ;
: forget-word ( word -- ) : forget-word ( word -- )
dup f "methods" set-word-prop
dup delete-xref dup delete-xref
dup unchanged-word dup unchanged-word
(forget-word) ; (forget-word) ;

View File

@ -0,0 +1,16 @@
USING: tools.deploy.config ;
V{
{ strip-prettyprint? t }
{ strip-globals? t }
{ strip-word-props? t }
{ strip-word-names? t }
{ strip-dictionary? t }
{ strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? t }
{ deploy-compiled? t }
{ deploy-io? f }
{ deploy-ui? t }
{ "stop-after-last-window?" t }
{ "bundle-name" "Cellular Automata.app" }
}

View File

@ -0,0 +1,13 @@
USING: tools.deploy.config ;
V{
{ strip-word-props? t }
{ strip-word-names? t }
{ strip-dictionary? t }
{ strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? t }
{ deploy-compiled? t }
{ deploy-io? f }
{ deploy-ui? t }
{ "bundle-name" "Boids.app" }
}

View File

@ -57,10 +57,7 @@ IN: bunny
] unless ; ] unless ;
: draw-triangle ( ns vs triple -- ) : draw-triangle ( ns vs triple -- )
[ [ dup roll nth gl-normal swap nth gl-vertex ] each-with2 ;
dup roll nth first3 glNormal3d
swap nth first3 glVertex3d
] each-with2 ;
: draw-bunny ( ns vs is -- ) : draw-bunny ( ns vs is -- )
GL_TRIANGLES [ [ draw-triangle ] each-with2 ] do-state ; GL_TRIANGLES [ [ draw-triangle ] each-with2 ] do-state ;

View File

@ -69,13 +69,15 @@ cond ;
! : handle-client ( client -- ) <user> dup users> push ! : handle-client ( client -- ) <user> dup users> push
! dup [ >user [ handle-user-loop ] with-stream* ] with-scope ; ! dup [ >user [ handle-user-loop ] with-stream* ] with-scope ;
: handle-client ( client -- ) <user> dup users> push : handle-client ( client -- )
<user> dup users> push
dup [ >user [ handle-user-loop ] with-stream ] with-scope ; dup [ >user [ handle-user-loop ] with-stream ] with-scope ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: accept-client-loop ( server -- ) : accept-client-loop ( server -- )
dup >r accept [ handle-client ] in-thread r> accept-client-loop ; [ accept [ handle-client ] curry in-thread ] keep
accept-client-loop ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

View File

@ -1,29 +1,24 @@
! Copyright (C) 2007 Slava Pestov. ! Copyright (C) 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: memory io io.files io.styles io.launcher USING: io.files io.launcher io.styles io hashtables kernel
sequences prettyprint kernel arrays xml xml.utilities system sequences combinators.lib assocs system sorting math.parser ;
hashtables sorting math.parser assocs ;
IN: contributors IN: contributors
: changelog ( -- xml ) : changelog ( -- authors )
image parent-dir cd image parent-dir cd
"darcs changes --xml-output" <process-stream> read-xml ; "git-log --pretty=format:%an" <process-stream> lines ;
: authors ( xml -- seq )
children-tags [ "author" swap at ] map ;
: patch-count ( authors author -- n )
[ = ] curry subset length ;
: patch-counts ( authors -- assoc ) : patch-counts ( authors -- assoc )
dup prune [ [ patch-count ] keep 2array ] curry* map ; dup prune
[ dup rot [ = ] curry* count ] curry*
{ } map>assoc ;
: contributors ( -- ) : contributors ( -- )
changelog authors patch-counts sort-keys <reversed> changelog patch-counts sort-values <reversed>
standard-table-style [ standard-table-style [
[ [
[ [
first2 first2 swap
[ write ] with-cell [ write ] with-cell
[ number>string write ] with-cell [ number>string write ] with-cell
] with-row ] with-row

View File

@ -1,12 +1,17 @@
USING: tools.deploy.config ; USING: tools.deploy.config ;
V{ V{
{ strip-io? t }
{ strip-prettyprint? t }
{ strip-globals? t }
{ strip-word-props? t } { strip-word-props? t }
{ strip-word-names? t } { strip-word-names? t }
{ strip-dictionary? t } { strip-dictionary? t }
{ strip-debugger? t } { strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? t } { deploy-math? t }
{ deploy-compiled? t } { deploy-compiled? t }
{ deploy-io? f } { deploy-io? f }
{ deploy-ui? t } { deploy-ui? t }
{ "stop-after-last-window?" t }
{ "bundle-name" "Golden Section.app" } { "bundle-name" "Golden Section.app" }
} }

View File

@ -1,12 +1,16 @@
USING: tools.deploy.config ; USING: tools.deploy.config ;
V{ V{
{ strip-prettyprint? t }
{ strip-globals? t }
{ strip-word-props? t } { strip-word-props? t }
{ strip-word-names? t } { strip-word-names? f }
{ strip-dictionary? t } { strip-dictionary? t }
{ strip-debugger? t } { strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? t } { deploy-math? t }
{ deploy-compiled? t } { deploy-compiled? t }
{ deploy-io? f } { deploy-io? f }
{ deploy-ui? t } { deploy-ui? t }
{ "stop-after-last-window?" t }
{ "bundle-name" "Hello World.app" } { "bundle-name" "Hello World.app" }
} }

View File

@ -1,11 +1,15 @@
USING: tools.deploy.config ; USING: tools.deploy.config ;
V{ V{
{ strip-prettyprint? t }
{ strip-globals? t }
{ strip-word-props? t } { strip-word-props? t }
{ strip-word-names? t } { strip-word-names? t }
{ strip-dictionary? t } { strip-dictionary? t }
{ strip-debugger? t } { strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? f } { deploy-math? f }
{ deploy-compiled? f } { deploy-compiled? f }
{ deploy-io? f } { deploy-io? f }
{ deploy-ui? f } { deploy-ui? f }
{ "stop-after-last-window?" t }
} }

View File

@ -14,7 +14,7 @@ IN: jamshred.gl
: draw-segment-vertex ( segment theta -- ) : draw-segment-vertex ( segment theta -- )
over segment-color gl-color segment-vertex-and-normal over segment-color gl-color segment-vertex-and-normal
first3 glNormal3d first3 glVertex3d ; gl-normal gl-vertex ;
: draw-vertex-pair ( theta next-segment segment -- ) : draw-vertex-pair ( theta next-segment segment -- )
rot tuck draw-segment-vertex draw-segment-vertex ; rot tuck draw-segment-vertex draw-segment-vertex ;

View File

@ -1,6 +1,7 @@
USING: kernel math vectors sequences opengl.gl math.vectors math.matrices USING: kernel math vectors sequences opengl.gl math.vectors
vars opengl.lib self pos ori turtle lsys.tortoise lsys.strings ; math.matrices vars opengl self pos ori turtle lsys.tortoise
lsys.strings ;
IN: lsys.tortoise.graphics IN: lsys.tortoise.graphics
@ -12,7 +13,7 @@ IN: lsys.tortoise.graphics
: (polygon) ( vertices -- ) : (polygon) ( vertices -- )
GL_POLYGON glBegin GL_POLYGON glBegin
dup polygon-normal gl-normal-3f [ gl-vertex-3f ] each dup polygon-normal gl-normal [ gl-vertex ] each
glEnd ; glEnd ;
: polygon ( vertices -- ) dup length 3 >= [ (polygon) ] [ drop ] if ; : polygon ( vertices -- ) dup length 3 >= [ (polygon) ] [ drop ] if ;
@ -31,7 +32,7 @@ VAR: vertices
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: record-vertex ( -- ) pos> gl-vertex-3f ; : record-vertex ( -- ) pos> gl-vertex ;
: draw-forward ( length -- ) : draw-forward ( length -- )
GL_LINES glBegin record-vertex step-turtle record-vertex glEnd ; GL_LINES glBegin record-vertex step-turtle record-vertex glEnd ;
@ -78,10 +79,10 @@ VAR: color-table
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: material-color ( color -- ) : material-color ( color -- )
GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE rot gl-material-fv ; GL_FRONT_AND_BACK GL_AMBIENT_AND_DIFFUSE rot gl-material ;
: set-color ( i -- ) : set-color ( i -- )
dup >color color-table> nth dup gl-color-4f material-color ; dup >color color-table> nth dup gl-color material-color ;
: inc-color ( -- ) color> 1+ set-color ; : inc-color ( -- ) color> 1+ set-color ;

View File

@ -0,0 +1,13 @@
USING: tools.deploy ;
V{
{ strip-word-props? t }
{ strip-word-names? t }
{ strip-dictionary? t }
{ strip-debugger? t }
{ strip-c-types? t }
{ deploy-math? t }
{ deploy-compiled? t }
{ deploy-io? f }
{ deploy-ui? t }
{ "bundle-name" "Lindenmayer Systems.app" }
}

View File

@ -1,5 +1,6 @@
USING: kernel namespaces threads math math.vectors quotations sequences USING: kernel namespaces threads math math.vectors quotations sequences
opengl
opengl.gl opengl.gl
colors colors
ui ui
@ -11,7 +12,7 @@ USING: kernel namespaces threads math math.vectors quotations sequences
ui.gadgets.lib ui.gadgets.lib
ui.gadgets.slate ui.gadgets.slate
ui.gadgets.theme ui.gadgets.theme
vars rewrite-closures opengl.lib vars rewrite-closures
self pos ori turtle opengl.camera self pos ori turtle opengl.camera
lsys.tortoise lsys.tortoise.graphics lsys.strings lsys.tortoise lsys.tortoise.graphics lsys.strings
; ;
@ -34,7 +35,7 @@ VAR: model
: display ( -- ) : display ( -- )
black gl-clear-color black gl-clear
GL_FLAT glShadeModel GL_FLAT glShadeModel
@ -48,13 +49,11 @@ glLoadIdentity
camera> do-look-at camera> do-look-at
GL_COLOR_BUFFER_BIT glClear
GL_FRONT_AND_BACK GL_LINE glPolygonMode GL_FRONT_AND_BACK GL_LINE glPolygonMode
white gl-color-4f white gl-color
GL_LINES glBegin { 0 0 0 } gl-vertex-3f { 0 0 1 } gl-vertex-3f glEnd GL_LINES glBegin { 0 0 0 } gl-vertex { 0 0 1 } gl-vertex glEnd
color> set-color color> set-color

View File

@ -1 +1,2 @@
Slava Pestov Slava Pestov
Eduardo Cavazos

View File

@ -1,5 +1,5 @@
USING: kernel namespaces math.vectors opengl.lib pos ori turtle self ; USING: kernel namespaces math.vectors opengl pos ori turtle self ;
IN: opengl.camera IN: opengl.camera
@ -13,4 +13,4 @@ IN: opengl.camera
[ 90 pitch-up pos> 1 step-turtle pos> swap v- ] save-self ; [ 90 pitch-up pos> 1 step-turtle pos> swap v- ] save-self ;
: do-look-at ( camera -- ) : do-look-at ( camera -- )
[ >self camera-eye camera-focus camera-up glu-look-at ] with-scope ; [ >self camera-eye camera-focus camera-up gl-look-at ] with-scope ;

View File

@ -1,19 +0,0 @@
USING: kernel alien.c-types sequences opengl.gl opengl.glu ;
IN: opengl.lib
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: gl-color-4f ( 4seq -- ) first4 glColor4f ;
: gl-clear-color ( 4seq -- ) first4 glClearColor ;
: gl-vertex-3f ( array -- ) first3 glVertex3f ;
: gl-normal-3f ( array -- ) first3 glNormal3f ;
: gl-material-fv ( face pname params -- ) >c-float-array glMaterialfv ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: glu-look-at ( eye focus up -- ) >r >r first3 r> first3 r> first3 gluLookAt ;

View File

@ -1,7 +1,8 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2007 Slava Pestov.
! Portions copyright (C) 2007 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types io kernel math namespaces USING: alien alien.c-types io kernel math namespaces
sequences math.vectors opengl.gl opengl.glu ; sequences math.vectors opengl.gl opengl.glu combinators ;
IN: opengl IN: opengl
: coordinates [ first2 ] 2apply ; : coordinates [ first2 ] 2apply ;
@ -10,8 +11,11 @@ IN: opengl
: gl-color ( color -- ) first4 glColor4d ; inline : gl-color ( color -- ) first4 glColor4d ; inline
: gl-clear-color ( color -- )
first4 glClearColor ;
: gl-clear ( color -- ) : gl-clear ( color -- )
first4 glClearColor GL_COLOR_BUFFER_BIT glClear ; gl-clear-color GL_COLOR_BUFFER_BIT glClear ;
: gl-error ( -- ) : gl-error ( -- )
glGetError dup zero? [ glGetError dup zero? [
@ -28,7 +32,17 @@ IN: opengl
swap [ glMatrixMode glPushMatrix call ] keep swap [ glMatrixMode glPushMatrix call ] keep
glMatrixMode glPopMatrix ; inline glMatrixMode glPopMatrix ; inline
: gl-vertex ( point -- ) first2 glVertex2d ; inline : gl-vertex ( point -- )
dup length {
{ 2 [ first2 glVertex2d ] }
{ 3 [ first3 glVertex3d ] }
{ 4 [ first4 glVertex4d ] }
} case ;
: gl-normal ( normal -- ) first3 glNormal3d ;
: gl-material ( face pname params -- )
>c-float-array glMaterialfv ;
: gl-line ( a b -- ) : gl-line ( a b -- )
GL_LINES [ gl-vertex gl-vertex ] do-state ; GL_LINES [ gl-vertex gl-vertex ] do-state ;
@ -67,6 +81,9 @@ IN: opengl
: do-attribs ( bits quot -- ) : do-attribs ( bits quot -- )
swap glPushAttrib call glPopAttrib ; inline swap glPushAttrib call glPopAttrib ; inline
: gl-look-at ( eye focus up -- )
>r >r first3 r> first3 r> first3 gluLookAt ;
TUPLE: sprite loc dim dim2 dlist texture ; TUPLE: sprite loc dim dim2 dlist texture ;
: <sprite> ( loc dim dim2 -- sprite ) : <sprite> ( loc dim dim2 -- sprite )

View File

@ -4,6 +4,7 @@ USING: vocabs.loader io.files io kernel sequences assocs
splitting parser prettyprint ; splitting parser prettyprint ;
IN: tools.deploy.config IN: tools.deploy.config
SYMBOL: strip-io?
SYMBOL: strip-globals? SYMBOL: strip-globals?
SYMBOL: strip-word-props? SYMBOL: strip-word-props?
SYMBOL: strip-word-names? SYMBOL: strip-word-names?
@ -22,6 +23,7 @@ SYMBOL: deploy-image
: default-config ( -- assoc ) : default-config ( -- assoc )
V{ V{
{ strip-io? f }
{ strip-prettyprint? t } { strip-prettyprint? t }
{ strip-globals? t } { strip-globals? t }
{ strip-word-props? t } { strip-word-props? t }

View File

@ -57,4 +57,5 @@ PRIVATE>
deploy-command-line stage2 ; deploy-command-line stage2 ;
: deploy ( vocab -- ) : deploy ( vocab -- )
"" resource-path cd
vm over ".image" append rot dup deploy-config deploy* ; vm over ".image" append rot dup deploy-config deploy* ;

View File

@ -15,19 +15,20 @@ IN: tools.deploy.shaker
: strip-init-hooks ( -- ) : strip-init-hooks ( -- )
"Stripping startup hooks" show "Stripping startup hooks" show
"command-line" init-hooks get delete-at ; "command-line" init-hooks get delete-at
strip-io? get [ "io.backend" init-hooks get delete-at ] when ;
: strip-debugger ( -- ) : strip-debugger ( -- )
strip-debugger? get [ strip-debugger? get [
"Stripping debugger" show "Stripping debugger" show
"resource:extra/tools/deploy/strip-debugger.factor" "resource:extra/tools/deploy/shaker/strip-debugger.factor"
run-file run-file
] when ; ] when ;
: strip-cocoa ( -- ) : strip-cocoa ( -- )
"cocoa" vocab [ "cocoa" vocab [
"Stripping unused Cocoa methods" show "Stripping unused Cocoa methods" show
"resource:extra/tools/deploy/strip-cocoa.factor" "resource:extra/tools/deploy/shaker/strip-cocoa.factor"
run-file run-file
] when ; ] when ;
@ -90,6 +91,8 @@ USING: bit-arrays byte-arrays io.streams.nested ;
{ } set-retainstack { } set-retainstack
V{ } set-namestack V{ } set-namestack
V{ } set-catchstack V{ } set-catchstack
"Stripping compiled quotations" show
strip-compiled-quotations
"Saving final image" show "Saving final image" show
[ save-image-and-exit ] call-clear ; [ save-image-and-exit ] call-clear ;
@ -100,14 +103,14 @@ SYMBOL: deploy-vocab
\ boot , \ boot ,
init-hooks get values concat % init-hooks get values concat %
, ,
"io.backend" init-hooks get at [ \ flush , ] when strip-io? get [ \ flush , ] unless
] [ ] make "Boot quotation: " write dup . flush ] [ ] make "Boot quotation: " write dup . flush
set-boot-quot ; set-boot-quot ;
: retained-globals ( -- seq ) : retained-globals ( -- seq )
[ [
builtins , builtins ,
io-backend , strip-io? get [ io-backend , ] unless
strip-dictionary? get [ strip-dictionary? get [
{ {
@ -178,6 +181,8 @@ SYMBOL: deploy-vocab
deploy-vocab get require deploy-vocab get require
r> [ call ] when* r> [ call ] when*
strip strip
"Compressing image" show
compress-image
finish-deploy finish-deploy
] [ ] [
print-error flush 1 exit print-error flush 1 exit

View File

@ -1,4 +1,6 @@
USING: kernel ; USING: kernel ;
IN: debugger IN: debugger
: print-error die ;
: error. die ; : error. die ;

View File

@ -65,12 +65,14 @@ M: word (step-into) (step-into-execute) ;
{ {
>n ndrop >c c> >n ndrop >c c>
continue continue-with continue continue-with
(continue-with) stop break (continue-with) stop
} [ } [
dup [ execute break ] curry dup [ execute break ] curry
"step-into" set-word-prop "step-into" set-word-prop
] each ] each
\ break [ break ] "step-into" set-word-prop
! Stepping ! Stepping
: change-innermost-frame ( quot interpreter -- ) : change-innermost-frame ( quot interpreter -- )
interpreter-continuation [ interpreter-continuation [

View File

@ -65,4 +65,10 @@ IN: temporary
[ ] [ yield ] unit-test [ ] [ yield ] unit-test
[ t ] [ walker get-tool walker-active? ] unit-test [ t ] [ walker get-tool walker-active? ] unit-test
[ ] [ "walker" get com-continue ] unit-test
[ ] [ "walker" get com-continue ] unit-test
[ ] [ "walker" get com-continue ] unit-test
] with-scope ] with-scope

View File

@ -67,7 +67,11 @@ M: walker call-tool* ( continuation walker -- )
: com-continue ( walker -- ) : com-continue ( walker -- )
#! Reset walker first, in case step-all ends up calling #! Reset walker first, in case step-all ends up calling
#! the walker again. #! the walker again.
dup walker-interpreter swap reset-walker step-all ; dup walker-active? [
dup walker-interpreter swap reset-walker step-all
] [
drop
] if ;
: walker-help "ui-walker" help-window ; : walker-help "ui-walker" help-window ;

View File

@ -446,7 +446,8 @@ INLINE void *copy_untagged_object(void *pointer, CELL size)
INLINE void forward_object(CELL pointer, CELL newpointer) INLINE void forward_object(CELL pointer, CELL newpointer)
{ {
put(UNTAG(pointer),RETAG(newpointer,GC_COLLECTED)); if(pointer != newpointer)
put(UNTAG(pointer),RETAG(newpointer,GC_COLLECTED));
} }
INLINE CELL copy_object_impl(CELL pointer) INLINE CELL copy_object_impl(CELL pointer)

View File

@ -1,14 +1,23 @@
#include "master.h" #include "master.h"
void print_chars(F_STRING* str)
{
CELL i;
for(i = 0; i < string_capacity(str); i++)
putchar(cget(SREF(str,i)));
}
void print_word(F_WORD* word, CELL nesting) void print_word(F_WORD* word, CELL nesting)
{ {
if(type_of(word->name) == STRING_TYPE)
if(type_of(word->vocabulary) == STRING_TYPE)
{ {
F_STRING *string = untag_string(word->name); print_chars(untag_string(word->vocabulary));
CELL i; printf(":");
for(i = 0; i < string_capacity(string); i++)
putchar(cget(SREF(string,i)));
} }
if(type_of(word->name) == STRING_TYPE)
print_chars(untag_string(word->name));
else else
{ {
printf("#<not a string: "); printf("#<not a string: ");
@ -20,9 +29,7 @@ void print_word(F_WORD* word, CELL nesting)
void print_string(F_STRING* str) void print_string(F_STRING* str)
{ {
putchar('"'); putchar('"');
CELL i; print_chars(str);
for(i = 0; i < string_capacity(str); i++)
putchar(cget(SREF(str,i)));
putchar('"'); putchar('"');
} }
@ -181,6 +188,24 @@ void dump_generations(void)
(CELL)(data_heap->cards_end - data_heap->cards)); (CELL)(data_heap->cards_end - data_heap->cards));
} }
void dump_objects(F_FIXNUM type)
{
begin_scan();
CELL obj;
while((obj = next_object()) != F)
{
if(type == -1 || type_of(obj) == type)
{
print_nested_obj(obj,3);
printf("\n");
}
}
/* end scan */
gc_off = false;
}
void factorbug(void) void factorbug(void)
{ {
reset_stdio(); reset_stdio();
@ -200,8 +225,10 @@ void factorbug(void)
printf("g -- dump generations\n"); printf("g -- dump generations\n");
printf("card <addr> -- print card containing address\n"); printf("card <addr> -- print card containing address\n");
printf("addr <card> -- print address containing card\n"); printf("addr <card> -- print address containing card\n");
printf("data -- data heap dump\n");
printf("words -- words dump\n");
printf("code -- code heap dump\n"); printf("code -- code heap dump\n");
for(;;) for(;;)
{ {
char cmd[1024]; char cmd[1024];
@ -268,6 +295,10 @@ void factorbug(void)
exit(1); exit(1);
else if(strcmp(cmd,"im") == 0) else if(strcmp(cmd,"im") == 0)
save_image(STR_FORMAT("fep.image")); save_image(STR_FORMAT("fep.image"));
else if(strcmp(cmd,"data") == 0)
dump_objects(-1);
else if(strcmp(cmd,"words") == 0)
dump_objects(WORD_TYPE);
else if(strcmp(cmd,"code") == 0) else if(strcmp(cmd,"code") == 0)
dump_heap(&code_heap); dump_heap(&code_heap);
else else

View File

@ -19,6 +19,7 @@ void default_parameters(F_PARAMETERS *p)
p->young_size = 2 * CELLS; p->young_size = 2 * CELLS;
p->aging_size = 4 * CELLS; p->aging_size = 4 * CELLS;
p->secure_gc = false; p->secure_gc = false;
p->fep = false;
} }
/* Get things started */ /* Get things started */
@ -101,6 +102,8 @@ void init_factor_from_args(F_CHAR *image, int argc, F_CHAR **argv, bool embedded
else if(factor_arg(argv[i],STR_FORMAT("-codeheap=%d"),&p.code_size)); else if(factor_arg(argv[i],STR_FORMAT("-codeheap=%d"),&p.code_size));
else if(STRCMP(argv[i],STR_FORMAT("-securegc")) == 0) else if(STRCMP(argv[i],STR_FORMAT("-securegc")) == 0)
p.secure_gc = true; p.secure_gc = true;
else if(STRCMP(argv[i],STR_FORMAT("-fep")) == 0)
p.fep = true;
else if(STRNCMP(argv[i],STR_FORMAT("-i="),3) == 0) else if(STRNCMP(argv[i],STR_FORMAT("-i="),3) == 0)
p.image = argv[i] + 3; p.image = argv[i] + 3;
} }
@ -127,6 +130,10 @@ void init_factor_from_args(F_CHAR *image, int argc, F_CHAR **argv, bool embedded
userenv[EMBEDDED_ENV] = (embedded ? T : F); userenv[EMBEDDED_ENV] = (embedded ? T : F);
nest_stacks(); nest_stacks();
if(p.fep)
factorbug();
c_to_factor_toplevel(userenv[BOOT_ENV]); c_to_factor_toplevel(userenv[BOOT_ENV]);
unnest_stacks(); unnest_stacks();

View File

@ -225,3 +225,23 @@ struct test_struct_7 ffi_test_30(void)
} }
void ffi_test_31(int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29, int x30, int x31, int x32, int x33, int x34, int x35, int x36, int x37, int x38, int x39, int x40, int x41) { } void ffi_test_31(int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29, int x30, int x31, int x32, int x33, int x34, int x35, int x36, int x37, int x38, int x39, int x40, int x41) { }
double ffi_test_32(struct test_struct_8 x, int y)
{
return (x.x + x.y) * y;
}
double ffi_test_33(struct test_struct_9 x, int y)
{
return (x.x + x.y) * y;
}
double ffi_test_34(struct test_struct_10 x, int y)
{
return (x.x + x.y) * y;
}
double ffi_test_35(struct test_struct_11 x, int y)
{
return (x.x + x.y) * y;
}

View File

@ -49,3 +49,11 @@ DLLEXPORT struct test_struct_6 ffi_test_29(void);
struct test_struct_7 { char x, y, z, a, b, c, d; }; struct test_struct_7 { char x, y, z, a, b, c, d; };
DLLEXPORT struct test_struct_7 ffi_test_30(void); DLLEXPORT struct test_struct_7 ffi_test_30(void);
DLLEXPORT void ffi_test_31(int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29, int x30, int x31, int x32, int x33, int x34, int x35, int x36, int x37, int x38, int x39, int x40, int x41); DLLEXPORT void ffi_test_31(int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29, int x30, int x31, int x32, int x33, int x34, int x35, int x36, int x37, int x38, int x39, int x40, int x41);
struct test_struct_8 { double x; double y; };
DLLEXPORT double ffi_test_32(struct test_struct_8 x, int y);
struct test_struct_9 { float x; float y; };
DLLEXPORT double ffi_test_33(struct test_struct_9 x, int y);
struct test_struct_10 { float x; int y; };
DLLEXPORT double ffi_test_34(struct test_struct_10 x, int y);
struct test_struct_11 { int x; int y; };
DLLEXPORT double ffi_test_35(struct test_struct_11 x, int y);

View File

@ -31,6 +31,7 @@ typedef struct {
CELL gen_count, young_size, aging_size; CELL gen_count, young_size, aging_size;
CELL code_size; CELL code_size;
bool secure_gc; bool secure_gc;
bool fep;
} F_PARAMETERS; } F_PARAMETERS;
void load_image(F_PARAMETERS *p); void load_image(F_PARAMETERS *p);

View File

@ -194,4 +194,5 @@ void *primitives[] = {
primitive_innermost_stack_frame_scan, primitive_innermost_stack_frame_scan,
primitive_set_innermost_stack_frame_quot, primitive_set_innermost_stack_frame_quot,
primitive_call_clear, primitive_call_clear,
primitive_strip_compiled_quotations,
}; };

View File

@ -231,3 +231,22 @@ DEFINE_PRIMITIVE(quotation_xt)
F_QUOTATION *quot = untag_quotation(dpeek()); F_QUOTATION *quot = untag_quotation(dpeek());
drepl(allot_cell((CELL)quot->xt)); drepl(allot_cell((CELL)quot->xt));
} }
DEFINE_PRIMITIVE(strip_compiled_quotations)
{
begin_scan();
CELL obj;
while((obj = next_object()) != F)
{
if(type_of(obj) == QUOTATION_TYPE)
{
F_QUOTATION *quot = untag_object(obj);
quot->compiled = F;
quot->xt = lazy_jit_compile;
}
}
/* end scan */
gc_off = false;
}

View File

@ -6,3 +6,4 @@ DECLARE_PRIMITIVE(curry);
DECLARE_PRIMITIVE(array_to_quotation); DECLARE_PRIMITIVE(array_to_quotation);
DECLARE_PRIMITIVE(quotation_xt); DECLARE_PRIMITIVE(quotation_xt);
DECLARE_PRIMITIVE(uncurry); DECLARE_PRIMITIVE(uncurry);
DECLARE_PRIMITIVE(strip_compiled_quotations);