Signed-off-by: Frederik 'playya' Sdun <[email protected]>
---
 ...generated-code-for-stack-allocated-arrays.patch |   31 ++++++++
 ...management-for-closures-used-as-signal-ha.patch |   64 +++++++++++++++
 ...ix-async-methods-with-delegate-parameters.patch |   81 ++++++++++++++++++++
 ...-connecting-signal-handlers-in-async-meth.patch |   70 +++++++++++++++++
 recipes/vala/vala-native_0.7.7.bb                  |    4 +
 recipes/vala/vala_0.7.7.bb                         |    4 +
 6 files changed, 254 insertions(+), 0 deletions(-)

diff --git 
a/recipes/vala/files/0001-Fix-generated-code-for-stack-allocated-arrays.patch 
b/recipes/vala/files/0001-Fix-generated-code-for-stack-allocated-arrays.patch
new file mode 100644
index 0000000..de3dec4
--- /dev/null
+++ 
b/recipes/vala/files/0001-Fix-generated-code-for-stack-allocated-arrays.patch
@@ -0,0 +1,31 @@
+From 2dda5192f775543bbd49494934f4d5c54cd45af1 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?J=C3=BCrg=20Billeter?= <[email protected]>
+Date: Fri, 2 Oct 2009 23:46:29 +0200
+Subject: [PATCH] Fix generated code for stack-allocated arrays
+
+Fixes bug 595751.
+---
+ vala/valasymbolresolver.vala     |    7 ++++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/vala/valasymbolresolver.vala b/vala/valasymbolresolver.vala
+index 213bd53..09a9c19 100644
+--- a/vala/valasymbolresolver.vala
++++ b/vala/valasymbolresolver.vala
+@@ -350,7 +350,12 @@ public class Vala.SymbolResolver : CodeVisitor {
+       public override void visit_local_variable (LocalVariable local) {
+               local.accept_children (this);
+               if (local.variable_type is ReferenceType) {
+-                      local.variable_type.nullable = true;
++                      var array_type = local.variable_type as ArrayType;
++                      if (array_type != null && array_type.fixed_length) {
++                              // local fixed length arrays are not nullable
++                      } else {
++                              local.variable_type.nullable = true;
++                      }
+               }
+       }
+ 
+-- 
+1.6.0.4
+
diff --git 
a/recipes/vala/files/0001-Fix-memory-management-for-closures-used-as-signal-ha.patch
 
b/recipes/vala/files/0001-Fix-memory-management-for-closures-used-as-signal-ha.patch
new file mode 100644
index 0000000..9596b07
--- /dev/null
+++ 
b/recipes/vala/files/0001-Fix-memory-management-for-closures-used-as-signal-ha.patch
@@ -0,0 +1,64 @@
+From 7e192cd797d8f950ee35082863e01d455192d9f2 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?J=C3=BCrg=20Billeter?= <[email protected]>
+Date: Fri, 2 Oct 2009 21:50:28 +0200
+Subject: [PATCH] Fix memory management for closures used as signal handlers
+
+Fixes bug 597155.
+---
+ tests/Makefile.am            |    1 +
+ tests/objects/bug597155.vala |   16 ++++++++++++++++
+ vala/valasignaltype.vala     |    4 +++-
+ 3 files changed, 20 insertions(+), 1 deletions(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index e510669..2696259 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -52,6 +52,7 @@ TESTS = \
+       objects/test-034.vala \
+       objects/bug593260.vala \
+       objects/bug596621.vala \
++      objects/bug597155.vala \
+       errors/errors.vala \
+       errors/bug579101.vala \
+       errors/bug596228.vala \
+diff --git a/tests/objects/bug597155.vala b/tests/objects/bug597155.vala
+new file mode 100644
+index 0000000..c6a6283
+--- /dev/null
++++ b/tests/objects/bug597155.vala
+@@ -0,0 +1,16 @@
++class Foo : Object {
++      public signal void bar ();
++}
++
++Foo do_foo () {
++      var foo = new Foo ();
++      foo.bar.connect (() => {
++              assert (foo is Foo);
++      });
++      return foo;
++}
++
++void main () {
++      var foo = do_foo ();
++      foo.bar ();
++}
+diff --git a/vala/valasignaltype.vala b/vala/valasignaltype.vala
+index 19430a8..b7e3b84 100644
+--- a/vala/valasignaltype.vala
++++ b/vala/valasignaltype.vala
+@@ -62,7 +62,9 @@ public class Vala.SignalType : DataType {
+ 
+       DelegateType get_handler_type () {
+               var sender_type = new ObjectType ((ObjectTypeSymbol) 
signal_symbol.parent_symbol);
+-              return new DelegateType (signal_symbol.get_delegate 
(sender_type, this));
++              var result = new DelegateType (signal_symbol.get_delegate 
(sender_type, this));
++              result.value_owned = true;
++              return result;
+       }
+ 
+       Method get_connect_method () {
+-- 
+1.6.0.4
+
diff --git 
a/recipes/vala/files/0001-GAsync-Fix-async-methods-with-delegate-parameters.patch
 
b/recipes/vala/files/0001-GAsync-Fix-async-methods-with-delegate-parameters.patch
new file mode 100644
index 0000000..a06bf97
--- /dev/null
+++ 
b/recipes/vala/files/0001-GAsync-Fix-async-methods-with-delegate-parameters.patch
@@ -0,0 +1,81 @@
+From 43c8f34ed184a730874f87be47f116d707407ff7 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?J=C3=BCrg=20Billeter?= <[email protected]>
+Date: Mon, 5 Oct 2009 18:49:52 +0200
+Subject: [PATCH] GAsync: Fix async methods with delegate parameters
+
+Fixes bug 597294.
+---
+ codegen/valagasyncmodule.vala     |    7 +++++++
+ tests/Makefile.am                 |    1 +
+ tests/asynchronous/bug597294.vala |    8 ++++++++
+ 3 files changed, 16 insertions(+), 0 deletions(-)
+
+diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
+index 4fade0d..6f17344 100644
+--- a/codegen/valagasyncmodule.vala
++++ b/codegen/valagasyncmodule.vala
+@@ -53,6 +53,7 @@ internal class Vala.GAsyncModule : GSignalModule {
+                               }
+                       } else if (param.parameter_type is DelegateType) {
+                               data.add_field ("gpointer", 
get_delegate_target_cname (get_variable_cname (param.name)));
++                              data.add_field ("GDestroyNotify", 
get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
+                       }
+               }
+ 
+@@ -65,6 +66,7 @@ internal class Vala.GAsyncModule : GSignalModule {
+                               }
+                       } else if (m.return_type is DelegateType) {
+                               data.add_field ("gpointer", 
get_delegate_target_cname ("result"));
++                              data.add_field ("GDestroyNotify", 
get_delegate_target_destroy_notify_cname ("result"));
+                       }
+               }
+ 
+@@ -96,6 +98,7 @@ internal class Vala.GAsyncModule : GSignalModule {
+                               if (requires_destroy (param_type)) {
+                                       var ma = new MemberAccess.simple 
(param.name);
+                                       ma.symbol_reference = param;
++                                      ma.value_type = 
param.parameter_type.copy ();
+                                       freeblock.add_statement (new 
CCodeExpressionStatement (get_unref_expression (new CCodeMemberAccess.pointer 
(new CCodeIdentifier ("data"), get_variable_cname (param.name)), 
param.parameter_type, ma)));
+                               }
+                       }
+@@ -206,7 +209,11 @@ internal class Vala.GAsyncModule : GSignalModule {
+                                               asyncblock.add_statement (new 
CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer 
(data_var, get_array_length_cname (get_variable_cname (param.name), dim)), new 
CCodeIdentifier (get_array_length_cname (get_variable_cname (param.name), 
dim)))));
+                                       }
+                               } else if (param.parameter_type is 
DelegateType) {
++                                      var deleg_type = (DelegateType) 
param.parameter_type;
+                                       asyncblock.add_statement (new 
CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer 
(data_var, get_delegate_target_cname (get_variable_cname (param.name))), new 
CCodeIdentifier (get_delegate_target_cname (get_variable_cname 
(param.name))))));
++                                      if (deleg_type.value_owned) {
++                                              asyncblock.add_statement (new 
CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer 
(data_var, get_delegate_target_destroy_notify_cname (get_variable_cname 
(param.name))), new CCodeIdentifier (get_delegate_target_destroy_notify_cname 
(get_variable_cname (param.name))))));
++                                      }
+                               }
+                       }
+               }
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 8f704db..e9be7e8 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -62,6 +62,7 @@ TESTS = \
+       asynchronous/bug595735.vala \
+       asynchronous/bug595755.vala \
+       asynchronous/bug596177.vala \
++      asynchronous/bug597294.vala \
+       dbus/basic-types.test \
+       dbus/arrays.test \
+       dbus/async.test \
+diff --git a/tests/asynchronous/bug597294.vala 
b/tests/asynchronous/bug597294.vala
+new file mode 100644
+index 0000000..92a04bf
+--- /dev/null
++++ b/tests/asynchronous/bug597294.vala
+@@ -0,0 +1,8 @@
++delegate void Foo ();
++
++async void do_foo (Foo f) {
++      f ();
++}
++
++void main () {
++}
+-- 
+1.6.0.4
+
diff --git 
a/recipes/vala/files/0001-GAsync-Fix-connecting-signal-handlers-in-async-meth.patch
 
