1 /* classes: h_files */ 2 3 #ifndef SCM_MODULES_H 4 #define SCM_MODULES_H 5 6 /* Copyright (C) 1998, 2000, 2001, 2002, 2003, 2006, 2007, 2008, 2011, 2012 Free Software Foundation, Inc. 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public License 10 * as published by the Free Software Foundation; either version 3 of 11 * the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 21 * 02110-1301 USA 22 */ 23 24 25 26 #include "libguile/__scm.h" 27 28 #include "libguile/validate.h" 29 30 31 32 SCM_API int scm_module_system_booted_p; 33 SCM_API scm_t_bits scm_module_tag; 34 35 #define SCM_MODULEP(OBJ) \ 36 (!SCM_IMP (OBJ) && SCM_CELL_TYPE (OBJ) == scm_module_tag) 37 38 #define SCM_VALIDATE_MODULE(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, MODULEP, "module") 39 40 /* NOTE: Indexes of module fields are dependent upon the definition of 41 * module-type in boot-9.scm. 42 */ 43 44 #define scm_module_index_obarray 0 45 #define scm_module_index_uses 1 46 #define scm_module_index_binder 2 47 #define scm_module_index_eval_closure 3 48 #define scm_module_index_transformer 4 49 #define scm_module_index_duplicate_handlers 7 50 #define scm_module_index_import_obarray 8 51 52 #define SCM_MODULE_OBARRAY(module) \ 53 SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_obarray]) 54 #define SCM_MODULE_USES(module) \ 55 SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_uses]) 56 #define SCM_MODULE_BINDER(module) \ 57 SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_binder]) 58 #define SCM_MODULE_EVAL_CLOSURE(module) \ 59 SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_eval_closure]) 60 #define SCM_MODULE_TRANSFORMER(module) \ 61 SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_transformer]) 62 #define SCM_MODULE_DUPLICATE_HANDLERS(module) \ 63 SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_duplicate_handlers]) 64 #define SCM_MODULE_IMPORT_OBARRAY(module) \ 65 SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_import_obarray]) 66 67 68 69 SCM_API SCM scm_current_module (void); 70 SCM_API SCM scm_the_root_module (void); 71 SCM_API SCM scm_interaction_environment (void); 72 SCM_API SCM scm_set_current_module (SCM module); 73 74 SCM_API SCM scm_c_call_with_current_module (SCM module, 75 SCM (*func)(void *), void *data); 76 SCM_API void scm_dynwind_current_module (SCM module); 77 78 SCM_API SCM scm_module_variable (SCM module, SCM sym); 79 SCM_API SCM scm_module_local_variable (SCM module, SCM sym); 80 SCM_API SCM scm_module_ensure_local_variable (SCM module, SCM sym); 81 82 SCM_API SCM scm_c_lookup (const char *name); 83 SCM_API SCM scm_c_define (const char *name, SCM val); 84 SCM_API SCM scm_lookup (SCM symbol); 85 SCM_API SCM scm_define (SCM symbol, SCM val); 86 87 SCM_API SCM scm_c_module_lookup (SCM module, const char *name); 88 SCM_API SCM scm_c_module_define (SCM module, const char *name, SCM val); 89 SCM_API SCM scm_module_lookup (SCM module, SCM symbol); 90 SCM_API SCM scm_module_define (SCM module, SCM symbol, SCM val); 91 SCM_API SCM scm_module_export (SCM module, SCM symbol_list); 92 SCM_API SCM scm_module_reverse_lookup (SCM module, SCM variable); 93 94 SCM_API SCM scm_public_variable (SCM module_name, SCM name); 95 SCM_API SCM scm_private_variable (SCM module_name, SCM name); 96 SCM_API SCM scm_c_public_variable (const char *module_name, const char *name); 97 SCM_API SCM scm_c_private_variable (const char *module_name, const char *name); 98 99 SCM_API SCM scm_public_lookup (SCM module_name, SCM name); 100 SCM_API SCM scm_private_lookup (SCM module_name, SCM name); 101 SCM_API SCM scm_c_public_lookup (const char *module_name, const char *name); 102 SCM_API SCM scm_c_private_lookup (const char *module_name, const char *name); 103 104 SCM_API SCM scm_public_ref (SCM module_name, SCM name); 105 SCM_API SCM scm_private_ref (SCM module_name, SCM name); 106 SCM_API SCM scm_c_public_ref (const char *module_name, const char *name); 107 SCM_API SCM scm_c_private_ref (const char *module_name, const char *name); 108 109 SCM_API SCM scm_c_resolve_module (const char *name); 110 SCM_API SCM scm_resolve_module (SCM name); 111 SCM_API SCM scm_c_define_module (const char *name, 112 void (*init)(void *), void *data); 113 SCM_API void scm_c_use_module (const char *name); 114 SCM_API void scm_c_export (const char *name, ...); 115 116 SCM_API SCM scm_module_public_interface (SCM module); 117 SCM_API SCM scm_module_import_interface (SCM module, SCM sym); 118 SCM_API SCM scm_module_transformer (SCM module); 119 SCM_API SCM scm_current_module_transformer (void); 120 SCM_API SCM scm_get_pre_modules_obarray (void); 121 122 SCM_INTERNAL void scm_modules_prehistory (void); 123 SCM_INTERNAL void scm_init_modules (void); 124 125 #endif /* SCM_MODULES_H */ 126 127 /* 128 Local Variables: 129 c-file-style: "gnu" 130 End: 131 */ 132