summaryrefslogtreecommitdiff
path: root/Lib/mzscheme
diff options
context:
space:
mode:
authorJohn Lenz <jlenz2@math.uiuc.edu>2005-02-01 00:08:24 +0000
committerJohn Lenz <jlenz2@math.uiuc.edu>2005-02-01 00:08:24 +0000
commitc3338b1a1686503721583a9e53a2f78a7a88731f (patch)
treebd4b02a8e82f457a2324d80c4755eb1418a9a9e1 /Lib/mzscheme
parent0f2ed8e65544fe8c284035008ce0e987df8ba81c (diff)
downloadswig-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.swg92
-rw-r--r--Lib/mzscheme/mzscheme.swg17
-rw-r--r--Lib/mzscheme/typemaps.i2
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 {