From: Evan Nemerson Date: Mon, 18 Feb 2013 11:55:01 +0000 (-0800) Subject: girparser: mark non-simpletype struct return values as nullable X-Git-Tag: 0.19.0~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fb5a7d39385e518dfa2d395f85509e276077f25;p=thirdparty%2Fvala.git girparser: mark non-simpletype struct return values as nullable Functions which return structs currently generate incorrect C code since valac thinks the struct is actually an out argument. This patch will mark the return values of functions returning structs as nullable in order to prevent valac from adding extra arguments. --- diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index 277339798..f58345c5a 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -3308,6 +3308,31 @@ public class Vala.GirParser : CodeVisitor { } } } + } else { + if (return_type is UnresolvedType && !return_type.nullable) { + var st = resolve_symbol (node.parent, ((UnresolvedType) return_type).unresolved_symbol) as Struct; + if (st != null) { + bool is_simple_type = false; + Struct? base_st = st; + + while (base_st != null) { + if (base_st.is_simple_type ()) { + is_simple_type = true; + break; + } + + if (base_st.base_type is UnresolvedType) { + base_st = resolve_symbol (node.parent, ((UnresolvedType) base_st.base_type).unresolved_symbol) as Struct; + } else { + base_st = base_st.base_struct; + } + } + + if (!is_simple_type) { + return_type.nullable = true; + } + } + } } if (parameters.size > 1) { ParameterInfo last_param = parameters[parameters.size-1];