]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix crash on certain header dependencies, fixes bug 546183
authorJürg Billeter <j@bitron.ch>
Sat, 25 Oct 2008 12:51:02 +0000 (12:51 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 25 Oct 2008 12:51:02 +0000 (12:51 +0000)
2008-10-25  Jürg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala:
* vala/valasourcefile.vala:

Fix crash on certain header dependencies, fixes bug 546183

svn path=/trunk/; revision=1918

ChangeLog
vala/valasemanticanalyzer.vala
vala/valasourcefile.vala

index 87402bb022a0ae79fa4bd7573b056301278fefb4..d4bd7d570dd73f00418d0c261eb121ac2a932afd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-10-25  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valasemanticanalyzer.vala:
+       * vala/valasourcefile.vala:
+
+       Fix crash on certain header dependencies, fixes bug 546183
+
 2008-10-25  Jürg Billeter  <j@bitron.ch>
 
        * vapi/gobject-2.0.vapi:
index f1b44bb0a7a21e82d211e42759dc7c50a0fa6ff3..175022995e1684ba428094827ce2f277187f7e5d 100644 (file)
@@ -411,7 +411,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                }
 
                if (!f.is_internal_symbol ()) {
-                       current_source_file.add_type_dependency (f.field_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       if (f.field_type is ValueType) {
+                               current_source_file.add_type_dependency (f.field_type, SourceFileDependencyType.HEADER_FULL);
+                       } else {
+                               current_source_file.add_type_dependency (f.field_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       }
                } else {
                        if (f.parent_symbol is Namespace) {
                                f.error = true;
@@ -478,7 +482,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                }
 
                if (!m.is_internal_symbol ()) {
-                       current_source_file.add_type_dependency (m.return_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       if (m.return_type is ValueType) {
+                               current_source_file.add_type_dependency (m.return_type, SourceFileDependencyType.HEADER_FULL);
+                       } else {
+                               current_source_file.add_type_dependency (m.return_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       }
                }
                current_source_file.add_type_dependency (m.return_type, SourceFileDependencyType.SOURCE);
 
@@ -598,7 +606,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 
                if (!p.ellipsis) {
                        if (!p.is_internal_symbol ()) {
-                               current_source_file.add_type_dependency (p.parameter_type, SourceFileDependencyType.HEADER_SHALLOW);
+                               if (p.parameter_type is ValueType && !p.parameter_type.is_real_struct_type ()) {
+                                       current_source_file.add_type_dependency (p.parameter_type, SourceFileDependencyType.HEADER_FULL);
+                               } else {
+                                       current_source_file.add_type_dependency (p.parameter_type, SourceFileDependencyType.HEADER_SHALLOW);
+                               }
                        }
                        current_source_file.add_type_dependency (p.parameter_type, SourceFileDependencyType.SOURCE);
 
@@ -655,7 +667,11 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                current_symbol = current_symbol.parent_symbol;
 
                if (!prop.is_internal_symbol ()) {
-                       current_source_file.add_type_dependency (prop.property_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       if (prop.property_type is ValueType && !prop.property_type.is_real_struct_type ()) {
+                               current_source_file.add_type_dependency (prop.property_type, SourceFileDependencyType.HEADER_FULL);
+                       } else {
+                               current_source_file.add_type_dependency (prop.property_type, SourceFileDependencyType.HEADER_SHALLOW);
+                       }
                }
                current_source_file.add_type_dependency (prop.property_type, SourceFileDependencyType.SOURCE);
 
index 86757b44dd7e18b14e24af1968dae05a175c7bf4..b38a717f655ccc7e12783e696048e0870aeb0cbe 100644 (file)
@@ -314,7 +314,7 @@ public class Vala.SourceFile {
                        return;
                }
                
-               if (dep_type == SourceFileDependencyType.HEADER_FULL || (s is TypeSymbol && !((TypeSymbol)s).is_reference_type ())) {
+               if (dep_type == SourceFileDependencyType.HEADER_FULL) {
                        foreach (string fn in s.get_cheader_filenames ()) {
                                header_internal_includes.add (fn);
                        }