]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
CodeWriter: Add CodeWriterType.FAST enum value 89a1243a4f066cc9652b26f86eb94fd038874982
authorRyan Lortie <desrt@desrt.ca>
Tue, 24 Aug 2010 17:22:21 +0000 (19:22 +0200)
committerJürg Billeter <j@bitron.ch>
Thu, 9 Sep 2010 13:54:18 +0000 (15:54 +0200)
Designed to emit .vapi files before the resolution stage has run.

Includes 'using' in the output so that the resolver can figure it out
later.

Also includes the values of constants and enums so that headers are not
required.

vala/valacodewriter.vala

index 785d0d62563cdaddfe5ae4036fde36f3b9809aa7..5d0e58897a4533291693335118910d88f5d674eb 100644 (file)
@@ -89,6 +89,12 @@ public class Vala.CodeWriter : CodeVisitor {
                stream = null;
        }
 
+       public override void visit_using_directive (UsingDirective ns) {
+               if (type == CodeWriterType.FAST) {
+                       write_string ("using %s;\n".printf (ns.namespace_symbol.name));
+               }
+       }
+
        public override void visit_namespace (Namespace ns) {
                if (ns.external_package) {
                        return;
@@ -211,7 +217,7 @@ public class Vala.CodeWriter : CodeVisitor {
                
                write_string ("[CCode (");
 
-               if (cl.is_reference_counting ()) {
+               if (cl.is_reference_counting () && type != CodeWriterType.FAST) {
                        if (cl.base_class == null || cl.base_class.get_ref_function () == null || cl.base_class.get_ref_function () != cl.get_ref_function ()) {
                                write_string ("ref_function = \"%s\", ".printf (cl.get_ref_function ()));
                                if (cl.ref_function_void) {
@@ -555,6 +561,11 @@ public class Vala.CodeWriter : CodeVisitor {
                        }
                        write_indent ();
                        write_identifier (ev.name);
+
+                       if (type == CodeWriterType.FAST && ev.value != null) {
+                               write_string(" = ");
+                               ev.value.accept (this);
+                       }
                }
 
                if (!first) {
@@ -653,6 +664,10 @@ public class Vala.CodeWriter : CodeVisitor {
                        
                write_string (" ");
                write_identifier (c.name);
+               if (type == CodeWriterType.FAST && c.value != null) {
+                       write_string(" = ");
+                       c.value.accept (this);
+               }
                write_string (";");
                write_newline ();
        }
@@ -1889,6 +1904,7 @@ public class Vala.CodeWriter : CodeVisitor {
                               sym.access == SymbolAccessibility.PROTECTED;
 
                case CodeWriterType.INTERNAL:
+               case CodeWriterType.FAST:
                        return sym.access == SymbolAccessibility.INTERNAL ||
                               sym.access == SymbolAccessibility.PUBLIC ||
                               sym.access == SymbolAccessibility.PROTECTED;
@@ -1951,5 +1967,6 @@ public class Vala.CodeWriter : CodeVisitor {
 public enum CodeWriterType {
        EXTERNAL,
        INTERNAL,
+       FAST,
        DUMP
 }