home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_guile.idb / usr / freeware / include / libguile / eval.h.z / eval.h
Encoding:
C/C++ Source or Header  |  1999-04-16  |  7.1 KB  |  198 lines

  1. /* classes: h_files */
  2.  
  3. #ifndef EVALH
  4. #define EVALH
  5. /*    Copyright (C) 1995,1996,1998 Free Software Foundation, Inc.
  6.  * 
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License as published by
  9.  * the Free Software Foundation; either version 2, or (at your option)
  10.  * any later version.
  11.  * 
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  * 
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this software; see the file COPYING.  If not, write to
  19.  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  20.  * Boston, MA 02111-1307 USA
  21.  *
  22.  * As a special exception, the Free Software Foundation gives permission
  23.  * for additional uses of the text contained in its release of GUILE.
  24.  *
  25.  * The exception is that, if you link the GUILE library with other files
  26.  * to produce an executable, this does not by itself cause the
  27.  * resulting executable to be covered by the GNU General Public License.
  28.  * Your use of that executable is in no way restricted on account of
  29.  * linking the GUILE library code into it.
  30.  *
  31.  * This exception does not however invalidate any other reasons why
  32.  * the executable file might be covered by the GNU General Public License.
  33.  *
  34.  * This exception applies only to the code released by the
  35.  * Free Software Foundation under the name GUILE.  If you copy
  36.  * code from other Free Software Foundation releases into a copy of
  37.  * GUILE, as the General Public License permits, the exception does
  38.  * not apply to the code that you add in this way.  To avoid misleading
  39.  * anyone as to the status of such modified files, you must delete
  40.  * this exception notice from them.
  41.  *
  42.  * If you write modifications of your own for GUILE, it is your choice
  43.  * whether to permit this exception to apply to your modifications.
  44.  * If you do not wish that, delete this exception notice.  */
  45.  
  46.  
  47. #include "libguile/__scm.h"
  48.  
  49.  
  50.  
  51. /* {Options}
  52.  */
  53.  
  54. extern scm_option scm_eval_opts[];
  55.  
  56. #define SCM_EVAL_STACK           scm_eval_opts[0].val
  57. #define SCM_N_EVAL_OPTIONS 1
  58.  
  59. extern int scm_eval_stack;
  60.  
  61. extern scm_option scm_evaluator_trap_table[];
  62.  
  63. extern SCM scm_eval_options_interface SCM_P ((SCM setting));
  64.  
  65. #define SCM_TRAPS_P           scm_evaluator_trap_table[0].val
  66. #define SCM_ENTER_FRAME_P      scm_evaluator_trap_table[1].val
  67. #define SCM_APPLY_FRAME_P      scm_evaluator_trap_table[2].val
  68. #define SCM_EXIT_FRAME_P       scm_evaluator_trap_table[3].val
  69. #define SCM_N_EVALUATOR_TRAPS 4
  70.  
  71.  
  72.  
  73. /* {Ilocs}
  74.  *
  75.  * Ilocs are relative pointers into local environment structures.
  76.  * 
  77.  */
  78. #define SCM_ILOCP(n)        (SCM_ITAG8(n)==scm_tc8_iloc)
  79. #define SCM_ILOC00        SCM_MAKE_ITAG8(0L, scm_tc8_iloc)
  80. #define SCM_IDINC        (0x00100000L)
  81. #define SCM_ICDR        (0x00080000L)
  82. #define SCM_IFRINC        (0x00000100L)
  83. #define SCM_IDSTMSK        (-SCM_IDINC)
  84. #define SCM_IFRAME(n)         ((int)((SCM_ICDR-SCM_IFRINC)>>8) & ((int)(n)>>8))
  85. #define SCM_IDIST(n)         (((unsigned long)(n))>>20)
  86. #define SCM_ICDRP(n)         (SCM_ICDR & (n))
  87.  
  88.  
  89.  
  90.  
  91. /* {Evaluator}
  92.  *
  93.  * For an explanation of symbols containing "EVAL", see beginning of eval.c.
  94.  */
  95. #ifdef DEBUG_EXTENSIONS
  96. #define XEVAL(x, env) (SCM_IMP(x) \
  97.               ? (x) \
  98.               : (*scm_ceval_ptr) ((x), (env)))
  99. #else
  100. #define XEVAL(x, env) (SCM_IMP(x)?(x):scm_ceval((x), (env)))
  101. #endif /* DEBUG_EXTENSIONS */
  102.  
  103. #define SCM_CEVAL scm_ceval
  104. #define SIDEVAL(x, env) if SCM_NIMP(x) SCM_CEVAL((x), (env))
  105.  
  106.  
  107.  
  108. #define SCM_EXTEND_ENV scm_acons
  109.  
  110.  
  111. extern SCM scm_i_dot;
  112. extern SCM scm_i_quote;
  113. extern SCM scm_i_quasiquote;
  114. extern SCM scm_i_lambda;
  115. extern SCM scm_i_let;
  116. extern SCM scm_i_arrow;
  117. extern SCM scm_i_else;
  118. extern SCM scm_i_unquote;
  119. extern SCM scm_i_uq_splicing;
  120. extern SCM scm_i_apply;
  121.  
  122. extern long scm_tc16_macro;
  123.  
  124. /* A resolved global variable reference in the CAR position
  125.  * of a list is stored (in code only) as a pointer to a pair with a 
  126.  * tag of 1.  This is called a "gloc".
  127.  */
  128.  
  129. #define SCM_GLOC_SYM(x) (SCM_CAR((x)-1L))
  130. #define SCM_GLOC_VAL(x) (SCM_CDR((x)-1L))
  131. #define SCM_GLOC_VAL_LOC(x) (SCM_CDRLOC((x)-1L))
  132.  
  133.  
  134.  
  135. extern SCM * scm_ilookup SCM_P ((SCM iloc, SCM env));
  136. extern SCM * scm_lookupcar SCM_P ((SCM vloc, SCM genv));
  137. extern SCM scm_unmemocar SCM_P ((SCM form, SCM env));
  138. extern SCM scm_unmemocopy SCM_P ((SCM form, SCM env));
  139. extern SCM scm_eval_car SCM_P ((SCM pair, SCM env));
  140. extern SCM scm_eval_args SCM_P ((SCM i, SCM env, SCM proc));
  141. extern SCM scm_deval_args SCM_P ((SCM l, SCM env, SCM proc, SCM *lloc));
  142. extern SCM scm_m_quote SCM_P ((SCM xorig, SCM env));
  143. extern SCM scm_m_begin SCM_P ((SCM xorig, SCM env));
  144. extern SCM scm_m_if SCM_P ((SCM xorig, SCM env));
  145. extern SCM scm_m_set SCM_P ((SCM xorig, SCM env));
  146. extern SCM scm_m_vref SCM_P ((SCM xorig, SCM env));
  147. extern SCM scm_m_vset SCM_P ((SCM xorig, SCM env));
  148. extern SCM scm_m_and SCM_P ((SCM xorig, SCM env));
  149. extern SCM scm_m_or SCM_P ((SCM xorig, SCM env));
  150. extern SCM scm_m_case SCM_P ((SCM xorig, SCM env));
  151. extern SCM scm_m_cond SCM_P ((SCM xorig, SCM env));
  152. extern SCM scm_m_lambda SCM_P ((SCM xorig, SCM env));
  153. extern SCM scm_m_letstar SCM_P ((SCM xorig, SCM env));
  154. extern SCM scm_m_do SCM_P ((SCM xorig, SCM env));
  155. extern SCM scm_m_quasiquote SCM_P ((SCM xorig, SCM env));
  156. extern SCM scm_m_delay SCM_P ((SCM xorig, SCM env));
  157. extern SCM scm_m_define SCM_P ((SCM x, SCM env));
  158. extern SCM scm_m_letrec SCM_P ((SCM xorig, SCM env));
  159. extern SCM scm_m_let SCM_P ((SCM xorig, SCM env));
  160. extern SCM scm_m_apply SCM_P ((SCM xorig, SCM env));
  161. extern SCM scm_m_cont SCM_P ((SCM xorig, SCM env));
  162. extern SCM scm_m_undefine SCM_P ((SCM x, SCM env));
  163. extern int scm_badargsp SCM_P ((SCM formals, SCM args));
  164. extern SCM scm_ceval SCM_P ((SCM x, SCM env));
  165. extern SCM scm_deval SCM_P ((SCM x, SCM env));
  166. extern SCM scm_procedure_documentation SCM_P ((SCM proc));
  167. extern SCM scm_nconc2last SCM_P ((SCM lst));
  168. extern SCM scm_apply SCM_P ((SCM proc, SCM arg1, SCM args));
  169. extern SCM scm_dapply SCM_P ((SCM proc, SCM arg1, SCM args));
  170. extern SCM SCM_APPLY SCM_P ((SCM proc, SCM arg1, SCM args));
  171. extern SCM scm_map SCM_P ((SCM proc, SCM arg1, SCM args));
  172. extern SCM scm_for_each SCM_P ((SCM proc, SCM arg1, SCM args));
  173. extern SCM scm_closure SCM_P ((SCM code, SCM env));
  174. extern SCM scm_makprom SCM_P ((SCM code));
  175. extern SCM scm_makacro SCM_P ((SCM code));
  176. extern SCM scm_makmacro SCM_P ((SCM code));
  177. extern SCM scm_makmmacro SCM_P ((SCM code));
  178. extern SCM scm_macro_p SCM_P ((SCM obj));
  179. extern SCM scm_macro_type SCM_P ((SCM m));
  180. extern SCM scm_macro_name SCM_P ((SCM m));
  181. extern SCM scm_macro_transformer SCM_P ((SCM m));
  182. extern SCM scm_force SCM_P ((SCM x));
  183. extern SCM scm_promise_p SCM_P ((SCM x));
  184. extern SCM scm_copy_tree SCM_P ((SCM obj));
  185. extern SCM scm_eval_3 SCM_P ((SCM obj, int copyp, SCM env));
  186. extern SCM scm_top_level_env SCM_P ((SCM thunk));
  187. extern SCM scm_eval2 SCM_P ((SCM obj, SCM env_thunk));
  188. extern SCM scm_eval SCM_P ((SCM obj));
  189. extern SCM scm_eval_x SCM_P ((SCM obj));
  190. extern SCM scm_macro_eval_x SCM_P ((SCM exp, SCM env));
  191. extern SCM scm_definedp SCM_P ((SCM sym));
  192. extern SCM scm_make_synt SCM_P ((char *name,
  193.                  SCM (*macroizer) (SCM),
  194.                  SCM (*fcn) ()));
  195. extern void scm_init_eval SCM_P ((void));
  196.  
  197. #endif  /* EVALH */
  198.