From: Evan Nemerson Date: Thu, 1 Apr 2010 20:32:58 +0000 (-0700) Subject: vapigen: fix a crash if type_name is used for pointer arguments X-Git-Tag: 0.9.1~155 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ce5970c5bf7bf7925b0830054da067c1c89e7b0f;p=thirdparty%2Fvala.git vapigen: fix a crash if type_name is used for pointer arguments Fixes bug 614348. --- diff --git a/vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata b/vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata index dcd29d3ae..f516fe914 100644 --- a/vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata +++ b/vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata @@ -458,8 +458,8 @@ gst_tag_list_add ellipsis="1" gst_tag_list_add_values ellipsis="1" gst_tag_list_get_boolean.value is_out="1" gst_tag_list_get_boolean_index.value is_out="1" -gst_tag_list_get_char.value is_out="1" type_name="char" -gst_tag_list_get_char_index.value is_out="1" type_name="char" +gst_tag_list_get_char.value type_name="char" is_out="1" +gst_tag_list_get_char_index.value type_name="char" is_out="1" gst_tag_list_get_date.value is_out="1" nullable="1" value_owned="1" gst_tag_list_get_date_index.value is_out="1" nullable="1" value_owned="1" gst_tag_list_get_double.value is_out="1" @@ -476,8 +476,8 @@ gst_tag_list_get_pointer.value is_out="1" gst_tag_list_get_pointer_index.value is_out="1" gst_tag_list_get_string.value is_out="1" value_owned="1" gst_tag_list_get_string_index.value is_out="1" value_owned="1" -gst_tag_list_get_uchar.value is_out="1" type_name="uchar" -gst_tag_list_get_uchar_index.value is_out="1" type_name="uchar" +gst_tag_list_get_uchar.value type_name="uchar" is_out="1" +gst_tag_list_get_uchar_index.value type_name="uchar" is_out="1" gst_tag_list_get_uint.value is_out="1" gst_tag_list_get_uint64.value is_out="1" gst_tag_list_get_uint64_index.value is_out="1" diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index d2e739ec3..727f57378 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -1764,7 +1764,14 @@ public class Vala.GIdlParser : CodeVisitor { set_delegate_target_pos = true; delegate_target_pos = eval (nv[1]).to_double (); } else if (nv[0] == "type_name") { - ((UnresolvedType) param_type).unresolved_symbol = new UnresolvedSymbol (null, eval (nv[1])); + var sym = new UnresolvedSymbol (null, eval (nv[1])); + if (param_type is UnresolvedType) { + ((UnresolvedType) param_type).unresolved_symbol = sym; + } else { + // Overwrite old param_type, so "type_name" must be before any + // other param type modifying metadata + p.parameter_type = param_type = new UnresolvedType.from_symbol (sym, return_type.source_reference); + } } else if (nv[0] == "ctype") { p.ctype = eval (nv[1]); } else if (nv[0] == "type_arguments") {