--- gforth/fflib.fs 2008/07/29 09:01:44 1.24 +++ gforth/fflib.fs 2009/12/31 15:32:35 1.29 @@ -1,6 +1,6 @@ \ lib.fs shared library support package 16aug03py -\ Copyright (C) 1995,1996,1997,1998,2000,2003,2005,2006,2007,2008 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,1998,2000,2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -26,6 +26,9 @@ s" callback" add-lib \c #include \c static av_alist alist; \c static va_alist gforth_clist; +\c #ifndef HAS_BACKLINK +\c static void **saved_gforth_pointers; +\c #endif \c static float frv; \c static int irv; \c static double drv; @@ -33,27 +36,31 @@ s" callback" add-lib \c static void * prv; \c typedef void *Label; \c typedef Label *Xt; -\c Label *gforth_engine(Xt *ip, Cell *sp, Cell *rp0, Float *fp, char *lp); \c \c void gforth_callback_ffcall(Xt* fcall, void * alist) \c { -\c /* save global valiables */ -\c Cell *rp = gforth_RP; -\c Cell *sp = gforth_SP; -\c Float *fp = gforth_FP; -\c char *lp = gforth_LP; -\c va_alist clist = gforth_clist; +\c #ifndef HAS_BACKLINK +\c void **gforth_pointers = saved_gforth_pointers; +\c #endif +\c { +\c /* save global variables */ +\c Cell *rp = gforth_RP; +\c Cell *sp = gforth_SP; +\c Float *fp = gforth_FP; +\c char *lp = gforth_LP; +\c va_alist clist = gforth_clist; \c -\c gforth_clist = (va_alist)alist; +\c gforth_clist = (va_alist)alist; \c -\c gforth_engine(fcall, sp, rp, fp, lp); +\c gforth_engine(fcall, sp, rp, fp, lp, gforth_UP); \c -\c /* restore global variables */ -\c gforth_RP = rp; -\c gforth_SP = sp; -\c gforth_FP = fp; -\c gforth_LP = lp; -\c gforth_clist = clist; +\c /* restore global variables */ +\c gforth_RP = rp; +\c gforth_SP = sp; +\c gforth_FP = fp; +\c gforth_LP = lp; +\c gforth_clist = clist; +\c } \c } \c #define av_start_void1(c_addr) av_start_void(alist, c_addr) @@ -251,6 +258,10 @@ DOES> ( -- ) dup thislib ! proc: ; DOES> decl, ind-call @ 0= IF symbol, THEN previous revarg off ind-call off ; +: func@ >body cell+ @ ; +: func' ' func@ ; +: [func'] postpone ['] postpone func@ ; immediate restrict + also c-decl definitions : revarg on ;