summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolay Orlyuk <virkony@gmail.com>2013-02-19 02:35:29 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2017-03-01 09:33:16 +0100
commit932abc3f8d2d539812752c3f276a098ebbb22d75 (patch)
tree7ac1f17a788df6cf685c1262f23066cf225e3721
parentd36ce6f5d9329c6b27a7919a9a5874238edcb024 (diff)
downloadvala-932abc3f8d2d539812752c3f276a098ebbb22d75.tar.gz
codegen: Fix instance parameter for property setter in SimpleType structs
Add test-case and fix code generator for call to the setter to pass instance as a value rather than as a pointer to value. Based on patches by Nathan Summers. https://bugzilla.gnome.org/show_bug.cgi?id=657346
-rw-r--r--codegen/valaccodebasemodule.vala4
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/structs/bug694140.vala23
3 files changed, 26 insertions, 2 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 3d92f570d..5f9b6295d 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5862,8 +5862,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
/* target instance is first argument */
var cinstance = (CCodeExpression) get_ccodenode (instance);
- if (prop.parent_symbol is Struct) {
- // we need to pass struct instance by reference
+ if (prop.parent_symbol is Struct && !((Struct) prop.parent_symbol).is_simple_type ()) {
+ // we need to pass struct instance by reference if it isn't a simple-type
var instance_value = instance.target_value;
if (!get_lvalue (instance_value)) {
instance_value = store_temp_value (instance_value, instance);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e6fe0f75a..760ca967b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -118,6 +118,7 @@ TESTS = \
structs/bug685177.vala \
structs/bug686190.vala \
structs/bug690380.vala \
+ structs/bug694140.vala \
structs/bug749952.vala \
structs/bug775761.vala \
delegates/delegates.vala \
diff --git a/tests/structs/bug694140.vala b/tests/structs/bug694140.vala
new file mode 100644
index 000000000..18368a979
--- /dev/null
+++ b/tests/structs/bug694140.vala
@@ -0,0 +1,23 @@
+string[] colors;
+
+[SimpleType]
+[CCode (has_type_id = false)]
+struct Foo : int {
+ public string bar {
+ get {
+ return colors[(int) this];
+ }
+ set {
+ colors[(int) this] = value;
+ }
+ }
+}
+
+void main () {
+ colors = { "black", "red", "green", "blue" };
+
+ Foo foo = 1;
+ assert (foo.bar == "red");
+ foo.bar = "white";
+ assert (foo.bar == "white");
+}