this->u_.func_value = function;
}
+// Declare an unknown object as a type declaration.
+
+void
+Named_object::declare_as_type()
+{
+ gcc_assert(this->classification_ == NAMED_OBJECT_UNKNOWN);
+ Unknown_name* unk = this->u_.unknown_value;
+ this->classification_ = NAMED_OBJECT_TYPE_DECLARATION;
+ this->u_.type_declaration = new Type_declaration(unk->location());
+ delete unk;
+}
+
// Return the location of a named object.
source_location
void
set_function_value(Function*);
+ // Declare an unknown name as a type declaration.
+ void
+ declare_as_type();
+
// Export this object.
void
export_named_object(Export*) const;
Function* function)
{
Named_object* no = this->named_object();
- gcc_assert(no->is_type_declaration());
+ if (no->is_unknown())
+ no->declare_as_type();
return no->type_declaration_value()->add_method(name, function);
}
source_location location)
{
Named_object* no = this->named_object();
- gcc_assert(no->is_type_declaration());
+ if (no->is_unknown())
+ no->declare_as_type();
Type_declaration* td = no->type_declaration_value();
return td->add_method_declaration(name, type, location);
}