home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / lisp / gcl-1.000 / gcl-1 / gcl-1.0 / h / bds.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-07  |  1.6 KB  |  67 lines

  1. /*
  2.  Copyright (C) 1994 M. Hagiya, W. Schelter, T. Yuasa
  3.  
  4. This file is part of GNU Common Lisp, herein referred to as GCL
  5.  
  6. GCL is free software; you can redistribute it and/or modify it under
  7. the terms of the GNU LIBRARY GENERAL PUBLIC LICENSE as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GCL is distributed in the hope that it will be useful, but WITHOUT
  12. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public 
  14. License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public License 
  17. along with GCL; see the file COPYING.  If not, write to the Free Software
  18. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  
  20. */
  21.  
  22. /*
  23.     bds.h
  24.  
  25.     bind stack
  26. */
  27.  
  28. #define BDSSIZE        1024
  29. #define    BDSGETA        40
  30.  
  31. struct bds_bd {
  32.     object    bds_sym;    /*  symbol  */
  33.     object    bds_val;    /*  previous value of the symbol  */
  34. };
  35.  
  36. struct bds_bd bind_stack[BDSSIZE + BDSGETA + BDSGETA];
  37.  
  38. typedef struct bds_bd *bds_ptr;
  39.  
  40. bds_ptr bds_org;
  41.  
  42. bds_ptr bds_limit;
  43.  
  44. bds_ptr bds_top;        /*  bind stack top  */
  45.  
  46. #ifdef KCLOVM
  47.  
  48. /* for multiprocessing */
  49. struct bds_bd save_bind_stack[BDSSIZE + BDSGETA + BDSGETA];
  50. bds_ptr bds_save_org;
  51. bds_ptr bds_save_limit;
  52. bds_ptr bds_save_top;
  53.  
  54. #endif
  55.  
  56. #define    bds_check  \
  57.     if (bds_top >= bds_limit)  \
  58.         bds_overflow()
  59.  
  60. #define    bds_bind(sym, val)  \
  61.     (++bds_top)->bds_sym = (sym);  \
  62.     bds_top->bds_val = (sym)->s.s_dbind;  \
  63.     (sym)->s.s_dbind = (val)
  64.  
  65. #define    bds_unwind1  \
  66.     ((bds_top->bds_sym)->s.s_dbind = bds_top->bds_val, --bds_top)
  67.