[vala] Fix lambda expressions in property accessors
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Fix lambda expressions in property accessors
- Date: Mon, 3 Aug 2009 14:12:40 +0000 (UTC)
commit 909476c1d9ee2cef1a3457d8e4410ecb2f44fe3b
Author: Jürg Billeter <j bitron ch>
Date: Mon Aug 3 16:11:53 2009 +0200
Fix lambda expressions in property accessors
Fixes bug 590626.
codegen/valaccodebasemodule.vala | 9 +++++++++
codegen/valaccodedelegatemodule.vala | 2 +-
codegen/valaccodemethodcallmodule.vala | 6 +++---
3 files changed, 13 insertions(+), 4 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 0f0a0c2..21506b1 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -4146,6 +4146,15 @@ internal class Vala.CCodeBaseModule : CCodeModule {
public virtual bool is_gobject_property (Property prop) {
return false;
}
+
+ public DataType? get_this_type () {
+ if (current_method != null && current_method.binding == MemberBinding.INSTANCE) {
+ return current_method.this_parameter.parameter_type;
+ } else if (current_property_accessor != null && current_property_accessor.prop.binding == MemberBinding.INSTANCE) {
+ return current_property_accessor.prop.this_parameter.parameter_type;
+ }
+ return null;
+ }
}
// vim:sw=8 noet
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index c45750a..2293047 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -140,7 +140,7 @@ internal class Vala.CCodeDelegateModule : CCodeArrayModule {
var invocation_expr = (MethodCall) delegate_expr;
return invocation_expr.delegate_target;
} else if (delegate_expr is LambdaExpression) {
- if ((current_method != null && current_method.binding == MemberBinding.INSTANCE) || in_constructor) {
+ if (get_this_type () != null || in_constructor) {
return new CCodeIdentifier ("self");
} else {
return new CCodeConstant ("NULL");
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 61d1ed8..de38521 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -310,13 +310,13 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
var delegate_method = arg.symbol_reference as Method;
var lambda = arg as LambdaExpression;
var arg_ma = arg as MemberAccess;
- if (lambda != null && current_method != null && current_method.binding == MemberBinding.INSTANCE) {
+ if (lambda != null && get_this_type () != null) {
// type of delegate target is same as `this'
// for lambda expressions in instance methods
- var ref_call = new CCodeFunctionCall (get_dup_func_expression (current_method.this_parameter.parameter_type, arg.source_reference));
+ var ref_call = new CCodeFunctionCall (get_dup_func_expression (get_this_type (), arg.source_reference));
ref_call.add_argument (delegate_target);
delegate_target = ref_call;
- delegate_target_destroy_notify = get_destroy_func_expression (current_method.this_parameter.parameter_type);
+ delegate_target_destroy_notify = get_destroy_func_expression (get_this_type ());
} else if (delegate_method != null && delegate_method.binding == MemberBinding.INSTANCE
&& arg_ma != null && arg_ma.inner != null && arg_ma.inner.value_type.data_type != null
&& arg_ma.inner.value_type.data_type.is_reference_counting ()) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]