String ErrorSubSystem::get_location(const SuifObject *obj) const { if (obj == NULL) return emptyString; LString style = get_default_location_module(); if (style == emptyLString) { return(obj->getClassName()); } ModuleSubSystem *ms = get_suif_env()->get_module_subsystem(); Module *module = ms->retrieve_module(style); LString location_iface = "get_object_location"; if (!module->supports_interface(location_iface)) { return(obj->getClassName()); } LocationDispatch pfunc = (LocationDispatch)module->get_interface(location_iface); //TODO: #ifdef MSVC if((int)pfunc==0x1)pfunc=NULL; #endif if (pfunc) { return ((*pfunc)(obj).print_to_string()); } else { // cerr << "installed location style" // << style.c_str() << "has no valid print function" << endl; return(obj->getClassName()); } }
String to_cstring(const SuifObject *obj) { if (obj == NULL) return("(nil)"); SuifEnv* suif_env = obj->get_suif_env(); ModuleSubSystem *ms = suif_env->get_module_subsystem(); CPrintStyleModule* cprint = (CPrintStyleModule*) ms->retrieve_module("cprint"); suif_assert_message(cprint, ("CPrintStyleModule is not loaded")); return cprint->print_to_string(obj); }
extern "C" void EXPORT init_print_styles(SuifEnv* suif) { suif->require_module("basicnodes"); suif->require_module("suifnodes"); ModuleSubSystem* mSubSystem = suif->get_module_subsystem(); if (!mSubSystem->retrieve_module(CPrintStyleModule::get_class_name())) { Module *m = new CPrintStyleModule(suif); mSubSystem -> register_module(m); //suif->get_print_subsystem()->set_default_print_style(m->get_module_name()); } }
extern "C" void init_s2c(SuifEnv *suif_env) { suif_env->require_module("suifnodes"); suif_env->require_module("cfenodes"); suif_env->require_module("suifpasses"); ModuleSubSystem* mSubSystem = suif_env->get_module_subsystem(); if (!mSubSystem->retrieve_module("s2c")) { mSubSystem -> register_module( new S2CPass( suif_env ) ); } }
extern "C" void init_vtblpass( SuifEnv* suif ) { initialize_libraries( suif ); ModuleSubSystem *mss = suif->get_module_subsystem(); if ( !mss->retrieve_module("build_single_inheritance_vtbl") ) { mss->register_module(new VtblPass( suif ) ); mss->register_module(new VtblAnnotePass( suif ) ); mss->register_module(new VtblSlotAnnotePass( suif ) ); mss->register_module(new VtblSlotCountAnnotePass( suif ) ); mss->register_module(new InstanceMethodCallStatementLoweringPass( suif ) ); mss->register_module(new InstanceMethodCallExpressionLoweringPass( suif ) ); } }
//---------------------------------------------------------------------------- extern "C" void EXPORT init_suifprinter(SuifEnv* suif) { suif->require_module("suifpasses"); // These are needed by the cprint style suif->require_module("basicnodes"); suif->require_module("suifnodes"); ModuleSubSystem* mSubSystem = suif->get_module_subsystem(); if (!mSubSystem->retrieve_module(SuifPrinterModule::ClassName)) { Module *m = new SuifPrinterModule(suif); mSubSystem -> register_module(m); suif->get_print_subsystem()->set_default_print_style(m->get_module_name()); m = new CPrintStyleModule(suif); mSubSystem -> register_module(m); init_suifprinter_extras(suif); m = new IdPrinter(suif); mSubSystem -> register_module(m); m = new MCPrintStyleModule(suif); mSubSystem -> register_module(m); } }