[vala] Support take_value_function for structs
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] Support take_value_function for structs
- Date: Tue, 19 Oct 2010 15:43:47 +0000 (UTC)
commit 1caa4c70a09a9a612d722c10e0e82270552a2775
Author: Jürg Billeter <j bitron ch>
Date: Tue Oct 19 17:42:51 2010 +0200
Support take_value_function for structs
vala/valastruct.vala | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletions(-)
---
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index dc34d4d..03113f3 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -46,6 +46,7 @@ public class Vala.Struct : TypeSymbol {
private string marshaller_type_name;
private string get_value_function;
private string set_value_function;
+ private string take_value_function;
private string default_value = null;
private string copy_function;
private string destroy_function;
@@ -441,6 +442,9 @@ public class Vala.Struct : TypeSymbol {
if (a.has_argument ("set_value_function")) {
set_set_value_function (a.get_string ("set_value_function"));
}
+ if (a.has_argument ("take_value_function")) {
+ set_take_value_function (a.get_string ("take_value_function"));
+ }
if (a.has_argument ("default_value")) {
set_default_value (a.get_string ("default_value"));
}
@@ -607,7 +611,30 @@ public class Vala.Struct : TypeSymbol {
return set_value_function;
}
}
-
+
+ public override string? get_take_value_function () {
+ if (take_value_function == null) {
+ if (base_type != null) {
+ var st = base_struct;
+ if (st != null) {
+ return st.get_take_value_function ();
+ }
+ }
+ if (is_simple_type ()) {
+ Report.error (source_reference, "The value type `%s` doesn't declare a GValue take function".printf (get_full_name ()));
+ // set take_value_function to avoid multiple errors
+ take_value_function = "";
+ return "";
+ } else if (has_type_id) {
+ return "g_value_take_boxed";
+ } else {
+ return "g_value_take_pointer";
+ }
+ } else {
+ return take_value_function;
+ }
+ }
+
private void set_get_value_function (string? function) {
get_value_function = function;
}
@@ -616,6 +643,10 @@ public class Vala.Struct : TypeSymbol {
set_value_function = function;
}
+ private void set_take_value_function (string? function) {
+ take_value_function = function;
+ }
+
public override string? get_default_value () {
if (default_value != null) {
return default_value;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]