2006-02-11 02:30:18 -05:00
|
|
|
IN: temporary
|
2019-10-18 09:05:06 -04:00
|
|
|
USING: alien arrays compiler errors inference io kernel
|
|
|
|
|
kernel-internals math memory namespaces test threads words
|
|
|
|
|
prettyprint ;
|
2006-02-11 02:30:18 -05:00
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-1 "void" { } "cdecl" [ ] alien-callback ;
|
2006-02-11 02:30:18 -05:00
|
|
|
|
2006-11-12 22:40:25 -05:00
|
|
|
[ 0 1 ] [ [ callback-1 ] infer nip dup effect-in swap effect-out ] unit-test
|
2006-02-11 02:30:18 -05:00
|
|
|
|
|
|
|
|
[ t ] [ callback-1 alien? ] unit-test
|
|
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_1 "void" { } "cdecl" alien-indirect ;
|
2006-02-11 02:30:18 -05:00
|
|
|
|
|
|
|
|
[ ] [ callback-1 callback_test_1 ] unit-test
|
2006-02-13 17:16:34 -05:00
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-2 "void" { } "cdecl" [ [ 5 throw ] catch drop ] alien-callback ;
|
2006-02-23 02:09:34 -05:00
|
|
|
|
|
|
|
|
[ ] [ callback-2 callback_test_1 ] unit-test
|
2006-02-13 17:16:34 -05:00
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-3 "void" { } "cdecl" [ 5 "x" set ] alien-callback ;
|
2006-02-13 17:16:34 -05:00
|
|
|
|
|
|
|
|
[ 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
|
|
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-4 "void" { } "cdecl" [ "Hello world" write ] alien-callback ;
|
2006-02-13 17:16:34 -05:00
|
|
|
|
|
|
|
|
[ "Hello world" ] [
|
|
|
|
|
[ callback-4 callback_test_1 ] string-out
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
: callback-5
|
2019-10-18 09:05:06 -04:00
|
|
|
"void" { } "cdecl" [ data-gc ] alien-callback ;
|
2006-02-13 17:16:34 -05:00
|
|
|
|
|
|
|
|
[ "testing" ] [
|
|
|
|
|
"testing" callback-5 callback_test_1
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-5a
|
|
|
|
|
"void" { } "cdecl" [ 8000000 f <array> drop ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
[ "testing" ] [
|
|
|
|
|
"testing" callback-5a callback_test_1
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2006-02-13 17:16:34 -05:00
|
|
|
: callback-6
|
2019-10-18 09:05:06 -04:00
|
|
|
"void" { } "cdecl" [ [ continue ] callcc0 ] alien-callback ;
|
2006-02-13 17:16:34 -05:00
|
|
|
|
2006-02-23 01:33:15 -05:00
|
|
|
[ 1 2 3 ] [ callback-6 callback_test_1 1 2 3 ] unit-test
|
2006-02-13 17:16:34 -05:00
|
|
|
|
|
|
|
|
: callback-7
|
2019-10-18 09:05:06 -04:00
|
|
|
"void" { } "cdecl" [ 1000 sleep ] alien-callback ;
|
2006-02-13 17:16:34 -05:00
|
|
|
|
2006-02-23 01:33:15 -05:00
|
|
|
[ 1 2 3 ] [ callback-7 callback_test_1 1 2 3 ] unit-test
|
2006-02-13 22:20:39 -05:00
|
|
|
|
2006-11-05 21:37:22 -05:00
|
|
|
[ f ] [ namespace global eq? ] unit-test
|
|
|
|
|
|
2006-02-13 22:20:39 -05:00
|
|
|
: callback-8
|
2019-10-18 09:05:06 -04:00
|
|
|
"void" { "int" "int" } "cdecl" [ / "x" set ] alien-callback ;
|
2006-02-13 22:20:39 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_2
|
|
|
|
|
"void" { "int" "int" } "cdecl" alien-indirect ;
|
2006-02-13 22:47:42 -05:00
|
|
|
|
|
|
|
|
[ 3/4 ] [
|
|
|
|
|
[
|
2006-09-09 01:04:55 -04:00
|
|
|
"x" off 3 4 callback-8 callback_test_2 "x" get
|
2006-02-13 22:47:42 -05:00
|
|
|
] with-scope
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
: callback-9
|
|
|
|
|
"void" { "int" "double" "int" }
|
2019-10-18 09:05:06 -04:00
|
|
|
"cdecl" [ + * "x" set ] alien-callback ;
|
2006-02-13 22:47:42 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_3
|
|
|
|
|
"void" { "int" "double" "int" } "cdecl" alien-indirect ;
|
2006-02-13 22:47:42 -05:00
|
|
|
|
|
|
|
|
[ 27.0 ] [
|
|
|
|
|
[
|
2006-10-31 22:54:35 -05:00
|
|
|
"x" off 3 4.0 5 callback-9 callback_test_3 "x" get
|
2006-02-13 22:47:42 -05:00
|
|
|
] with-scope
|
|
|
|
|
] unit-test
|
2006-02-14 17:27:28 -05:00
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-11 "int" { } "cdecl" [ 1234 ] alien-callback ;
|
2006-02-14 23:23:08 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_5 "int" { } "cdecl" alien-indirect ;
|
2006-02-14 23:23:08 -05:00
|
|
|
|
|
|
|
|
[ 1234 ] [ callback-11 callback_test_5 ] unit-test
|
|
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-12 "float" { } "cdecl" [ pi ] alien-callback ;
|
2006-02-14 23:23:08 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_6 "float" { } "cdecl" alien-indirect ;
|
2006-02-14 23:23:08 -05:00
|
|
|
|
2006-02-19 01:35:14 -05:00
|
|
|
[ t ] [ callback-12 callback_test_6 pi - 0.00001 <= ] unit-test
|
2006-02-19 01:33:34 -05:00
|
|
|
|
2019-10-18 09:05:06 -04:00
|
|
|
: callback-13 "double" { } "cdecl" [ pi ] alien-callback ;
|
2006-02-19 01:33:34 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_7 "double" { } "cdecl" alien-indirect ;
|
2006-02-19 01:33:34 -05:00
|
|
|
|
2006-02-19 01:35:14 -05:00
|
|
|
[ t ] [ callback-13 callback_test_7 pi = ] unit-test
|
2006-02-20 00:55:38 -05:00
|
|
|
|
2006-02-20 17:49:44 -05:00
|
|
|
: callback-10
|
|
|
|
|
"void"
|
|
|
|
|
{ "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" }
|
2019-10-18 09:05:06 -04:00
|
|
|
"cdecl" [ datastack "stack" set ] alien-callback ;
|
2006-02-20 17:49:44 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_4
|
|
|
|
|
"void"
|
|
|
|
|
{ "int" "int" "int" "int" "int" "int" "int" "int" "int" "int" }
|
|
|
|
|
"cdecl"
|
|
|
|
|
alien-indirect ;
|
2006-02-20 00:55:38 -05:00
|
|
|
|
|
|
|
|
[ V{ 1 2 3 4 5 6 7 8 9 10 } ] [
|
|
|
|
|
[
|
2006-09-09 01:04:55 -04:00
|
|
|
1 2 3 4 5 6 7 8 9 10 callback-10 callback_test_4
|
2006-02-20 00:55:38 -05:00
|
|
|
"stack" get
|
|
|
|
|
] with-scope
|
|
|
|
|
] unit-test
|
2006-03-10 22:16:46 -05:00
|
|
|
|
|
|
|
|
BEGIN-STRUCT: foo
|
|
|
|
|
FIELD: int x
|
|
|
|
|
FIELD: int y
|
|
|
|
|
END-STRUCT
|
|
|
|
|
|
|
|
|
|
: make-foo ( x y -- foo )
|
|
|
|
|
"foo" <c-object> [ set-foo-y ] keep [ set-foo-x ] keep ;
|
|
|
|
|
|
2006-03-11 03:26:55 -05:00
|
|
|
: callback-14
|
2006-03-10 22:16:46 -05:00
|
|
|
"int"
|
|
|
|
|
{ "foo" }
|
2019-10-18 09:05:06 -04:00
|
|
|
"cdecl" [ dup foo-x dup . swap foo-y dup . / ] alien-callback ;
|
2006-03-10 22:16:46 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
: callback_test_8 "int" { "foo" } "cdecl" alien-indirect ;
|
2006-03-10 22:16:46 -05:00
|
|
|
|
2006-09-09 01:04:55 -04:00
|
|
|
[ 5 ] [ 10 2 make-foo callback-14 callback_test_8 ] unit-test
|
2019-10-18 09:05:04 -04:00
|
|
|
|
|
|
|
|
! Callback scheduling issue
|
|
|
|
|
: callback_test_9 "int" { } "cdecl" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
: callback-16
|
2019-10-18 09:05:06 -04:00
|
|
|
"int" { } "cdecl" [
|
2019-10-18 09:05:04 -04:00
|
|
|
yield 2
|
|
|
|
|
] alien-callback ;
|
|
|
|
|
|
|
|
|
|
: callback-15
|
2019-10-18 09:05:06 -04:00
|
|
|
"int" { } "cdecl" [
|
2019-10-18 09:05:04 -04:00
|
|
|
[ callback-16 callback_test_9 ] in-thread 3
|
|
|
|
|
] alien-callback ;
|
|
|
|
|
|
|
|
|
|
[ 3 ] [ callback-15 callback_test_9 ] unit-test
|
2019-10-18 09:05:06 -04:00
|
|
|
|
|
|
|
|
BEGIN-STRUCT: bar
|
|
|
|
|
FIELD: long x
|
|
|
|
|
FIELD: long y
|
|
|
|
|
FIELD: long z
|
|
|
|
|
END-STRUCT
|
|
|
|
|
|
|
|
|
|
: make-bar ( x y z -- bar )
|
|
|
|
|
"bar" <c-object>
|
|
|
|
|
[ set-bar-z ] keep
|
|
|
|
|
[ set-bar-y ] keep
|
|
|
|
|
[ set-bar-x ] keep ;
|
|
|
|
|
|
|
|
|
|
: callback-17
|
|
|
|
|
"bar" { "long" "long" "long" } "cdecl"
|
|
|
|
|
[ make-bar ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
: callback_test_10
|
|
|
|
|
"bar" { "long" "long" "long" } "cdecl" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
[ 1 2 3 ] [
|
|
|
|
|
1 2 3 callback-17 callback_test_10
|
|
|
|
|
dup bar-x over bar-y rot bar-z
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
: callback_test_11
|
|
|
|
|
"int" { "int" "int" "int" "int" } "stdcall" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
: callback-18
|
|
|
|
|
"int" { "int" "int" "int" "int" } "stdcall"
|
|
|
|
|
[ * + + ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
[ 25 ] [
|
|
|
|
|
2 3 4 5 callback-18 callback_test_11
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
: callback-19
|
|
|
|
|
"bar" { "long" "long" "long" } "stdcall"
|
|
|
|
|
[ make-bar ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
: callback_test_12
|
|
|
|
|
"bar" { "long" "long" "long" } "stdcall" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
[ 11 6 -7 ] [
|
|
|
|
|
11 6 -7 callback-19 callback_test_12
|
|
|
|
|
dup bar-x over bar-y rot bar-z
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
BEGIN-STRUCT: tiny
|
|
|
|
|
FIELD: int x
|
|
|
|
|
END-STRUCT
|
|
|
|
|
|
|
|
|
|
: callback-20
|
|
|
|
|
"tiny" { "int" } "cdecl" [ <int> ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
: callback_test_13
|
|
|
|
|
"tiny" { "int" } "cdecl" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
[ 176 ] [ 176 callback-20 callback_test_13 tiny-x ] unit-test
|
|
|
|
|
|
|
|
|
|
BEGIN-STRUCT: foo
|
|
|
|
|
FIELD: long x
|
|
|
|
|
FIELD: long y
|
|
|
|
|
END-STRUCT
|
|
|
|
|
|
|
|
|
|
: make-foo ( x y -- foo )
|
|
|
|
|
"foo" <c-object> [ set-foo-y ] keep [ set-foo-x ] keep ;
|
|
|
|
|
|
|
|
|
|
: callback-21
|
|
|
|
|
"foo" { "long" "long" } "cdecl"
|
|
|
|
|
[ make-foo ] alien-callback ;
|
|
|
|
|
|
|
|
|
|
: callback_test_14
|
|
|
|
|
"foo" { "long" "long" } "cdecl" alien-indirect ;
|
|
|
|
|
|
|
|
|
|
[ 69 73 ] [
|
|
|
|
|
69 73 callback-21 callback_test_14 dup foo-x swap foo-y
|
|
|
|
|
] unit-test
|