edelib 2.0.0
|
00001 /* 00002 * $Id$ 00003 * 00004 * Scheme interpeter 00005 * Copyright (c) 2005-2011 edelib authors 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public License 00018 * along with this library. If not, see <http://www.gnu.org/licenses/>. 00019 */ 00020 00021 #ifndef __EDELIB_SCHEME_H__ 00022 #define __EDELIB_SCHEME_H__ 00023 00024 #ifndef SKIP_DOCS 00025 # include "ts/scheme.h" 00026 # include "ts/scheme-private.h" 00027 #endif 00028 00052 scheme *edelib_scheme_init(void); 00053 00058 #define edelib_scheme_init_raw scheme_init_new 00059 00064 #define edelib_scheme_deinit scheme_deinit 00065 00070 #define edelib_scheme_load_file scheme_load_file 00071 00076 #define edelib_scheme_load_string scheme_load_string 00077 00082 #define edelib_scheme_set_external_data scheme_set_external_data 00083 00088 #define edelib_scheme_get_external_data(sc) (sc)->ext_data 00089 00094 #define edelib_scheme_define scheme_define 00095 00100 #define edelib_scheme_call scheme_call 00101 00106 #define edelib_scheme_set_input_port_file scheme_set_input_port_file 00107 00112 #define edelib_scheme_set_output_port_file scheme_set_output_port_file 00113 00118 #define edelib_scheme_set_input_port_string scheme_set_input_port_string 00119 00124 #define edelib_scheme_set_output_port_string scheme_set_output_port_string 00125 00126 /* try to avoid vpr by using function like macros */ 00127 #define edelib_scheme_gensym(sc) (sc)->vptr->gensym(sc) 00128 #define edelib_scheme_cons(sc, a, b) (sc)->vptr->cons(sc, a, b) 00129 #define edelib_scheme_immutable_cons(sc, a, b) (sc)->vptr->immutable_cons(sc, a, b) 00130 #define edelib_scheme_reserve_cells(sc, n) (sc)->vptr->reserve_cells(sc, n) 00131 #define edelib_scheme_mk_int(sc, num) (sc)->vptr->mk_integer(sc, num) 00132 #define edelib_scheme_mk_double(sc, num) (sc)->vptr->mk_real(sc, num) 00133 #define edelib_scheme_mk_symbol(sc, sym) (sc)->vptr->mk_symbol(sc, sym) 00134 #define edelib_scheme_mk_string(sc, str) (sc)->vptr->mk_string(sc, str) 00135 #define edelib_scheme_mk_string_counted(sc, str) (sc)->vptr->mk_counted_string(sc, str) 00136 #define edelib_scheme_mk_character(sc, c) (sc)->vptr->mk_character(sc, c) 00137 #define edelib_scheme_mk_vector(sc, len) (sc)->vptr->mk_vector(sc, len) 00138 #define edelib_scheme_mk_foreign_func(sc, func) (sc)->vptr->mk_foreign_func(sc, func) 00139 #define edelib_scheme_putstr(sc, str) (sc)->vptr->putstr(sc, str) 00140 #define edelib_scheme_putcharacter(sc, c) (sc)->vptr->putcharacter(sc, c) 00141 00142 #define edelib_scheme_is_string(sc, p) (sc)->vptr->is_string(p) 00143 #define edelib_scheme_string_value(sc, p) (sc)->vptr->string_value(p) 00144 #define edelib_scheme_is_int(sc, p) (sc)->vptr->is_number(p) 00145 #define edelib_scheme_int_value(sc, p) (int)((sc)->vptr->ivalue(p)) 00146 #define edelib_scheme_is_double(sc, p) (sc)->vptr->is_real(p) 00147 #define edelib_scheme_double_value(sc, p) (sc)->vptr->rvalue(p) 00148 #define edelib_scheme_is_char(sc, p) (sc)->vptr->is_character(p) 00149 #define edelib_scheme_char_value(sc, p) (sc)->vptr->charvalue(p) 00150 #define edelib_scheme_is_vector(sc, p) (sc)->vptr->is_vector(p) 00151 #define edelib_scheme_vector_len(sc, p) (sc)->vptr->vector_length(p) 00152 #define edelib_scheme_vector_fill(sc, vec, v) (sc)->vptr->fill_vector(vec, v) 00153 #define edelib_scheme_vector_elem(sc, vec, i) (sc)->vptr->vector_elem(vec, i) 00154 #define edelib_scheme_vector_elem_set(sc, vec, i, newel) (sc)->vptr->set_vector_elem(vec, i, newel) 00155 #define edelib_scheme_is_port(sc, p) (sc)->vptr->is_port(p) 00156 #define edelib_scheme_is_pair(sc, p) (sc)->vptr->is_pair(p) 00157 #define edelib_scheme_pair_car(sc, p) (sc)->vptr->pair_car(p) 00158 #define edelib_scheme_pair_cdr(sc, p) (sc)->vptr->pair_cdr(p) 00159 #define edelib_scheme_car_set(sc, p, q) (sc)->vptr->set_car(p, q) 00160 #define edelib_scheme_cdr_set(sc, p, q) (sc)->vptr->set_cdr(p, q) 00161 #define edelib_scheme_is_symbol(sc, p) (sc)->vptr->is_symbol(p) 00162 #define edelib_scheme_symname(sc, p) (sc)->vptr->symname(p) 00163 #define edelib_scheme_is_syntax(sc, p) (sc)->vptr->is_syntax(p) 00164 #define edelib_scheme_syntaxname(sc, p) (sc)->vptr->syntaxname(p) 00165 #define edelib_scheme_is_proc(sc, p) (sc)->vptr->is_proc(p) 00166 #define edelib_scheme_is_macro(sc, p) (sc)->vptr->is_macro(p) 00167 #define edelib_scheme_is_foreign(sc, p) (sc)->vptr->is_foreign(p) 00168 #define edelib_scheme_closure_code(sc, p) (sc)->vptr->closure_code(p) 00169 #define edelib_scheme_closure_env(sc, p) (sc)->vptr->closure_env(p) 00170 00171 #define edelib_scheme_is_continuation(sc, p) (sc)->vptr->is_continuation(p) 00172 #define edelib_scheme_is_promise(sc, p) (sc)->vptr->is_promise(p) 00173 #define edelib_scheme_is_environment(sc, p) (sc)->vptr->is_environment(p) 00174 00175 #define edelib_scheme_is_immutable(sc, p) (sc)->vptr->is_immutable(p) 00176 #define edelib_scheme_set_immutable(sc, p) (sc)->vptr->setimmutable(p) 00177 00183 #define EDELIB_SCHEME_DEFINE(sc, func_ptr, func_name) \ 00184 sc->vptr->scheme_define(sc, sc->global_env, \ 00185 sc->vptr->mk_symbol(sc, func_name), \ 00186 sc->vptr->mk_foreign_func(sc, func_ptr)) 00187 00193 #define EDELIB_SCHEME_DEFINE2(sc, func_ptr, func_name, doc) \ 00194 do { \ 00195 scheme_load_string(sc, "(add-doc " #func_name "," #doc ")"); \ 00196 EDELIB_SCHEME_DEFINE(sc, func_name, func_ptr); \ 00197 } while(0) 00198 00199 #define EDELIB_SCHEME_OBJECT(sc) ((sc)->vptr) 00200 #define EDELIB_SCHEME_GLOBAL_ENV(sc) ((sc)->global_env) 00201 00207 #define EDELIB_SCHEME_IS_NIL(sc, var) ((var) == sc->NIL) 00208 00209 #endif