mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
* libguile/fluids.c (scm_i_fluid_ref): New internal function. (scm_fluid_ref): Use scm_i_fluid_ref. * libguile/intrinsics.h: * libguile/intrinsics.c (current_module): New intrinsic. * libguile/modules.c (scm_i_current_module): New internal function. (scm_current_module): Use new internal function. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add current-module as an intrinsic primitive. * module/system/vm/assembler.scm (define-scm<-thread-intrinsic): (current-module): Arrange to compile to intrinsic call.
125 lines
4.8 KiB
C
125 lines
4.8 KiB
C
#ifndef SCM_MODULES_H
|
||
#define SCM_MODULES_H
|
||
|
||
/* Copyright 1998,2000-2003,2006-2008,2011-2012,2018
|
||
Free Software Foundation, Inc.
|
||
|
||
This file is part of Guile.
|
||
|
||
Guile is free software: you can redistribute it and/or modify it
|
||
under the terms of the GNU Lesser General Public License as published
|
||
by the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
Guile is distributed in the hope that it will be useful, but WITHOUT
|
||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||
License for more details.
|
||
|
||
You should have received a copy of the GNU Lesser General Public
|
||
License along with Guile. If not, see
|
||
<https://www.gnu.org/licenses/>. */
|
||
|
||
|
||
|
||
#include "libguile/gc.h"
|
||
|
||
|
||
|
||
|
||
SCM_API int scm_module_system_booted_p;
|
||
SCM_API scm_t_bits scm_module_tag;
|
||
|
||
#define SCM_MODULEP(OBJ) \
|
||
(!SCM_IMP (OBJ) && SCM_CELL_TYPE (OBJ) == scm_module_tag)
|
||
|
||
#define SCM_VALIDATE_MODULE(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, MODULEP, "module")
|
||
|
||
/* NOTE: Indexes of module fields are dependent upon the definition of
|
||
* module-type in boot-9.scm.
|
||
*/
|
||
|
||
#define scm_module_index_obarray 0
|
||
#define scm_module_index_uses 1
|
||
#define scm_module_index_binder 2
|
||
#define scm_module_index_eval_closure 3
|
||
#define scm_module_index_transformer 4
|
||
#define scm_module_index_duplicate_handlers 7
|
||
#define scm_module_index_import_obarray 8
|
||
|
||
#define SCM_MODULE_OBARRAY(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_obarray])
|
||
#define SCM_MODULE_USES(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_uses])
|
||
#define SCM_MODULE_BINDER(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_binder])
|
||
#define SCM_MODULE_EVAL_CLOSURE(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_eval_closure])
|
||
#define SCM_MODULE_TRANSFORMER(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_transformer])
|
||
#define SCM_MODULE_DUPLICATE_HANDLERS(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_duplicate_handlers])
|
||
#define SCM_MODULE_IMPORT_OBARRAY(module) \
|
||
SCM_PACK (SCM_STRUCT_DATA (module)[scm_module_index_import_obarray])
|
||
|
||
|
||
|
||
SCM_API SCM scm_current_module (void);
|
||
SCM_INTERNAL SCM scm_i_current_module (scm_thread *thread);
|
||
SCM_API SCM scm_the_root_module (void);
|
||
SCM_API SCM scm_interaction_environment (void);
|
||
SCM_API SCM scm_set_current_module (SCM module);
|
||
|
||
SCM_API SCM scm_c_call_with_current_module (SCM module,
|
||
SCM (*func)(void *), void *data);
|
||
SCM_API void scm_dynwind_current_module (SCM module);
|
||
|
||
SCM_API SCM scm_module_variable (SCM module, SCM sym);
|
||
SCM_API SCM scm_module_local_variable (SCM module, SCM sym);
|
||
SCM_API SCM scm_module_ensure_local_variable (SCM module, SCM sym);
|
||
|
||
SCM_API SCM scm_c_lookup (const char *name);
|
||
SCM_API SCM scm_c_define (const char *name, SCM val);
|
||
SCM_API SCM scm_lookup (SCM symbol);
|
||
SCM_API SCM scm_define (SCM symbol, SCM val);
|
||
|
||
SCM_API SCM scm_c_module_lookup (SCM module, const char *name);
|
||
SCM_API SCM scm_c_module_define (SCM module, const char *name, SCM val);
|
||
SCM_API SCM scm_module_lookup (SCM module, SCM symbol);
|
||
SCM_API SCM scm_module_define (SCM module, SCM symbol, SCM val);
|
||
SCM_API SCM scm_module_export (SCM module, SCM symbol_list);
|
||
SCM_API SCM scm_module_reverse_lookup (SCM module, SCM variable);
|
||
|
||
SCM_API SCM scm_public_variable (SCM module_name, SCM name);
|
||
SCM_API SCM scm_private_variable (SCM module_name, SCM name);
|
||
SCM_API SCM scm_c_public_variable (const char *module_name, const char *name);
|
||
SCM_API SCM scm_c_private_variable (const char *module_name, const char *name);
|
||
|
||
SCM_API SCM scm_public_lookup (SCM module_name, SCM name);
|
||
SCM_API SCM scm_private_lookup (SCM module_name, SCM name);
|
||
SCM_API SCM scm_c_public_lookup (const char *module_name, const char *name);
|
||
SCM_API SCM scm_c_private_lookup (const char *module_name, const char *name);
|
||
|
||
SCM_API SCM scm_public_ref (SCM module_name, SCM name);
|
||
SCM_API SCM scm_private_ref (SCM module_name, SCM name);
|
||
SCM_API SCM scm_c_public_ref (const char *module_name, const char *name);
|
||
SCM_API SCM scm_c_private_ref (const char *module_name, const char *name);
|
||
|
||
SCM_API SCM scm_c_resolve_module (const char *name);
|
||
SCM_API SCM scm_resolve_module (SCM name);
|
||
SCM_API SCM scm_maybe_resolve_module (SCM name);
|
||
SCM_API SCM scm_c_define_module (const char *name,
|
||
void (*init)(void *), void *data);
|
||
SCM_API void scm_c_use_module (const char *name);
|
||
SCM_API void scm_c_export (const char *name, ...);
|
||
|
||
SCM_API SCM scm_module_public_interface (SCM module);
|
||
SCM_API SCM scm_module_import_interface (SCM module, SCM sym);
|
||
SCM_API SCM scm_module_transformer (SCM module);
|
||
SCM_API SCM scm_current_module_transformer (void);
|
||
SCM_API SCM scm_get_pre_modules_obarray (void);
|
||
|
||
SCM_INTERNAL void scm_modules_prehistory (void);
|
||
SCM_INTERNAL void scm_init_modules (void);
|
||
|
||
#endif /* SCM_MODULES_H */
|