From: Jürg Billeter Date: Wed, 29 Jul 2009 15:44:00 +0000 (+0200) Subject: GIR parser: Skip checks not relevant for bindings X-Git-Tag: 0.7.5~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=edd36760152af3bebf1152f47254d3c6dff0ba9a;p=thirdparty%2Fvala.git GIR parser: Skip checks not relevant for bindings --- diff --git a/vala/valamethod.vala b/vala/valamethod.vala index 7fad75685..d1f51724e 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -690,7 +690,7 @@ public class Vala.Method : Member { if (is_abstract && body != null) { Report.error (source_reference, "Abstract methods cannot have bodies"); - } else if ((is_abstract || is_virtual) && external && !external_package) { + } else if ((is_abstract || is_virtual) && external && !external_package && !parent_symbol.external) { Report.error (source_reference, "Extern methods cannot be abstract or virtual"); } else if (external && body != null) { Report.error (source_reference, "Extern methods cannot have bodies"); diff --git a/vala/valasignal.vala b/vala/valasignal.vala index 3a69f598f..79ede7374 100644 --- a/vala/valasignal.vala +++ b/vala/valasignal.vala @@ -248,6 +248,7 @@ public class Vala.Signal : Member, Lockable { if (is_virtual) { default_handler = new Method (name, return_type, source_reference); default_handler.access = access; + default_handler.external = external; default_handler.is_virtual = true; default_handler.vfunc_name = name; default_handler.signal_reference = this; diff --git a/vapigen/valagirparser.vala b/vapigen/valagirparser.vala index 1e4812096..ea4388fdf 100644 --- a/vapigen/valagirparser.vala +++ b/vapigen/valagirparser.vala @@ -264,6 +264,7 @@ public class Vala.GirParser : CodeVisitor { var st = new Struct (reader.get_attribute ("name"), get_current_src ()); st.access = SymbolAccessibility.PUBLIC; st.base_type = parse_type_from_name (reader.get_attribute ("target")); + st.external = true; next (); end_element ("alias"); return st; @@ -496,6 +497,7 @@ public class Vala.GirParser : CodeVisitor { Struct parse_record () { start_element ("record"); var st = new Struct (reader.get_attribute ("name"), get_current_src ()); + st.external = true; string glib_is_gtype_struct_for = reader.get_attribute ("glib:is-gtype-struct-for"); @@ -558,6 +560,7 @@ public class Vala.GirParser : CodeVisitor { start_element ("class"); var cl = new Class (reader.get_attribute ("name"), get_current_src ()); cl.access = SymbolAccessibility.PUBLIC; + cl.external = true; string cname = reader.get_attribute ("c:type"); if (cname != null) { @@ -980,6 +983,7 @@ public class Vala.GirParser : CodeVisitor { } var sig = new Signal (name, return_type); sig.access = SymbolAccessibility.PUBLIC; + sig.external = true; if (current_token == MarkupTokenType.START_ELEMENT && reader.name == "parameters") { start_element ("parameters"); next (); @@ -996,6 +1000,7 @@ public class Vala.GirParser : CodeVisitor { start_element ("glib:boxed"); var st = new Struct (reader.get_attribute ("glib:name")); st.access = SymbolAccessibility.PUBLIC; + st.external = true; string cname = reader.get_attribute ("c:type"); if (cname != null) { @@ -1026,6 +1031,7 @@ public class Vala.GirParser : CodeVisitor { start_element ("union"); var st = new Struct (reader.get_attribute ("name")); st.access = SymbolAccessibility.PUBLIC; + st.external = true; next (); while (current_token == MarkupTokenType.START_ELEMENT) {