Import members of the GLib namespace by default, fixes bug 539596
authorJürg Billeter <j@bitron.ch>
Mon, 23 Jun 2008 12:50:45 +0000 (12:50 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 23 Jun 2008 12:50:45 +0000 (12:50 +0000)
2008-06-23  Jürg Billeter  <j@bitron.ch>

* vala/valagenieparser.vala:
* vala/valanamespacereference.vala:
* vala/valasourcefile.vala:
* compiler/valacompiler.vala:

Import members of the GLib namespace by default, fixes bug 539596

svn path=/trunk/; revision=1637

ChangeLog
compiler/valacompiler.vala
vala/valagenieparser.vala
vala/valanamespacereference.vala
vala/valasourcefile.vala

index f4bf0d0..85a9824 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2008-06-23  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valagenieparser.vala:
+       * vala/valanamespacereference.vala:
+       * vala/valasourcefile.vala:
+       * compiler/valacompiler.vala:
+
+       Import members of the GLib namespace by default, fixes bug 539596
+
+2008-06-23  Jürg Billeter  <j@bitron.ch>
+
        * gobject/valaccodedynamicpropertybinding.vala:
 
        Support dynamic D-Bus properties
index 1bdf037..d85c8e7 100644 (file)
@@ -198,7 +198,12 @@ class Vala.Compiler : Object {
                        if (FileUtils.test (source, FileTest.EXISTS)) {
                                var rpath = realpath (source);
                                if (source.has_suffix (".vala") || source.has_suffix (".gs")) {
-                                       context.add_source_file (new SourceFile (context, rpath));
+                                       var source_file = new SourceFile (context, rpath);
+
+                                       // import the GLib namespace by default (namespace of backend-specific standard library)
+                                       source_file.add_using_directive (new NamespaceReference ("GLib"));
+
+                                       context.add_source_file (source_file);
                                } else if (source.has_suffix (".vapi")) {
                                        context.add_source_file (new SourceFile (context, rpath, true));
                                } else if (source.has_suffix (".c")) {
index d39f139..63fad85 100644 (file)
@@ -44,9 +44,6 @@ public class Vala.Genie.Parser : CodeVisitor {
        
        string class_name;
        
-       /* we need to know whether to automatically add these using directives */
-       bool has_uses_glib;
-
        /* hack needed to know if any part of an expression is a lambda one */
        bool current_expr_is_lambda;
 
@@ -72,7 +69,6 @@ public class Vala.Genie.Parser : CodeVisitor {
 
        construct {
                tokens = new TokenInfo[BUFFER_SIZE];
-               has_uses_glib = false;
                class_name = null;
                current_expr_is_lambda = false;
        }
@@ -2344,10 +2340,6 @@ public class Vala.Genie.Parser : CodeVisitor {
                var ns_ref = new NamespaceReference (sym.name, get_src (begin));
 
                scanner.source_file.add_using_directive (ns_ref);
-                               
-               if (sym.name == "GLib") {
-                       has_uses_glib = true;
-               }
        }
 
        void parse_using_directives () throws ParseError {
@@ -2373,11 +2365,6 @@ public class Vala.Genie.Parser : CodeVisitor {
                        }
                }
                
-               if (!has_uses_glib) {
-                       var ns_ref = new NamespaceReference ("GLib", get_src (begin));
-                       scanner.source_file.add_using_directive (ns_ref);
-               }
-               
        }
 
        Symbol parse_class_declaration (Gee.List<Attribute>? attrs) throws ParseError {
index fb83039..2f18854 100644 (file)
@@ -1,6 +1,6 @@
 /* valanamespacereference.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter
+ * Copyright (C) 2006-2008  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -43,9 +43,9 @@ public class Vala.NamespaceReference : CodeNode {
         * @param source_reference reference to source code
         * @return                 newly created namespace reference
         */
-       public NamespaceReference (string name, SourceReference source_reference) {
-               this.source_reference = source_reference;
+       public NamespaceReference (string name, SourceReference? source_reference = null) {
                this.name = name;
+               this.source_reference = source_reference;
        }
        
        public override void accept (CodeVisitor visitor) {
index b9db1ef..1203c9f 100644 (file)
@@ -108,6 +108,12 @@ public class Vala.SourceFile : Object {
         * @param ns reference to namespace
         */
        public void add_using_directive (NamespaceReference ns) {
+               foreach (NamespaceReference using_directive in using_directives) {
+                       if (using_directive.name == ns.name) {
+                               // ignore duplicates
+                               return;
+                       }
+               }
                using_directives.add (ns);
        }