diff options
author | Kjell Ahlstedt <kjell.ahlstedt@bredband.net> | 2015-05-23 08:19:47 +0200 |
---|---|---|
committer | Kjell Ahlstedt <kjell.ahlstedt@bredband.net> | 2015-05-23 08:19:47 +0200 |
commit | 47897b6ea1804cc0cf2235cefa44a3cdbf23ab03 (patch) | |
tree | 19c68283c76f2762301f6e63d26a290e57a29b36 | |
parent | 79a172fc184cbc167d58197a3e8eaf3641614ef2 (diff) | |
download | glibmm-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.m4 | 34 | ||||
-rw-r--r-- | tools/pm/Output.pm | 12 | ||||
-rw-r--r-- | tools/pm/WrapParser.pm | 46 |
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) { |