Applied Oleg's MzScheme patches

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@496 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-06-19 00:29:04 +00:00
commit 3b7c3f299c
5 changed files with 30 additions and 25 deletions

View file

@ -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;
}

View file

@ -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 {