void DoResolve()
{
if (abstract_origin != 0) {
DieSubprogram aorigin = comp_unit.GetSubprogram (abstract_origin);
if (aorigin == null)
throw new InternalError ();
DoResolveSpecification (aorigin);
}
if (specification != 0) {
DieSubprogram ssubprog = comp_unit.GetSubprogram (specification);
if (ssubprog == null)
throw new InternalError ();
DoResolveSpecification (ssubprog);
}
locals = resolve_variables (local_dies);
parameters = resolve_variables (param_dies);
if (param_dies != null) {
DieMethodVariable first_var = (DieMethodVariable) param_dies [0];
if ((first_var.IsArtificial != null) && (first_var.Name == "this"))
this_var = first_var.Variable;
}
debug ("{0} resolve: {1} {2} {3} {4}", Offset, param_dies != null, local_dies != null,
name != null, this_var != null);
if ((param_dies != null) && (name != null)) {
StringBuilder sb = new StringBuilder ();
if (this_var != null) {
sb.Append (this_var.Type.Name);
sb.Append ("::");
}
sb.Append (name);
sb.Append ("(");
bool first = true;
for (int i = 0; i < param_dies.Count; i++) {
DieMethodVariable the_param = (DieMethodVariable) param_dies [i];
if (!first)
sb.Append (", ");
if (the_param.Type == null)
continue;
sb.Append (the_param.Type.Name);
if (the_param.Name != null) {
sb.Append (" ");
sb.Append (the_param.Name);
}
first = false;
}
sb.Append (")");
full_name = sb.ToString ();
}
}