[glibmm/gmmproc-refactor] Fix wrap_init friendship in GError wrappers.



commit 5b7433b4f853cedf2183623a77972ab8c62b24c0
Author: Krzesimir Nowak <qdlacz gmail com>
Date:   Sun Jul 22 16:57:43 2012 +0200

    Fix wrap_init friendship in GError wrappers.

 tools/pm/Common/Gmmproc.pm       |    4 +++-
 tools/pm/Common/Output/GError.pm |   15 ++++++++++++---
 tools/pm/Common/WrapParser.pm    |   14 +++++++++++---
 3 files changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/tools/pm/Common/Gmmproc.pm b/tools/pm/Common/Gmmproc.pm
index 17b5609..4344ac6 100644
--- a/tools/pm/Common/Gmmproc.pm
+++ b/tools/pm/Common/Gmmproc.pm
@@ -210,6 +210,7 @@ sub _parse_all_bases
   my $type_info_global = $self->_get_type_info_global ();
   my $repositories = $self->_get_repositories;
   my $mm_module = $self->_get_mm_module;
+  my $wrap_init_namespace = $self->_get_wrap_init_namespace ();
 
   # parallelize
   foreach my $base (sort keys %{$bases})
@@ -222,7 +223,8 @@ sub _parse_all_bases
                                                $type_info_global,
                                                $repositories,
                                                $mm_module,
-                                               $base);
+                                               $base,
+                                               $wrap_init_namespace);
 
     $wrap_parser->parse;
     $tokens_store->set_section_manager ($wrap_parser->get_section_manager);
diff --git a/tools/pm/Common/Output/GError.pm b/tools/pm/Common/Output/GError.pm
index 0e1d17d..d8c9499 100644
--- a/tools/pm/Common/Output/GError.pm
+++ b/tools/pm/Common/Output/GError.pm
@@ -33,12 +33,21 @@ sub _output_gerror
   my ($wrap_parser, $cxx_type, $members, $new_style) = @_;
   my $string_members = Common::Output::Shared::convert_members_to_strings ($members);
   my $section_manager = $wrap_parser->get_section_manager;
-  my $namespaces = $wrap_parser->get_namespaces;
+  my $wrap_init_namespace = $wrap_parser->get_wrap_init_namespace ();
   my $wrap_init = 'wrap_init()';
+  my $h_includes_section = Common::Output::Shared::get_section ($wrap_parser, Common::Sections::H_INCLUDES);
+  my $mm_module = $wrap_parser->get_mm_module ();
 
-  if (@{$namespaces})
+  $section_manager->append_string_to_section (nl ('#include <', $mm_module, '/wrap_init.h>'),
+                                              $h_includes_section);
+
+  if (defined ($wrap_init_namespace) and $wrap_init_namespace ne '')
   {
-    $wrap_init = '::' . $namespaces->[0] . '::' . $wrap_init;
+    $wrap_init = $wrap_init_namespace . '::' . $wrap_init;
+    if (index ($wrap_init_namespace, '::') != 0)
+    {
+      $wrap_init = '::' . $wrap_init;
+    }
   }
 
   my $code_string = nl ('class ' . $cxx_type . ' : public Glib::Error') .
diff --git a/tools/pm/Common/WrapParser.pm b/tools/pm/Common/WrapParser.pm
index 3fd62f1..bebf3b8 100644
--- a/tools/pm/Common/WrapParser.pm
+++ b/tools/pm/Common/WrapParser.pm
@@ -3347,9 +3347,9 @@ sub get_repositories ($)
 }
 
 # public
-sub new ($$$$$$)
+sub new
 {
-  my ($type, $tokens_hg, $tokens_ccg, $type_info_global, $repositories, $mm_module, $base) = @_;
+  my ($type, $tokens_hg, $tokens_ccg, $type_info_global, $repositories, $mm_module, $base, $wrap_init_namespace) = @_;
   my $class = (ref $type or $type or 'Common::WrapParser');
   my $self =
   {
@@ -3384,7 +3384,8 @@ sub new ($$$$$$)
     'base' => $base,
     'filename' => undef,
     'wrap_init_entries' => [],
-    'temp_wrap_init_stack' => []
+    'temp_wrap_init_stack' => [],
+    'wrap_init_namespace' => $wrap_init_namespace
   };
 
   $self = bless $self, $class;
@@ -3467,6 +3468,13 @@ sub new ($$$$$$)
   return $self;
 }
 
+sub get_wrap_init_namespace
+{
+  my ($self) = @_;
+
+  return $self->{'wrap_init_namespace'};
+}
+
 sub get_wrap_init_entries
 {
   my ($self) = @_;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]