if (target_type.value_owned && (!type.value_owned || boxing || unboxing)) {
// need to copy value
if (requires_copy (target_type) && !(type is NullType)) {
- result = (GLibValue) copy_value (result, node);
+ var copy = (GLibValue) copy_value (result, node);
+ if (target_type.data_type is Interface && copy == null) {
+ Report.error (node.source_reference, "missing class prerequisite for interface `%s', add GLib.Object to interface declaration if unsure".printf (target_type.data_type.get_full_name ()));
+ return result;
+ }
+ result = copy;
// drop this assignment when target values are guaranteed to be effect-free
if (!(target_type is ArrayType && ((ArrayType) target_type).fixed_length)) {
var decl = get_temp_variable (target_type, true, node, false);
return type_name;
}
}
- return null;
+ return "POINTER";
}
public override string? get_get_value_function () {
return get_value_func;
}
}
- return null;
+ return "g_value_get_pointer";
}
public override string? get_set_value_function () {
return set_value_func;
}
}
- return null;
+ return "g_value_set_pointer";
}
public override string? get_take_value_function () {
return take_value_func;
}
}
- return null;
+ return "g_value_set_pointer";
}
public string? get_default_type_id () {
}
}
- return null;
+ return "g_param_spec_pointer";
}
public override bool check (CodeContext context) {