* @brief Calculate finalization of classes and entities by
* inspecting the class hierarchy.
* @author Michael Beck
- * @version $Id$
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
-#endif
#include "typerep.h"
#include "irprog_t.h"
DEBUG_ONLY(static firm_dbg_module_t *dbg;)
-static void do_finalization(type_or_ent *tore, void *env) {
- ir_type *glob_tp = env;
+static void do_finalization(type_or_ent tore, void *env)
+{
+ ir_type *glob_tp = (ir_type*)env;
- if (is_type(tore)) {
- ir_type *cls = (ir_type *)tore;
+ if (is_type(tore.typ)) {
+ ir_type *cls = tore.typ;
if (! is_Class_type(cls) || cls == glob_tp)
return;
return;
if (get_class_n_subtypes(cls) == 0) {
/* Note that we set the final property even for the
- frame/tls types this way. Should not made any problems. */
+ frame/global types this way. Should not made any problems. */
set_class_final(cls, 1);
DB((dbg, LEVEL_1, " made final Class %s\n",
- get_type_name(cls)));
+ get_class_name(cls)));
}
} else {
- ir_entity *ent = (ir_entity *)tore;
+ ir_entity *ent = tore.ent;
ir_type *owner;
if (is_entity_final(ent))
assert(get_entity_n_overwrittenby(ent) == 0);
set_entity_final(ent, 1);
DB((dbg, LEVEL_1, " made final %s::%s\n",
- get_type_name(owner), get_entity_name(ent)));
+ get_compound_name(owner), get_entity_name(ent)));
} else if (get_entity_n_overwrittenby(ent) == 0) {
set_entity_final(ent, 1);
DB((dbg, LEVEL_1, " made final %s::%s\n",
- get_type_name(owner), get_entity_name(ent)));
+ get_compound_name(owner), get_entity_name(ent)));
}
}
-} /* do_finalization */
+}
-/**
- * If we have the closed world assumption, we can calculate the
- * finalization of classes and entities by inspecting the class hierarchy.
- * After this is done, all classes and entities that are not overridden
- * anymore have the final property set.
- */
-void types_calc_finalization(void) {
- if (! get_opt_closed_world())
- return;
+void types_calc_finalization(void)
+{
+ if (! get_opt_closed_world())
+ return;
FIRM_DBG_REGISTER(dbg, "firm.tr.finalization");
- /* types must be visited before it's entities */
+ /* types must be visited before their entities */
type_walk(do_finalization, NULL, get_glob_type());
}