void cont_BindingOutput(CONTEXT C, SYMBOL Var) { symbol_Print(cont_ContextBindingSymbol(C, Var)); putchar(':'); symbol_Print(Var); fputs(" -> ", stdout); if (cont_VarIsBound(C, Var)) { term_PrintPrefix(cont_ContextBindingTerm(C, Var)); } else fputs("unbound", stdout); fputs(" in ", stdout); if (cont_VarIsUsed(C, Var)) { printf("%ld", (unsigned long)cont_ContextBindingContext(C, Var)); } else fputs("NULL (unused)", stdout); fputs(". ", stdout); if (cont_VarIsClosed(C, Var)) { fputs("(closed)", stdout); } if (!cont_VarIsBound(C, Var) && !cont_VarIsUsed(C, Var)) { fputs(",(free)", stdout); } if (cont_VarIsRenamed(C, Var)) { fputs(",(renamed): ", stdout); symbol_Print(Var); fputs(" -> ", stdout); symbol_Print(cont_ContextBindingRenaming(C, Var)); } fflush(stdout); }
static void st_CloseUsedVariables(const CONTEXT Context, LIST NodeList) /************************************************************** INPUT: RETURNS: EFFECTS: ***************************************************************/ { for (; list_Exist(NodeList); NodeList = list_Cdr(NodeList)) { SUBST Subst; for (Subst = ((st_INDEX)list_Car(NodeList))->subst; subst_Exist(Subst); Subst = subst_Next(Subst)) if (!cont_VarIsUsed(Context, subst_Dom(Subst))) cont_CreateClosedBinding(Context, subst_Dom(Subst)); if (!st_IsLeaf((st_INDEX)list_Car(NodeList))) st_CloseUsedVariables(Context, ((st_INDEX)list_Car(NodeList))->subnodes); } }