diff --git a/core/alien/compiler/compiler.factor b/core/alien/compiler/compiler.factor index aa46271fed..c4a7aa8dc3 100644 --- a/core/alien/compiler/compiler.factor +++ b/core/alien/compiler/compiler.factor @@ -27,11 +27,11 @@ GENERIC: alien-node-abi ( node -- str ) : alien-node-return* ( node -- ctype ) 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 ) - over >r - dup c-type-stack-align? [ c-type-align ] [ drop cell ] if - align - dup r> - ; + over >r c-type-stack-align align dup r> - ; : parameter-sizes ( types -- total offsets ) #! Compute stack frame locations. @@ -91,24 +91,33 @@ M: float-regs inc-reg-class [ dup class get swap inc-reg-class ] keep ; : 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 [ param-reg ] keep ; : (flatten-int-type) ( size -- ) - cell /i "void*" % ; + cell /i "void*" c-type % ; -: flatten-int-type ( n type -- n ) - [ parameter-align (flatten-int-type) ] keep - stack-size cell align dup (flatten-int-type) + ; +GENERIC: flatten-value-type ( type -- ) -: flatten-value-type ( n type -- n ) - dup c-type c-type-reg-class T{ int-regs } = - [ flatten-int-type ] [ , ] if ; +M: object flatten-value-type , ; + +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 ) #! 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 -- ) >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 #! %load-param-reg) and registers to C stack (if word is #! %save-param-reg). - swap + >r alien-node-parameters* flatten-value-types - [ pick >r alloc-parameter r> execute ] each-parameter - drop ; inline + r> [ >r alloc-parameter r> execute ] curry each-parameter ; + inline : if-void ( type true false -- ) pick "void" = [ drop nip call ] [ nip call ] if ; inline diff --git a/core/bootstrap/primitives.factor b/core/bootstrap/primitives.factor index 838fe3251c..3f8b1da052 100644 --- a/core/bootstrap/primitives.factor +++ b/core/bootstrap/primitives.factor @@ -260,7 +260,7 @@ H{ } clone update-map set { "" "tuples.private" } { "tuple>array" "tuples" } { "profiling" "tools.profiler.private" } - { "become" "tuples.private" } + { "become" "kernel.private" } { "(sleep)" "threads.private" } { "" "float-arrays" } { "curry" "kernel" } @@ -271,6 +271,7 @@ H{ } clone update-map set { "innermost-frame-scan" "kernel.private" } { "set-innermost-frame-quot" "kernel.private" } { "call-clear" "kernel" } + { "strip-compiled-quotations" "quotations" } } dup length [ >r first2 r> make-primitive ] 2each diff --git a/core/compiler/test/alien.factor b/core/compiler/test/alien.factor index 518a8cd119..aa6b7aea7c 100644 --- a/core/compiler/test/alien.factor +++ b/core/compiler/test/alien.factor @@ -234,6 +234,50 @@ FUNCTION: test-struct-7 ffi_test_30 ; [ 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" + 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" + 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" + 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" + 1 over set-test-struct-11-x + 2 over set-test-struct-11-y + 3 ffi_test_35 +] unit-test + ! Test callbacks : callback-1 "void" { } "cdecl" [ ] alien-callback ; diff --git a/core/compiler/test/optimizer.factor b/core/compiler/test/optimizer.factor index 496c6f24ec..e05164cfdd 100644 --- a/core/compiler/test/optimizer.factor +++ b/core/compiler/test/optimizer.factor @@ -273,3 +273,9 @@ USE: sorting.private 10 20 >vector [ [ - ] swap old-binsearch ] compile-1 2nip ] unit-test + +! Regression +[ 1 2 { real imaginary } ] [ + C{ 1 2 } + [ { real imaginary } [ get-slots ] keep ] compile-1 +] unit-test diff --git a/core/cpu/x86/64/64.factor b/core/cpu/x86/64/64.factor index 708c75e0bd..55513b0930 100644 --- a/core/cpu/x86/64/64.factor +++ b/core/cpu/x86/64/64.factor @@ -4,7 +4,7 @@ USING: alien.c-types arrays cpu.x86.assembler cpu.x86.architecture cpu.x86.intrinsics cpu.x86.sse2 cpu.x86.allot cpu.architecture kernel kernel.private math namespaces sequences generator.registers generator.fixup system -alien ; +alien alien.compiler alien.structs slots splitting math.functions ; IN: cpu.x86.64 PREDICATE: x86-backend amd64-backend @@ -175,3 +175,32 @@ USE: cpu.x86.intrinsics \ set-alien-signed-4 small-reg-32 define-setter 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 % ; + +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 ; diff --git a/core/definitions/definitions-tests.factor b/core/definitions/definitions-tests.factor new file mode 100644 index 0000000000..14d1c03be3 --- /dev/null +++ b/core/definitions/definitions-tests.factor @@ -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 + +[ ] 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 diff --git a/core/definitions/definitions.factor b/core/definitions/definitions.factor index 9d31c8d87d..c9213c137b 100644 --- a/core/definitions/definitions.factor +++ b/core/definitions/definitions.factor @@ -13,6 +13,8 @@ GENERIC: forget ( defspec -- ) M: object forget drop ; +: forget-all ( definitions -- ) [ forget ] each ; + GENERIC: synopsis* ( defspec -- ) GENERIC: definer ( defspec -- start end ) diff --git a/core/generic/generic.factor b/core/generic/generic.factor index 0de8bd42d2..a9216a2fd3 100644 --- a/core/generic/generic.factor +++ b/core/generic/generic.factor @@ -14,6 +14,15 @@ M: generic definition drop f ; 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 -- ) dup dup "combination" word-prop perform-combination @@ -94,7 +103,7 @@ M: method-spec forget first2 [ delete-at ] with-methods ; dup associate implementors* ; : forget-methods ( class -- ) - [ implementors ] keep [ swap 2array forget ] curry each ; + [ implementors ] keep [ swap 2array ] curry map forget-all ; M: class forget ( class -- ) dup forget-methods diff --git a/core/inference/inference-tests.factor b/core/inference/inference-tests.factor index f83dc3a4fd..cefad52cd7 100644 --- a/core/inference/inference-tests.factor +++ b/core/inference/inference-tests.factor @@ -347,6 +347,9 @@ DEFER: bar [ t ] [ [ [ r> ] infer short-effect ] catch inference-error? ] unit-test +! Regression +[ t ] [ [ [ get-slots ] infer ] catch inference-error? ] unit-test + ! Test some curry stuff [ { 1 1 } ] [ [ 3 [ ] curry 4 [ ] curry if ] infer short-effect ] unit-test diff --git a/core/inference/transforms/transforms.factor b/core/inference/transforms/transforms.factor index 71ccbc3c35..b52357fc81 100644 --- a/core/inference/transforms/transforms.factor +++ b/core/inference/transforms/transforms.factor @@ -6,12 +6,11 @@ inference.dataflow tuples.private ; IN: inference.transforms : pop-literals ( n -- rstate seq ) - dup zero? [ drop recursive-state get f ] [ - [ ensure-values ] keep - [ d-tail ] keep - (consume-values) - dup [ value-literal ] map - swap first value-recursion swap + dup zero? [ + drop recursive-state get { } + ] [ + dup ensure-values + f swap [ 2drop pop-literal ] map reverse ] if ; : transform-quot ( quot n -- newquot ) diff --git a/core/memory/memory.factor b/core/memory/memory.factor index 62be94d709..871838c3f3 100644 --- a/core/memory/memory.factor +++ b/core/memory/memory.factor @@ -1,7 +1,9 @@ ! Copyright (C) 2005, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. 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 -- ) next-object dup @@ -14,3 +16,29 @@ USING: arrays kernel sequences vectors system ; pusher >r each-object r> >array ; inline : save ( -- ) image save-image ; + + + +: 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 ; diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 0eb4d3162c..235d0e935a 100644 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -416,7 +416,7 @@ SYMBOL: parse-hook ] keep ; : forget-smudged ( -- ) - smudged-usage [ forget ] each + smudged-usage forget-all over empty? [ 2dup smudged-usage-warning ] unless 2drop ; : record-definitions ( file -- ) diff --git a/core/prettyprint/prettyprint-tests.factor b/core/prettyprint/prettyprint-tests.factor index e9fc483c38..ef21e9cf89 100644 --- a/core/prettyprint/prettyprint-tests.factor +++ b/core/prettyprint/prettyprint-tests.factor @@ -299,3 +299,7 @@ unit-test [ 2 break 2 \ + (step-into) . ] (remove-breakpoints) ] unit-test +[ [ 2 . ] ] [ + [ 2 \ break (step-into) . ] (remove-breakpoints) +] unit-test + diff --git a/core/prettyprint/prettyprint.factor b/core/prettyprint/prettyprint.factor index 4a728b81de..01cff3b7b3 100644 --- a/core/prettyprint/prettyprint.factor +++ b/core/prettyprint/prettyprint.factor @@ -99,7 +99,12 @@ SYMBOL: -> building get dup empty? [ drop \ (step-into) , ] [ - pop dup wrapper? [ wrapped ] when , + pop dup wrapper? [ + wrapped dup \ break eq? + [ drop ] [ , ] if + ] [ + , + ] if ] if ; : (remove-breakpoints) ( quot -- newquot ) diff --git a/core/source-files/source-files.factor b/core/source-files/source-files.factor index f544a41dcf..57ae7d7a53 100644 --- a/core/source-files/source-files.factor +++ b/core/source-files/source-files.factor @@ -71,7 +71,7 @@ M: pathname where pathname-string 1 2array ; : forget-source ( path -- ) dup source-file dup unxref-source - source-file-definitions [ drop forget ] assoc-each + source-file-definitions keys forget-all source-files get delete-at ; M: pathname forget pathname-string forget-source ; diff --git a/core/vocabs/vocabs.factor b/core/vocabs/vocabs.factor index cb5e700c40..0d3475c951 100644 --- a/core/vocabs/vocabs.factor +++ b/core/vocabs/vocabs.factor @@ -76,7 +76,7 @@ SYMBOL: load-vocab-hook [ ] subset ; : forget-vocab ( vocab -- ) - dup vocab-words [ nip forget ] assoc-each + dup vocab-words values forget-all vocab-name dictionary get delete-at ; : child-vocab? ( prefix name -- ? ) diff --git a/core/words/words.factor b/core/words/words.factor index 342b20508c..93c08ff435 100644 --- a/core/words/words.factor +++ b/core/words/words.factor @@ -6,14 +6,14 @@ slots.private math namespaces sequences strings vectors sbufs quotations assocs hashtables sorting math.parser words.private vocabs ; -GENERIC: execute ( word -- ) - -M: word execute (execute) ; - : word ( -- word ) \ word get-global ; : set-word ( word -- ) \ word set-global ; +GENERIC: execute ( word -- ) + +M: word execute (execute) ; + ! Used by the compiler SYMBOL: changed-words @@ -201,7 +201,6 @@ M: word (forget-word) reveal ; : forget-word ( word -- ) - dup f "methods" set-word-prop dup delete-xref dup unchanged-word (forget-word) ; diff --git a/extra/automata/ui/deploy.factor b/extra/automata/ui/deploy.factor new file mode 100644 index 0000000000..eb261ed93f --- /dev/null +++ b/extra/automata/ui/deploy.factor @@ -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" } +} diff --git a/extra/boids/ui/deploy.factor b/extra/boids/ui/deploy.factor new file mode 100644 index 0000000000..0b22fa5200 --- /dev/null +++ b/extra/boids/ui/deploy.factor @@ -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" } +} diff --git a/extra/cabal/cabal.factor b/extra/cabal/cabal.factor index 278729fb8a..cc51bcf308 100644 --- a/extra/cabal/cabal.factor +++ b/extra/cabal/cabal.factor @@ -69,13 +69,15 @@ cond ; ! : handle-client ( client -- ) dup users> push ! dup [ >user [ handle-user-loop ] with-stream* ] with-scope ; -: handle-client ( client -- ) dup users> push +: handle-client ( client -- ) + dup users> push dup [ >user [ handle-user-loop ] with-stream ] with-scope ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : 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 ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/extra/golden-section/deploy.factor b/extra/golden-section/deploy.factor index 318d03ee4c..3923d258f0 100644 --- a/extra/golden-section/deploy.factor +++ b/extra/golden-section/deploy.factor @@ -1,12 +1,17 @@ USING: tools.deploy.config ; V{ + { strip-io? t } + { 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" "Golden Section.app" } } diff --git a/extra/hello-ui/deploy.factor b/extra/hello-ui/deploy.factor index db728d1eda..2f346e94c6 100644 --- a/extra/hello-ui/deploy.factor +++ b/extra/hello-ui/deploy.factor @@ -1,12 +1,16 @@ USING: tools.deploy.config ; V{ + { strip-prettyprint? t } + { strip-globals? t } { strip-word-props? t } - { strip-word-names? t } + { strip-word-names? f } { 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" "Hello World.app" } } diff --git a/extra/hello-world/deploy.factor b/extra/hello-world/deploy.factor index 1fa0e20503..145f7ecea7 100644 --- a/extra/hello-world/deploy.factor +++ b/extra/hello-world/deploy.factor @@ -1,11 +1,15 @@ 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? f } { deploy-compiled? f } { deploy-io? f } { deploy-ui? f } + { "stop-after-last-window?" t } } diff --git a/extra/springies/models/3snake/3snake.factor b/extra/springies/models/3snake/3snake.factor new file mode 100644 index 0000000000..92d39ac2c2 --- /dev/null +++ b/extra/springies/models/3snake/3snake.factor @@ -0,0 +1,168 @@ + +USING: kernel namespaces arrays sequences threads math ui random bake + springies springies.ui ; + +IN: springies.models.3snake + +: random-range ( a b -- n ) 1+ over - random + ; + +: model ( -- ) + +{ } clone >nodes +{ } clone >springs +0.001 >time-slice +gravity off + +1 19.0 328.0 0.0 0.0 1.0 1.0 mass +2 36.0 328.0 0.0 0.0 1.0 1.0 mass +3 54.0 328.0 0.0 0.0 1.0 1.0 mass +4 72.0 328.0 0.0 0.0 1.0 1.0 mass +5 90.0 328.0 0.0 0.0 1.0 1.0 mass +6 108.0 328.0 0.0 0.0 1.0 1.0 mass +7 126.0 328.0 0.0 0.0 1.0 1.0 mass +8 144.0 328.0 0.0 0.0 1.0 1.0 mass +9 162.0 328.0 0.0 0.0 1.0 1.0 mass +10 180.0 328.0 0.0 0.0 1.0 1.0 mass +11 198.0 328.0 0.0 0.0 1.0 1.0 mass +12 216.0 328.0 0.0 0.0 1.0 1.0 mass +13 234.0 328.0 0.0 0.0 1.0 1.0 mass +14 252.0 328.0 0.0 0.0 1.0 1.0 mass +15 270.0 328.0 0.0 0.0 1.0 1.0 mass +16 288.0 328.0 0.0 0.0 1.0 1.0 mass +17 306.0 328.0 0.0 0.0 1.0 1.0 mass +18 324.0 328.0 0.0 0.0 1.0 1.0 mass +19 342.0 328.0 0.0 0.0 1.0 1.0 mass +20 360.0 328.0 0.0 0.0 1.0 1.0 mass +21 378.0 328.0 0.0 0.0 1.0 1.0 mass +22 396.0 328.0 0.0 0.0 1.0 1.0 mass +23 414.0 328.0 0.0 0.0 1.0 1.0 mass +24 432.0 328.0 0.0 0.0 1.0 1.0 mass +25 450.0 328.0 0.0 0.0 1.0 1.0 mass +26 468.0 328.0 0.0 0.0 1.0 1.0 mass +27 504.0 328.0 0.0 0.0 1.0 1.0 mass +28 486.0 328.0 0.0 0.0 1.0 1.0 mass +29 522.0 328.0 0.0 0.0 1.0 1.0 mass +30 540.0 328.0 0.0 0.0 1.0 1.0 mass +31 558.0 328.0 0.0 0.0 1.0 1.0 mass +32 576.0 328.0 0.0 0.0 1.0 1.0 mass +33 594.0 328.0 0.0 0.0 1.0 1.0 mass +34 612.0 328.0 0.0 0.0 1.0 1.0 mass +35 626.0 328.0 0.0 0.0 1.0 1.0 mass +1 1 2 200.0 1.500000 18.0 spng +2 3 2 200.0 1.500000 18.0 spng +3 3 4 200.0 1.500000 18.0 spng +4 4 5 200.0 1.500000 18.0 spng +5 5 6 200.0 1.500000 18.0 spng +6 6 7 200.0 1.500000 18.0 spng +7 7 8 200.0 1.500000 18.0 spng +8 8 9 200.0 1.500000 18.0 spng +9 9 10 200.0 1.500000 18.0 spng +10 10 11 200.0 1.500000 18.0 spng +11 11 12 200.0 1.500000 18.0 spng +12 12 13 200.0 1.500000 18.0 spng +13 13 14 200.0 1.500000 18.0 spng +14 14 15 200.0 1.500000 18.0 spng +15 15 16 200.0 1.500000 18.0 spng +16 16 17 200.0 1.500000 18.0 spng +17 17 18 200.0 1.500000 18.0 spng +18 18 19 200.0 1.500000 18.0 spng +19 19 20 200.0 1.500000 18.0 spng +20 20 21 200.0 1.500000 18.0 spng +21 21 22 200.0 1.500000 18.0 spng +22 22 23 200.0 1.500000 18.0 spng +23 23 24 200.0 1.500000 18.0 spng +24 24 25 200.0 1.500000 18.0 spng +25 25 26 200.0 1.500000 18.0 spng +26 26 28 200.0 1.500000 18.0 spng +27 28 27 200.0 1.500000 18.0 spng +28 27 29 200.0 1.500000 18.0 spng +29 29 30 200.0 1.500000 18.0 spng +30 30 31 200.0 1.500000 18.0 spng +31 31 32 200.0 1.500000 18.0 spng +32 32 33 200.0 1.500000 18.0 spng +33 33 34 200.0 1.500000 18.0 spng +34 34 35 200.0 1.500000 18.0 spng +35 1 3 200.0 1.500000 36.0 spng +36 2 4 200.0 1.500000 36.0 spng +37 3 5 200.0 1.500000 36.0 spng +38 4 6 200.0 1.500000 36.0 spng +39 5 7 200.0 1.500000 36.0 spng +40 6 8 200.0 1.500000 36.0 spng +41 7 9 200.0 1.500000 36.0 spng +42 8 10 200.0 1.500000 36.0 spng +43 9 11 200.0 1.500000 36.0 spng +44 10 12 200.0 1.500000 36.0 spng +45 11 13 200.0 1.500000 36.0 spng +46 12 14 200.0 1.500000 36.0 spng +47 13 15 200.0 1.500000 36.0 spng +48 14 16 200.0 1.500000 36.0 spng +49 15 17 200.0 1.500000 36.0 spng +50 16 18 200.0 1.500000 36.0 spng +51 17 19 200.0 1.500000 36.0 spng +52 18 20 200.0 1.500000 36.0 spng +53 19 21 200.0 1.500000 36.0 spng +54 20 22 200.0 1.500000 36.0 spng +55 21 23 200.0 1.500000 36.0 spng +56 22 24 200.0 1.500000 36.0 spng +57 23 25 200.0 1.500000 36.0 spng +58 24 26 200.0 1.500000 36.0 spng +59 25 28 200.0 1.500000 36.0 spng +60 26 27 200.0 1.500000 36.0 spng +61 28 29 200.0 1.500000 36.0 spng +62 27 30 200.0 1.500000 36.0 spng +63 29 31 200.0 1.500000 36.0 spng +64 30 32 200.0 1.500000 36.0 spng +65 31 33 200.0 1.500000 36.0 spng +66 32 34 200.0 1.500000 36.0 spng +67 33 35 200.0 1.500000 36.0 spng +68 1 4 200.0 1.500000 53.0 spng +69 2 5 200.0 1.500000 54.0 spng +70 3 6 200.0 1.500000 54.0 spng +71 4 7 200.0 1.500000 54.0 spng +72 5 8 200.0 1.500000 54.0 spng +73 6 9 200.0 1.500000 54.0 spng +74 7 10 200.0 1.500000 54.0 spng +75 8 11 200.0 1.500000 54.0 spng +76 9 12 200.0 1.500000 54.0 spng +77 10 13 200.0 1.500000 54.0 spng +78 11 14 200.0 1.500000 54.0 spng +79 12 15 200.0 1.500000 54.0 spng +80 13 16 200.0 1.500000 54.0 spng +81 14 17 200.0 1.500000 54.0 spng +82 15 18 200.0 1.500000 54.0 spng +83 16 19 200.0 1.500000 54.0 spng +84 17 20 200.0 1.500000 54.0 spng +85 18 21 200.0 1.500000 54.0 spng +86 19 22 200.0 1.500000 54.0 spng +87 20 23 200.0 1.500000 54.0 spng +88 21 24 200.0 1.500000 54.0 spng +89 22 25 200.0 1.500000 54.0 spng +90 23 26 200.0 1.500000 54.0 spng +91 24 28 200.0 1.500000 54.0 spng +92 25 27 200.0 1.500000 54.0 spng +93 26 29 200.0 1.500000 54.0 spng +94 28 30 200.0 1.500000 54.0 spng +95 27 31 200.0 1.500000 54.0 spng +96 29 32 200.0 1.500000 54.0 spng +97 30 33 200.0 1.500000 54.0 spng +98 31 34 200.0 1.500000 54.0 spng +99 32 35 200.0 1.500000 50.0 spng + +10 +[ + -400 400 random-range -400 400 random-range 2array + nodes> random + set-node-vel +] +times + +; + +: go* ( quot -- ) + [ [ [ springies-window* 1000 sleep % ] with-scope ] with-ui ] bake call ; + +! : go ( -- ) [ [ springies-window* 1000 sleep model ] with-scope ] with-ui ; + +: go ( -- ) [ model ] go* ; + +MAIN: go \ No newline at end of file diff --git a/extra/springies/models/belt-tire/belt-tire.factor b/extra/springies/models/belt-tire/belt-tire.factor new file mode 100644 index 0000000000..6604f85a3f --- /dev/null +++ b/extra/springies/models/belt-tire/belt-tire.factor @@ -0,0 +1,307 @@ + +USING: kernel namespaces arrays sequences threads math ui random bake + springies springies.ui ; + +IN: springies.models.belt-tire + +: model ( -- ) + +{ } clone >nodes +{ } clone >springs +0.008 >time-slice +gravity on + +1 274.078806900597328 346.307117178664043 0 0 1 0.5 mass +2 284.142891110742823 329.83402842231834 0 0 1 0.5 mass +3 295.307158356938658 355.695013578746227 0 0 1 0.5 mass +4 300.698527801927128 337.003548930923216 0 0 1 0.5 mass +5 318.093036910029696 359.203044347904552 0 0 1 0.5 mass +6 318.542098798246286 339.592403450546044 0 0 1 0.5 mass +7 340.949296214486822 356.831259237330983 0 0 1 0.5 mass +8 336.494524828869885 337.754019325244656 0 0 1 0.5 mass +9 362.534986907234952 348.770558940029559 0 0 1 0.5 mass +10 353.491265306914897 331.642140359094469 0 0 1 0.5 mass +11 381.368850422101502 335.37878701564847 0 0 1 0.5 mass +12 368.085531061140216 321.055018811315335 0 0 1 0.5 mass +13 396.117634938806759 317.519287773537314 0 0 1 0.5 mass +14 379.675208211408915 307.277961968837246 0 0 1 0.5 mass +15 405.655157991023771 296.391903048606025 0 0 1 0.5 mass +16 387.124676448692242 290.862310093183567 0 0 1 0.5 mass +17 409.337178964708642 273.594658653786666 0 0 1 0.5 mass +18 389.76569804010461 273.012494879567555 0 0 1 0.5 mass +19 407.11203230551871 250.712646124396059 0 0 1 0.5 mass +20 387.966228461346304 255.061007930370067 0 0 1 0.5 mass +21 399.188308328902735 229.098161823607285 0 0 1 0.5 mass +22 381.896222954111181 238.073977723246998 0 0 1 0.5 mass +23 385.883224011375262 210.148208473511374 0 0 1 0.5 mass +24 371.614761646970464 223.279700317395225 0 0 1 0.5 mass +25 367.955378160003875 195.334436550727929 0 0 1 0.5 mass +26 357.817091674528911 211.717360072075536 0 0 1 0.5 mass +27 346.743525482831387 185.884698478394085 0 0 1 0.5 mass +28 341.291169697238729 204.55711005838188 0 0 1 0.5 mass +29 323.935265230381788 182.330460182137188 0 0 1 0.5 mass +30 323.466187791799882 201.937076877994031 0 0 1 0.5 mass +31 301.04141769400843 184.703602685435726 0 0 1 0.5 mass +32 305.532794735419941 203.763859300438838 0 0 1 0.5 mass +33 279.442362700896183 192.851996602076866 0 0 1 0.5 mass +34 288.551113492738239 209.893932668644339 0 0 1 0.5 mass +35 260.65997798024199 206.334196608396638 0 0 1 0.5 mass +36 273.960657978745814 220.516324161880476 0 0 1 0.5 mass +37 246.029909853431349 224.197583023911335 0 0 1 0.5 mass +38 262.719165304227545 234.58428660123181 0 0 1 0.5 mass +39 236.458142984593252 245.235572499606377 0 0 1 0.5 mass +40 254.870454491934908 250.81914136861181 0 0 1 0.5 mass +41 232.703447579492519 268.042376651164432 0 0 1 0.5 mass +42 252.226120754560156 268.679895159358864 0 0 1 0.5 mass +43 234.96767702938331 291.007702051922024 0 0 1 0.5 mass +44 254.040589506795527 286.621843971355872 0 0 1 0.5 mass +45 242.759412026738119 312.577114225657738 0 0 1 0.5 mass +46 260.111088599530603 303.593264087352964 0 0 1 0.5 mass +47 256.101782779606651 331.52509923420655 0 0 1 0.5 mass +48 270.373388641766439 318.366074596339615 0 0 1 0.5 mass +49 320.448537383965288 270.292364746678743 0 0 10 0.5 mass +1 1 4 200 2 28.284271247461902 spng +2 4 5 200 2 28.284271247461902 spng +3 5 8 200 2 28.284271247461902 spng +4 8 9 200 2 28.284271247461902 spng +5 9 12 200 2 28.284271247461902 spng +6 12 13 200 2 28.284271247461902 spng +7 13 16 200 2 28.284271247461902 spng +8 16 17 200 2 28.284271247461902 spng +9 17 20 200 2 28.284271247461902 spng +10 20 21 200 2 28.284271247461902 spng +11 21 24 200 2 28.284271247461902 spng +12 24 25 200 2 28.284271247461902 spng +13 25 28 200 2 28.284271247461902 spng +14 28 29 200 2 28.284271247461902 spng +15 29 32 200 2 28.284271247461902 spng +16 32 33 200 2 28.284271247461902 spng +17 33 36 200 2 28.284271247461902 spng +18 36 37 200 2 28.284271247461902 spng +19 37 40 200 2 28.284271247461902 spng +20 40 41 200 2 28.284271247461902 spng +21 41 44 200 2 28.284271247461902 spng +22 44 45 200 2 28.284271247461902 spng +23 45 48 200 2 28.284271247461902 spng +24 3 6 200 2 28.284271247461902 spng +25 7 10 200 2 28.284271247461902 spng +26 11 14 200 2 28.284271247461902 spng +27 15 18 200 2 28.284271247461902 spng +28 19 22 200 2 28.284271247461902 spng +29 23 26 200 2 28.284271247461902 spng +30 27 30 200 2 28.284271247461902 spng +31 31 34 200 2 28.284271247461902 spng +32 35 38 200 2 28.284271247461902 spng +33 39 44 200 2 44.7213595499957961 spng +34 39 42 200 2 28.284271247461902 spng +35 43 46 200 2 28.284271247461902 spng +36 47 46 200 2 28.284271247461902 spng +37 43 42 200 2 28.284271247461902 spng +38 39 38 200 2 28.284271247461902 spng +39 35 34 200 2 28.284271247461902 spng +40 2 3 200 2 28.284271247461902 spng +41 6 7 200 2 28.284271247461902 spng +42 10 11 200 2 28.284271247461902 spng +43 14 15 200 2 28.284271247461902 spng +44 18 19 200 2 28.284271247461902 spng +45 22 23 200 2 28.284271247461902 spng +46 26 27 200 2 28.284271247461902 spng +47 30 31 200 2 28.284271247461902 spng +48 1 6 200 2 44.7213595499957961 spng +49 3 8 200 2 44.7213595499957961 spng +50 5 10 200 2 44.7213595499957961 spng +51 7 12 200 2 44.7213595499957961 spng +52 9 14 200 2 44.7213595499957961 spng +53 11 16 200 2 44.7213595499957961 spng +54 13 18 200 2 44.7213595499957961 spng +55 15 20 200 2 44.7213595499957961 spng +56 17 22 200 2 44.7213595499957961 spng +57 19 24 200 2 44.7213595499957961 spng +58 21 26 200 2 44.7213595499957961 spng +59 23 28 200 2 44.7213595499957961 spng +60 25 30 200 2 44.7213595499957961 spng +61 27 32 200 2 44.7213595499957961 spng +62 29 34 200 2 44.7213595499957961 spng +63 31 36 200 2 44.7213595499957961 spng +64 33 38 200 2 44.7213595499957961 spng +65 35 40 200 2 44.7213595499957961 spng +66 37 42 200 2 44.7213595499957961 spng +67 41 46 200 2 44.7213595499957961 spng +68 43 48 200 2 44.7213595499957961 spng +69 2 5 200 2 44.7213595499957961 spng +70 4 7 200 2 44.7213595499957961 spng +71 6 9 200 2 44.7213595499957961 spng +72 8 11 200 2 44.7213595499957961 spng +73 10 13 200 2 44.7213595499957961 spng +74 12 15 200 2 44.7213595499957961 spng +75 14 17 200 2 44.7213595499957961 spng +76 16 19 200 2 44.7213595499957961 spng +77 18 21 200 2 44.7213595499957961 spng +78 20 23 200 2 44.7213595499957961 spng +79 22 25 200 2 44.7213595499957961 spng +80 24 27 200 2 44.7213595499957961 spng +81 26 29 200 2 44.7213595499957961 spng +82 28 31 200 2 44.7213595499957961 spng +83 30 33 200 2 44.7213595499957961 spng +84 32 35 200 2 44.7213595499957961 spng +85 34 37 200 2 44.7213595499957961 spng +86 36 39 200 2 44.7213595499957961 spng +87 38 41 200 2 44.7213595499957961 spng +88 40 43 200 2 44.7213595499957961 spng +89 42 45 200 2 44.7213595499957961 spng +90 44 47 200 2 44.7213595499957961 spng +91 1 8 200 2 63.2455532033675851 spng +92 3 10 200 2 63.2455532033675851 spng +93 5 12 200 2 63.2455532033675851 spng +94 7 14 200 2 63.2455532033675851 spng +95 9 16 200 2 63.2455532033675851 spng +96 11 18 200 2 63.2455532033675851 spng +97 13 20 200 2 63.2455532033675851 spng +98 15 22 200 2 63.2455532033675851 spng +99 17 24 200 2 63.2455532033675851 spng +100 19 26 200 2 63.2455532033675851 spng +101 21 28 200 2 63.2455532033675851 spng +102 23 30 200 2 63.2455532033675851 spng +103 25 32 200 2 63.2455532033675851 spng +104 27 34 200 2 63.2455532033675851 spng +105 29 36 200 2 63.2455532033675851 spng +106 31 38 200 2 63.2455532033675851 spng +107 33 40 200 2 63.2455532033675851 spng +108 35 42 200 2 63.2455532033675851 spng +109 37 44 200 2 63.2455532033675851 spng +110 39 46 200 2 63.2455532033675851 spng +111 48 41 200 2 63.2455532033675851 spng +112 2 7 200 2 63.2455532033675851 spng +113 4 9 200 2 63.2455532033675851 spng +114 6 11 200 2 63.2455532033675851 spng +115 8 13 200 2 63.2455532033675851 spng +116 10 15 200 2 63.2455532033675851 spng +117 12 17 200 2 63.2455532033675851 spng +118 14 19 200 2 63.2455532033675851 spng +119 16 21 200 2 63.2455532033675851 spng +120 18 23 200 2 63.2455532033675851 spng +121 20 25 200 2 63.2455532033675851 spng +122 22 27 200 2 63.2455532033675851 spng +123 24 29 200 2 63.2455532033675851 spng +124 26 31 200 2 63.2455532033675851 spng +125 28 33 200 2 63.2455532033675851 spng +126 30 35 200 2 63.2455532033675851 spng +127 32 37 200 2 63.2455532033675851 spng +128 34 39 200 2 63.2455532033675851 spng +129 36 41 200 2 63.2455532033675851 spng +130 38 43 200 2 63.2455532033675851 spng +131 40 45 200 2 63.2455532033675851 spng +132 42 47 200 2 63.2455532033675851 spng +133 1 3 200 2 20 spng +134 3 5 200 2 20 spng +135 5 7 200 2 20 spng +136 7 9 200 2 20 spng +137 9 11 200 2 20 spng +138 11 13 200 2 20 spng +139 13 15 200 2 20 spng +140 15 17 200 2 20 spng +141 17 19 200 2 20 spng +142 19 21 200 2 20 spng +143 21 23 200 2 20 spng +144 23 25 200 2 20 spng +145 25 27 200 2 20 spng +146 27 29 200 2 20 spng +147 29 31 200 2 20 spng +148 31 33 200 2 20 spng +149 33 35 200 2 20 spng +150 35 37 200 2 20 spng +151 37 39 200 2 20 spng +152 39 41 200 2 20 spng +153 41 43 200 2 20 spng +154 43 45 200 2 20 spng +155 45 47 200 2 20 spng +156 2 4 200 2 20 spng +157 4 6 200 2 20 spng +158 6 8 200 2 20 spng +159 8 10 200 2 20 spng +160 10 12 200 2 20 spng +161 12 14 200 2 20 spng +162 14 16 200 2 20 spng +163 16 18 200 2 20 spng +164 18 20 200 2 20 spng +165 20 22 200 2 20 spng +166 22 24 200 2 20 spng +167 24 26 200 2 20 spng +168 26 28 200 2 20 spng +169 28 30 200 2 20 spng +170 30 32 200 2 20 spng +171 32 34 200 2 20 spng +172 34 36 200 2 20 spng +173 36 38 200 2 20 spng +174 38 40 200 2 20 spng +175 40 42 200 2 20 spng +176 42 44 200 2 20 spng +177 44 46 200 2 20 spng +178 46 48 200 2 20 spng +179 1 2 200 2 20 spng +180 3 4 200 2 20 spng +181 5 6 200 2 20 spng +182 7 8 200 2 20 spng +183 9 10 200 2 20 spng +184 11 12 200 2 20 spng +185 13 14 200 2 20 spng +186 15 16 200 2 20 spng +187 17 18 200 2 20 spng +188 19 20 200 2 20 spng +189 21 22 200 2 20 spng +190 23 24 200 2 20 spng +191 25 26 200 2 20 spng +192 27 28 200 2 20 spng +193 29 30 200 2 20 spng +194 31 32 200 2 20 spng +195 33 34 200 2 20 spng +196 35 36 200 2 20 spng +197 37 38 200 2 20 spng +198 39 40 200 2 20 spng +199 41 42 200 2 20 spng +200 43 44 200 2 20 spng +201 45 46 200 2 20 spng +202 47 48 200 2 20 spng +203 47 2 200 2 28.284271247461902 spng +204 1 48 200 2 28.284271247461902 spng +205 1 46 200 2 44.7213595499957961 spng +206 1 44 200 2 63.2455532033675851 spng +207 47 4 200 2 44.7213595499957961 spng +208 48 3 200 2 44.7213595499957961 spng +209 47 6 200 2 63.2455532033675851 spng +210 48 5 200 2 63.2455532033675851 spng +211 46 3 200 2 63.2455532033675851 spng +212 45 4 200 2 63.2455532033675851 spng +213 47 1 200 2 20 spng +214 48 2 200 2 20 spng +215 18 49 300 3 69.2603782836911677 spng +216 49 20 300 3 69.050706006528273 spng +217 22 49 300 3 69.3541635375988079 spng +218 49 24 300 3 69.5269731830747872 spng +219 26 49 300 3 69.6347614342147381 spng +220 49 28 300 3 68.9492567037527948 spng +221 30 49 300 3 68.2641926635040477 spng +222 49 32 300 3 68.0661443009665419 spng +223 34 49 300 3 68.4470598345904051 spng +224 49 36 300 3 68.1175454637056106 spng +225 38 49 300 3 67.6756972627545252 spng +226 49 40 300 3 68.6221538571910514 spng +227 42 49 300 3 68.1835757349231386 spng +228 49 44 300 3 68.249542123006222 spng +229 46 49 300 3 68.8767014308902503 spng +230 49 48 300 3 69.4262198308391305 spng +231 2 49 300 3 69.8927750200262068 spng +232 49 4 300 3 69.5701085237043486 spng +233 6 49 300 3 69.1809222257119103 spng +234 8 49 300 3 69.2314957226839027 spng +235 49 10 300 3 69.7782200976780445 spng +236 12 49 300 3 69.5269731830747872 spng +237 49 14 300 3 69.8927750200262068 spng +238 16 49 300 3 69.8927750200262068 spng + + +nodes> 200 random -100 + 100 2array [ swap set-node-vel ] curry each ; + +: go ( -- ) [ model ] go* ; + +MAIN: go \ No newline at end of file diff --git a/extra/springies/models/nifty/nifty.factor b/extra/springies/models/nifty/nifty.factor new file mode 100644 index 0000000000..db644f2248 --- /dev/null +++ b/extra/springies/models/nifty/nifty.factor @@ -0,0 +1,80 @@ + +USING: kernel namespaces arrays sequences threads math math.vectors + ui random bake springies springies.ui ; + +IN: springies.models.nifty + +: model ( -- ) + +{ } clone >nodes +{ } clone >springs +0.007 >time-slice +gravity off + +1 148.581450999999987 350.573888000000011 0 -7.75 1 0.1 mass +2 168.564277000000004 351.402524000000028 0 -7.75 1 0.1 mass +3 188.54710399999999 352.231158999999991 0 -7.75 1 0.1 mass +4 208.529931000000005 353.059794000000011 0 -7.75 1 0.1 mass +5 228.512757999999991 353.888428999999974 0 -7.75 1 0.1 mass +6 248.495584000000008 354.717063999999993 0 -7.75 1 0.1 mass +7 149.410086000000007 330.591061000000025 0 -7.75 1 0.1 mass +8 150.238720999999998 310.608234999999979 0 -7.75 1 0.1 mass +9 151.06735599999999 290.625407999999993 0 -7.75 1 0.1 mass +10 151.895991000000009 270.642581000000007 0 -7.75 1 0.1 mass +11 152.724626000000001 250.65975499999999 0 -7.75 1 0.1 mass +12 172.707452999999987 251.48839000000001 0 -7.749999 1 0.1 mass +13 192.690280000000001 252.317025000000001 0 -7.75 1 0.1 mass +14 212.67310599999999 253.145659999999992 0 -7.75 1 0.1 mass +15 232.655933000000005 253.974295000000012 0 -7.75 1 0.1 mass +16 252.638759999999991 254.802930000000003 0 -7.75 1 0.1 mass +17 251.810124999999999 274.78575699999999 0 -7.75 1 0.1 mass +18 250.98148900000001 294.768583999999976 0 -7.75 1 0.1 mass +19 249.324218999999999 334.734237000000007 0 -7.75 1 0.1 mass +20 250.152853999999991 314.751410000000021 0 -7.75 1 0.1 mass +1 1 2 200 1.5 20 spng +2 2 3 200 1.5 20 spng +3 3 4 200 1.5 20 spng +4 4 5 200 1.5 20 spng +5 5 6 200 1.5 20 spng +6 6 19 200 1.5 20 spng +7 19 20 200 1.5 20 spng +8 20 18 200 1.5 20 spng +9 18 17 200 1.5 20 spng +10 17 16 200 1.5 20 spng +11 16 15 200 1.5 20 spng +12 15 14 200 1.5 20 spng +13 14 13 200 1.5 20 spng +14 13 12 200 1.5 20 spng +15 12 11 200 1.5 20 spng +16 11 10 200 1.5 20 spng +17 10 9 200 1.5 20 spng +18 9 8 200 1.5 20 spng +19 8 7 200 1.5 20 spng +20 7 1 200 1.5 20 spng +21 1 19 200 1.5 101.98039 spng +22 19 14 200 1.5 89.4427189999999968 spng +23 14 8 200 1.5 84.8528139999999951 spng +24 8 5 200 1.5 89.4427189999999968 spng +25 5 16 200 1.5 101.98039 spng +26 16 10 200 1.5 101.98039 spng +27 10 3 200 1.5 89.4427189999999968 spng +28 3 18 200 1.5 84.8528139999999951 spng +29 18 12 200 1.5 89.4427189999999968 spng +30 12 1 200 1.5 101.98039 spng +31 2 20 200 1.5 89.4427189999999968 spng +32 20 13 200 1.5 84.8528139999999951 spng +33 13 7 200 1.5 89.4427189999999968 spng +34 7 6 200 1.5 101.98039 spng +35 6 15 200 1.5 101.98039 spng +36 15 9 200 1.5 89.4427189999999968 spng +37 9 4 200 1.5 84.8528139999999951 spng +38 4 17 200 1.5 89.4427189999999968 spng +39 17 11 200 1.5 101.98039 spng +40 11 2 200 1.5 101.98039 spng + +nodes> 200 random -100 + 200 random -100 + 2array [ swap set-node-vel ] curry +each ; + +: go ( -- ) [ model ] go* ; + +MAIN: go \ No newline at end of file diff --git a/extra/springies/models/urchin/urchin.factor b/extra/springies/models/urchin/urchin.factor new file mode 100644 index 0000000000..734a1c2f6d --- /dev/null +++ b/extra/springies/models/urchin/urchin.factor @@ -0,0 +1,113 @@ + +USING: kernel namespaces arrays sequences threads math math.vectors + ui random bake + springies springies.ui ; + +IN: springies.models.urchin + +: model ( -- ) + +{ } clone >nodes +{ } clone >springs +0.007 >time-slice +gravity on + +1 507.296953 392.174236 -11.451186 -71.267273 1.0 1.0 mass +2 514.879820 372.128025 11.950035 -70.858717 1.0 1.0 mass +3 536.571268 364.423706 18.394466 -41.159445 1.0 1.0 mass +4 554.886966 369.953895 15.173664 -11.009243 1.0 1.0 mass +5 572.432935 379.927626 8.228103 -1.120846 1.0 1.0 mass +6 585.774508 392.380791 5.443281 -8.186599 1.0 1.0 mass +7 584.650543 411.934530 -15.582843 -24.911756 1.0 1.0 mass +8 569.409148 424.155713 -24.100159 -42.285960 1.0 1.0 mass +9 553.751996 434.663690 -26.069217 -41.610454 1.0 1.0 mass +10 536.684374 444.915694 -30.702349 -45.021926 1.0 1.0 mass +11 516.677286 435.936238 -33.128410 -60.977340 1.0 1.0 mass +12 514.170680 414.649472 -24.471518 -64.104425 1.0 1.0 mass +13 602.101547 478.298945 1.612646 -53.040881 1.0 1.0 mass +14 637.0 427.598266 0.0 0.0 1.0 1.0 mass +15 608.000171 350.425575 31.812856 23.456940 1.0 1.0 mass +16 484.367809 332.414622 42.575378 -91.238351 1.0 1.0 mass +17 480.857379 475.215663 -24.240991 -53.909049 1.0 1.0 mass +18 548.580015 492.173168 -34.565312 -52.436468 1.0 1.0 mass +19 578.155338 487.173526 22.544495 -71.920721 1.0 1.0 mass +20 630.992588 379.333707 16.662115 37.873709 1.0 1.0 mass +21 591.256916 324.817423 63.036114 27.988433 1.0 1.0 mass +22 539.051461 311.597938 159.501014 -27.955219 1.0 1.0 mass +23 448.396171 396.882674 -15.045910 -138.652372 1.0 1.0 mass +24 448.194414 419.993896 -27.625008 -84.936708 1.0 1.0 mass +1 1 2 200.0 3.0 20.0 spng +2 2 3 200.0 3.0 20.0 spng +3 3 4 200.0 3.0 20.0 spng +4 4 5 200.0 3.0 20.0 spng +5 5 6 200.0 3.0 20.0 spng +6 6 7 200.0 3.0 20.0 spng +7 7 8 200.0 3.0 20.0 spng +8 8 9 200.0 3.0 20.0 spng +9 9 10 200.0 3.0 20.0 spng +10 10 11 200.0 3.0 20.0 spng +11 11 12 200.0 3.0 20.0 spng +12 1 3 200.0 3.0 40.0 spng +13 2 4 200.0 3.0 40.0 spng +14 3 5 200.0 3.0 40.0 spng +15 4 6 200.0 3.0 40.0 spng +16 6 8 200.0 3.0 40.0 spng +17 7 9 200.0 3.0 40.0 spng +18 8 10 200.0 3.0 40.0 spng +19 9 11 200.0 3.0 40.0 spng +20 10 12 200.0 3.0 40.0 spng +21 12 1 200.0 3.0 21.0 spng +22 12 2 200.0 3.0 41.0 spng +23 11 1 200.0 3.0 41.0 spng +24 6 12 200.0 3.0 72.681733 spng +25 5 11 200.0 3.0 81.191259 spng +26 10 4 200.0 3.0 76.026311 spng +27 3 9 200.0 3.0 72.615425 spng +28 8 2 200.0 3.0 74.966659 spng +29 1 7 200.0 3.0 80.280757 spng +30 17 11 200.0 3.0 55.036352 spng +31 10 18 200.0 3.0 49.819675 spng +32 19 9 200.0 3.0 54.918121 spng +33 8 13 200.0 3.0 62.201286 spng +34 14 7 200.0 3.0 58.600341 spng +35 6 20 200.0 3.0 46.400431 spng +36 15 5 200.0 3.0 44.045431 spng +37 4 21 200.0 3.0 57.454330 spng +38 22 3 200.0 3.0 53.823787 spng +39 2 16 200.0 3.0 51.039201 spng +40 23 1 200.0 3.0 58.668561 spng +41 12 24 200.0 3.0 64.404969 spng +42 24 11 200.0 3.0 71.217975 spng +43 17 12 200.0 3.0 65.0 spng +44 11 18 200.0 3.0 60.745370 spng +45 18 9 200.0 3.0 60.406953 spng +46 9 13 200.0 3.0 67.779053 spng +47 13 7 200.0 3.0 66.708320 spng +48 7 20 200.0 3.0 55.659680 spng +49 20 5 200.0 3.0 60.0 spng +50 5 21 200.0 3.0 61.846584 spng +51 21 3 200.0 3.0 64.031242 spng +52 3 16 200.0 3.0 63.568860 spng +53 16 1 200.0 3.0 59.774577 spng +54 1 24 200.0 3.0 65.802736 spng +55 17 10 200.0 3.0 64.845971 spng +56 10 19 200.0 3.0 58.249464 spng +57 19 8 200.0 3.0 67.268120 spng +58 8 14 200.0 3.0 67.268120 spng +59 14 6 200.0 3.0 64.629715 spng +60 6 15 200.0 3.0 50.089919 spng +61 15 4 200.0 3.0 56.320511 spng +62 4 22 200.0 3.0 60.728906 spng +63 22 2 200.0 3.0 61.032778 spng +64 2 23 200.0 3.0 66.528190 spng +65 23 12 200.0 3.0 72.277244 spng + +nodes> + 75 random -75 + 0 2array [ over node-vel v+ swap set-node-vel ] +curry each + +; + +: go ( -- ) [ model ] go* ; + +MAIN: go \ No newline at end of file diff --git a/extra/springies/ui/ui.factor b/extra/springies/ui/ui.factor index 5a8f2455dd..156b9a8d6b 100644 --- a/extra/springies/ui/ui.factor +++ b/extra/springies/ui/ui.factor @@ -1,7 +1,7 @@ USING: kernel namespaces threads sequences math math.vectors combinators.lib opengl.gl opengl colors ui ui.gadgets ui.gadgets.slate - rewrite-closures vars springies ; + bake rewrite-closures vars springies ; IN: springies.ui @@ -51,11 +51,16 @@ DEFER: maybe-loop : springies-window* ( -- ) C[ display ] >slate - { 500 500 } slate> set-slate-dim + { 700 500 } slate> set-slate-dim C[ { 500 500 } >world-size loop on [ run ] in-thread ] slate> set-slate-graft C[ loop off ] slate> set-slate-ungraft slate> "Springies" open-window ; -: springies-window ( -- ) [ [ springies-window* ] with-scope ] with-ui ; \ No newline at end of file +: springies-window ( -- ) [ [ springies-window* ] with-scope ] with-ui ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: go* ( quot -- ) + [ [ [ springies-window* 1000 sleep % ] with-scope ] with-ui ] bake call ; diff --git a/extra/tools/deploy/config/config.factor b/extra/tools/deploy/config/config.factor index 832f9f4a1a..2b7353ad03 100644 --- a/extra/tools/deploy/config/config.factor +++ b/extra/tools/deploy/config/config.factor @@ -4,6 +4,7 @@ USING: vocabs.loader io.files io kernel sequences assocs splitting parser prettyprint ; IN: tools.deploy.config +SYMBOL: strip-io? SYMBOL: strip-globals? SYMBOL: strip-word-props? SYMBOL: strip-word-names? @@ -22,6 +23,7 @@ SYMBOL: deploy-image : default-config ( -- assoc ) V{ + { strip-io? f } { strip-prettyprint? t } { strip-globals? t } { strip-word-props? t } diff --git a/extra/tools/deploy/deploy.factor b/extra/tools/deploy/deploy.factor index 9a7f99a99d..5701d0fa1b 100644 --- a/extra/tools/deploy/deploy.factor +++ b/extra/tools/deploy/deploy.factor @@ -57,4 +57,5 @@ PRIVATE> deploy-command-line stage2 ; : deploy ( vocab -- ) + "" resource-path cd vm over ".image" append rot dup deploy-config deploy* ; diff --git a/extra/tools/deploy/shaker/shaker.factor b/extra/tools/deploy/shaker/shaker.factor index 9eabf1a67e..d19c8f4a2b 100644 --- a/extra/tools/deploy/shaker/shaker.factor +++ b/extra/tools/deploy/shaker/shaker.factor @@ -15,19 +15,20 @@ IN: tools.deploy.shaker : strip-init-hooks ( -- ) "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? get [ "Stripping debugger" show - "resource:extra/tools/deploy/strip-debugger.factor" + "resource:extra/tools/deploy/shaker/strip-debugger.factor" run-file ] when ; : strip-cocoa ( -- ) "cocoa" vocab [ "Stripping unused Cocoa methods" show - "resource:extra/tools/deploy/strip-cocoa.factor" + "resource:extra/tools/deploy/shaker/strip-cocoa.factor" run-file ] when ; @@ -90,6 +91,8 @@ USING: bit-arrays byte-arrays io.streams.nested ; { } set-retainstack V{ } set-namestack V{ } set-catchstack + "Stripping compiled quotations" show + strip-compiled-quotations "Saving final image" show [ save-image-and-exit ] call-clear ; @@ -100,14 +103,14 @@ SYMBOL: deploy-vocab \ boot , init-hooks get values concat % , - "io.backend" init-hooks get at [ \ flush , ] when + strip-io? get [ \ flush , ] unless ] [ ] make "Boot quotation: " write dup . flush set-boot-quot ; : retained-globals ( -- seq ) [ builtins , - io-backend , + strip-io? get [ io-backend , ] unless strip-dictionary? get [ { @@ -178,6 +181,8 @@ SYMBOL: deploy-vocab deploy-vocab get require r> [ call ] when* strip + "Compressing image" show + compress-image finish-deploy ] [ print-error flush 1 exit diff --git a/extra/tools/deploy/strip-cocoa.factor b/extra/tools/deploy/shaker/strip-cocoa.factor similarity index 100% rename from extra/tools/deploy/strip-cocoa.factor rename to extra/tools/deploy/shaker/strip-cocoa.factor diff --git a/extra/tools/deploy/strip-debugger.factor b/extra/tools/deploy/shaker/strip-debugger.factor similarity index 68% rename from extra/tools/deploy/strip-debugger.factor rename to extra/tools/deploy/shaker/strip-debugger.factor index a1aea339b2..38f5268c80 100644 --- a/extra/tools/deploy/strip-debugger.factor +++ b/extra/tools/deploy/shaker/strip-debugger.factor @@ -1,4 +1,6 @@ USING: kernel ; IN: debugger +: print-error die ; + : error. die ; diff --git a/extra/tools/interpreter/interpreter.factor b/extra/tools/interpreter/interpreter.factor index 526e105e4e..f1e36032a0 100644 --- a/extra/tools/interpreter/interpreter.factor +++ b/extra/tools/interpreter/interpreter.factor @@ -65,12 +65,14 @@ M: word (step-into) (step-into-execute) ; { >n ndrop >c c> continue continue-with - (continue-with) stop break + (continue-with) stop } [ dup [ execute break ] curry "step-into" set-word-prop ] each +\ break [ break ] "step-into" set-word-prop + ! Stepping : change-innermost-frame ( quot interpreter -- ) interpreter-continuation [ diff --git a/extra/ui/gadgets/editors/editors-tests.factor b/extra/ui/gadgets/editors/editors-tests.factor index 7c60536605..daaeac6fad 100644 --- a/extra/ui/gadgets/editors/editors-tests.factor +++ b/extra/ui/gadgets/editors/editors-tests.factor @@ -1,6 +1,6 @@ USING: ui.gadgets.editors tools.test kernel io io.streams.plain io.streams.string definitions namespaces ui.gadgets -ui.gadgets.grids prettyprint documents ; +ui.gadgets.grids prettyprint documents ui.gestures ; [ t ] [ "editor" set @@ -27,3 +27,12 @@ ui.gadgets.grids prettyprint documents ; "editor" get gadget-selection "editor" get ungraft* ] unit-test + +[ ] [ + "editor" set + "editor" get graft* + "foo bar\nbaz quux" "editor" get set-editor-string + 4 hand-click# set + "editor" get position-caret + "editor" get ungraft* +] unit-test diff --git a/extra/ui/gadgets/editors/editors.factor b/extra/ui/gadgets/editors/editors.factor index abf26f3f81..214572b0d8 100644 --- a/extra/ui/gadgets/editors/editors.factor +++ b/extra/ui/gadgets/editors/editors.factor @@ -5,7 +5,7 @@ ui.gadgets.borders ui.gadgets.buttons ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.theme ui.gadgets.controls ui.render ui.gestures io kernel math models namespaces opengl opengl.gl sequences strings io.styles math.vectors sorting -colors ; +colors combinators ; IN: ui.gadgets.editors TUPLE: editor @@ -292,11 +292,11 @@ M: editor gadget-text* editor-string % ; : position-caret ( editor -- ) hand-click# get { - [ ] - [ dup (position-caret) ] - [ dup T{ one-word-elt } select-elt ] - [ dup T{ one-line-elt } select-elt ] - } ?nth call drop ; + { 1 [ (position-caret) ] } + { 2 [ T{ one-word-elt } select-elt ] } + { 3 [ T{ one-line-elt } select-elt ] } + [ 2drop ] + } case ; : insert-newline "\n" swap user-input ; diff --git a/extra/ui/tools/walker/walker-tests.factor b/extra/ui/tools/walker/walker-tests.factor index 7ca8b8f2e9..04af885eff 100644 --- a/extra/ui/tools/walker/walker-tests.factor +++ b/extra/ui/tools/walker/walker-tests.factor @@ -65,4 +65,10 @@ IN: temporary [ ] [ yield ] 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 diff --git a/extra/ui/tools/walker/walker.factor b/extra/ui/tools/walker/walker.factor index 2ec4cd7dd6..fabdf26818 100644 --- a/extra/ui/tools/walker/walker.factor +++ b/extra/ui/tools/walker/walker.factor @@ -67,7 +67,11 @@ M: walker call-tool* ( continuation walker -- ) : com-continue ( walker -- ) #! Reset walker first, in case step-all ends up calling #! 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 ; diff --git a/extra/ui/x11/x11.factor b/extra/ui/x11/x11.factor index 87ed6d2852..c9b23e10e3 100644 --- a/extra/ui/x11/x11.factor +++ b/extra/ui/x11/x11.factor @@ -93,8 +93,12 @@ M: world button-up-event send-button-up ; : mouse-event>scroll-direction ( event -- pair ) - #! Reminder for myself: 4 is up, 5 is down - XButtonEvent-button 5 = 1 -1 ? 0 swap 2array ; + XButtonEvent-button { + { 4 { 0 -1 } } + { 5 { 0 1 } } + { 6 { -1 0 } } + { 7 { 1 0 } } + } at ; M: world wheel-event >r dup mouse-event>scroll-direction swap mouse-event-loc r> diff --git a/extra/x11/events/events.factor b/extra/x11/events/events.factor index 05b3318f4f..f40392891c 100644 --- a/extra/x11/events/events.factor +++ b/extra/x11/events/events.factor @@ -42,7 +42,7 @@ GENERIC: client-event ( event window -- ) : events-queued ( mode -- n ) >r dpy get r> XEventsQueued ; -: wheel? ( event -- ? ) XButtonEvent-button { 4 5 } member? ; +: wheel? ( event -- ? ) XButtonEvent-button 4 7 between? ; : button-down-event$ ( event window -- ) over wheel? [ wheel-event ] [ button-down-event ] if ; diff --git a/vm/data_gc.c b/vm/data_gc.c index 24d75cf20c..89e5ac3b56 100644 --- a/vm/data_gc.c +++ b/vm/data_gc.c @@ -446,7 +446,8 @@ INLINE void *copy_untagged_object(void *pointer, CELL size) 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) diff --git a/vm/debug.c b/vm/debug.c index bd71960754..f0d74233d1 100644 --- a/vm/debug.c +++ b/vm/debug.c @@ -1,14 +1,23 @@ #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) { - if(type_of(word->name) == STRING_TYPE) + + if(type_of(word->vocabulary) == STRING_TYPE) { - F_STRING *string = untag_string(word->name); - CELL i; - for(i = 0; i < string_capacity(string); i++) - putchar(cget(SREF(string,i))); + print_chars(untag_string(word->vocabulary)); + printf(":"); } + + if(type_of(word->name) == STRING_TYPE) + print_chars(untag_string(word->name)); else { printf("#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) { reset_stdio(); @@ -200,8 +225,10 @@ void factorbug(void) printf("g -- dump generations\n"); printf("card -- print card containing address\n"); printf("addr -- print address containing card\n"); + printf("data -- data heap dump\n"); + printf("words -- words dump\n"); printf("code -- code heap dump\n"); - + for(;;) { char cmd[1024]; @@ -268,6 +295,10 @@ void factorbug(void) exit(1); else if(strcmp(cmd,"im") == 0) 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) dump_heap(&code_heap); else diff --git a/vm/factor.c b/vm/factor.c index 3f471f87f1..270ad29208 100644 --- a/vm/factor.c +++ b/vm/factor.c @@ -19,6 +19,7 @@ void default_parameters(F_PARAMETERS *p) p->young_size = 2 * CELLS; p->aging_size = 4 * CELLS; p->secure_gc = false; + p->fep = false; } /* 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(STRCMP(argv[i],STR_FORMAT("-securegc")) == 0) 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) 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); nest_stacks(); + + if(p.fep) + factorbug(); + c_to_factor_toplevel(userenv[BOOT_ENV]); unnest_stacks(); diff --git a/vm/ffi_test.c b/vm/ffi_test.c index bb8a38b0d9..f6e70fd6ac 100644 --- a/vm/ffi_test.c +++ b/vm/ffi_test.c @@ -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) { } + +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; +} diff --git a/vm/ffi_test.h b/vm/ffi_test.h index 8e392034ce..27e402b74f 100644 --- a/vm/ffi_test.h +++ b/vm/ffi_test.h @@ -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; }; 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); +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); diff --git a/vm/image.h b/vm/image.h index a15f850bb3..ba953677cf 100644 --- a/vm/image.h +++ b/vm/image.h @@ -31,6 +31,7 @@ typedef struct { CELL gen_count, young_size, aging_size; CELL code_size; bool secure_gc; + bool fep; } F_PARAMETERS; void load_image(F_PARAMETERS *p); diff --git a/vm/primitives.c b/vm/primitives.c index 649b7294f9..2438b6b1aa 100644 --- a/vm/primitives.c +++ b/vm/primitives.c @@ -194,4 +194,5 @@ void *primitives[] = { primitive_innermost_stack_frame_scan, primitive_set_innermost_stack_frame_quot, primitive_call_clear, + primitive_strip_compiled_quotations, }; diff --git a/vm/quotations.c b/vm/quotations.c index ba9325f0dc..ace8740d64 100644 --- a/vm/quotations.c +++ b/vm/quotations.c @@ -231,3 +231,22 @@ DEFINE_PRIMITIVE(quotation_xt) F_QUOTATION *quot = untag_quotation(dpeek()); 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; +} diff --git a/vm/quotations.h b/vm/quotations.h index 5757e10c97..d70d37ac44 100644 --- a/vm/quotations.h +++ b/vm/quotations.h @@ -6,3 +6,4 @@ DECLARE_PRIMITIVE(curry); DECLARE_PRIMITIVE(array_to_quotation); DECLARE_PRIMITIVE(quotation_xt); DECLARE_PRIMITIVE(uncurry); +DECLARE_PRIMITIVE(strip_compiled_quotations);