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");
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;
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;
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");
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) {
}
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 ();
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) {
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) {