static new L> rules; // text, comment, ID static new L fulfillments; static new LinkedHashSet temporaryFacts; static L> dm_allRulesFromRulesModuleWithCommentsAndIDs() { ret rules; } svoid dm_gazelle_setRuleComments_verbose(S ruleID, S comments) { set(objectWhere(rules, c := ruleID), b := comments); } static PairS dm_textAndCommentForRule(S ruleID) { T3 t = objectWhere(rules, c := ruleID); ret t == null ? null : pair(t.a, t.b); } static Pair dm_gazelle_addRuleWithComment(S text, S comment) { T3 t = objectWhere(rules, a := text, b := comment); if (t != null) ret pair(t.c, false); S id = aGlobalID(); rules.add(t3(text, comment, id)); ret pair(id, true); } static L dm_gazelle_fulfillmentsForRule(S ruleID) { ret objectsWhere(fulfillments, rule := ruleID); } static GazelleEvalContext dm_gazelle_stdEvalContext() { ret dm_gazelle_stdEvalContext(dm_allRulesFromRulesModuleWithCommentsAndIDs()); } static GazelleEvalContext dm_gazelle_stdEvalContext(L> rules) { ret gazelle_stdEvalContext(rules); } sS dm_gazelle_addTempFact(S text) { temporaryFacts.add(text); ret aGlobalID(); }