void show_symbol_table_plain(const namespacet &ns, std::ostream &out) { out << std::endl << "Symbols:" << std::endl; out << "Number of symbols: " << ns.get_context().size() << std::endl; out << std::endl; ns.get_context().foreach_operand_in_order([&out, &ns](const symbolt &s) { int mode; if(s.mode == "") mode = 0; else { mode = get_mode(id2string(s.mode)); if(mode < 0) throw "symbol " + id2string(s.name) + " has unknown mode"; } std::unique_ptr<languaget> p(mode_table[mode].new_language()); std::string type_str, value_str; if(s.type.is_not_nil()) p->from_type(s.type, type_str, ns); if(s.value.is_not_nil()) p->from_expr(s.value, value_str, ns); out << "Symbol......: " << s.name << std::endl; out << "Pretty name.: " << s.pretty_name << std::endl; out << "Module......: " << s.module << std::endl; out << "Base name...: " << s.base_name << std::endl; out << "Mode........: " << s.mode << " (" << mode << ")" << std::endl; out << "Type........: " << type_str << std::endl; out << "Value.......: " << value_str << std::endl; out << "Flags.......:"; if(s.lvalue) out << " lvalue"; if(s.static_lifetime) out << " static_lifetime"; if(s.file_local) out << " file_local"; if(s.is_type) out << " type"; if(s.is_extern) out << " extern"; if(s.is_macro) out << " macro"; if(s.is_used) out << " used"; out << std::endl; out << "Location....: " << s.location << std::endl; out << std::endl; }); }
bool cpp_typecheck( exprt &expr, message_handlert &message_handler, const namespacet &ns) { contextt context; cpp_parse_treet cpp_parse_tree; cpp_typecheckt cpp_typecheck( cpp_parse_tree, context, ns.get_context(), "", message_handler); try { cpp_typecheck.typecheck_expr(expr); } catch(int e) { cpp_typecheck.error(); } catch(const char *e) { cpp_typecheck.error(e); } catch(const std::string &e) { cpp_typecheck.error(e); } return cpp_typecheck.get_error_found(); }
bool ansi_c_typecheck( exprt &expr, message_handlert &message_handler, const namespacet &ns) { contextt context1, context2; ansi_c_parse_treet ansi_c_parse_tree; context1 = ns.get_context(); #if 0 ansi_c_typecheckt ansi_c_typecheck( ansi_c_parse_tree, context, ns.get_context(), "", message_handler); #endif ansi_c_typecheckt ansi_c_typecheck( ansi_c_parse_tree, context1, context2, "", message_handler); try { ansi_c_typecheck.typecheck_expr(expr); } catch(int e) { ansi_c_typecheck.error(); } catch(const char *e) { ansi_c_typecheck.error(e); } catch(const std::string &e) { ansi_c_typecheck.error(e); } return ansi_c_typecheck.get_error_found(); }
bool xml_typecheck(exprt &expr, std::ostream &err, const namespacet &ns) { contextt context; xml_parse_treet xml_parse_tree; #if 0 bool result=false; xml_typecheckt xml_typecheck(xml_parse, context, ns.get_context(), "", err); try { xml_typecheck.typecheck_expr(expr); } catch(int e) { result=true; } catch(const char *e) { str << e << std::endl; result=true; } catch(const std::string &e) { str << e << std::endl; result=true; } return result; #endif return true; }