3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-15 18:35:44 +00:00

Centralize and document TRACE tags using X-macros (#7657)

* Introduce X-macro-based trace tag definition
- Created trace_tags.def to centralize TRACE tag definitions
- Each tag includes a symbolic name and description
- Set up enum class TraceTag for type-safe usage in TRACE macros

* Add script to generate Markdown documentation from trace_tags.def
- Python script parses trace_tags.def and outputs trace_tags.md

* Refactor TRACE_NEW to prepend TraceTag and pass enum to is_trace_enabled

* trace: improve trace tag handling system with hierarchical tagging

- Introduce hierarchical tag-class structure: enabling a tag class activates all child tags
- Unify TRACE, STRACE, SCTRACE, and CTRACE under enum TraceTag
- Implement initial version of trace_tag.def using X(tag, tag_class, description)
  (class names and descriptions to be refined in a future update)

* trace: replace all string-based TRACE tags with enum TraceTag
- Migrated all TRACE, STRACE, SCTRACE, and CTRACE macros to use enum TraceTag values instead of raw string literals

* trace : add cstring header

* trace : Add Markdown documentation generation from trace_tags.def via mk_api_doc.py

* trace : rename macro parameter 'class' to 'tag_class' and remove Unicode comment in trace_tags.h.

* trace : Add TODO comment for future implementation of tag_class activation

* trace : Disable code related to tag_class until implementation is ready (#7663).
This commit is contained in:
LeeYoungJoon 2025-05-28 22:31:25 +09:00 committed by GitHub
parent d766292dab
commit 0a93ff515d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
583 changed files with 8698 additions and 7299 deletions

View file

@ -131,7 +131,7 @@ void lemma_bool_inductive_generalizer::operator()(lemma_ref &lemma) {
}
if (dirty) {
TRACE("spacer",
TRACE(spacer,
tout << "Generalized from:\n" << mk_and(lemma->get_cube())
<< "\ninto\n" << mk_and(cube) << "\n";);
@ -164,10 +164,10 @@ void unsat_core_generalizer::operator()(lemma_ref &lemma)
expr_ref_vector core(m);
VERIFY(pt.is_invariant(lemma->level(), lemma.get(), uses_level, &core));
CTRACE("spacer", old_sz > core.size(),
CTRACE(spacer, old_sz > core.size(),
tout << "unsat core reduced lemma from: "
<< old_sz << " to " << core.size() << "\n";);
CTRACE("spacer", old_level < uses_level,
CTRACE(spacer, old_level < uses_level,
tout << "unsat core moved lemma up from: "
<< old_level << " to " << uses_level << "\n";);
if (old_sz > core.size()) {
@ -233,7 +233,7 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
v = mk_and(core);
for_each_expr(cap, v);
CTRACE("core_array_eq", symb.size() > 1 && symb.size() <= 8,
CTRACE(core_array_eq, symb.size() > 1 && symb.size() <= 8,
tout << "found " << symb.size() << " array variables in: \n"
<< v << "\n";);
@ -276,7 +276,7 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
lbool res = sol->check_sat(0, nullptr);
if (res == l_false) {
TRACE("core_array_eq",
TRACE(core_array_eq,
tout << "strengthened " << mk_pp(lits.get(i), m)
<< " with " << mk_pp(mk_not(m, e), m) << "\n";);
lits[i] = mk_not(m, e);
@ -289,7 +289,7 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
// nothing changed
if (!dirty) return;
TRACE("core_array_eq",
TRACE(core_array_eq,
tout << "new possible core " << mk_and(lits) << "\n";);
@ -297,16 +297,16 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
// -- check if the generalized result is consistent with trans
unsigned uses_level1;
if (pt.check_inductive(lemma->level(), lits, uses_level1, lemma->weakness())) {
TRACE("core_array_eq", tout << "Inductive!\n";);
TRACE(core_array_eq, tout << "Inductive!\n";);
lemma->update_cube(lemma->get_pob(), lits);
lemma->set_level(uses_level1);
}
else
{TRACE("core_array_eq", tout << "Not-Inductive!\n";);}
{TRACE(core_array_eq, tout << "Not-Inductive!\n";);}
}
void lemma_eq_generalizer::operator() (lemma_ref &lemma) {
TRACE("core_eq", tout << "Transforming equivalence classes\n";);
TRACE(core_eq, tout << "Transforming equivalence classes\n";);
if (lemma->get_cube().empty()) return;