b/recipes/vala/files/0001-GAsync-Fix-connecting-signal-handlers-in-async-meth.patch
new file mode 100644
index 0000000..6351d52
--- /dev/null
+++ 
b/recipes/vala/files/0001-GAsync-Fix-connecting-signal-handlers-in-async-meth.patch
@@ -0,0 +1,70 @@
+From ca65d7ec727bea515030d0c9293979b2ac1cf188 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?J=C3=BCrg=20Billeter?= <[email protected]>
+Date: Fri, 2 Oct 2009 22:11:11 +0200
+Subject: [PATCH] GAsync: Fix connecting signal handlers in async methods
+
+Fixes bug 595755.
+---
+ codegen/valagsignalmodule.vala    |    6 +++---
+ tests/Makefile.am                 |    1 +
+ tests/asynchronous/bug595755.vala |   11 +++++++++++
+ 3 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
+index 2387b12..8bfcd9f 100644
+--- a/codegen/valagsignalmodule.vala
++++ b/codegen/valagsignalmodule.vala
+@@ -594,7 +594,7 @@ internal class Vala.GSignalModule : GObjectModule {
+               if (ma.inner != null) {
+                       ccall.add_argument ((CCodeExpression) get_ccodenode 
(ma.inner));
+               } else {
+-                      ccall.add_argument (new CCodeIdentifier ("self"));
++                      ccall.add_argument (get_result_cexpression ("self"));
+               }
+ 
+               if (sig is DynamicSignal) {
+@@ -671,10 +671,10 @@ internal class Vala.GSignalModule : GObjectModule {
+                               if (right_ma.inner != null) {
+                                       ccall.add_argument ((CCodeExpression) 
right_ma.inner.ccodenode);
+                               } else {
+-                                      ccall.add_argument (new CCodeIdentifier 
("self"));
++                                      ccall.add_argument 
(get_result_cexpression ("self"));
+                               }
+                       } else if (handler is LambdaExpression) {
+-                              ccall.add_argument (new CCodeIdentifier 
("self"));
++                              ccall.add_argument (get_result_cexpression 
("self"));
+                       }
+                       if (!disconnect && !(sig is DynamicSignal)
+                           && in_gobject_instance (m)) {
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 2696259..eb19c7f 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -57,6 +57,7 @@ TESTS = \
+       errors/bug579101.vala \
+       errors/bug596228.vala \
+       asynchronous/bug595735.vala \
++      asynchronous/bug595755.vala \
+       asynchronous/bug596177.vala \
+       dbus/basic-types.test \
+       dbus/arrays.test \
+diff --git a/tests/asynchronous/bug595755.vala 
b/tests/asynchronous/bug595755.vala
+new file mode 100644
+index 0000000..ac9bbd5
+--- /dev/null
++++ b/tests/asynchronous/bug595755.vala
+@@ -0,0 +1,11 @@
++class Foo : Object {
++      public signal void bar ();
++
++      public async void do_foo () {
++              bar.connect (() => {
++              });
++      }
++}
++
++void main () {
++}
+-- 
+1.6.0.4
+
diff --git a/recipes/vala/vala-native_0.7.7.bb 
b/recipes/vala/vala-native_0.7.7.bb
index e85d4e4..e25d87f 100644
--- a/recipes/vala/vala-native_0.7.7.bb
+++ b/recipes/vala/vala-native_0.7.7.bb
@@ -12,4 +12,8 @@ SRC_URI = "\
                   
file://0010-D-Bus-Fix-marshalling-of-GLib.Value-parameters.patch;patch=1 \
                   
file://0014-GError-Fix-error-propagation-in-creation-methods.patch;patch=1 \
                   
file://0018-glib-2.0-Fix-g_regex_get_pattern-binding.patch;patch=1 \
+                  
file://0001-Fix-generated-code-for-stack-allocated-arrays.patch;patch=1 \
+                  
file://0001-Fix-memory-management-for-closures-used-as-signal-ha.patch;patch=1 \
+                  
file://0001-GAsync-Fix-async-methods-with-delegate-parameters.patch;patch=1 \
+                  
file://0001-GAsync-Fix-connecting-signal-handlers-in-async-meth.patch;patch=1 \
                   "
diff --git a/recipes/vala/vala_0.7.7.bb b/recipes/vala/vala_0.7.7.bb
index 6f9279d..d7167bf 100644
--- a/recipes/vala/vala_0.7.7.bb
+++ b/recipes/vala/vala_0.7.7.bb
@@ -8,4 +8,8 @@ SRC_URI = "\
                   
file://0010-D-Bus-Fix-marshalling-of-GLib.Value-parameters.patch;patch=1 \
                   
file://0014-GError-Fix-error-propagation-in-creation-methods.patch;patch=1 \
                   
file://0018-glib-2.0-Fix-g_regex_get_pattern-binding.patch;patch=1 \
+                  
file://0001-Fix-generated-code-for-stack-allocated-arrays.patch;patch=1 \
+                  
file://0001-Fix-memory-management-for-closures-used-as-signal-ha.patch;patch=1 \
+                  
file://0001-GAsync-Fix-async-methods-with-delegate-parameters.patch;patch=1 \
+                  
file://0001-GAsync-Fix-connecting-signal-handlers-in-async-meth.patch;patch=1 \
                   "
-- 
1.6.5.rc2.7.gf4df9.dirty



_______________________________________________
Shr-devel mailing list
[email protected]
http://lists.shr-project.org/mailman/listinfo/shr-devel

Reply via email to