result.lvalue = result.lvalue && result.cvalue == old_cexpr;
}
- if (!gvalue_boxing && !gvariant_boxing && target_type.value_owned && (!type.value_owned || boxing || unboxing) && requires_copy (target_type) && !(type is NullType)) {
+ bool array_needs_copy = false;
+ if (type is ArrayType && target_type is ArrayType) {
+ var array = (ArrayType) type;
+ var target_array = (ArrayType) target_type;
+ if (target_array.element_type.value_owned && !array.element_type.value_owned) {
+ array_needs_copy = requires_copy (target_array.element_type);
+ }
+ }
+
+ if (!gvalue_boxing && !gvariant_boxing && target_type.value_owned && (!type.value_owned || boxing || unboxing || array_needs_copy) && requires_copy (target_type) && !(type is NullType)) {
// need to copy value
var copy = (GLibValue) copy_value (result, node);
if (target_type.data_type is Interface && copy == null) {
basic-types/bug678791.vala \
basic-types/bug686336.vala \
basic-types/bug729907.vala \
+ basic-types/bug731017.vala \
namespaces.vala \
methods/lambda.vala \
methods/closures.vala \
--- /dev/null
+[CCode (cname = "g_hash_table_get_keys_as_array", array_length_type = "guint", type = "gpointer*")]
+public extern (unowned string)[] g_hash_table_get_keys_as_array (GLib.HashTable<string,string> hash_table);
+
+private static int main (string[] args) {
+ var ht = new GLib.HashTable<string,string> (GLib.str_hash, GLib.str_equal);
+ ht["one"] = "hello";
+ ht["two"] = "world";
+
+ string[] keys = g_hash_table_get_keys_as_array (ht);
+ ht = null;
+
+ foreach (unowned string k in keys) {
+ assert (k == "one" || k == "two");
+ }
+
+ return 0;
+}
\ No newline at end of file