[vala] GIR parser: Skip checks not relevant for bindings



commit edd36760152af3bebf1152f47254d3c6dff0ba9a
Author: Jürg Billeter <j bitron ch>
Date:   Wed Jul 29 17:44:00 2009 +0200

    GIR parser: Skip checks not relevant for bindings

 vala/valamethod.vala       |    2 +-
 vala/valasignal.vala       |    1 +
 vapigen/valagirparser.vala |    6 ++++++
 3 files changed, 8 insertions(+), 1 deletions(-)
---
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 7fad756..d1f5172 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 3a69f59..79ede73 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 1e48120..ea4388f 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) {



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