[vala/switch-to-gir] girparser: Support aliases whose target is none



commit fc7300aa3ed6a7f3b6de6937b1186ce29a0545c1
Author: Luca Bruno <lethalman88 gmail com>
Date:   Tue Aug 24 12:54:07 2010 +0200

    girparser: Support aliases whose target is none

 vala/valagirparser.vala |   25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)
---
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 635e655..8d5ded9 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -730,8 +730,10 @@ public class Vala.GirParser : CodeVisitor {
 
 	void postprocess_aliases () {
 		foreach (var alias in aliases) {
-			Symbol sym = alias.parent_namespace;
+			DataType base_type = null;
+			Symbol type_sym = null;
 			if (alias.base_type is UnresolvedType) {
+				Symbol parent = alias.parent_namespace;
 				var type = (UnresolvedType) alias.base_type;
 				// simulate some basic two-steps of the symbol resolver
 				if (type.unresolved_symbol.inner != null) {
@@ -739,20 +741,29 @@ public class Vala.GirParser : CodeVisitor {
 					if (name in gir_namespaces) {
 						name = gir_namespaces[name];
 					}
-					sym = context.root.scope.lookup (name);
+					parent = context.root.scope.lookup (name);
 				}
-				sym = sym.scope.lookup (type.unresolved_symbol.name);
+				base_type = alias.base_type;
+				type_sym = parent.scope.lookup (type.unresolved_symbol.name);
+			} else if (!(alias.base_type is VoidType)) {
+				base_type = alias.base_type;
+				type_sym = base_type.data_type;
 			}
-			if (sym == null || sym is Struct) {
+
+			if (base_type == null || type_sym == null || type_sym is Struct) {
 				var st = new Struct (alias.name, alias.source_reference);
 				st.access = SymbolAccessibility.PUBLIC;
-				st.base_type = alias.base_type;
+				if (base_type != null) {
+					st.base_type = base_type;
+				}
 				st.external = true;
 				alias.parent_namespace.add_struct (st);
-			} else if (sym is Class) {
+			} else if (type_sym is Class) {
 				var cl = new Class (alias.name, alias.source_reference);
 				cl.access = SymbolAccessibility.PUBLIC;
-				cl.add_base_type (alias.base_type);
+				if (base_type != null) {
+					cl.add_base_type (base_type);
+				}
 				cl.external = true;
 				alias.parent_namespace.add_class (cl);
 			}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]