diff options
author | Dave Beazley <dave-swig@dabeaz.com> | 2000-06-19 00:29:04 +0000 |
---|---|---|
committer | Dave Beazley <dave-swig@dabeaz.com> | 2000-06-19 00:29:04 +0000 |
commit | 7242c6daf712712bbcaad8a9a59d02b949941b18 (patch) | |
tree | 6799835a40fc4cba56a40b05afee7dc8bdd57ae5 /Lib/mzscheme | |
parent | 243ef9cfeed4dcdb7b59f35cc185768a4b0285f0 (diff) | |
download | swig-7242c6daf712712bbcaad8a9a59d02b949941b18.tar.gz |
Applied Oleg's MzScheme patches
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@496 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Lib/mzscheme')
-rw-r--r-- | Lib/mzscheme/mzscheme.swg | 16 | ||||
-rw-r--r-- | Lib/mzscheme/typemaps.i | 18 |
2 files changed, 18 insertions, 16 deletions
diff --git a/Lib/mzscheme/mzscheme.swg b/Lib/mzscheme/mzscheme.swg index b68932895..cd0a732eb 100644 --- a/Lib/mzscheme/mzscheme.swg +++ b/Lib/mzscheme/mzscheme.swg @@ -5,10 +5,7 @@ typedef struct swig_proxy { void *object; } swig_proxy; -Scheme_Object *swig_make_c_pointer(void *, char*); -void *swig_get_c_pointer(Scheme_Object *, char *); - -Scheme_Object *swig_make_c_pointer(void *c_pointer, char *type_name) { +static Scheme_Object *swig_make_c_pointer(void *c_pointer, char *type_name) { swig_proxy *new_proxy; new_proxy = (swig_proxy *) scheme_malloc(sizeof(swig_proxy)); new_proxy->type = scheme_make_type(type_name); @@ -17,11 +14,16 @@ Scheme_Object *swig_make_c_pointer(void *c_pointer, char *type_name) { return (Scheme_Object *) new_proxy; } -void *swig_get_c_pointer(Scheme_Object *so, char *c_type) { +/* returns 1 on success, 0 otherwise */ +static int swig_get_c_pointer(Scheme_Object *so, char *c_type, void **c_ptr) { Scheme_Type st = SCHEME_TYPE(so); char *type_name = scheme_get_type_name(st); + int err = 1; if(strcmp(type_name, c_type)) - scheme_signal_error("wrong type in foreign object %s", type_name); + err = 0; + else + *c_ptr = ((swig_proxy *) so)->object; - return (void *) ((swig_proxy *) so)->object; + return err; } + diff --git a/Lib/mzscheme/typemaps.i b/Lib/mzscheme/typemaps.i index c77a9d7ca..ea5989ad2 100644 --- a/Lib/mzscheme/typemaps.i +++ b/Lib/mzscheme/typemaps.i @@ -43,7 +43,7 @@ unsigned char *M_OUTPUT { Scheme_Object *s; - s = scheme_make_string(*$target); + s = scheme_make_string_without_copying(*$target); m_output_helper(_values, s, &_lenv); } @@ -85,13 +85,13 @@ void m_output_helper(Scheme_Object **target, Scheme_Object *s, int *_lenv) { %typemap(mzscheme, in) char * { if(!SCHEME_STRINGP($source)) - scheme_wrong_type("$name", "string ", $argnum, argc, argv); + scheme_wrong_type("$name", "string", $argnum, argc, argv); $target = SCHEME_STR_VAL($source); } %typemap(mzscheme, in) char [ANY] { if(!SCHEME_STRINGP($source)) - scheme_wrong_type("$name", "string ", $argnum, argc, argv); + scheme_wrong_type("$name", "string", $argnum, argc, argv); $target = SCHEME_STR_VAL($source); } @@ -272,11 +272,11 @@ void m_output_helper(Scheme_Object **target, Scheme_Object *s, int *_lenv) { } %typemap(mzscheme, out) char * { - $target = scheme_make_string($source); + $target = scheme_make_string_without_copying($source); } %typemap(mzscheme, out) char [ANY] { - $target = scheme_make_string($source); + $target = scheme_make_string_without_copying($source); } %typemap(mzscheme, out) int { @@ -388,13 +388,13 @@ void m_output_helper(Scheme_Object **target, Scheme_Object *s, int *_lenv) { %typemap(mzscheme, varin) char * { if(!SCHEME_STRINGP($source)) - scheme_wrong_type("$name", "string ", $argnum, argc, argv); + scheme_wrong_type("$name", "string", $argnum, argc, argv); $target = SCHEME_STR_VAL($source); } %typemap(mzscheme, varin) char [ANY] { if(!SCHEME_STRINGP($source)) - scheme_wrong_type("$name", "string ", $argnum, argc, argv); + scheme_wrong_type("$name", "string", $argnum, argc, argv); $target = SCHEME_STR_VAL($source); } @@ -576,11 +576,11 @@ void m_output_helper(Scheme_Object **target, Scheme_Object *s, int *_lenv) { } %typemap(mzscheme, varout) char * { - $target = scheme_make_string($source); + $target = scheme_make_string_without_copying($source); } %typemap(mzscheme, varout) char [ANY] { - $target = scheme_make_string($source); + $target = scheme_make_string_without_copying($source); } %typemap(mzscheme, varout) int { |