--- gforth/engine/libcc.h.in 2007/12/31 17:34:59 1.2 +++ gforth/engine/libcc.h.in 2012/09/28 12:32:09 1.17 @@ -1,12 +1,12 @@ /* header file for libcc-generated C code - Copyright (C) 2006,2007 Free Software Foundation, Inc. + Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. This file is part of Gforth. Gforth is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 + as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,20 +15,62 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + along with this program. If not, see http://www.gnu.org/licenses/. */ #include +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__ANDROID__) +#undef HAS_BACKLINK +#else +#define HAS_BACKLINK 1 +#endif + typedef CELL_TYPE Cell; +typedef unsigned char Char; typedef double Float; +typedef Char *Address; +typedef void **Xt; #define Clongest long long typedef unsigned Clongest UClongest; -extern Cell *gforth_SP; -extern Float *gforth_FP; +typedef struct { + Cell next_task; + Cell prev_task; + Cell save_task; + Cell* sp0; + Cell* rp0; + Float* fp0; + Address lp0; + Xt *throw_entry; +} user_area; + +#ifdef HAS_BACKLINK +extern __thread Cell *gforth_SP; +extern __thread Float *gforth_FP; +extern __thread Cell *gforth_RP; +extern __thread char *gforth_LP; +extern __thread char *gforth_UP; +extern void *gforth_engine(void *); +extern char *cstr(char *from, Cell size); +extern char *tilde_cstr(char *from, Cell size); +extern __thread void *throw_jmp_handler; +extern user_area* gforth_stacks(); +#define GFORTH_ARGS void +#else +#define gforth_SP *((Cell **)(gforth_pointers(0))) +#define gforth_FP *((Float **)(gforth_pointers(1))) +#define gforth_LP *((char **)(gforth_pointers(2))) +#define gforth_RP *((Cell **)(gforth_pointers(3))) +#define gforth_UP *((char **)(gforth_pointers(4))) +#define gforth_engine ((char *(*)(void *))gforth_pointers(5)) +#define cstr ((char *(*)(char *, Cell))gforth_pointers(6)) +#define tilde_cstr ((char *(*)(char *, Cell))gforth_pointers(7)) +#define throw_jmp_handler *((void**)(gforth_pointers(8))) +#define gforth_stacks ((user_area *(*)())gforth_pointers(9)) +#define GFORTH_ARGS void *(*gforth_pointers)(Cell) +#endif #define CELL_BITS (sizeof(Cell) * 8)