]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vapigen: fix a crash if type_name is used for pointer arguments
authorEvan Nemerson <evan@coeus-group.com>
Thu, 1 Apr 2010 20:32:58 +0000 (13:32 -0700)
committerEvan Nemerson <evan@coeus-group.com>
Fri, 9 Apr 2010 09:00:25 +0000 (02:00 -0700)
Fixes bug 614348.

vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata
vapigen/valagidlparser.vala

index dcd29d3ae10925cb11d176263e4f0cd70cc03250..f516fe91404a35c273622ff095b451cd33a0e700 100644 (file)
@@ -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"
index d2e739ec32571060ef4ffb6558ccb2c0d24cae4d..727f57378d5f966c31e7caf5b6168cde986bf955 100644 (file)
@@ -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") {