Merge pull request #1472 from ZackerySpytz/OCaml-SWIGTYPE-typecheck

[OCaml] Add a typecheck typemap for SWIGTYPE
This commit is contained in:
William S Fulton 2019-02-18 19:31:50 +00:00 • committed by GitHub
commit 911bc5310f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 211 additions and 10 deletions

View file

@ -62,7 +62,7 @@ extern "C" {
SWIG_TypeCheckStruct(source_type, dest_type );
#ifdef TYPE_CAST_VERBOSE
fprintf( stderr, "Typecheck -> %s\n",
tc ? tc->str : "<none>" );
tc ? tc->type->str : "<none>" );
#endif
if( tc ) {
int newmemory = 0;

View file

@ -86,6 +86,7 @@ class wstring;
%typemap(out) string * {
$result = caml_val_string_len((*$1).c_str(),(*$1).size());
}
%typemap(typecheck) string, const string & = char *;
}
#ifdef ENABLE_CHARPTR_ARRAY

View file

@ -135,24 +135,42 @@
}
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] {
void *ptr;
$1 = !caml_ptr_val_internal($input, &ptr,$descriptor);
if (!Is_block($input) || !(SWIG_Tag_val($input) == C_obj || SWIG_Tag_val($input) == C_ptr)) {
$1 = 0;
} else {
void *ptr;
$1 = !caml_ptr_val_internal($input, &ptr, $descriptor);
}
}
#if 0
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE {
void *ptr;
$1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor);
swig_type_info *typeinfo;
if (!Is_block($input)) {
$1 = 0;
} else {
switch (SWIG_Tag_val($input)) {
case C_obj: {
void *ptr;
$1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor);
break;
}
case C_ptr: {
typeinfo = (swig_type_info *)SWIG_Int64_val(SWIG_Field($input, 1));
$1 = SWIG_TypeCheck("$1_type", typeinfo) != NULL;
break;
}
default: $1 = 0; break;
}
}
}
#endif
%typecheck(SWIG_TYPECHECK_VOIDPTR) void * {
void *ptr;
$1 = !caml_ptr_val_internal($input, &ptr, 0);
}
%typecheck(SWIG_TYPECHECK_SWIGOBJECT) CAML_VALUE "$1 = 1;"
/* ------------------------------------------------------------
* Exception handling
* ------------------------------------------------------------ */