diff options
author | John Lenz <jlenz2@math.uiuc.edu> | 2005-02-01 00:08:24 +0000 |
---|---|---|
committer | John Lenz <jlenz2@math.uiuc.edu> | 2005-02-01 00:08:24 +0000 |
commit | c3338b1a1686503721583a9e53a2f78a7a88731f (patch) | |
tree | bd4b02a8e82f457a2324d80c4755eb1418a9a9e1 /Lib/mzscheme | |
parent | 0f2ed8e65544fe8c284035008ce0e987df8ba81c (diff) | |
download | swig-c3338b1a1686503721583a9e53a2f78a7a88731f.tar.gz |
- Improve the runtime type sytesm
- Update all languages to new type system
- Add DohSortList function
- Fix mzscheme Examples/Makefile
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6930 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Lib/mzscheme')
-rw-r--r-- | Lib/mzscheme/mzrun.swg | 92 | ||||
-rw-r--r-- | Lib/mzscheme/mzscheme.swg | 17 | ||||
-rw-r--r-- | Lib/mzscheme/typemaps.i | 2 |
3 files changed, 64 insertions, 47 deletions
diff --git a/Lib/mzscheme/mzrun.swg b/Lib/mzscheme/mzrun.swg index 609384d16..dc4e04112 100644 --- a/Lib/mzscheme/mzrun.swg +++ b/Lib/mzscheme/mzrun.swg @@ -23,6 +23,11 @@ extern "C" { #define SWIG_MustGetPtr(s, type, argnum, flags) \ SWIG_MzScheme_MustGetPtr(s, type, argnum, flags, FUNC_NAME, argc, argv) +/* Runtime API */ +#define SWIG_GetModule(clientdata) SWIG_MzScheme_GetModule((Scheme_Env *)(clientdata)) +#define SWIG_SetModule(clientdata, pointer) SWIG_MzScheme_SetModule((Scheme_Env *) (clientdata), pointer) +#define SWIG_MODULE_CLIENTDATA_TYPE Scheme_Env * + /* MzScheme-specific SWIG API */ #define SWIG_malloc(size) SWIG_MzScheme_Malloc(size, FUNC_NAME) @@ -39,43 +44,9 @@ struct swig_mz_proxy { void *object; }; -/* The interpreter will store a pointer to this structure in a global - variable called swig-runtime-data-type-pointer. The instance of this - struct is only used if no other module has yet been loaded */ -struct swig_mzscheme_runtime_data { - swig_type_info **handle; - Scheme_Type type; -}; -static struct swig_mzscheme_runtime_data swig_mzscheme_runtime_data; - static Scheme_Type swig_type; static void -SWIG_MzScheme_LookupTypePointer(Scheme_Env *env) { - Scheme_Object *pointer, *symbol; - struct swig_mzscheme_runtime_data *data; - - /* first check if pointer already created */ - symbol = scheme_intern_symbol("swig-runtime-data-type-pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); - pointer = scheme_lookup_global(symbol, env); - if (pointer && SCHEME_CPTRP(pointer)) { - data = (struct swig_mzscheme_runtime_data *) SCHEME_CPTR_VAL(pointer); - swig_type_list_handle = data->handle; - swig_type = data->type; - } else { - /* create a new type for wrapped pointer values */ - swig_type = scheme_make_type((char *)"swig"); - swig_mzscheme_runtime_data.handle = swig_type_list_handle; - swig_mzscheme_runtime_data.type = swig_type; - - /* create a new pointer */ - pointer = scheme_make_cptr((void *) &swig_mzscheme_runtime_data, "swig_mzscheme_runtime_data"); - scheme_add_global_symbol(symbol, pointer, env); - } -} - - -static void mz_free_swig(void *p, void *data) { struct swig_mz_proxy *proxy = (struct swig_mz_proxy *) p; if (SCHEME_NULLP((Scheme_Object*)p) || SCHEME_TYPE((Scheme_Object*)p) != swig_type) @@ -102,7 +73,7 @@ SWIG_MzScheme_NewPointerObj(void *ptr, swig_type_info *type, int owner) { static int SWIG_MzScheme_ConvertPtr(Scheme_Object *s, void **result, swig_type_info *type, int flags) { - swig_type_info *cast; + swig_cast_info *cast; if (SCHEME_NULLP(s)) { *result = NULL; @@ -192,7 +163,58 @@ SWIG_MzScheme_new_scheme_struct (Scheme_Env* env, const char* basename, return new_type; } + +/* The interpreter will store a pointer to this structure in a global + variable called swig-runtime-data-type-pointer. The instance of this + struct is only used if no other module has yet been loaded */ +struct swig_mzscheme_runtime_data { + swig_module_info *module_head; + Scheme_Type type; +}; +static struct swig_mzscheme_runtime_data swig_mzscheme_runtime_data; + + +static swig_module_info * +SWIG_MzScheme_GetModule(Scheme_Env *env) { + Scheme_Object *pointer, *symbol; + struct swig_mzscheme_runtime_data *data; + + /* first check if pointer already created */ + symbol = scheme_intern_symbol("swig-runtime-data-type-pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); + pointer = scheme_lookup_global(symbol, env); + if (pointer && SCHEME_CPTRP(pointer)) { + data = (struct swig_mzscheme_runtime_data *) SCHEME_CPTR_VAL(pointer); + swig_type = data->type; + return data->module_head; + } else { + return NULL; + } +} + +static void +SWIG_MzScheme_SetModule(Scheme_Env *env, swig_module_info *module) { + Scheme_Object *pointer, *symbol; + struct swig_mzscheme_runtime_data *data; + + /* first check if pointer already created */ + symbol = scheme_intern_symbol("swig-runtime-data-type-pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); + pointer = scheme_lookup_global(symbol, env); + if (pointer && SCHEME_CPTRP(pointer)) { + data = (struct swig_mzscheme_runtime_data *) SCHEME_CPTR_VAL(pointer); + swig_type = data->type; + data->module_head = module; + } else { + /* create a new type for wrapped pointer values */ + swig_type = scheme_make_type((char *)"swig"); + swig_mzscheme_runtime_data.module_head = module; + swig_mzscheme_runtime_data.type = swig_type; + /* create a new pointer */ + pointer = scheme_make_cptr((void *) &swig_mzscheme_runtime_data, "swig_mzscheme_runtime_data"); + scheme_add_global_symbol(symbol, pointer, env); + } +} + #ifdef __cplusplus } #endif diff --git a/Lib/mzscheme/mzscheme.swg b/Lib/mzscheme/mzscheme.swg index ba3ff9812..4748577b3 100644 --- a/Lib/mzscheme/mzscheme.swg +++ b/Lib/mzscheme/mzscheme.swg @@ -4,7 +4,6 @@ /* Include headers */ %runtime "swigrun.swg" // Common C API type-checking code -%runtime "common.swg" %runtime "mzrun.swg" %define SWIG_APPEND_VALUE(value) @@ -22,15 +21,11 @@ /* Read in standard typemaps. */ %include "typemaps.i" +%insert(init) "swiginit.swg" + %init %{ - static int _swig_init = 0; - - if (!_swig_init) { - int i; - SWIG_MzScheme_LookupTypePointer(env); - for (i = 0; swig_types_initial[i]; i++) { - swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]); - } - _swig_init = 1; - } +Scheme_Object *scheme_reload(Scheme_Env *env) { + Scheme_Env *menv = SWIG_MZSCHEME_CREATE_MENV(env); + + SWIG_InitializeModule((void *) env); %} diff --git a/Lib/mzscheme/typemaps.i b/Lib/mzscheme/typemaps.i index 6a60978d5..c7fa37265 100644 --- a/Lib/mzscheme/typemaps.i +++ b/Lib/mzscheme/typemaps.i @@ -91,7 +91,7 @@ %typemap(in) enum SWIGTYPE { if (!SCHEME_INTP($input)) scheme_wrong_type(FUNC_NAME, "integer", $argnum - 1, argc, argv); - $1 = SCHEME_INT_VAL($input); + $1 = ($1_type) SCHEME_INT_VAL($input); } %typemap(varin) enum SWIGTYPE { |