03/12/2006: mutandiz
[allegrocl] Add INPUT/OUTPUT typemaps for bool. Generate c++ style wrappers for struct/unions when -cwrap option specified. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9004 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
f8817ba92d
commit
3c6167fb0b
3 changed files with 48 additions and 24 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue