version 1.74, 2012/07/23 22:12:35
|
version 1.75, 2012/08/16 20:08:13
|
Line 320 drop
|
Line 320 drop
|
c, 0 c, ; |
c, 0 c, ; |
|
|
: parse-variable-type ( -- addr ) |
: parse-variable-type ( -- addr ) |
c-var c, here |
c-var c, here |
s" a" libcc-type c, 0 c, ; |
s" a" libcc-type c, 0 c, ; |
|
|
|
0 Value is-funptr? |
|
: parse-funptr-types ( "{libcc-type}" "--" "libcc-type" -- addr ) |
|
true to is-funptr? parse-function-types ; |
|
|
: type-letter ( n -- c ) |
: type-letter ( n -- c ) |
chars s" nadrfv" drop + c@ ; |
chars s" nadrfv" drop + c@ ; |
Line 473 create gen-wrapped-types
|
Line 477 create gen-wrapped-types
|
descriptor wrapper-function-name 2dup type drop free throw |
descriptor wrapper-function-name 2dup type drop free throw |
.\" (GFORTH_ARGS)\n" |
.\" (GFORTH_ARGS)\n" |
.\" {\n Cell MAYBE_UNUSED *sp = gforth_SP;\n Float MAYBE_UNUSED *fp = gforth_FP;\n " |
.\" {\n Cell MAYBE_UNUSED *sp = gforth_SP;\n Float MAYBE_UNUSED *fp = gforth_FP;\n " |
|
is-funptr? IF .\" Cell ptr = *gforth_SP++;\n" 0 to is-funptr? THEN |
pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n" |
pars c-name 2over count-stacks ret gen-wrapped-stmt .\" ;\n" |
?dup-if |
?dup-if |
." gforth_SP = sp+" .nb .\" ;\n" |
." gforth_SP = sp+" .nb .\" ;\n" |
Line 675 DEFER compile-wrapper-function ( -- )
|
Line 680 DEFER compile-wrapper-function ( -- )
|
\G address of @code{c-name}. |
\G address of @code{c-name}. |
['] parse-variable-type (c-function) ; |
['] parse-variable-type (c-function) ; |
|
|
|
: c-funptr ( "forth-name" "c-typecast" "@{type@}" "---" "type" -- ) \ gforth |
|
\G Define a Forth word @i{forth-name}. @i{Forth-name} has the |
|
\G specified stack effect and calls the C function pointer |
|
\G ptr using the typecast or struct access @code{c-typecast}. |
|
['] parse-funptr-types (c-function) ; |
|
|
: clear-libs ( -- ) \ gforth |
: clear-libs ( -- ) \ gforth |
\G Clear the list of libs |
\G Clear the list of libs |
c-source-file-id @ if |
c-source-file-id @ if |