support base_class attribute for non-GObject classes
authorJuerg Billeter <j@bitron.ch>
Thu, 27 Dec 2007 22:32:05 +0000 (22:32 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 27 Dec 2007 22:32:05 +0000 (22:32 +0000)
2007-12-27  Juerg Billeter  <j@bitron.ch>

* vapigen/valagidlparser.vala: support base_class attribute for
  non-GObject classes

svn path=/trunk/; revision=797

ChangeLog
vapigen/valagidlparser.vala

index a570708..f28f9ca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2007-12-27  Jürg Billeter  <j@bitron.ch>
 
+       * vapigen/valagidlparser.vala: support base_class attribute for
+         non-GObject classes
+
+2007-12-27  Jürg Billeter  <j@bitron.ch>
+
        * vala/valainterfacewriter.vala: fix symbol modifiers,
          based on patch by Andrea Del Signore, fixes bug 505804
 
index 9245398..ca4bbdc 100644 (file)
@@ -364,6 +364,8 @@ public class Vala.GIdlParser : CodeVisitor {
                } else {
                        var cl = ns.scope.lookup (name) as Class;
                        if (cl == null) {
+                               string base_class = null;
+
                                cl = new Class (name, current_source_reference);
                                cl.access = SymbolAccessibility.PUBLIC;
 
@@ -373,6 +375,8 @@ public class Vala.GIdlParser : CodeVisitor {
                                                var nv = attr.split ("=", 2);
                                                if (nv[0] == "cheader_filename") {
                                                        cl.add_cheader_filename (eval (nv[1]));
+                                               } else if (nv[0] == "base_class") {
+                                                       base_class = eval (nv[1]);
                                                } else if (nv[0] == "hidden") {
                                                        if (eval (nv[1]) == "1") {
                                                                return;
@@ -383,6 +387,12 @@ public class Vala.GIdlParser : CodeVisitor {
 
                                ns.add_class (cl);
                                current_source_file.add_node (cl);
+
+                               if (base_class != null) {
+                                       var parent = new UnresolvedType ();
+                                       parse_type_string (parent, base_class);
+                                       cl.add_base_type (parent);
+                               }
                        }
 
                        current_data_type = cl;
@@ -1352,6 +1362,7 @@ public class Vala.GIdlParser : CodeVisitor {
                }
                
                var c = new Constant (node.name, type, null, current_source_reference);
+               c.access = SymbolAccessibility.PUBLIC;
                
                return c;
        }