string_type.value_owned = false;
to_string_method = new Method ("to_string", string_type);
to_string_method.access = SymbolAccessibility.PUBLIC;
- to_string_method.external = true;
+ to_string_method.is_extern = true;
to_string_method.owner = type_symbol.scope;
to_string_method.this_parameter = new Parameter ("this", this);
to_string_method.scope.add (to_string_method.this_parameter.name, to_string_method.this_parameter);
var c = new Constant (id, type, initializer, get_src (begin), comment);
c.access = get_default_accessibility (id);
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- c.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ c.is_extern = true;
}
if (ModifierFlags.NEW in flags) {
c.hides = true;
set_attributes (f, attrs);
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- f.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ f.is_extern = true;
}
if (ModifierFlags.NEW in flags) {
f.hides = true;
method.is_inline = true;
}
if (ModifierFlags.EXTERN in flags) {
- method.external = true;
+ method.is_extern = true;
}
expect (TokenType.EOL);
if (accept_block ()) {
method.body = parse_block ();
- } else if (scanner.source_file.file_type == SourceFileType.PACKAGE) {
- method.external = true;
+ method.external = false;
}
return method;
}
if (ModifierFlags.NEW in flags) {
prop.hides = true;
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- prop.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ prop.is_extern = true;
}
if (ModifierFlags.ASYNC in flags) {
} else {
iface.access = get_default_accessibility (sym.name);
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- iface.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ iface.is_extern = true;
}
set_attributes (iface, attrs);
foreach (TypeParameter type_param in type_param_list) {
} else {
en.access = get_default_accessibility (sym.name);
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- en.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ en.is_extern = true;
}
set_attributes (en, attrs);
if (accept_block ()) {
method.body = parse_block ();
- } else if (scanner.source_file.file_type == SourceFileType.PACKAGE) {
- method.external = true;
+ method.external = false;
}
return method;
if (ModifierFlags.STATIC in flags) {
d.has_target = false;
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- d.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ d.is_extern = true;
}
set_attributes (d, attrs);
if (!error_domain)
set_type_id_ccode (sym);
- sym.external = true;
sym.access = SymbolAccessibility.PUBLIC;
string common_prefix = null;
set_type_id_ccode (st);
- st.external = true;
st.access = SymbolAccessibility.PUBLIC;
var gtype_struct_for = reader.get_attribute ("glib:is-gtype-struct-for");
set_type_id_ccode (cl);
cl.access = SymbolAccessibility.PUBLIC;
- cl.external = true;
next ();
set_type_id_ccode (iface);
iface.access = SymbolAccessibility.PUBLIC;
- iface.external = true;
-
next ();
var prop = new Property (current.name, type, null, null, current.source_reference);
prop.comment = comment;
prop.access = SymbolAccessibility.PUBLIC;
- prop.external = true;
prop.is_abstract = is_abstract;
if (no_array_length || array_null_terminated) {
prop.set_attribute_bool ("CCode", "array_length", !no_array_length);
s.access = SymbolAccessibility.PUBLIC;
s.comment = comment;
- s.external = true;
// Transform fixed-array properties of return-type into ccode-attribute
var array_type = return_type as ArrayType;
require_copy_free = cl.has_attribute_argument ("CCode", "type_id");
cl.access = SymbolAccessibility.PUBLIC;
- cl.external = true;
if (metadata.has_argument (ArgumentType.BASE_TYPE)) {
cl.add_base_type (parse_type_from_string (metadata.get_string (ArgumentType.BASE_TYPE), true, metadata.get_source_reference (ArgumentType.BASE_TYPE)));
st = (Struct) current.symbol;
}
st.access = SymbolAccessibility.PUBLIC;
- st.external = true;
next ();
current.symbol = c;
c.access = SymbolAccessibility.PUBLIC;
c.comment = comment;
- c.external = true;
if (no_array_length || array_null_terminated) {
c.set_attribute_bool ("CCode", "array_length", !no_array_length);
}
st.base_type = base_type;
}
st.comment = alias.comment;
- st.external = true;
st.set_simple_type (simple_type);
alias.symbol = st;
} else if (type_sym is Class) {
cl.add_base_type (base_type);
}
cl.comment = alias.comment;
- cl.external = true;
cl.is_compact = ((Class) type_sym).is_compact;
alias.symbol = cl;
} else if (type_sym is Interface) {
iface.add_prerequisite (base_type);
}
iface.comment = alias.comment;
- iface.external = true;
alias.symbol = iface;
} else if (type_sym is Delegate) {
var orig = (Delegate) type_sym;
deleg.attributes.append (attribute);
}
- deleg.external = true;
-
alias.symbol = deleg;
} else if (type_sym != null) {
Report.warning (alias.source_reference, "alias `%s' for `%s' is not supported".printf (alias.get_full_name (), type_sym.get_full_name ()));
method = new CreationMethod (((CreationMethod) finish_method).class_name, null, m.source_reference);
method.access = m.access;
method.binding = m.binding;
- method.external = true;
method.coroutine = true;
method.has_construct_function = finish_method.has_construct_function;
if (is_abstract && body != null) {
Report.error (source_reference, "Abstract methods cannot have bodies");
- } else if ((is_abstract || is_virtual) && external && !external_package && !parent_symbol.external) {
+ } else if ((is_abstract || is_virtual) && is_extern) {
Report.error (source_reference, "Extern methods cannot be abstract or virtual");
- } else if (external && body != null) {
+ } else if (is_extern && body != null) {
Report.error (source_reference, "Extern methods cannot have bodies");
} else if (!is_abstract && !external && source_type == SourceFileType.SOURCE && body == null) {
Report.error (source_reference, "Non-abstract, non-extern methods must have bodies");
if (ModifierFlags.ABSTRACT in flags) {
cl.is_abstract = true;
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- cl.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ cl.is_extern = true;
}
set_attributes (cl, attrs);
foreach (TypeParameter type_param in type_param_list) {
var c = new Constant (id, type, null, get_src (begin), comment);
c.access = access;
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- c.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ c.is_extern = true;
}
if (ModifierFlags.NEW in flags) {
c.hides = true;
|| ModifierFlags.OVERRIDE in flags) {
Report.error (f.source_reference, "abstract, virtual, and override modifiers are not applicable to fields");
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- f.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ f.is_extern = true;
}
if (ModifierFlags.NEW in flags) {
f.hides = true;
method.is_inline = true;
}
if (ModifierFlags.EXTERN in flags) {
- method.external = true;
+ method.is_extern = true;
}
expect (TokenType.OPEN_PARENS);
if (current () != TokenType.CLOSE_PARENS) {
}
if (!accept (TokenType.SEMICOLON)) {
method.body = parse_block ();
- } else if (scanner.source_file.file_type == SourceFileType.PACKAGE) {
- method.external = true;
+ method.external = false;
}
parent.add_method (method);
if (ModifierFlags.ASYNC in flags) {
Report.error (prop.source_reference, "async properties are not supported yet");
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- prop.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ prop.is_extern = true;
}
if ((prop.is_abstract && prop.is_virtual)
|| (prop.is_abstract && prop.overrides)
}
var st = new Struct (sym.name, get_src (begin), comment);
st.access = access;
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- st.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ st.is_extern = true;
}
set_attributes (st, attrs);
foreach (TypeParameter type_param in type_param_list) {
}
var iface = new Interface (sym.name, get_src (begin), comment);
iface.access = access;
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- iface.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ iface.is_extern = true;
}
set_attributes (iface, attrs);
foreach (TypeParameter type_param in type_param_list) {
var sym = parse_symbol_name ();
var en = new Enum (sym.name, get_src (begin), comment);
en.access = access;
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- en.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ en.is_extern = true;
}
set_attributes (en, attrs);
var sym = parse_symbol_name ();
var ed = new ErrorDomain (sym.name, get_src (begin), comment);
ed.access = access;
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- ed.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ ed.is_extern = true;
}
set_attributes (ed, attrs);
method = new CreationMethod (sym.inner.name, sym.name, get_src (begin), comment);
}
if (ModifierFlags.EXTERN in flags) {
- method.external = true;
+ method.is_extern = true;
}
if (ModifierFlags.ABSTRACT in flags
|| ModifierFlags.VIRTUAL in flags
set_attributes (method, attrs);
if (!accept (TokenType.SEMICOLON)) {
method.body = parse_block ();
- } else if (scanner.source_file.file_type == SourceFileType.PACKAGE) {
- method.external = true;
+ method.external = false;
}
parent.add_method (method);
}
d.has_target = false;
}
- if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
- d.external = true;
+ if (ModifierFlags.EXTERN in flags) {
+ d.is_extern = true;
}
if (!d.get_attribute_bool ("CCode", "has_typedef", true)) {
if (!d.external) {
get { return _scope; }
}
+ public bool is_extern { get; set; }
+
/**
* Specifies whether the implementation is external, for example in
* a separate C source file or in an external library.
*/
- public bool external { get; set; }
+ public bool external {
+ get {
+ if (_external != null) {
+ return _external;
+ }
+ return is_extern || external_package;
+ }
+ set {
+ _external = value;
+ }
+ }
/**
* Specifies whether the implementation is in an external library.
private weak Scope _owner;
private Scope _scope;
+ private bool? _external;
protected Symbol (string? name, SourceReference? source_reference, Comment? comment = null) {
this.name = name;