]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
driver/0.13: Add support for attributes
authorFlorian Brosch <flo.brosch@gmail.com>
Thu, 11 Aug 2011 00:03:51 +0000 (02:03 +0200)
committerFlorian Brosch <flo.brosch@gmail.com>
Thu, 11 Aug 2011 00:03:51 +0000 (02:03 +0200)
src/driver/0.13.x/treebuilder.vala

index bb57e998f12d9681f8e738e696821106dceae300..8b309e1ee8bf25264fcd3e8143e4c875321ddbdf 100644 (file)
@@ -182,6 +182,55 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
        // Translation helpers:
        //
 
+       private void process_attributes (Api.Symbol parent, GLib.List<Vala.Attribute> lst) {
+               // attributes wihtout arguments:
+               string[] attributes = {
+                               "ReturnsModifiedPointer",
+                               "DestroysInstance",
+                               "NoAccessorMethod",
+                               "NoArrayLength",
+                               "Experimental",
+                               "Diagnostics",
+                               "PrintfFormat",
+                               "PointerType",
+                               "ScanfFormat",
+                               "ThreadLocal",
+                               "SimpleType",
+                               "HasEmitter",
+                               "ModuleInit",
+                               "NoWrapper",
+                               "Immutable",
+                               "ErrorBase",
+                               "NoReturn",
+                               "NoThrow",
+                               "Assert",
+                               "Flags"
+                       };
+
+               string? tmp = "";
+
+               foreach (Vala.Attribute att in lst) {
+                       if (att.name == "CCode" && (tmp = att.args.get ("has_target")) != null && tmp == "false") {
+                               Attribute new_attribute = new Attribute (parent, parent.get_source_file (), att.name, att);
+                               new_attribute.add_boolean ("has_target", false, att);
+                               parent.add_attribute (new_attribute);
+                       } else if (att.name == "Deprecated") {
+                               Attribute new_attribute = new Attribute (parent, parent.get_source_file (), att.name, att);
+                               parent.add_attribute (new_attribute);
+                               if ((tmp = att.args.get ("since")) != null) {
+                                       new_attribute.add_string ("since", tmp, att);
+                               }
+
+                               if ((tmp = att.args.get ("replacement")) != null) {
+                                       new_attribute.add_string ("replacement", tmp, att);
+                               }
+                       } else if (att.name in attributes) {
+                               Attribute new_attribute = new Attribute (parent, parent.get_source_file (), att.name, att);
+                               parent.add_attribute (new_attribute);
+                       }
+               }
+       }
+
        private string get_ccode_type_id (Vala.Class node) {
 #if VALA_0_13_X
                return Vala.CCodeBaseModule.get_ccode_type_id (node);
@@ -766,7 +815,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
        // Valadoc tree creation:
        //
 
-       private void process_children (Api.Node node, Vala.Symbol element) {
+       private void process_children (Api.Node node, Vala.CodeNode element) {
                Api.Node old_node = current_node;
                current_node = node;
                element.accept_children (this);
@@ -817,6 +866,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                        }
                }
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
 
                // save GLib.Error
@@ -847,6 +897,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                        }
                }
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -870,6 +921,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                        node.base_type = create_type_reference (basetype, node);
                }
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -886,6 +938,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -913,6 +966,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                        node.setter = new PropertyAccessor (node, file, element.name, get_access_modifier(element), get_cname (element), get_property_accessor_type (accessor), get_property_ownership (accessor), accessor);
                }
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -929,6 +983,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -945,6 +1000,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -961,6 +1017,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -977,6 +1034,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -992,6 +1050,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -1007,6 +1066,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -1023,6 +1083,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -1038,6 +1099,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }
 
@@ -1053,6 +1115,7 @@ public class Valadoc.Drivers.TreeBuilder : Vala.CodeVisitor {
                symbol_map.set (element, node);
                parent.add_child (node);
 
+               process_attributes (node, element.attributes);
                process_children (node, element);
        }