]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
fix cheader filenames and default to GObject prerequisite for interfaces,
authorJuerg Billeter <j@bitron.ch>
Mon, 23 Jul 2007 09:45:35 +0000 (09:45 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 23 Jul 2007 09:45:35 +0000 (09:45 +0000)
2007-07-23  Juerg Billeter  <j@bitron.ch>

* vala/valainterface.vala, vala/valainterfacewriter.vala,
  vala/valasemanticanalyzer.vala: fix cheader filenames and default to
  GObject prerequisite for interfaces, fixes bug 459039

svn path=/trunk/; revision=374

ChangeLog
vala/valainterface.vala
vala/valainterfacewriter.vala
vala/valasemanticanalyzer.vala

index 17cbc2a1b74bc82cdea513e91455ea10cce5e71e..a27009db096da63da09435f43f5b9f17b72b0600 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-23  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valainterface.vala, vala/valainterfacewriter.vala,
+         vala/valasemanticanalyzer.vala: fix cheader filenames and default to
+         GObject prerequisite for interfaces, fixes bug 459039
+
 2007-07-23  Jürg Billeter  <j@bitron.ch>
 
        * vala/valainterfacewriter.vala: write interface prerequisites
index 2da1cfa48efb1ea103dd70924dfb254681e2419d..f08f018d6685f034311345a6a9f68506f7f22791 100644 (file)
@@ -85,6 +85,16 @@ public class Vala.Interface : DataType {
                prerequisites.append (type);
        }
 
+       /**
+        * Prepends the specified interface or class to the list of
+        * prerequisites of this interface.
+        *
+        * @param type an interface or class reference
+        */
+       public void prepend_prerequisite (TypeReference! type) {
+               prerequisites.prepend (type);
+       }
+
        /**
         * Returns a copy of the base type list.
         *
@@ -265,6 +275,12 @@ public class Vala.Interface : DataType {
                if (a.has_argument ("type_cname")) {
                        set_type_cname (a.get_string ("type_cname"));
                }
+               if (a.has_argument ("cheader_filename")) {
+                       var val = a.get_string ("cheader_filename");
+                       foreach (string filename in val.split (",")) {
+                               add_cheader_filename (filename);
+                       }
+               }
        }
        
        /**
index 021e194acf16c2ac02c8d07b2b87949c24360d33..3dd834653ea6c8d8d589473abebff4e049f06958 100644 (file)
@@ -97,7 +97,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
                                cheaders = cheader;
                                first = false;
                        } else {
-                               cheaders = "%s, %s".printf (cheaders, cheader);
+                               cheaders = "%s,%s".printf (cheaders, cheader);
                        }
                }
                write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
@@ -190,7 +190,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
                                cheaders = cheader;
                                first = false;
                        } else {
-                               cheaders = "%s, %s".printf (cheaders, cheader);
+                               cheaders = "%s,%s".printf (cheaders, cheader);
                        }
                }
                write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
@@ -225,7 +225,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
                                cheaders = cheader;
                                first = false;
                        } else {
-                               cheaders = "%s, %s".printf (cheaders, cheader);
+                               cheaders = "%s,%s".printf (cheaders, cheader);
                        }
                }
                write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
@@ -310,7 +310,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
                                cheaders = cheader;
                                first = false;
                        } else {
-                               cheaders = "%s, %s".printf (cheaders, cheader);
+                               cheaders = "%s,%s".printf (cheaders, cheader);
                        }
                }
                write_string ("[CCode (cprefix = \"%s\", cheader_filename = \"%s\")]".printf (en.get_cprefix (), cheaders));
index c9bb7dc9019cf31c098104353dc3f78e96c83100..982b81351c30c0e2b6fa9c0e70232fc5bc39c227 100644 (file)
@@ -49,6 +49,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
        TypeReference unichar_type;
        TypeReference type_type;
        DataType pointer_type;
+       DataType object_type;
        DataType initially_unowned_type;
        DataType glist_type;
        DataType gslist_type;
@@ -91,6 +92,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                // TODO: don't require GLib namespace in semantic analyzer
                var glib_ns = root_symbol.scope.lookup ("GLib");
                if (glib_ns != null) {
+                       object_type = (DataType) glib_ns.scope.lookup ("Object");
                        initially_unowned_type = (DataType) glib_ns.scope.lookup ("InitiallyUnowned");
 
                        type_type = new TypeReference ();
@@ -264,8 +266,6 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        current_source_file.add_symbol_dependency (prerequisite_reference.data_type, SourceFileDependencyType.HEADER_FULL);
                }
 
-               iface.accept_children (this);
-
                /* check prerequisites */
                Class prereq_class;
                foreach (TypeReference prereq in iface.get_prerequisites ()) {
@@ -283,10 +283,19 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                        return;
                                }
 
-                               prereq_class = (Class)class_or_interface;
+                               prereq_class = (Class) class_or_interface;
                        }
                }
 
+               if (prereq_class == null) {
+                       /* default to GObject */
+                       var obj_type = new TypeReference ();
+                       obj_type.data_type = object_type;
+                       iface.prepend_prerequisite (obj_type);
+               }
+
+               iface.accept_children (this);
+
                current_symbol = current_symbol.parent_symbol;
        }