[vala/switch-to-gir] girparser: Support aliases whose target is none
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/switch-to-gir] girparser: Support aliases whose target is none
- Date: Tue, 24 Aug 2010 11:52:19 +0000 (UTC)
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]