1 /* classes: h_files */ 2 3 #ifndef SCM_EVAL_H 4 #define SCM_EVAL_H 5 6 /* Copyright (C) 1995,1996,1998,1999,2000,2001,2002,2003,2004 7 * Free Software Foundation, Inc. 8 * 9 * This library is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * This library is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with this library; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 */ 23 24 25 26 #include "libguile/__scm.h" 27 28 #include "libguile/struct.h" 29 30 31 32 /* {Options} 33 */ 34 35 SCM_API scm_t_option scm_eval_opts[]; 36 37 #define SCM_EVAL_STACK scm_eval_opts[0].val 38 #define SCM_N_EVAL_OPTIONS 1 39 40 SCM_API long scm_eval_stack; 41 42 SCM_API scm_t_option scm_evaluator_trap_table[]; 43 44 SCM_API SCM scm_eval_options_interface (SCM setting); 45 46 #define SCM_TRAPS_P scm_evaluator_trap_table[0].val 47 #define SCM_ENTER_FRAME_P scm_evaluator_trap_table[1].val 48 #define SCM_APPLY_FRAME_P scm_evaluator_trap_table[2].val 49 #define SCM_EXIT_FRAME_P scm_evaluator_trap_table[3].val 50 #define SCM_ENTER_FRAME_HDLR (SCM_PACK (scm_evaluator_trap_table[4].val)) 51 #define SCM_APPLY_FRAME_HDLR (SCM_PACK (scm_evaluator_trap_table[5].val)) 52 #define SCM_EXIT_FRAME_HDLR (SCM_PACK (scm_evaluator_trap_table[6].val)) 53 #define SCM_N_EVALUATOR_TRAPS 7 54 55 56 57 /* {Ilocs} 58 * 59 * Ilocs are relative pointers into local environment structures. 60 * 61 */ 62 #define SCM_ILOCP(n) (SCM_ITAG8(n)==scm_tc8_iloc) 63 64 65 66 /* {Promises} 67 */ 68 69 #define SCM_F_PROMISE_COMPUTED (1L << 0) 70 #define SCM_PROMISE_COMPUTED_P(promise) \ 71 (SCM_F_PROMISE_COMPUTED & SCM_SMOB_FLAGS (promise)) 72 #define SCM_SET_PROMISE_COMPUTED(promise) \ 73 SCM_SET_SMOB_FLAGS ((promise), SCM_F_PROMISE_COMPUTED) 74 #define SCM_PROMISE_MUTEX SCM_SMOB_OBJECT_2 75 #define SCM_PROMISE_DATA SCM_SMOB_OBJECT 76 #define SCM_SET_PROMISE_DATA SCM_SET_SMOB_OBJECT 77 78 79 SCM_API scm_t_bits scm_tc16_promise; 80 81 82 83 /* {Evaluator} 84 */ 85 86 typedef SCM (*scm_t_trampoline_0) (SCM proc); 87 typedef SCM (*scm_t_trampoline_1) (SCM proc, SCM arg1); 88 typedef SCM (*scm_t_trampoline_2) (SCM proc, SCM arg1, SCM arg2); 89 90 91 92 #define SCM_EXTEND_ENV scm_acons 93 94 /*fixme* This should probably be removed throught the code. */ 95 96 #define SCM_TOP_LEVEL_LOOKUP_CLOSURE (scm_current_module_lookup_closure()) 97 98 99 100 SCM_API SCM scm_sym_and; 101 SCM_API SCM scm_sym_begin; 102 SCM_API SCM scm_sym_case; 103 SCM_API SCM scm_sym_cond; 104 SCM_API SCM scm_sym_define; 105 SCM_API SCM scm_sym_do; 106 SCM_API SCM scm_sym_if; 107 SCM_API SCM scm_sym_lambda; 108 SCM_API SCM scm_sym_let; 109 SCM_API SCM scm_sym_letstar; 110 SCM_API SCM scm_sym_letrec; 111 SCM_API SCM scm_sym_quote; 112 SCM_API SCM scm_sym_quasiquote; 113 SCM_API SCM scm_sym_unquote; 114 SCM_API SCM scm_sym_uq_splicing; 115 116 SCM_API SCM scm_sym_atapply; 117 SCM_API SCM scm_sym_atcall_cc; 118 SCM_API SCM scm_sym_at_call_with_values; 119 SCM_API SCM scm_sym_delay; 120 SCM_API SCM scm_sym_arrow; 121 SCM_API SCM scm_sym_else; 122 SCM_API SCM scm_sym_apply; 123 SCM_API SCM scm_sym_set_x; 124 SCM_API SCM scm_sym_args; 125 126 127 128 SCM_API SCM * scm_ilookup (SCM iloc, SCM env); 129 SCM_API SCM * scm_lookupcar (SCM vloc, SCM genv, int check); 130 SCM_API SCM scm_eval_car (SCM pair, SCM env); 131 SCM_API SCM scm_eval_body (SCM code, SCM env); 132 SCM_API SCM scm_eval_args (SCM i, SCM env, SCM proc); 133 SCM_API SCM scm_m_quote (SCM xorig, SCM env); 134 SCM_API SCM scm_m_begin (SCM xorig, SCM env); 135 SCM_API SCM scm_m_if (SCM xorig, SCM env); 136 SCM_API SCM scm_m_set_x (SCM xorig, SCM env); 137 SCM_API SCM scm_m_vref (SCM xorig, SCM env); 138 SCM_API SCM scm_m_vset (SCM xorig, SCM env); 139 SCM_API SCM scm_m_and (SCM xorig, SCM env); 140 SCM_API SCM scm_m_or (SCM xorig, SCM env); 141 SCM_API SCM scm_m_case (SCM xorig, SCM env); 142 SCM_API SCM scm_m_cond (SCM xorig, SCM env); 143 SCM_API SCM scm_m_lambda (SCM xorig, SCM env); 144 SCM_API SCM scm_m_letstar (SCM xorig, SCM env); 145 SCM_API SCM scm_m_do (SCM xorig, SCM env); 146 SCM_API SCM scm_m_quasiquote (SCM xorig, SCM env); 147 SCM_API SCM scm_m_delay (SCM xorig, SCM env); 148 SCM_API SCM scm_m_generalized_set_x (SCM xorig, SCM env); 149 SCM_API SCM scm_m_future (SCM xorig, SCM env); 150 SCM_API SCM scm_m_define (SCM x, SCM env); 151 SCM_API SCM scm_m_letrec (SCM xorig, SCM env); 152 SCM_API SCM scm_m_let (SCM xorig, SCM env); 153 SCM_API SCM scm_m_apply (SCM xorig, SCM env); 154 SCM_API SCM scm_m_cont (SCM xorig, SCM env); 155 #if SCM_ENABLE_ELISP 156 SCM_API SCM scm_m_nil_cond (SCM xorig, SCM env); 157 SCM_API SCM scm_m_atfop (SCM xorig, SCM env); 158 #endif /* SCM_ENABLE_ELISP */ 159 SCM_API SCM scm_m_atbind (SCM xorig, SCM env); 160 SCM_API SCM scm_m_atslot_ref (SCM xorig, SCM env); 161 SCM_API SCM scm_m_atslot_set_x (SCM xorig, SCM env); 162 SCM_API SCM scm_m_atdispatch (SCM xorig, SCM env); 163 SCM_API SCM scm_m_at_call_with_values (SCM xorig, SCM env); 164 SCM_API int scm_badargsp (SCM formals, SCM args); 165 SCM_API SCM scm_call_0 (SCM proc); 166 SCM_API SCM scm_call_1 (SCM proc, SCM arg1); 167 SCM_API SCM scm_call_2 (SCM proc, SCM arg1, SCM arg2); 168 SCM_API SCM scm_call_3 (SCM proc, SCM arg1, SCM arg2, SCM arg3); 169 SCM_API SCM scm_call_4 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4); 170 SCM_API SCM scm_apply_0 (SCM proc, SCM args); 171 SCM_API SCM scm_apply_1 (SCM proc, SCM arg1, SCM args); 172 SCM_API SCM scm_apply_2 (SCM proc, SCM arg1, SCM arg2, SCM args); 173 SCM_API SCM scm_apply_3 (SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM args); 174 SCM_API SCM scm_i_call_closure_0 (SCM proc); 175 SCM_API scm_t_trampoline_0 scm_trampoline_0 (SCM proc); 176 SCM_API scm_t_trampoline_1 scm_trampoline_1 (SCM proc); 177 SCM_API scm_t_trampoline_2 scm_trampoline_2 (SCM proc); 178 SCM_API SCM scm_nconc2last (SCM lst); 179 SCM_API SCM scm_apply (SCM proc, SCM arg1, SCM args); 180 SCM_API SCM scm_dapply (SCM proc, SCM arg1, SCM args); 181 SCM_API SCM scm_map (SCM proc, SCM arg1, SCM args); 182 SCM_API SCM scm_for_each (SCM proc, SCM arg1, SCM args); 183 SCM_API SCM scm_closure (SCM code, SCM env); 184 SCM_API SCM scm_makprom (SCM code); 185 SCM_API SCM scm_force (SCM x); 186 SCM_API SCM scm_promise_p (SCM x); 187 SCM_API SCM scm_cons_source (SCM xorig, SCM x, SCM y); 188 SCM_API SCM scm_copy_tree (SCM obj); 189 SCM_API SCM scm_i_eval_x (SCM exp, SCM env); 190 SCM_API SCM scm_i_eval (SCM exp, SCM env); 191 SCM_API SCM scm_primitive_eval (SCM exp); 192 SCM_API SCM scm_primitive_eval_x (SCM exp); 193 SCM_API SCM scm_eval (SCM exp, SCM module); 194 SCM_API SCM scm_eval_x (SCM exp, SCM module); 195 196 SCM_API void scm_i_print_iloc (SCM /*iloc*/, SCM /*port*/); 197 SCM_API void scm_i_print_isym (SCM /*isym*/, SCM /*port*/); 198 SCM_API SCM scm_i_unmemocopy_expr (SCM expr, SCM env); 199 SCM_API SCM scm_i_unmemocopy_body (SCM forms, SCM env); 200 SCM_API void scm_init_eval (void); 201 202 203 #if (SCM_ENABLE_DEPRECATED == 1) 204 205 SCM_API SCM scm_m_undefine (SCM x, SCM env); 206 207 /* Deprecated in guile 1.7.0 on 2003-11-09. */ 208 SCM_API SCM scm_m_expand_body (SCM xorig, SCM env); 209 210 /* Deprecated in guile 1.7.0 on 2003-11-16. */ 211 SCM_API SCM scm_unmemocar (SCM form, SCM env); 212 SCM_API SCM scm_macroexp (SCM x, SCM env); 213 214 /* Deprecated in guile 1.7.0 on 2004-03-29. */ 215 SCM_API SCM scm_ceval (SCM x, SCM env); 216 SCM_API SCM scm_deval (SCM x, SCM env); 217 SCM_API SCM (*scm_ceval_ptr) (SCM x, SCM env); 218 219 #endif 220 221 222 #endif /* SCM_EVAL_H */ 223 224 /* 225 Local Variables: 226 c-file-style: "gnu" 227 End: 228 */ 229