summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjell Ahlstedt <kjell.ahlstedt@bredband.net>2015-05-23 08:19:47 +0200
committerKjell Ahlstedt <kjell.ahlstedt@bredband.net>2015-05-23 08:19:47 +0200
commit47897b6ea1804cc0cf2235cefa44a3cdbf23ab03 (patch)
tree19c68283c76f2762301f6e63d26a290e57a29b36
parent79a172fc184cbc167d58197a3e8eaf3641614ef2 (diff)
downloadglibmm-47897b6ea1804cc0cf2235cefa44a3cdbf23ab03.tar.gz
gmmproc: _WRAP_SIGNAL: Add support for detail_name
* tools/m4/signal.m4: * tools/pm/Output.pm: * tools/pm/WrapParser.pm: Add support for optional 'detail_name $name' and 'two_signal_methods' parameter in _WRAP_SIGNAL. Bug #749034.
-rw-r--r--tools/m4/signal.m434
-rw-r--r--tools/pm/Output.pm12
-rw-r--r--tools/pm/WrapParser.pm46
3 files changed, 68 insertions, 24 deletions
diff --git a/tools/m4/signal.m4 b/tools/m4/signal.m4
index 1e0ddb0e..cb8cdf0b 100644
--- a/tools/m4/signal.m4
+++ b/tools/m4/signal.m4
@@ -13,15 +13,29 @@ dnl $8 = `custom_c_callback (boolean)',
dnl $9 = `deprecated' (boolean),
dnl $10 = `refdoc_comment',
dnl $11 = ifdef,
-dnl $12 = exceptionHandler)
+dnl $12 = exceptionHandler,
+dnl $13 = detail_name,
+dnl $14 = two_signal_methods (boolean))
define(`_SIGNAL_PROXY',`
ifelse(`$11',,,`#ifdef $11'
)dnl
ifelse(`$9',,,`_DEPRECATE_IFDEF_START
')dnl
+ifelse($13,,`dnl no detail_name
$10
Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'();
+',dnl detail_name
+$14,0,`dnl
+$10
+ Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13 = Glib::ustring());
+',`dnl detail_name and two_signal_methods
+$10
+ Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'();
+
+$10
+ Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13);
+')dnl end detail_name
ifelse(`$9',,,`_DEPRECATE_IFDEF_END
')dnl
ifelse(`$11',,,`#endif // $11
@@ -146,10 +160,28 @@ ifelse(`$11',,,`#ifdef $11'
)dnl
ifelse(`$9',,,`_DEPRECATE_IFDEF_START
')dnl
+ifelse($13,,`dnl no detail_name
+Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
+{
+ return Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
+}
+',dnl detail_name
+$14,0,`dnl
+Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
+{
+ return Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, $13);
+}
+',`dnl detail_name and two_signal_methods
Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
{
return Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
}
+
+Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
+{
+ return Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, $13);
+}
+')dnl end detail_name
ifelse(`$9',,,`_DEPRECATE_IFDEF_END
')dnl
ifelse(`$11',,,`#endif // $11
diff --git a/tools/pm/Output.pm b/tools/pm/Output.pm
index dc1fe83f..e145489b 100644
--- a/tools/pm/Output.pm
+++ b/tools/pm/Output.pm
@@ -585,12 +585,12 @@ sub output_wrap_create($$$)
# void output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppfunc, $signal_name,
# $bCustomCCallback, $ifdef, $commentblock, $deprecated, $deprecation_docs,
-# $newin, $exceptionHandler)
-sub output_wrap_sig_decl($$$$$$$$$$$$)
+# $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods)
+sub output_wrap_sig_decl($$$$$$$$$$$$$$)
{
my ($self, $filename, $line_num, $objCSignal, $objCppfunc, $signal_name,
$bCustomCCallback, $ifdef, $commentblock, $deprecated, $deprecation_docs,
- $newin, $exceptionHandler) = @_;
+ $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods) = @_;
# _SIGNAL_PROXY(c_signal_name, c_return_type, `<c_arg_types_and_names>',
# cpp_signal_name, cpp_return_type, `<cpp_arg_types>',`<c_args_to_cpp>',
@@ -637,7 +637,7 @@ sub output_wrap_sig_decl($$$$$$$$$$$$)
my $conversions =
convert_args_c_to_cpp($objCSignal, $objCppfunc, $line_num);
- my $str = sprintf("_SIGNAL_PROXY(%s,%s,\`%s\',%s,%s,\`%s\',\`%s\',\`%s\',%s,\`%s\',%s,%s)dnl\n",
+ my $str = sprintf("_SIGNAL_PROXY(%s,%s,\`%s\',%s,%s,\`%s\',\`%s\',\`%s\',%s,\`%s\',%s,%s,%s,%s)dnl\n",
$signal_name,
$$objCSignal{rettype},
$objCSignal->args_types_and_names_without_object(),
@@ -649,7 +649,9 @@ sub output_wrap_sig_decl($$$$$$$$$$$$)
$deprecated,
$doxycomment,
$ifdef,
- $exceptionHandler
+ $exceptionHandler,
+ $detail_name, # If a detailed name is supported (signal_name::detail_name)
+ $bTwoSignalMethods # If separate signal_xxx() methods for detailed and general name.
);
$self->append($str);
diff --git a/tools/pm/WrapParser.pm b/tools/pm/WrapParser.pm
index 56dbf458..f14ad575 100644
--- a/tools/pm/WrapParser.pm
+++ b/tools/pm/WrapParser.pm
@@ -1233,11 +1233,13 @@ sub on_wrap_signal($$)
my $bNoDefaultHandler = 0;
my $bCustomCCallback = 0;
my $bRefreturn = 0;
- my $ifdef;
+ my $ifdef = "";
my $argDeprecated = "";
my $deprecation_docs = "";
my $newin = "";
my $exceptionHandler = "";
+ my $detail_name = "";
+ my $bTwoSignalMethods = 0;
while($#args >= 2) # If optional arguments are there.
{
@@ -1246,23 +1248,19 @@ sub on_wrap_signal($$)
{
$bCustomDefaultHandler = 1;
}
-
- if($argRef eq "no_default_handler")
+ elsif($argRef eq "no_default_handler")
{
$bNoDefaultHandler = 1;
}
-
- if($argRef eq "custom_c_callback")
+ elsif($argRef eq "custom_c_callback")
{
$bCustomCCallback = 1;
}
-
- if($argRef eq "refreturn")
+ elsif($argRef eq "refreturn")
{
$bRefreturn = 1;
}
-
- if($argRef =~ /^deprecated(.*)/) #If deprecated is at the start.
+ elsif($argRef =~ /^deprecated(.*)/) #If deprecated is at the start.
{
$argDeprecated = "deprecated";
@@ -1271,27 +1269,36 @@ sub on_wrap_signal($$)
$deprecation_docs = string_unquote(string_trim($1));
}
}
-
elsif($argRef =~ /^newin(.*)/) #If newin is at the start.
{
$newin = string_unquote(string_trim($1));
}
-
elsif($argRef =~ /^ifdef(.*)/) #If ifdef is at the start.
{
$ifdef = $1;
}
-
elsif($argRef =~ /^exception_handler\s+(.*)/) #If exception_handler at the start.
{
- $exceptionHandler = $1;
+ $exceptionHandler = $1;
+ }
+ elsif($argRef =~ /^detail_name\s+(.+)/) #If detail_name at the start.
+ {
+ $detail_name = $1;
+ }
+ elsif($argRef eq "two_signal_methods")
+ {
+ $bTwoSignalMethods = 1;
+ }
+ else
+ {
+ $self->error("_WRAP_SIGNAL: Invalid option '$argRef'.\n");
}
}
$self->output_wrap_signal($argCppDecl, $argCName, $$self{filename}, $$self{line_num},
$bCustomDefaultHandler, $bNoDefaultHandler, $bCustomCCallback,
$bRefreturn, $ifdef, $commentblock, $argDeprecated, $deprecation_docs,
- $newin, $exceptionHandler);
+ $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods);
}
# void on_wrap_vfunc()
@@ -1557,12 +1564,14 @@ sub output_wrap_check($$$$$$)
# void output_wrap($CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler,
# $bNoDefaultHandler, $bCustomCCallback, $bRefreturn, $ifdef,
-# $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler)
-sub output_wrap_signal($$$$$$$$$$$$$$)
+# $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+# $detail_name, $bTwoSignalMethods)
+sub output_wrap_signal($$$$$$$$$$$$$$$$$)
{
my ($self, $CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler,
$bNoDefaultHandler, $bCustomCCallback, $bRefreturn, $ifdef,
- $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler) = @_;
+ $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+ $detail_name, $bTwoSignalMethods) = @_;
#Some checks:
return if ($self->output_wrap_check($CppDecl, $signal_name,
@@ -1596,7 +1605,8 @@ sub output_wrap_signal($$$$$$$$$$$$$$)
$objOutputter->output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppSignal,
$signal_name, $bCustomCCallback, $ifdef, $commentblock,
- $deprecated, $deprecation_docs, $newin, $exceptionHandler);
+ $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+ $detail_name, $bTwoSignalMethods);
if($bNoDefaultHandler eq 0)
{