diff --git a/SWIG/CHANGES.current b/SWIG/CHANGES.current index 645d45c81..70530c9ee 100644 --- a/SWIG/CHANGES.current +++ b/SWIG/CHANGES.current @@ -1,6 +1,12 @@ Version 1.3.29 (March 8, 2006) ============================== +03/12/2006: mutandiz + [allegrocl] + fix up INPUT/OUTPUT typemaps for bool. + Generate c++ style wrapper functions for struct/union members + when -cwrap option specified. + 03/10/2006: mutandiz [allegrocl] Fix bug in C wrapper generation introduced by last allegrocl diff --git a/SWIG/Lib/allegrocl/inout_typemaps.i b/SWIG/Lib/allegrocl/inout_typemaps.i index 84be514ea..baea5c7f1 100755 --- a/SWIG/Lib/allegrocl/inout_typemaps.i +++ b/SWIG/Lib/allegrocl/inout_typemaps.i @@ -6,15 +6,13 @@ */ -%define INOUT_TYPEMAP(type_) +%define INOUT_TYPEMAP(type_, OUTresult_, INbind_) // OUTPUT map. -%typemap(lin,numinputs=0) type_ *OUTPUT -%{ - (let (($out (ff:allocate-fobject '$*in_fftype :c))) +%typemap(lin,numinputs=0) type_ *OUTPUT, type_ &OUTPUT +%{(let (($out (ff:allocate-fobject '$*in_fftype :c))) $body - (push (ff:fslot-value-typed '$*in_fftype :c $out) ACL_result) - (ff:free-fobject $out)) -%} + OUTresult_ + (ff:free-fobject $out)) %} // INPUT map. %typemap(in) type_ *INPUT, type_ &INPUT @@ -25,29 +23,49 @@ // INOUT map. %typemap(lin,numinputs=1) type_ *INOUT, type_ &INOUT -%{ - (let (($out (ff:allocate-fobject '$*in_fftype :c))) - (setf (ff:fslot-value-typed '$*in_fftype :c $out) $in) +%{(let (($out (ff:allocate-fobject '$*in_fftype :c))) + INbind_ $body - (push (ff:fslot-value-typed $*in_fftype :c $out) ACL_result) - (ff:free-fobject $out)) -%} + OUTresult_ + (ff:free-fobject $out)) %} %enddef // $in, $out, $lclass, // $in_fftype, $*in_fftype -INOUT_TYPEMAP(int); -INOUT_TYPEMAP(short); -INOUT_TYPEMAP(long); -INOUT_TYPEMAP(unsigned int); -INOUT_TYPEMAP(unsigned short); -INOUT_TYPEMAP(unsigned long); -INOUT_TYPEMAP(char); -INOUT_TYPEMAP(bool); -INOUT_TYPEMAP(float); -INOUT_TYPEMAP(double); +INOUT_TYPEMAP(int, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(short, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(long, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(unsigned int, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(unsigned short, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(unsigned long, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(char, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(float, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(double, + (push (ff:fslot-value-typed (quote $*in_fftype) :c $out) ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) $in)); +INOUT_TYPEMAP(bool, + (push (not (zerop (ff:fslot-value-typed (quote $*in_fftype) :c $out))) + ACL_result), + (setf (ff:fslot-value-typed (quote $*in_fftype) :c $out) (if $in 1 0))); + // long long support not yet complete // INOUT_TYPEMAP(long long); // INOUT_TYPEMAP(unsigned long long); diff --git a/SWIG/Source/Modules/allegrocl.cxx b/SWIG/Source/Modules/allegrocl.cxx index 560f0040a..c5d9d1e13 100644 --- a/SWIG/Source/Modules/allegrocl.cxx +++ b/SWIG/Source/Modules/allegrocl.cxx @@ -2839,7 +2839,7 @@ int ALLEGROCL :: classHandler(Node *n) { Strcmp(kind, "class") == 0 || Strcmp(kind, "union") == 0) { - if (CPlusPlus) + if (Generate_Wrapper) return cppClassHandler(n); else return cClassHandler(n);