From f2a5a30c6f70b3ab1e9d53841b7c9473bb646a66 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 12 Aug 2008 03:22:45 -0500 Subject: [PATCH 01/81] New front-end and high-level optimizer lands --- basis/alien/compiler/compiler-tests.factor | 375 ---------- basis/alien/compiler/compiler.factor | 417 ----------- basis/alien/compiler/summary.txt | 1 - .../generator}/authors.txt | 0 .../generator/fixup}/authors.txt | 0 .../generator/fixup/fixup-docs.factor | 0 .../compiler/generator/fixup/fixup.factor | 0 .../generator/fixup/summary.txt | 0 .../compiler/generator/generator-docs.factor | 0 .../compiler/generator/generator.factor | 0 .../generator/iterator/iterator.factor | 0 .../generator/registers}/authors.txt | 0 .../generator/registers/registers.factor | 0 .../generator/registers/summary.txt | 0 basis/{ => compiler}/generator/summary.txt | 0 basis/{ => compiler}/generator/tags.txt | 0 .../registers => compiler/tree}/authors.txt | 0 .../tree/branch-fusion/branch-fusion.factor | 0 .../compiler/tree/builder/builder-docs.factor | 0 .../tree/builder/builder-tests.factor | 0 .../compiler/tree/builder/builder.factor | 0 .../compiler/tree/checker/checker.factor | 0 .../tree/cleanup/cleanup-tests.factor | 0 .../compiler/tree/cleanup/cleanup.factor | 0 .../tree/combinators/combinators-tests.factor | 0 .../tree/combinators/combinators.factor | 0 .../tree/comparisons/comparisons.factor | 0 .../backward/backward.factor | 0 .../dataflow-analysis.factor | 0 .../tree/dead-code/dead-code-tests.factor | 0 .../compiler/tree/dead-code/dead-code.factor | 0 .../tree/debugger/debugger-tests.factor | 0 .../compiler/tree/debugger/debugger.factor | 0 .../tree/def-use}/authors.txt | 0 .../tree/def-use/def-use-tests.factor | 0 .../compiler/tree/def-use/def-use.factor | 0 .../compiler/tree/def-use/summary.txt | 0 .../allocations/allocations.factor | 0 .../escape-analysis/branches/branches.factor | 0 .../escape-analysis-tests.factor | 0 .../escape-analysis/escape-analysis.factor | 0 .../tree/escape-analysis/nodes/nodes.factor | 0 .../recursive/recursive-tests.factor | 0 .../recursive/recursive.factor | 0 .../tree/escape-analysis/simple/simple.factor | 0 .../tree/intrinsics/intrinsics.factor | 0 .../loop/detection/detection-tests.factor | 0 .../tree/loop/detection/detection.factor | 0 .../tree/loop/inversion/inversion.factor | 0 .../normalization/normalization-tests.factor | 0 .../tree/normalization/normalization.factor | 0 .../tree/optimizer/optimizer-tests.factor | 0 .../compiler/tree/optimizer/optimizer.factor | 0 .../tree/propagation}/authors.txt | 0 .../tree/propagation/branches/branches.factor | 0 .../constraints/constraints.factor | 0 .../tree/propagation/copy/copy-tests.factor | 0 .../tree/propagation/copy/copy.factor | 0 .../tree/propagation/info/info-tests.factor | 0 .../tree/propagation/info/info.factor | 0 .../tree/propagation/inlining/inlining.factor | 0 .../known-words/known-words.factor | 0 .../tree/propagation/nodes/nodes.factor | 0 .../tree/propagation/propagation-tests.factor | 0 .../tree/propagation/propagation.factor | 0 .../recursive/recursive-tests.factor | 0 .../propagation/recursive/recursive.factor | 0 .../tree/propagation/simple/simple.factor | 0 .../tree/propagation/slots/slots.factor | 0 .../compiler/tree/propagation/summary.txt | 0 .../strength-reduction-tests.factor | 0 .../strength-reduction.factor | 0 .../compiler/tree/summary.txt | 0 .../compiler/tree/tree.factor | 0 .../tuple-unboxing-tests.factor | 0 .../tree/tuple-unboxing/tuple-unboxing.factor | 0 basis/generator/fixup/fixup-docs.factor | 16 - basis/generator/fixup/fixup.factor | 154 ---- basis/generator/generator-docs.factor | 92 --- basis/generator/generator.factor | 274 -------- basis/generator/registers/registers.factor | 660 ------------------ basis/inference/backend/backend-docs.factor | 72 -- basis/inference/backend/backend.factor | 570 --------------- basis/inference/class/class-tests.factor | 637 ----------------- basis/inference/class/class.factor | 384 ---------- basis/inference/class/summary.txt | 1 - basis/inference/dataflow/dataflow-docs.factor | 6 - basis/inference/dataflow/dataflow.factor | 320 --------- basis/inference/dataflow/summary.txt | 1 - basis/inference/errors/errors.factor | 54 -- basis/inference/inference-docs.factor | 161 ----- basis/inference/inference-tests.factor | 573 --------------- basis/inference/inference.factor | 37 - .../inference/known-words/known-words.factor | 582 --------------- basis/inference/state/state-docs.factor | 11 - basis/inference/state/state-tests.factor | 30 - basis/inference/state/state.factor | 43 -- .../transforms/transforms-docs.factor | 14 - .../transforms/transforms-tests.factor | 44 -- basis/inference/transforms/transforms.factor | 80 --- .../partial-dispatch-tests.factor | 0 .../partial-dispatch/partial-dispatch.factor | 0 basis/optimizer/allot/allot.factor | 100 --- basis/optimizer/backend/backend.factor | 129 ---- basis/optimizer/backend/summary.txt | 1 - basis/optimizer/collect/collect.factor | 10 - basis/optimizer/control/control-tests.factor | 181 ----- basis/optimizer/control/control.factor | 336 --------- basis/optimizer/def-use/def-use-tests.factor | 127 ---- basis/optimizer/def-use/def-use.factor | 134 ---- basis/optimizer/def-use/summary.txt | 1 - .../optimizer/inlining/inlining-tests.factor | 9 - basis/optimizer/inlining/inlining.factor | 264 ------- basis/optimizer/known-words/authors.txt | 1 - .../optimizer/known-words/known-words.factor | 207 ------ basis/optimizer/known-words/summary.txt | 1 - basis/optimizer/math/authors.txt | 1 - basis/optimizer/math/math.factor | 489 ------------- .../math/partial/partial-tests.factor | 13 - basis/optimizer/math/partial/partial.factor | 175 ----- basis/optimizer/math/summary.txt | 1 - basis/optimizer/optimizer-docs.factor | 20 - basis/optimizer/optimizer-tests.factor | 393 ----------- basis/optimizer/optimizer.factor | 27 - basis/optimizer/pattern-match/authors.txt | 1 - .../pattern-match/pattern-match.factor | 33 - basis/optimizer/pattern-match/summary.txt | 1 - .../specializers/specializers-docs.factor | 26 - .../specializers/specializers.factor | 53 -- basis/optimizer/summary.txt | 1 - basis/optimizer/tags.txt | 1 - .../class => stack-checker}/authors.txt | 0 .../backend}/authors.txt | 0 .../stack-checker/backend/backend.factor | 0 .../backend/summary.txt | 0 .../branches}/authors.txt | 0 .../stack-checker/branches/branches.factor | 0 .../errors}/authors.txt | 0 .../stack-checker/errors/errors-docs.factor | 0 .../stack-checker/errors/errors.factor | 0 .../errors/summary.txt | 0 .../inlining}/authors.txt | 0 .../stack-checker/inlining/inlining.factor | 0 .../known-words}/authors.txt | 0 .../known-words/known-words.factor | 0 .../known-words/summary.txt | 0 .../stack-checker/stack-checker-docs.factor | 0 .../stack-checker/stack-checker-tests.factor | 0 .../stack-checker/stack-checker.factor | 0 .../state}/authors.txt | 0 .../stack-checker/state/state-tests.factor | 0 .../stack-checker/state/state.factor | 0 .../state/summary.txt | 0 .../{inference => stack-checker}/summary.txt | 0 basis/{inference => stack-checker}/tags.txt | 0 .../transforms}/authors.txt | 0 .../transforms/summary.txt | 0 .../transforms/transforms-docs.factor | 0 .../transforms/transforms-tests.factor | 0 .../transforms/transforms.factor | 0 .../visitor}/authors.txt | 0 .../stack-checker/visitor/dummy/dummy.factor | 0 .../stack-checker/visitor/visitor.factor | 0 core/cursors/cursors.factor | 34 + unfinished/compiler/generator/authors.txt | 1 - .../compiler/generator/fixup/authors.txt | 1 - .../compiler/generator/fixup/summary.txt | 1 - .../compiler/generator/registers/authors.txt | 1 - .../compiler/generator/registers/summary.txt | 1 - unfinished/compiler/generator/summary.txt | 1 - unfinished/compiler/generator/tags.txt | 1 - unfinished/compiler/tree/authors.txt | 1 - unfinished/compiler/tree/def-use/authors.txt | 1 - .../compiler/tree/propagation/authors.txt | 1 - unfinished/stack-checker/authors.txt | 1 - unfinished/stack-checker/backend/authors.txt | 1 - unfinished/stack-checker/backend/summary.txt | 1 - unfinished/stack-checker/branches/authors.txt | 1 - unfinished/stack-checker/errors/authors.txt | 1 - unfinished/stack-checker/errors/summary.txt | 1 - unfinished/stack-checker/inlining/authors.txt | 1 - .../stack-checker/known-words/authors.txt | 1 - .../stack-checker/known-words/summary.txt | 1 - unfinished/stack-checker/state/authors.txt | 1 - unfinished/stack-checker/state/summary.txt | 1 - unfinished/stack-checker/summary.txt | 1 - unfinished/stack-checker/tags.txt | 2 - .../stack-checker/transforms/authors.txt | 1 - .../stack-checker/transforms/summary.txt | 1 - unfinished/stack-checker/visitor/authors.txt | 1 - 190 files changed, 34 insertions(+), 8372 deletions(-) delete mode 100755 basis/alien/compiler/compiler-tests.factor delete mode 100755 basis/alien/compiler/compiler.factor delete mode 100644 basis/alien/compiler/summary.txt rename basis/{alien/compiler => compiler/generator}/authors.txt (100%) rename basis/{generator => compiler/generator/fixup}/authors.txt (100%) rename {unfinished => basis}/compiler/generator/fixup/fixup-docs.factor (100%) rename {unfinished => basis}/compiler/generator/fixup/fixup.factor (100%) rename basis/{ => compiler}/generator/fixup/summary.txt (100%) rename {unfinished => basis}/compiler/generator/generator-docs.factor (100%) rename {unfinished => basis}/compiler/generator/generator.factor (100%) rename {unfinished => basis}/compiler/generator/iterator/iterator.factor (100%) rename basis/{generator/fixup => compiler/generator/registers}/authors.txt (100%) rename {unfinished => basis}/compiler/generator/registers/registers.factor (100%) rename basis/{ => compiler}/generator/registers/summary.txt (100%) rename basis/{ => compiler}/generator/summary.txt (100%) rename basis/{ => compiler}/generator/tags.txt (100%) rename basis/{generator/registers => compiler/tree}/authors.txt (100%) rename {unfinished => basis}/compiler/tree/branch-fusion/branch-fusion.factor (100%) rename {unfinished => basis}/compiler/tree/builder/builder-docs.factor (100%) rename {unfinished => basis}/compiler/tree/builder/builder-tests.factor (100%) rename {unfinished => basis}/compiler/tree/builder/builder.factor (100%) rename {unfinished => basis}/compiler/tree/checker/checker.factor (100%) rename {unfinished => basis}/compiler/tree/cleanup/cleanup-tests.factor (100%) rename {unfinished => basis}/compiler/tree/cleanup/cleanup.factor (100%) rename {unfinished => basis}/compiler/tree/combinators/combinators-tests.factor (100%) rename {unfinished => basis}/compiler/tree/combinators/combinators.factor (100%) rename {unfinished => basis}/compiler/tree/comparisons/comparisons.factor (100%) rename {unfinished => basis}/compiler/tree/dataflow-analysis/backward/backward.factor (100%) rename {unfinished => basis}/compiler/tree/dataflow-analysis/dataflow-analysis.factor (100%) rename {unfinished => basis}/compiler/tree/dead-code/dead-code-tests.factor (100%) rename {unfinished => basis}/compiler/tree/dead-code/dead-code.factor (100%) rename {unfinished => basis}/compiler/tree/debugger/debugger-tests.factor (100%) rename {unfinished => basis}/compiler/tree/debugger/debugger.factor (100%) rename basis/{inference => compiler/tree/def-use}/authors.txt (100%) rename {unfinished => basis}/compiler/tree/def-use/def-use-tests.factor (100%) rename {unfinished => basis}/compiler/tree/def-use/def-use.factor (100%) rename {unfinished => basis}/compiler/tree/def-use/summary.txt (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/allocations/allocations.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/branches/branches.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/escape-analysis-tests.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/escape-analysis.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/nodes/nodes.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/recursive/recursive-tests.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/recursive/recursive.factor (100%) rename {unfinished => basis}/compiler/tree/escape-analysis/simple/simple.factor (100%) rename {unfinished => basis}/compiler/tree/intrinsics/intrinsics.factor (100%) rename {unfinished => basis}/compiler/tree/loop/detection/detection-tests.factor (100%) rename {unfinished => basis}/compiler/tree/loop/detection/detection.factor (100%) rename {unfinished => basis}/compiler/tree/loop/inversion/inversion.factor (100%) rename {unfinished => basis}/compiler/tree/normalization/normalization-tests.factor (100%) rename {unfinished => basis}/compiler/tree/normalization/normalization.factor (100%) rename {unfinished => basis}/compiler/tree/optimizer/optimizer-tests.factor (100%) rename {unfinished => basis}/compiler/tree/optimizer/optimizer.factor (100%) rename basis/{inference/backend => compiler/tree/propagation}/authors.txt (100%) rename {unfinished => basis}/compiler/tree/propagation/branches/branches.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/constraints/constraints.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/copy/copy-tests.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/copy/copy.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/info/info-tests.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/info/info.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/inlining/inlining.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/known-words/known-words.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/nodes/nodes.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/propagation-tests.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/propagation.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/recursive/recursive-tests.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/recursive/recursive.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/simple/simple.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/slots/slots.factor (100%) rename {unfinished => basis}/compiler/tree/propagation/summary.txt (100%) rename {unfinished => basis}/compiler/tree/strength-reduction/strength-reduction-tests.factor (100%) rename {unfinished => basis}/compiler/tree/strength-reduction/strength-reduction.factor (100%) rename {unfinished => basis}/compiler/tree/summary.txt (100%) rename {unfinished => basis}/compiler/tree/tree.factor (100%) rename {unfinished => basis}/compiler/tree/tuple-unboxing/tuple-unboxing-tests.factor (100%) rename {unfinished => basis}/compiler/tree/tuple-unboxing/tuple-unboxing.factor (100%) delete mode 100644 basis/generator/fixup/fixup-docs.factor delete mode 100755 basis/generator/fixup/fixup.factor delete mode 100755 basis/generator/generator-docs.factor delete mode 100755 basis/generator/generator.factor delete mode 100755 basis/generator/registers/registers.factor delete mode 100755 basis/inference/backend/backend-docs.factor delete mode 100755 basis/inference/backend/backend.factor delete mode 100755 basis/inference/class/class-tests.factor delete mode 100755 basis/inference/class/class.factor delete mode 100644 basis/inference/class/summary.txt delete mode 100755 basis/inference/dataflow/dataflow-docs.factor delete mode 100755 basis/inference/dataflow/dataflow.factor delete mode 100644 basis/inference/dataflow/summary.txt delete mode 100644 basis/inference/errors/errors.factor delete mode 100755 basis/inference/inference-docs.factor delete mode 100755 basis/inference/inference-tests.factor delete mode 100755 basis/inference/inference.factor delete mode 100755 basis/inference/known-words/known-words.factor delete mode 100755 basis/inference/state/state-docs.factor delete mode 100644 basis/inference/state/state-tests.factor delete mode 100755 basis/inference/state/state.factor delete mode 100755 basis/inference/transforms/transforms-docs.factor delete mode 100755 basis/inference/transforms/transforms-tests.factor delete mode 100755 basis/inference/transforms/transforms.factor rename {unfinished => basis}/math/partial-dispatch/partial-dispatch-tests.factor (100%) rename {unfinished => basis}/math/partial-dispatch/partial-dispatch.factor (100%) delete mode 100644 basis/optimizer/allot/allot.factor delete mode 100755 basis/optimizer/backend/backend.factor delete mode 100644 basis/optimizer/backend/summary.txt delete mode 100644 basis/optimizer/collect/collect.factor delete mode 100755 basis/optimizer/control/control-tests.factor delete mode 100755 basis/optimizer/control/control.factor delete mode 100755 basis/optimizer/def-use/def-use-tests.factor delete mode 100755 basis/optimizer/def-use/def-use.factor delete mode 100644 basis/optimizer/def-use/summary.txt delete mode 100644 basis/optimizer/inlining/inlining-tests.factor delete mode 100755 basis/optimizer/inlining/inlining.factor delete mode 100644 basis/optimizer/known-words/authors.txt delete mode 100755 basis/optimizer/known-words/known-words.factor delete mode 100644 basis/optimizer/known-words/summary.txt delete mode 100644 basis/optimizer/math/authors.txt delete mode 100755 basis/optimizer/math/math.factor delete mode 100644 basis/optimizer/math/partial/partial-tests.factor delete mode 100644 basis/optimizer/math/partial/partial.factor delete mode 100644 basis/optimizer/math/summary.txt delete mode 100755 basis/optimizer/optimizer-docs.factor delete mode 100755 basis/optimizer/optimizer-tests.factor delete mode 100755 basis/optimizer/optimizer.factor delete mode 100644 basis/optimizer/pattern-match/authors.txt delete mode 100755 basis/optimizer/pattern-match/pattern-match.factor delete mode 100644 basis/optimizer/pattern-match/summary.txt delete mode 100755 basis/optimizer/specializers/specializers-docs.factor delete mode 100755 basis/optimizer/specializers/specializers.factor delete mode 100644 basis/optimizer/summary.txt delete mode 100644 basis/optimizer/tags.txt rename basis/{inference/class => stack-checker}/authors.txt (100%) rename basis/{inference/dataflow => stack-checker/backend}/authors.txt (100%) rename {unfinished => basis}/stack-checker/backend/backend.factor (100%) rename basis/{inference => stack-checker}/backend/summary.txt (100%) rename basis/{inference/errors => stack-checker/branches}/authors.txt (100%) rename {unfinished => basis}/stack-checker/branches/branches.factor (100%) rename basis/{inference/known-words => stack-checker/errors}/authors.txt (100%) rename {unfinished => basis}/stack-checker/errors/errors-docs.factor (100%) rename {unfinished => basis}/stack-checker/errors/errors.factor (100%) rename basis/{inference => stack-checker}/errors/summary.txt (100%) rename basis/{inference/state => stack-checker/inlining}/authors.txt (100%) mode change 100755 => 100644 rename {unfinished => basis}/stack-checker/inlining/inlining.factor (100%) rename basis/{inference/transforms => stack-checker/known-words}/authors.txt (100%) rename {unfinished => basis}/stack-checker/known-words/known-words.factor (100%) rename basis/{inference => stack-checker}/known-words/summary.txt (100%) rename {unfinished => basis}/stack-checker/stack-checker-docs.factor (100%) rename {unfinished => basis}/stack-checker/stack-checker-tests.factor (100%) rename {unfinished => basis}/stack-checker/stack-checker.factor (100%) rename basis/{optimizer => stack-checker/state}/authors.txt (100%) mode change 100644 => 100755 rename {unfinished => basis}/stack-checker/state/state-tests.factor (100%) rename {unfinished => basis}/stack-checker/state/state.factor (100%) rename basis/{inference => stack-checker}/state/summary.txt (100%) rename basis/{inference => stack-checker}/summary.txt (100%) rename basis/{inference => stack-checker}/tags.txt (100%) rename basis/{optimizer/backend => stack-checker/transforms}/authors.txt (100%) rename basis/{inference => stack-checker}/transforms/summary.txt (100%) rename {unfinished => basis}/stack-checker/transforms/transforms-docs.factor (100%) rename {unfinished => basis}/stack-checker/transforms/transforms-tests.factor (100%) rename {unfinished => basis}/stack-checker/transforms/transforms.factor (100%) rename basis/{optimizer/def-use => stack-checker/visitor}/authors.txt (100%) rename {unfinished => basis}/stack-checker/visitor/dummy/dummy.factor (100%) rename {unfinished => basis}/stack-checker/visitor/visitor.factor (100%) create mode 100644 core/cursors/cursors.factor delete mode 100644 unfinished/compiler/generator/authors.txt delete mode 100644 unfinished/compiler/generator/fixup/authors.txt delete mode 100644 unfinished/compiler/generator/fixup/summary.txt delete mode 100644 unfinished/compiler/generator/registers/authors.txt delete mode 100644 unfinished/compiler/generator/registers/summary.txt delete mode 100644 unfinished/compiler/generator/summary.txt delete mode 100644 unfinished/compiler/generator/tags.txt delete mode 100644 unfinished/compiler/tree/authors.txt delete mode 100644 unfinished/compiler/tree/def-use/authors.txt delete mode 100644 unfinished/compiler/tree/propagation/authors.txt delete mode 100644 unfinished/stack-checker/authors.txt delete mode 100644 unfinished/stack-checker/backend/authors.txt delete mode 100644 unfinished/stack-checker/backend/summary.txt delete mode 100644 unfinished/stack-checker/branches/authors.txt delete mode 100644 unfinished/stack-checker/errors/authors.txt delete mode 100644 unfinished/stack-checker/errors/summary.txt delete mode 100644 unfinished/stack-checker/inlining/authors.txt delete mode 100644 unfinished/stack-checker/known-words/authors.txt delete mode 100644 unfinished/stack-checker/known-words/summary.txt delete mode 100755 unfinished/stack-checker/state/authors.txt delete mode 100755 unfinished/stack-checker/state/summary.txt delete mode 100644 unfinished/stack-checker/summary.txt delete mode 100644 unfinished/stack-checker/tags.txt delete mode 100644 unfinished/stack-checker/transforms/authors.txt delete mode 100644 unfinished/stack-checker/transforms/summary.txt delete mode 100644 unfinished/stack-checker/visitor/authors.txt diff --git a/basis/alien/compiler/compiler-tests.factor b/basis/alien/compiler/compiler-tests.factor deleted file mode 100755 index eb7652aefd..0000000000 --- a/basis/alien/compiler/compiler-tests.factor +++ /dev/null @@ -1,375 +0,0 @@ -IN: alien.compiler.tests -USING: alien alien.c-types alien.syntax compiler kernel -namespaces namespaces tools.test sequences inference words -arrays parser quotations continuations inference.backend effects -namespaces.private io io.streams.string memory system threads -tools.test math ; - -FUNCTION: void ffi_test_0 ; -[ ] [ ffi_test_0 ] unit-test - -FUNCTION: int ffi_test_1 ; -[ 3 ] [ ffi_test_1 ] unit-test - -FUNCTION: int ffi_test_2 int x int y ; -[ 5 ] [ 2 3 ffi_test_2 ] unit-test -[ "hi" 3 ffi_test_2 ] must-fail - -FUNCTION: int ffi_test_3 int x int y int z int t ; -[ 25 ] [ 2 3 4 5 ffi_test_3 ] unit-test - -FUNCTION: float ffi_test_4 ; -[ 1.5 ] [ ffi_test_4 ] unit-test - -FUNCTION: double ffi_test_5 ; -[ 1.5 ] [ ffi_test_5 ] unit-test - -FUNCTION: int ffi_test_9 int a int b int c int d int e int f int g ; -[ 28 ] [ 1 2 3 4 5 6 7 ffi_test_9 ] unit-test -[ "a" 2 3 4 5 6 7 ffi_test_9 ] must-fail -[ 1 2 3 4 5 6 "a" ffi_test_9 ] must-fail - -C-STRUCT: foo - { "int" "x" } - { "int" "y" } -; - -: make-foo ( x y -- foo ) - "foo" [ set-foo-y ] keep [ set-foo-x ] keep ; - -FUNCTION: int ffi_test_11 int a foo b int c ; - -[ 14 ] [ 1 2 3 make-foo 4 ffi_test_11 ] unit-test - -FUNCTION: int ffi_test_13 int a int b int c int d int e int f int g int h int i int j int k ; - -[ 66 ] [ 1 2 3 4 5 6 7 8 9 10 11 ffi_test_13 ] unit-test - -FUNCTION: foo ffi_test_14 int x int y ; - -[ 11 6 ] [ 11 6 ffi_test_14 dup foo-x swap foo-y ] unit-test - -FUNCTION: char* ffi_test_15 char* x char* y ; - -[ "foo" ] [ "xy" "zt" ffi_test_15 ] unit-test -[ "bar" ] [ "xy" "xy" ffi_test_15 ] unit-test -[ 1 2 ffi_test_15 ] must-fail - -C-STRUCT: bar - { "long" "x" } - { "long" "y" } - { "long" "z" } -; - -FUNCTION: bar ffi_test_16 long x long y long z ; - -[ 11 6 -7 ] [ - 11 6 -7 ffi_test_16 dup bar-x over bar-y rot bar-z -] unit-test - -C-STRUCT: tiny - { "int" "x" } -; - -FUNCTION: tiny ffi_test_17 int x ; - -[ 11 ] [ 11 ffi_test_17 tiny-x ] unit-test - -[ [ alien-indirect ] infer ] [ inference-error? ] must-fail-with - -: indirect-test-1 ( ptr -- result ) - "int" { } "cdecl" alien-indirect ; - -{ 1 1 } [ indirect-test-1 ] must-infer-as - -[ 3 ] [ "ffi_test_1" f dlsym indirect-test-1 ] unit-test - -[ -1 indirect-test-1 ] must-fail - -: indirect-test-2 ( x y ptr -- result ) - "int" { "int" "int" } "cdecl" alien-indirect gc ; - -{ 3 1 } [ indirect-test-2 ] must-infer-as - -[ 5 ] -[ 2 3 "ffi_test_2" f dlsym indirect-test-2 ] -unit-test - -: indirect-test-3 ( a b c d ptr -- result ) - "int" { "int" "int" "int" "int" } "stdcall" alien-indirect - gc ; - -<< "f-stdcall" f "stdcall" add-library >> - -[ f ] [ "f-stdcall" load-library ] unit-test -[ "stdcall" ] [ "f-stdcall" library library-abi ] unit-test - -: ffi_test_18 ( w x y z -- int ) - "int" "f-stdcall" "ffi_test_18" { "int" "int" "int" "int" } - alien-invoke gc ; - -[ 25 ] [ 2 3 4 5 ffi_test_18 ] unit-test - -: ffi_test_19 ( x y z -- bar ) - "bar" "f-stdcall" "ffi_test_19" { "long" "long" "long" } - alien-invoke gc ; - -[ 11 6 -7 ] [ - 11 6 -7 ffi_test_19 dup bar-x over bar-y rot bar-z -] unit-test - -FUNCTION: double ffi_test_6 float x float y ; -[ 6.0 ] [ 3.0 2.0 ffi_test_6 ] unit-test -[ "a" "b" ffi_test_6 ] must-fail - -FUNCTION: double ffi_test_7 double x double y ; -[ 6.0 ] [ 3.0 2.0 ffi_test_7 ] unit-test - -FUNCTION: double ffi_test_8 double x float y double z float t int w ; -[ 19.0 ] [ 3.0 2.0 1.0 6.0 7 ffi_test_8 ] unit-test - -FUNCTION: int ffi_test_10 int a int b double c int d float e int f int g int h ; -[ -34 ] [ 1 2 3.0 4 5.0 6 7 8 ffi_test_10 ] unit-test - -FUNCTION: void ffi_test_20 double x1, double x2, double x3, - double y1, double y2, double y3, - double z1, double z2, double z3 ; - -[ ] [ 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ffi_test_20 ] unit-test - -! Make sure XT doesn't get clobbered in stack frame - -: ffi_test_31 ( a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a ptr -- result y ) - "void" - f "ffi_test_31" - { "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" } - alien-invoke gc 3 ; - -[ 3 ] [ 42 [ ] each ffi_test_31 ] unit-test - -FUNCTION: longlong ffi_test_21 long x long y ; - -[ 121932631112635269 ] -[ 123456789 987654321 ffi_test_21 ] unit-test - -FUNCTION: long ffi_test_22 long x longlong y longlong z ; - -[ 987655432 ] -[ 1111 121932631112635269 123456789 ffi_test_22 ] unit-test - -[ 1111 f 123456789 ffi_test_22 ] must-fail - -C-STRUCT: rect - { "float" "x" } - { "float" "y" } - { "float" "w" } - { "float" "h" } -; - -: - "rect" - [ set-rect-h ] keep - [ set-rect-w ] keep - [ set-rect-y ] keep - [ set-rect-x ] keep ; - -FUNCTION: int ffi_test_12 int a int b rect c int d int e int f ; - -[ 45 ] [ 1 2 3.0 4.0 5.0 6.0 7 8 9 ffi_test_12 ] unit-test - -[ 1 2 { 1 2 3 } 7 8 9 ffi_test_12 ] must-fail - -FUNCTION: float ffi_test_23 ( float[3] x, float[3] y ) ; - -[ 32.0 ] [ { 1.0 2.0 3.0 } >c-float-array { 4.0 5.0 6.0 } >c-float-array ffi_test_23 ] unit-test - -! Test odd-size structs -C-STRUCT: test-struct-1 { { "char" 1 } "x" } ; - -FUNCTION: test-struct-1 ffi_test_24 ; - -[ B{ 1 } ] [ ffi_test_24 ] unit-test - -C-STRUCT: test-struct-2 { { "char" 2 } "x" } ; - -FUNCTION: test-struct-2 ffi_test_25 ; - -[ B{ 1 2 } ] [ ffi_test_25 ] unit-test - -C-STRUCT: test-struct-3 { { "char" 3 } "x" } ; - -FUNCTION: test-struct-3 ffi_test_26 ; - -[ B{ 1 2 3 } ] [ ffi_test_26 ] unit-test - -C-STRUCT: test-struct-4 { { "char" 4 } "x" } ; - -FUNCTION: test-struct-4 ffi_test_27 ; - -[ B{ 1 2 3 4 } ] [ ffi_test_27 ] unit-test - -C-STRUCT: test-struct-5 { { "char" 5 } "x" } ; - -FUNCTION: test-struct-5 ffi_test_28 ; - -[ B{ 1 2 3 4 5 } ] [ ffi_test_28 ] unit-test - -C-STRUCT: test-struct-6 { { "char" 6 } "x" } ; - -FUNCTION: test-struct-6 ffi_test_29 ; - -[ B{ 1 2 3 4 5 6 } ] [ ffi_test_29 ] unit-test - -C-STRUCT: test-struct-7 { { "char" 7 } "x" } ; - -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 - -C-STRUCT: test-struct-12 { "int" "a" } { "double" "x" } ; - -: make-struct-12 - "test-struct-12" - [ set-test-struct-12-x ] keep ; - -FUNCTION: double ffi_test_36 ( test-struct-12 x ) ; - -[ 1.23456 ] [ 1.23456 make-struct-12 ffi_test_36 ] unit-test - -FUNCTION: ulonglong ffi_test_38 ( ulonglong x, ulonglong y ) ; - -[ t ] [ 31 2^ 32 2^ ffi_test_38 63 2^ = ] unit-test - -! Test callbacks - -: callback-1 ( -- callback ) "void" { } "cdecl" [ ] alien-callback ; - -[ 0 1 ] [ [ callback-1 ] infer dup effect-in swap effect-out ] unit-test - -[ t ] [ callback-1 alien? ] unit-test - -: callback_test_1 ( ptr -- ) "void" { } "cdecl" alien-indirect ; - -[ ] [ callback-1 callback_test_1 ] unit-test - -: callback-2 ( -- callback ) "void" { } "cdecl" [ [ 5 throw ] ignore-errors ] alien-callback ; - -[ ] [ callback-2 callback_test_1 ] unit-test - -: callback-3 ( -- callback ) "void" { } "cdecl" [ 5 "x" set ] alien-callback ; - -[ t ] [ - namestack* - 3 "x" set callback-3 callback_test_1 - namestack* eq? -] unit-test - -[ 5 ] [ - [ - 3 "x" set callback-3 callback_test_1 "x" get - ] with-scope -] unit-test - -: callback-4 ( -- callback ) - "void" { } "cdecl" [ "Hello world" write ] alien-callback - gc ; - -[ "Hello world" ] [ - [ callback-4 callback_test_1 ] with-string-writer -] unit-test - -: callback-5 ( -- callback ) - "void" { } "cdecl" [ gc ] alien-callback ; - -[ "testing" ] [ - "testing" callback-5 callback_test_1 -] unit-test - -: callback-5a ( -- callback ) - "void" { } "cdecl" [ 8000000 f drop ] alien-callback ; - -! Hack; if we're on ARM, we probably don't have much RAM, so -! skip this test. -! cpu "arm" = [ -! [ "testing" ] [ -! "testing" callback-5a callback_test_1 -! ] unit-test -! ] unless - -: callback-6 ( -- callback ) - "void" { } "cdecl" [ [ continue ] callcc0 ] alien-callback ; - -[ 1 2 3 ] [ callback-6 callback_test_1 1 2 3 ] unit-test - -: callback-7 ( -- callback ) - "void" { } "cdecl" [ 1000 sleep ] alien-callback ; - -[ 1 2 3 ] [ callback-7 callback_test_1 1 2 3 ] unit-test - -[ f ] [ namespace global eq? ] unit-test - -: callback-8 ( -- callback ) - "void" { } "cdecl" [ - [ continue ] callcc0 - ] alien-callback ; - -[ ] [ callback-8 callback_test_1 ] unit-test - -: callback-9 ( -- callback ) - "int" { "int" "int" "int" } "cdecl" [ - + + 1+ - ] alien-callback ; - -FUNCTION: void ffi_test_36_point_5 ( ) ; - -[ ] [ ffi_test_36_point_5 ] unit-test - -FUNCTION: int ffi_test_37 ( void* func ) ; - -[ 1 ] [ callback-9 ffi_test_37 ] unit-test - -[ 7 ] [ callback-9 ffi_test_37 ] unit-test diff --git a/basis/alien/compiler/compiler.factor b/basis/alien/compiler/compiler.factor deleted file mode 100755 index df20551c76..0000000000 --- a/basis/alien/compiler/compiler.factor +++ /dev/null @@ -1,417 +0,0 @@ -! Copyright (C) 2006, 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: arrays generator generator.registers generator.fixup -hashtables kernel math namespaces sequences words -inference.state inference.backend inference.dataflow system -math.parser classes alien.arrays alien.c-types alien.strings -alien.structs alien.syntax cpu.architecture alien summary -quotations assocs kernel.private threads continuations.private -libc combinators compiler.errors continuations layouts accessors -init sets ; -IN: alien.compiler - -TUPLE: #alien-node < node return parameters abi ; - -TUPLE: #alien-callback < #alien-node quot xt ; - -TUPLE: #alien-indirect < #alien-node ; - -TUPLE: #alien-invoke < #alien-node library function ; - -: large-struct? ( ctype -- ? ) - dup c-struct? [ - heap-size struct-small-enough? not - ] [ drop f ] if ; - -: alien-node-parameters* ( node -- seq ) - dup parameters>> - swap return>> large-struct? [ "void*" prefix ] when ; - -: alien-node-return* ( node -- ctype ) - 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 c-type-stack-align align dup r> - ; - -: parameter-sizes ( types -- total offsets ) - #! Compute stack frame locations. - [ - 0 [ - [ parameter-align drop dup , ] keep stack-size + - ] reduce cell align - ] { } make ; - -: return-size ( ctype -- n ) - #! Amount of space we reserve for a return value. - dup large-struct? [ heap-size ] [ drop 0 ] if ; - -: alien-stack-frame ( node -- n ) - alien-node-parameters* parameter-sizes drop ; - -: alien-invoke-frame ( node -- n ) - #! One cell is temporary storage, temp@ - dup return>> return-size - swap alien-stack-frame + - cell + ; - -: set-stack-frame ( n -- ) - dup [ frame-required ] when* \ stack-frame set ; - -: with-stack-frame ( n quot -- ) - swap set-stack-frame - call - f set-stack-frame ; inline - -GENERIC: reg-size ( register-class -- n ) - -M: int-regs reg-size drop cell ; - -M: single-float-regs reg-size drop 4 ; - -M: double-float-regs reg-size drop 8 ; - -GENERIC: reg-class-variable ( register-class -- symbol ) - -M: reg-class reg-class-variable ; - -M: float-regs reg-class-variable drop float-regs ; - -GENERIC: inc-reg-class ( register-class -- ) - -M: reg-class inc-reg-class - dup reg-class-variable inc - fp-shadows-int? [ reg-size stack-params +@ ] [ drop ] if ; - -M: float-regs inc-reg-class - dup call-next-method - fp-shadows-int? [ reg-size cell /i int-regs +@ ] [ drop ] if ; - -: reg-class-full? ( class -- ? ) - [ reg-class-variable get ] [ param-regs length ] bi >= ; - -: spill-param ( reg-class -- n reg-class ) - stack-params get - >r reg-size stack-params +@ r> - stack-params ; - -: fastcall-param ( reg-class -- n reg-class ) - [ reg-class-variable get ] [ inc-reg-class ] [ ] tri ; - -: alloc-parameter ( parameter -- reg reg-class ) - c-type-reg-class dup reg-class-full? - [ spill-param ] [ fastcall-param ] if - [ param-reg ] keep ; - -: (flatten-int-type) ( size -- ) - cell /i "void*" c-type % ; - -GENERIC: flatten-value-type ( type -- ) - -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 [ - 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 - -: reverse-each-parameter ( parameters quot -- ) - >r [ parameter-sizes nip ] keep r> 2reverse-each ; inline - -: reset-freg-counts ( -- ) - { int-regs float-regs stack-params } [ 0 swap set ] each ; - -: with-param-regs ( quot -- ) - #! In quot you can call alloc-parameter - [ reset-freg-counts call ] with-scope ; inline - -: move-parameters ( node word -- ) - #! Moves values from C stack to registers (if word is - #! %load-param-reg) and registers to C stack (if word is - #! %save-param-reg). - >r - alien-node-parameters* - flatten-value-types - r> [ >r alloc-parameter r> execute ] curry each-parameter ; - inline - -: if-void ( type true false -- ) - pick "void" = [ drop nip call ] [ nip call ] if ; inline - -: alien-invoke-stack ( node extra -- ) - over parameters>> length + dup reify-curries - over consume-values - dup return>> "void" = 0 1 ? - swap produce-values ; - -: param-prep-quot ( node -- quot ) - parameters>> [ c-type c-type-unboxer-quot ] map spread>quot ; - -: unbox-parameters ( offset node -- ) - parameters>> [ - %prepare-unbox >r over + r> unbox-parameter - ] reverse-each-parameter drop ; - -: prepare-box-struct ( node -- offset ) - #! Return offset on C stack where to store unboxed - #! parameters. If the C function is returning a structure, - #! the first parameter is an implicit target area pointer, - #! so we need to use a different offset. - return>> dup large-struct? - [ heap-size %prepare-box-struct cell ] [ drop 0 ] if ; - -: objects>registers ( node -- ) - #! Generate code for unboxing a list of C types, then - #! generate code for moving these parameters to register on - #! architectures where parameters are passed in registers. - [ - [ prepare-box-struct ] keep - [ unbox-parameters ] keep - \ %load-param-reg move-parameters - ] with-param-regs ; - -: box-return* ( node -- ) - return>> [ ] [ box-return ] if-void ; - -: callback-prep-quot ( node -- quot ) - parameters>> [ c-type c-type-boxer-quot ] map spread>quot ; - -: return-prep-quot ( node -- quot ) - return>> [ [ ] ] [ c-type c-type-boxer-quot ] if-void ; - -M: alien-invoke-error summary - drop - "Words calling ``alien-invoke'' must be compiled with the optimizing compiler." ; - -: pop-parameters ( -- seq ) - pop-literal nip [ expand-constants ] map ; - -: stdcall-mangle ( symbol node -- symbol ) - "@" - swap parameters>> parameter-sizes drop - number>string 3append ; - -TUPLE: no-such-library name ; - -M: no-such-library summary - drop "Library not found" ; - -M: no-such-library compiler-error-type - drop +linkage+ ; - -: no-such-library ( name -- ) - \ no-such-library boa - compiling-word get compiler-error ; - -TUPLE: no-such-symbol name ; - -M: no-such-symbol summary - drop "Symbol not found" ; - -M: no-such-symbol compiler-error-type - drop +linkage+ ; - -: no-such-symbol ( name -- ) - \ no-such-symbol boa - compiling-word get compiler-error ; - -: check-dlsym ( symbols dll -- ) - dup dll-valid? [ - dupd [ dlsym ] curry contains? - [ drop ] [ no-such-symbol ] if - ] [ - dll-path no-such-library drop - ] if ; - -: alien-invoke-dlsym ( node -- symbols dll ) - dup function>> dup pick stdcall-mangle 2array - swap library>> library dup [ dll>> ] when - 2dup check-dlsym ; - -\ alien-invoke [ - ! Four literals - 4 ensure-values - #alien-invoke new - ! Compile-time parameters - pop-parameters >>parameters - pop-literal nip >>function - pop-literal nip >>library - pop-literal nip >>return - ! Quotation which coerces parameters to required types - dup param-prep-quot recursive-state get infer-quot - ! Set ABI - dup library>> library [ abi>> ] [ "cdecl" ] if* >>abi - ! Add node to IR - dup node, - ! Magic #: consume exactly the number of inputs - dup 0 alien-invoke-stack - ! Quotation which coerces return value to required type - return-prep-quot recursive-state get infer-quot -] "infer" set-word-prop - -M: #alien-invoke generate-node - dup alien-invoke-frame [ - end-basic-block - %prepare-alien-invoke - dup objects>registers - %prepare-var-args - dup alien-invoke-dlsym %alien-invoke - dup %cleanup - box-return* - iterate-next - ] with-stack-frame ; - -M: alien-indirect-error summary - drop "Words calling ``alien-indirect'' must be compiled with the optimizing compiler." ; - -\ alien-indirect [ - ! Three literals and function pointer - 4 ensure-values - 4 reify-curries - #alien-indirect new - ! Compile-time parameters - pop-literal nip >>abi - pop-parameters >>parameters - pop-literal nip >>return - ! Quotation which coerces parameters to required types - dup param-prep-quot [ dip ] curry recursive-state get infer-quot - ! Add node to IR - dup node, - ! Magic #: consume the function pointer, too - dup 1 alien-invoke-stack - ! Quotation which coerces return value to required type - return-prep-quot recursive-state get infer-quot -] "infer" set-word-prop - -M: #alien-indirect generate-node - dup alien-invoke-frame [ - ! Flush registers - end-basic-block - ! Save registers for GC - %prepare-alien-invoke - ! Save alien at top of stack to temporary storage - %prepare-alien-indirect - dup objects>registers - %prepare-var-args - ! Call alien in temporary storage - %alien-indirect - dup %cleanup - box-return* - iterate-next - ] with-stack-frame ; - -! Callbacks are registered in a global hashtable. If you clear -! this hashtable, they will all be blown away by code GC, beware -SYMBOL: callbacks - -[ H{ } clone callbacks set-global ] "alien.compiler" add-init-hook - -: register-callback ( word -- ) callbacks get conjoin ; - -M: alien-callback-error summary - drop "Words calling ``alien-callback'' must be compiled with the optimizing compiler." ; - -: callback-bottom ( node -- ) - xt>> [ [ register-callback ] [ word-xt drop ] bi ] curry - recursive-state get infer-quot ; - -\ alien-callback [ - 4 ensure-values - #alien-callback new dup node, - pop-literal nip >>quot - pop-literal nip >>abi - pop-parameters >>parameters - pop-literal nip >>return - gensym >>xt - callback-bottom -] "infer" set-word-prop - -: box-parameters ( node -- ) - alien-node-parameters* [ box-parameter ] each-parameter ; - -: registers>objects ( node -- ) - [ - dup \ %save-param-reg move-parameters - "nest_stacks" f %alien-invoke - box-parameters - ] with-param-regs ; - -TUPLE: callback-context ; - -: current-callback 2 getenv ; - -: wait-to-return ( token -- ) - dup current-callback eq? [ - drop - ] [ - yield wait-to-return - ] if ; - -: do-callback ( quot token -- ) - init-catchstack - dup 2 setenv - slip - wait-to-return ; inline - -: callback-return-quot ( ctype -- quot ) - return>> { - { [ dup "void" = ] [ drop [ ] ] } - { [ dup large-struct? ] [ heap-size [ memcpy ] curry ] } - [ c-type c-type-unboxer-quot ] - } cond ; - -: wrap-callback-quot ( node -- quot ) - [ - [ callback-prep-quot ] - [ quot>> ] - [ callback-return-quot ] tri 3append , - [ callback-context new do-callback ] % - ] [ ] make ; - -: %unnest-stacks ( -- ) "unnest_stacks" f %alien-invoke ; - -: callback-unwind ( node -- n ) - { - { [ dup abi>> "stdcall" = ] [ alien-stack-frame ] } - { [ dup return>> large-struct? ] [ drop 4 ] } - [ drop 0 ] - } cond ; - -: %callback-return ( node -- ) - #! All the extra book-keeping for %unwind is only for x86. - #! On other platforms its an alias for %return. - dup alien-node-return* - [ %unnest-stacks ] [ %callback-value ] if-void - callback-unwind %unwind ; - -: generate-callback ( node -- ) - dup xt>> dup [ - init-templates - %prologue-later - dup alien-stack-frame [ - [ registers>objects ] - [ wrap-callback-quot %alien-callback ] - [ %callback-return ] - tri - ] with-stack-frame - ] with-generator ; - -M: #alien-callback generate-node - end-basic-block generate-callback iterate-next ; diff --git a/basis/alien/compiler/summary.txt b/basis/alien/compiler/summary.txt deleted file mode 100644 index f5a0c6deb9..0000000000 --- a/basis/alien/compiler/summary.txt +++ /dev/null @@ -1 +0,0 @@ -C library interface implementation diff --git a/basis/alien/compiler/authors.txt b/basis/compiler/generator/authors.txt similarity index 100% rename from basis/alien/compiler/authors.txt rename to basis/compiler/generator/authors.txt diff --git a/basis/generator/authors.txt b/basis/compiler/generator/fixup/authors.txt similarity index 100% rename from basis/generator/authors.txt rename to basis/compiler/generator/fixup/authors.txt diff --git a/unfinished/compiler/generator/fixup/fixup-docs.factor b/basis/compiler/generator/fixup/fixup-docs.factor similarity index 100% rename from unfinished/compiler/generator/fixup/fixup-docs.factor rename to basis/compiler/generator/fixup/fixup-docs.factor diff --git a/unfinished/compiler/generator/fixup/fixup.factor b/basis/compiler/generator/fixup/fixup.factor similarity index 100% rename from unfinished/compiler/generator/fixup/fixup.factor rename to basis/compiler/generator/fixup/fixup.factor diff --git a/basis/generator/fixup/summary.txt b/basis/compiler/generator/fixup/summary.txt similarity index 100% rename from basis/generator/fixup/summary.txt rename to basis/compiler/generator/fixup/summary.txt diff --git a/unfinished/compiler/generator/generator-docs.factor b/basis/compiler/generator/generator-docs.factor similarity index 100% rename from unfinished/compiler/generator/generator-docs.factor rename to basis/compiler/generator/generator-docs.factor diff --git a/unfinished/compiler/generator/generator.factor b/basis/compiler/generator/generator.factor similarity index 100% rename from unfinished/compiler/generator/generator.factor rename to basis/compiler/generator/generator.factor diff --git a/unfinished/compiler/generator/iterator/iterator.factor b/basis/compiler/generator/iterator/iterator.factor similarity index 100% rename from unfinished/compiler/generator/iterator/iterator.factor rename to basis/compiler/generator/iterator/iterator.factor diff --git a/basis/generator/fixup/authors.txt b/basis/compiler/generator/registers/authors.txt similarity index 100% rename from basis/generator/fixup/authors.txt rename to basis/compiler/generator/registers/authors.txt diff --git a/unfinished/compiler/generator/registers/registers.factor b/basis/compiler/generator/registers/registers.factor similarity index 100% rename from unfinished/compiler/generator/registers/registers.factor rename to basis/compiler/generator/registers/registers.factor diff --git a/basis/generator/registers/summary.txt b/basis/compiler/generator/registers/summary.txt similarity index 100% rename from basis/generator/registers/summary.txt rename to basis/compiler/generator/registers/summary.txt diff --git a/basis/generator/summary.txt b/basis/compiler/generator/summary.txt similarity index 100% rename from basis/generator/summary.txt rename to basis/compiler/generator/summary.txt diff --git a/basis/generator/tags.txt b/basis/compiler/generator/tags.txt similarity index 100% rename from basis/generator/tags.txt rename to basis/compiler/generator/tags.txt diff --git a/basis/generator/registers/authors.txt b/basis/compiler/tree/authors.txt similarity index 100% rename from basis/generator/registers/authors.txt rename to basis/compiler/tree/authors.txt diff --git a/unfinished/compiler/tree/branch-fusion/branch-fusion.factor b/basis/compiler/tree/branch-fusion/branch-fusion.factor similarity index 100% rename from unfinished/compiler/tree/branch-fusion/branch-fusion.factor rename to basis/compiler/tree/branch-fusion/branch-fusion.factor diff --git a/unfinished/compiler/tree/builder/builder-docs.factor b/basis/compiler/tree/builder/builder-docs.factor similarity index 100% rename from unfinished/compiler/tree/builder/builder-docs.factor rename to basis/compiler/tree/builder/builder-docs.factor diff --git a/unfinished/compiler/tree/builder/builder-tests.factor b/basis/compiler/tree/builder/builder-tests.factor similarity index 100% rename from unfinished/compiler/tree/builder/builder-tests.factor rename to basis/compiler/tree/builder/builder-tests.factor diff --git a/unfinished/compiler/tree/builder/builder.factor b/basis/compiler/tree/builder/builder.factor similarity index 100% rename from unfinished/compiler/tree/builder/builder.factor rename to basis/compiler/tree/builder/builder.factor diff --git a/unfinished/compiler/tree/checker/checker.factor b/basis/compiler/tree/checker/checker.factor similarity index 100% rename from unfinished/compiler/tree/checker/checker.factor rename to basis/compiler/tree/checker/checker.factor diff --git a/unfinished/compiler/tree/cleanup/cleanup-tests.factor b/basis/compiler/tree/cleanup/cleanup-tests.factor similarity index 100% rename from unfinished/compiler/tree/cleanup/cleanup-tests.factor rename to basis/compiler/tree/cleanup/cleanup-tests.factor diff --git a/unfinished/compiler/tree/cleanup/cleanup.factor b/basis/compiler/tree/cleanup/cleanup.factor similarity index 100% rename from unfinished/compiler/tree/cleanup/cleanup.factor rename to basis/compiler/tree/cleanup/cleanup.factor diff --git a/unfinished/compiler/tree/combinators/combinators-tests.factor b/basis/compiler/tree/combinators/combinators-tests.factor similarity index 100% rename from unfinished/compiler/tree/combinators/combinators-tests.factor rename to basis/compiler/tree/combinators/combinators-tests.factor diff --git a/unfinished/compiler/tree/combinators/combinators.factor b/basis/compiler/tree/combinators/combinators.factor similarity index 100% rename from unfinished/compiler/tree/combinators/combinators.factor rename to basis/compiler/tree/combinators/combinators.factor diff --git a/unfinished/compiler/tree/comparisons/comparisons.factor b/basis/compiler/tree/comparisons/comparisons.factor similarity index 100% rename from unfinished/compiler/tree/comparisons/comparisons.factor rename to basis/compiler/tree/comparisons/comparisons.factor diff --git a/unfinished/compiler/tree/dataflow-analysis/backward/backward.factor b/basis/compiler/tree/dataflow-analysis/backward/backward.factor similarity index 100% rename from unfinished/compiler/tree/dataflow-analysis/backward/backward.factor rename to basis/compiler/tree/dataflow-analysis/backward/backward.factor diff --git a/unfinished/compiler/tree/dataflow-analysis/dataflow-analysis.factor b/basis/compiler/tree/dataflow-analysis/dataflow-analysis.factor similarity index 100% rename from unfinished/compiler/tree/dataflow-analysis/dataflow-analysis.factor rename to basis/compiler/tree/dataflow-analysis/dataflow-analysis.factor diff --git a/unfinished/compiler/tree/dead-code/dead-code-tests.factor b/basis/compiler/tree/dead-code/dead-code-tests.factor similarity index 100% rename from unfinished/compiler/tree/dead-code/dead-code-tests.factor rename to basis/compiler/tree/dead-code/dead-code-tests.factor diff --git a/unfinished/compiler/tree/dead-code/dead-code.factor b/basis/compiler/tree/dead-code/dead-code.factor similarity index 100% rename from unfinished/compiler/tree/dead-code/dead-code.factor rename to basis/compiler/tree/dead-code/dead-code.factor diff --git a/unfinished/compiler/tree/debugger/debugger-tests.factor b/basis/compiler/tree/debugger/debugger-tests.factor similarity index 100% rename from unfinished/compiler/tree/debugger/debugger-tests.factor rename to basis/compiler/tree/debugger/debugger-tests.factor diff --git a/unfinished/compiler/tree/debugger/debugger.factor b/basis/compiler/tree/debugger/debugger.factor similarity index 100% rename from unfinished/compiler/tree/debugger/debugger.factor rename to basis/compiler/tree/debugger/debugger.factor diff --git a/basis/inference/authors.txt b/basis/compiler/tree/def-use/authors.txt similarity index 100% rename from basis/inference/authors.txt rename to basis/compiler/tree/def-use/authors.txt diff --git a/unfinished/compiler/tree/def-use/def-use-tests.factor b/basis/compiler/tree/def-use/def-use-tests.factor similarity index 100% rename from unfinished/compiler/tree/def-use/def-use-tests.factor rename to basis/compiler/tree/def-use/def-use-tests.factor diff --git a/unfinished/compiler/tree/def-use/def-use.factor b/basis/compiler/tree/def-use/def-use.factor similarity index 100% rename from unfinished/compiler/tree/def-use/def-use.factor rename to basis/compiler/tree/def-use/def-use.factor diff --git a/unfinished/compiler/tree/def-use/summary.txt b/basis/compiler/tree/def-use/summary.txt similarity index 100% rename from unfinished/compiler/tree/def-use/summary.txt rename to basis/compiler/tree/def-use/summary.txt diff --git a/unfinished/compiler/tree/escape-analysis/allocations/allocations.factor b/basis/compiler/tree/escape-analysis/allocations/allocations.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/allocations/allocations.factor rename to basis/compiler/tree/escape-analysis/allocations/allocations.factor diff --git a/unfinished/compiler/tree/escape-analysis/branches/branches.factor b/basis/compiler/tree/escape-analysis/branches/branches.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/branches/branches.factor rename to basis/compiler/tree/escape-analysis/branches/branches.factor diff --git a/unfinished/compiler/tree/escape-analysis/escape-analysis-tests.factor b/basis/compiler/tree/escape-analysis/escape-analysis-tests.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/escape-analysis-tests.factor rename to basis/compiler/tree/escape-analysis/escape-analysis-tests.factor diff --git a/unfinished/compiler/tree/escape-analysis/escape-analysis.factor b/basis/compiler/tree/escape-analysis/escape-analysis.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/escape-analysis.factor rename to basis/compiler/tree/escape-analysis/escape-analysis.factor diff --git a/unfinished/compiler/tree/escape-analysis/nodes/nodes.factor b/basis/compiler/tree/escape-analysis/nodes/nodes.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/nodes/nodes.factor rename to basis/compiler/tree/escape-analysis/nodes/nodes.factor diff --git a/unfinished/compiler/tree/escape-analysis/recursive/recursive-tests.factor b/basis/compiler/tree/escape-analysis/recursive/recursive-tests.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/recursive/recursive-tests.factor rename to basis/compiler/tree/escape-analysis/recursive/recursive-tests.factor diff --git a/unfinished/compiler/tree/escape-analysis/recursive/recursive.factor b/basis/compiler/tree/escape-analysis/recursive/recursive.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/recursive/recursive.factor rename to basis/compiler/tree/escape-analysis/recursive/recursive.factor diff --git a/unfinished/compiler/tree/escape-analysis/simple/simple.factor b/basis/compiler/tree/escape-analysis/simple/simple.factor similarity index 100% rename from unfinished/compiler/tree/escape-analysis/simple/simple.factor rename to basis/compiler/tree/escape-analysis/simple/simple.factor diff --git a/unfinished/compiler/tree/intrinsics/intrinsics.factor b/basis/compiler/tree/intrinsics/intrinsics.factor similarity index 100% rename from unfinished/compiler/tree/intrinsics/intrinsics.factor rename to basis/compiler/tree/intrinsics/intrinsics.factor diff --git a/unfinished/compiler/tree/loop/detection/detection-tests.factor b/basis/compiler/tree/loop/detection/detection-tests.factor similarity index 100% rename from unfinished/compiler/tree/loop/detection/detection-tests.factor rename to basis/compiler/tree/loop/detection/detection-tests.factor diff --git a/unfinished/compiler/tree/loop/detection/detection.factor b/basis/compiler/tree/loop/detection/detection.factor similarity index 100% rename from unfinished/compiler/tree/loop/detection/detection.factor rename to basis/compiler/tree/loop/detection/detection.factor diff --git a/unfinished/compiler/tree/loop/inversion/inversion.factor b/basis/compiler/tree/loop/inversion/inversion.factor similarity index 100% rename from unfinished/compiler/tree/loop/inversion/inversion.factor rename to basis/compiler/tree/loop/inversion/inversion.factor diff --git a/unfinished/compiler/tree/normalization/normalization-tests.factor b/basis/compiler/tree/normalization/normalization-tests.factor similarity index 100% rename from unfinished/compiler/tree/normalization/normalization-tests.factor rename to basis/compiler/tree/normalization/normalization-tests.factor diff --git a/unfinished/compiler/tree/normalization/normalization.factor b/basis/compiler/tree/normalization/normalization.factor similarity index 100% rename from unfinished/compiler/tree/normalization/normalization.factor rename to basis/compiler/tree/normalization/normalization.factor diff --git a/unfinished/compiler/tree/optimizer/optimizer-tests.factor b/basis/compiler/tree/optimizer/optimizer-tests.factor similarity index 100% rename from unfinished/compiler/tree/optimizer/optimizer-tests.factor rename to basis/compiler/tree/optimizer/optimizer-tests.factor diff --git a/unfinished/compiler/tree/optimizer/optimizer.factor b/basis/compiler/tree/optimizer/optimizer.factor similarity index 100% rename from unfinished/compiler/tree/optimizer/optimizer.factor rename to basis/compiler/tree/optimizer/optimizer.factor diff --git a/basis/inference/backend/authors.txt b/basis/compiler/tree/propagation/authors.txt similarity index 100% rename from basis/inference/backend/authors.txt rename to basis/compiler/tree/propagation/authors.txt diff --git a/unfinished/compiler/tree/propagation/branches/branches.factor b/basis/compiler/tree/propagation/branches/branches.factor similarity index 100% rename from unfinished/compiler/tree/propagation/branches/branches.factor rename to basis/compiler/tree/propagation/branches/branches.factor diff --git a/unfinished/compiler/tree/propagation/constraints/constraints.factor b/basis/compiler/tree/propagation/constraints/constraints.factor similarity index 100% rename from unfinished/compiler/tree/propagation/constraints/constraints.factor rename to basis/compiler/tree/propagation/constraints/constraints.factor diff --git a/unfinished/compiler/tree/propagation/copy/copy-tests.factor b/basis/compiler/tree/propagation/copy/copy-tests.factor similarity index 100% rename from unfinished/compiler/tree/propagation/copy/copy-tests.factor rename to basis/compiler/tree/propagation/copy/copy-tests.factor diff --git a/unfinished/compiler/tree/propagation/copy/copy.factor b/basis/compiler/tree/propagation/copy/copy.factor similarity index 100% rename from unfinished/compiler/tree/propagation/copy/copy.factor rename to basis/compiler/tree/propagation/copy/copy.factor diff --git a/unfinished/compiler/tree/propagation/info/info-tests.factor b/basis/compiler/tree/propagation/info/info-tests.factor similarity index 100% rename from unfinished/compiler/tree/propagation/info/info-tests.factor rename to basis/compiler/tree/propagation/info/info-tests.factor diff --git a/unfinished/compiler/tree/propagation/info/info.factor b/basis/compiler/tree/propagation/info/info.factor similarity index 100% rename from unfinished/compiler/tree/propagation/info/info.factor rename to basis/compiler/tree/propagation/info/info.factor diff --git a/unfinished/compiler/tree/propagation/inlining/inlining.factor b/basis/compiler/tree/propagation/inlining/inlining.factor similarity index 100% rename from unfinished/compiler/tree/propagation/inlining/inlining.factor rename to basis/compiler/tree/propagation/inlining/inlining.factor diff --git a/unfinished/compiler/tree/propagation/known-words/known-words.factor b/basis/compiler/tree/propagation/known-words/known-words.factor similarity index 100% rename from unfinished/compiler/tree/propagation/known-words/known-words.factor rename to basis/compiler/tree/propagation/known-words/known-words.factor diff --git a/unfinished/compiler/tree/propagation/nodes/nodes.factor b/basis/compiler/tree/propagation/nodes/nodes.factor similarity index 100% rename from unfinished/compiler/tree/propagation/nodes/nodes.factor rename to basis/compiler/tree/propagation/nodes/nodes.factor diff --git a/unfinished/compiler/tree/propagation/propagation-tests.factor b/basis/compiler/tree/propagation/propagation-tests.factor similarity index 100% rename from unfinished/compiler/tree/propagation/propagation-tests.factor rename to basis/compiler/tree/propagation/propagation-tests.factor diff --git a/unfinished/compiler/tree/propagation/propagation.factor b/basis/compiler/tree/propagation/propagation.factor similarity index 100% rename from unfinished/compiler/tree/propagation/propagation.factor rename to basis/compiler/tree/propagation/propagation.factor diff --git a/unfinished/compiler/tree/propagation/recursive/recursive-tests.factor b/basis/compiler/tree/propagation/recursive/recursive-tests.factor similarity index 100% rename from unfinished/compiler/tree/propagation/recursive/recursive-tests.factor rename to basis/compiler/tree/propagation/recursive/recursive-tests.factor diff --git a/unfinished/compiler/tree/propagation/recursive/recursive.factor b/basis/compiler/tree/propagation/recursive/recursive.factor similarity index 100% rename from unfinished/compiler/tree/propagation/recursive/recursive.factor rename to basis/compiler/tree/propagation/recursive/recursive.factor diff --git a/unfinished/compiler/tree/propagation/simple/simple.factor b/basis/compiler/tree/propagation/simple/simple.factor similarity index 100% rename from unfinished/compiler/tree/propagation/simple/simple.factor rename to basis/compiler/tree/propagation/simple/simple.factor diff --git a/unfinished/compiler/tree/propagation/slots/slots.factor b/basis/compiler/tree/propagation/slots/slots.factor similarity index 100% rename from unfinished/compiler/tree/propagation/slots/slots.factor rename to basis/compiler/tree/propagation/slots/slots.factor diff --git a/unfinished/compiler/tree/propagation/summary.txt b/basis/compiler/tree/propagation/summary.txt similarity index 100% rename from unfinished/compiler/tree/propagation/summary.txt rename to basis/compiler/tree/propagation/summary.txt diff --git a/unfinished/compiler/tree/strength-reduction/strength-reduction-tests.factor b/basis/compiler/tree/strength-reduction/strength-reduction-tests.factor similarity index 100% rename from unfinished/compiler/tree/strength-reduction/strength-reduction-tests.factor rename to basis/compiler/tree/strength-reduction/strength-reduction-tests.factor diff --git a/unfinished/compiler/tree/strength-reduction/strength-reduction.factor b/basis/compiler/tree/strength-reduction/strength-reduction.factor similarity index 100% rename from unfinished/compiler/tree/strength-reduction/strength-reduction.factor rename to basis/compiler/tree/strength-reduction/strength-reduction.factor diff --git a/unfinished/compiler/tree/summary.txt b/basis/compiler/tree/summary.txt similarity index 100% rename from unfinished/compiler/tree/summary.txt rename to basis/compiler/tree/summary.txt diff --git a/unfinished/compiler/tree/tree.factor b/basis/compiler/tree/tree.factor similarity index 100% rename from unfinished/compiler/tree/tree.factor rename to basis/compiler/tree/tree.factor diff --git a/unfinished/compiler/tree/tuple-unboxing/tuple-unboxing-tests.factor b/basis/compiler/tree/tuple-unboxing/tuple-unboxing-tests.factor similarity index 100% rename from unfinished/compiler/tree/tuple-unboxing/tuple-unboxing-tests.factor rename to basis/compiler/tree/tuple-unboxing/tuple-unboxing-tests.factor diff --git a/unfinished/compiler/tree/tuple-unboxing/tuple-unboxing.factor b/basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor similarity index 100% rename from unfinished/compiler/tree/tuple-unboxing/tuple-unboxing.factor rename to basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor diff --git a/basis/generator/fixup/fixup-docs.factor b/basis/generator/fixup/fixup-docs.factor deleted file mode 100644 index 64d733ef8c..0000000000 --- a/basis/generator/fixup/fixup-docs.factor +++ /dev/null @@ -1,16 +0,0 @@ -USING: help.syntax help.markup math kernel -words strings alien ; -IN: generator.fixup - -HELP: frame-required -{ $values { "n" "a non-negative integer" } } -{ $description "Notify the code generator that the currently compiling code block needs a stack frame with room for at least " { $snippet "n" } " parameters." } ; - -HELP: add-literal -{ $values { "obj" object } { "n" integer } } -{ $description "Adds a literal to the " { $link literal-table } ", if it is not already there, and outputs the index of the literal in the table. This literal can then be used as an argument for a " { $link rt-literal } " relocation with " { $link rel-fixup } "." } ; - -HELP: rel-dlsym -{ $values { "name" string } { "dll" "a " { $link dll } " or " { $link f } } { "class" "a relocation class" } } -{ $description "Records that the most recently assembled instruction contains a reference to the " { $snippet "name" } " symbol from " { $snippet "dll" } ". The correct " { $snippet "class" } " to use depends on instruction formats." -} ; diff --git a/basis/generator/fixup/fixup.factor b/basis/generator/fixup/fixup.factor deleted file mode 100755 index 9be8151bee..0000000000 --- a/basis/generator/fixup/fixup.factor +++ /dev/null @@ -1,154 +0,0 @@ -! Copyright (C) 2007, 2008 Slava Pestov. -! See http://factorcode.org/license.txt for BSD license. -USING: arrays byte-arrays generic assocs hashtables io.binary -kernel kernel.private math namespaces sequences words -quotations strings alien.accessors alien.strings layouts system -combinators math.bitfields words.private cpu.architecture -math.order accessors growable ; -IN: generator.fixup - -: no-stack-frame -1 ; inline - -TUPLE: frame-required n ; - -: frame-required ( n -- ) \ frame-required boa , ; - -: stack-frame-size ( code -- n ) - no-stack-frame [ - dup frame-required? [ frame-required-n max ] [ drop ] if - ] reduce ; - -GENERIC: fixup* ( frame-size obj -- frame-size ) - -: code-format 22 getenv ; - -: compiled-offset ( -- n ) building get length code-format * ; - -TUPLE: label offset ; - -: