summaryrefslogtreecommitdiff
path: root/tools/m4/method.m4
blob: 51fb97c119113798c1f0c8629d19afb685c588fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
dnl $Id$

dnl
dnl
dnl  Code generation sections for making a method.  
dnl
dnl


dnl
dnl method 
dnl $1      $2     $3         $4       $5    $6    $7     $8        $9        $10         $11        $12
dnl  _METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,const,refreturn,errthrow,deprecated,constversion,arglist_without_types)
define(`_METHOD',`dnl
_PUSH(SECTION_CC)
ifelse(`$10',,,`_DEPRECATE_IFDEF_START
') dnl
ifelse(`$9',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED'
) dnl
$3 __CPPNAME__::$1`'($5)ifelse(`$7',1,` const')
ifelse(`$9',,,`#else
$3 __CPPNAME__::$1`'(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error)ifelse(`$7',1,` const')
#endif //GLIBMM_EXCEPTIONS_ENABLED
') dnl
{
ifelse(`$11',,dnl
`  ifelse(`$8'`$9',,dnl If it is not errthrow or refreturn
`ifelse(`$3',void,dnl If it returns voids:
`$2(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6);' dnl It it returns non-void:
,`return _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')' dnl End if it returns voids.
,dnl If is errthrow or refreturn
`ifelse(`$9',,,`  GError* gerror = 0;')
  ifelse(`$3',void,,``$3' retvalue = _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')dnl
ifelse(`$9',,,`
#ifdef GLIBMM_EXCEPTIONS_ENABLED
  if(gerror)
    ::Glib::Error::throw_exception(gerror);
#else
  if(gerror)
    error = ::Glib::Error::throw_exception(gerror);
#endif //GLIBMM_EXCEPTIONS_ENABLED
')
ifelse(`$8',,,`dnl
  if(retvalue)
    retvalue->reference(); //The function does not do a ref for us.
')dnl
ifelse(`$3',void,,`  return retvalue;')
')dnl End errthrow/refreturn
',`  return const_cast<__CPPNAME__*>(this)->$1($12);')
}
ifelse(`$10',,,`_DEPRECATE_IFDEF_END
')
_POP()')

dnl
dnl static method
dnl                  $1       $2     $3         $4      $5     $6      $7      $8         $9
dnl  _STATIC_METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,refreturn,errthrow,deprecated))
define(`_STATIC_METHOD',`dnl
_PUSH(SECTION_CC)
ifelse(`$9',,,`_DEPRECATE_IFDEF_START
') dnl
ifelse(`$8',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED
') dnl
$3 __CPPNAME__::$1($5)
ifelse(`$8',,,`#else
$3 __CPPNAME__::$1(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error)
#endif //GLIBMM_EXCEPTIONS_ENABLED
') dnl
{
ifelse(`$7'`$8',,dnl
`  ifelse(`$3',void,,`return ')_CONVERT($4,$3,`$2`'($6)');
', dnl
`ifelse(`$8',,,`  GError* gerror = 0;')
  ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,$3,`$2`'($6)');
ifelse(`$8',,,`
#ifdef GLIBMM_EXCEPTIONS_ENABLED
  if(gerror)
    ::Glib::Error::throw_exception(gerror);
#else
  if(gerror)
    error = ::Glib::Error::throw_exception(gerror);
#endif //GLIBMM_EXCEPTIONS_ENABLED
')
ifelse(`$7',,,`dnl
  if(retvalue)
    retvalue->reference(); //The function does not do a ref for us.
')dnl
ifelse(`$3',void,,`  return retvalue;')
')dnl
}
ifelse(`$9',,,`_DEPRECATE_IFDEF_END
')
_POP()')