]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Namespace: set current context at construction time
authorDaniel Espinosa <esodan@gmail.com>
Fri, 31 Dec 2021 20:53:55 +0000 (14:53 -0600)
committerDaniel Espinosa <esodan@gmail.com>
Mon, 3 Jan 2022 23:51:33 +0000 (17:51 -0600)
With this change any namespace will have access to
current context, to allow access from its childs

Related to issue #1270

vala/valacodecontext.vala
vala/valagenieparser.vala
vala/valagirparser.vala
vala/valanamespace.vala
vala/valaparser.vala
vapigen/valagidlparser.vala

index 0b9022eb1fbf3a723cd247068f681c91d633bac7..d3a11547d32afe71b8859fc7e2b4eb1d4bcad294 100644 (file)
@@ -206,7 +206,7 @@ public class Vala.CodeContext {
        private List<SourceFile> source_files = new ArrayList<SourceFile> ();
        private Map<string,unowned SourceFile> source_files_map = new HashMap<string,unowned SourceFile> (str_hash, str_equal);
        private List<string> c_source_files = new ArrayList<string> (str_equal);
-       private Namespace _root = new Namespace (null);
+       private Namespace _root;
 
        private List<string> packages = new ArrayList<string> (str_equal);
 
@@ -241,6 +241,7 @@ public class Vala.CodeContext {
        public UsedAttr used_attr { get; set; }
 
        public CodeContext () {
+               _root = new Namespace (null, this);
                add_default_defines ();
 
                resolver = new SymbolResolver ();
index 87a125f226ffd351a938416f0514eb478bfbd469..b581135cf98c4cd0f1a1a1dfcac6cd408ed3e576 100644 (file)
@@ -2575,7 +2575,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                var begin = get_location ();
                expect (TokenType.NAMESPACE);
                var sym = parse_symbol_name ();
-               var ns = new Namespace (sym.name, get_src (begin));
+               var ns = new Namespace (sym.name, context, get_src (begin));
                if (comment != null) {
                        ns.add_comment (comment);
                        comment = null;
@@ -2587,7 +2587,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Namespace result = ns;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       ns = new Namespace (sym.name, result.source_reference);
+                       ns = new Namespace (sym.name, context, result.source_reference);
                        ns.add_namespace ((Namespace) result);
                        result = ns;
                }
@@ -2722,7 +2722,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = cl;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, cl.source_reference);
+                       var ns = new Namespace (sym.name, context, cl.source_reference);
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
                        } else {
@@ -3326,7 +3326,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = st;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, st.source_reference);
+                       var ns = new Namespace (sym.name, context, st.source_reference);
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
                        } else {
@@ -3395,7 +3395,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = iface;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, iface.source_reference);
+                       var ns = new Namespace (sym.name, context, iface.source_reference);
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
                        } else {
@@ -3482,7 +3482,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = en;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, en.source_reference);
+                       var ns = new Namespace (sym.name, context, en.source_reference);
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
                        } else {
@@ -3538,7 +3538,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = ed;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, ed.source_reference);
+                       var ns = new Namespace (sym.name, context, ed.source_reference);
 
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
@@ -3826,7 +3826,7 @@ public class Vala.Genie.Parser : CodeVisitor {
                Symbol result = d;
                while (sym.inner != null) {
                        sym = sym.inner;
-                       var ns = new Namespace (sym.name, d.source_reference);
+                       var ns = new Namespace (sym.name, context,  d.source_reference);
 
                        if (result is Namespace) {
                                ns.add_namespace ((Namespace) result);
index f99c64cebc67ca5299d700424e245b7d6c9599fc..cf952d72cef7a997d6b5a1892a68dfe5b2e713a5 100644 (file)
@@ -2210,7 +2210,7 @@ public class Vala.GirParser : CodeVisitor {
                Namespace ns;
                push_node (vala_namespace, true);
                if (current.new_symbol) {
-                       ns = new Namespace (vala_namespace, current.source_reference);
+                       ns = new Namespace (vala_namespace, context, current.source_reference);
                        current.symbol = ns;
                } else {
                        ns = (Namespace) current.symbol;
@@ -3838,7 +3838,7 @@ public class Vala.GirParser : CodeVisitor {
        void create_new_namespaces () {
                foreach (var node in Node.new_namespaces) {
                        if (node.symbol == null) {
-                               node.symbol = new Namespace (node.name, node.source_reference);
+                               node.symbol = new Namespace (node.name, context, node.source_reference);
                        }
                }
        }
index d62babb63fd306e42f631de6ca3caa505c280c11..73b0d314e38ffdd8d3e3b5dfac193f62bd5edb49 100644 (file)
@@ -49,9 +49,10 @@ public class Vala.Namespace : Symbol {
         * @param source_reference reference to source code
         * @return                 newly created namespace
         */
-       public Namespace (string? name, SourceReference? source_reference = null) {
+       public Namespace (string? name, CodeContext context, SourceReference? source_reference = null) {
                base (name, source_reference);
                access = SymbolAccessibility.PUBLIC;
+               this.context = context;
        }
 
        /**
index 5d12d1d684503c45e38b8fa0f870ed60a47c169d..3ad133ac91d4f57c30213fdd4b0bdb052abff1da 100644 (file)
@@ -2888,7 +2888,7 @@ public class Vala.Parser : CodeVisitor {
                var begin = get_location ();
                expect (TokenType.NAMESPACE);
                var sym = parse_symbol_name ();
-               var ns = new Namespace (sym.name, get_src (begin));
+               var ns = new Namespace (sym.name, context, get_src (begin));
                if (comment != null) {
                        ns.add_comment (comment);
                        comment = null;
@@ -2916,7 +2916,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, ns.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, ns.source_reference) : parent);
                        next.add_namespace ((Namespace) result);
                        result = next;
                }
@@ -3048,7 +3048,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, cl.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, cl.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else if (!partial_reparse && cl.is_partial) {
@@ -3497,7 +3497,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, st.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, st.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else {
@@ -3540,7 +3540,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, iface.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, iface.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else {
@@ -3607,7 +3607,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, en.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, en.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else {
@@ -3672,7 +3672,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, ed.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, ed.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else {
@@ -3927,7 +3927,7 @@ public class Vala.Parser : CodeVisitor {
                while (sym != null) {
                        sym = sym.inner;
 
-                       Symbol next = (sym != null ? new Namespace (sym.name, d.source_reference) : parent);
+                       Symbol next = (sym != null ? new Namespace (sym.name, context, d.source_reference) : parent);
                        if (result is Namespace) {
                                next.add_namespace ((Namespace) result);
                        } else {
index 007896ec440f150299029537760fcd0fb7d30ae7..2b1005de76c52d39b0ec0ed447924e5615dcbad1 100644 (file)
@@ -475,7 +475,7 @@ public class Vala.GIdlParser : CodeVisitor {
                foreach ( unowned string tok in path ) {
                        cc = cp.scope.lookup (tok);
                        if ( cc == null ) {
-                               cc = new Namespace (tok, current_source_reference);
+                               cc = new Namespace (tok, context, current_source_reference);
                                add_symbol_to_container (cp, cc);
                        }
                        cp = cc;
@@ -494,7 +494,7 @@ public class Vala.GIdlParser : CodeVisitor {
                                ns.source_reference = current_source_reference;
                        }
                } else {
-                       ns = new Namespace (module.name, current_source_reference);
+                       ns = new Namespace (module.name, context, current_source_reference);
                }
 
                current_namespace = ns;