public class Vala.SymbolResolver : CodeVisitor {
Symbol root_symbol;
Scope current_scope;
+ CodeContext context;
/**
* Resolve symbol names in the specified code context.
* @param context a code context
*/
public void resolve (CodeContext context) {
+ this.context = context;
+
root_symbol = context.root;
context.root.accept (this);
if (type.type_symbol is Class) {
if (cl.base_class != null) {
cl.error = true;
- Report.error (type.source_reference, "%s: Classes cannot have multiple base classes (`%s' and `%s')", cl.get_full_name (), cl.base_class.get_full_name (), type.type_symbol.get_full_name ());
+ context.report.log_error (type.source_reference, "%s: Classes cannot have multiple base classes (`%s' and `%s')", cl.get_full_name (), cl.base_class.get_full_name (), type.type_symbol.get_full_name ());
return;
}
cl.base_class = (Class) type.type_symbol;
if (cl.base_class.is_subtype_of (cl)) {
cl.error = true;
- Report.error (type.source_reference, "Base class cycle (`%s' and `%s')", cl.get_full_name (), cl.base_class.get_full_name ());
+ context.report.log_error (type.source_reference, "Base class cycle (`%s' and `%s')", cl.get_full_name (), cl.base_class.get_full_name ());
return;
}
}
if (base_type != null) {
if (base_type.is_subtype_of (st)) {
st.error = true;
- Report.error (st.source_reference, "Base struct cycle (`%s' and `%s')", st.get_full_name (), base_type.get_full_name ());
+ context.report.log_error (st.source_reference, "Base struct cycle (`%s' and `%s')", st.get_full_name (), base_type.get_full_name ());
return;
}
}
foreach (DataType type in iface.get_prerequisites ()) {
if (type.type_symbol != null && type.type_symbol.is_subtype_of (iface)) {
iface.error = true;
- Report.error (type.source_reference, "Prerequisite cycle (`%s' and `%s')", iface.get_full_name (), type.type_symbol.get_full_name ());
+ context.report.log_error (type.source_reference, "Prerequisite cycle (`%s' and `%s')", iface.get_full_name (), type.type_symbol.get_full_name ());
return;
}
}
ns.namespace_symbol = resolve_symbol (unresolved_symbol);
if (!(ns.namespace_symbol is Namespace)) {
ns.error = true;
- Report.error (ns.source_reference, "The namespace name `%s' could not be found", unresolved_symbol.to_string ());
+ context.report.log_error (ns.source_reference, "The namespace name `%s' could not be found", unresolved_symbol.to_string ());
return;
}
}
if (local_sym != null && local_sym.access == SymbolAccessibility.PUBLIC) {
if (sym != null && sym != local_sym) {
unresolved_symbol.error = true;
- Report.error (unresolved_symbol.source_reference, "`%s' is an ambiguous reference between `%s' and `%s'", unresolved_symbol.name, sym.get_full_name (), local_sym.get_full_name ());
+ context.report.log_error (unresolved_symbol.source_reference, "`%s' is an ambiguous reference between `%s' and `%s'", unresolved_symbol.name, sym.get_full_name (), local_sym.get_full_name ());
return null;
}
sym = local_sym;
if (local_sym != null) {
if (sym != null && sym != local_sym) {
unresolved_symbol.error = true;
- Report.error (unresolved_symbol.source_reference, "`%s' is an ambiguous reference between `%s' and `%s'", unresolved_symbol.name, sym.get_full_name (), local_sym.get_full_name ());
+ context.report.log_error (unresolved_symbol.source_reference, "`%s' is an ambiguous reference between `%s' and `%s'", unresolved_symbol.name, sym.get_full_name (), local_sym.get_full_name ());
return null;
}
sym = local_sym;
var parent_symbol = resolve_symbol (unresolved_symbol.inner);
if (parent_symbol == null) {
unresolved_symbol.error = true;
- Report.error (unresolved_symbol.inner.source_reference, "The symbol `%s' could not be found", unresolved_symbol.inner.name);
+ context.report.log_error (unresolved_symbol.inner.source_reference, "The symbol `%s' could not be found", unresolved_symbol.inner.name);
return null;
}
parent_symbol.used = true;
if (sym == null) {
// don't report same error twice
if (!unresolved_type.unresolved_symbol.error) {
- Report.error (unresolved_type.source_reference, "The type name `%s' could not be found", unresolved_type.unresolved_symbol.to_string ());
+ context.report.log_error (unresolved_type.source_reference, "The type name `%s' could not be found", unresolved_type.unresolved_symbol.to_string ());
}
return new InvalidType ();
}
} else if (sym is ErrorCode) {
type = new ErrorType ((ErrorDomain) sym.parent_symbol, (ErrorCode) sym, unresolved_type.source_reference);
} else {
- Report.error (unresolved_type.source_reference, "internal error: `%s' is not a supported type", sym.get_full_name ());
+ context.report.log_error (unresolved_type.source_reference, "internal error: `%s' is not a supported type", sym.get_full_name ());
return new InvalidType ();
}
} else {
- Report.error (unresolved_type.source_reference, "`%s' is not a type", sym.get_full_name ());
+ context.report.log_error (unresolved_type.source_reference, "`%s' is not a type", sym.get_full_name ());
return new InvalidType ();
}