#define PrintAnnotation(annot)
static void PrintUnaryState (StateKind kind, ObjectKind obj)
{
switch (kind)
{ case OnB: FPutS ("OnB ", StdError); break;
case OnA: FPutS ("OnA ", StdError); break;
case StrictOnA: FPutS ("StrictOnA ", StdError); break;
case SemiStrict: FPutS ("SemiStrict ", StdError); break;
case StrictRedirection: FPutS ("StrictRedirection ", StdError); break;
case Parallel: FPutS ("Parallel ", StdError); break;
case Undefined: FPutS ("Undefined ", StdError); break;
case UnderEval: FPutS ("UnderEval ", StdError); break;
}
switch (obj){
case UnknownObj: FPutS ("???", StdError); break;
case IntObj: FPutS ("Int ", StdError); break;
case BoolObj: FPutS ("Bool ", StdError); break;
case CharObj: FPutS ("Char ", StdError); break;
case StringObj: FPutS ("String ", StdError); break;
case RealObj: FPutS ("Real ", StdError); break;
case FileObj: FPutS ("File ", StdError); break;
case TupleObj: FPutS ("Tuple ", StdError); break;
case ListObj: FPutS ("List ", StdError); break;
case ProcIdObj: FPutS ("ProcId ", StdError); break;
}
} /* PrintUnaryState */
static void PrintState (State state)
{
return;
if (ArityOfState (state) == 1)
PrintUnaryState (KindOfState(state),ObjectOfState(state));
} /* PrintState */
static void PrintNode (Node node, Bool brackets);
static void PrintNodeId (NodeId nid, Node follow)
{
if (nid)
{ if (nid -> nid_name)
FPrintF (StdError, "%d.%s",nid->nid_refcount, nid -> nid_name -> Name);
else
FPrintF (StdError, "%d.sel%ld",nid->nid_refcount, (long) nid);
if (follow)
FPutC (':', StdError);
}
} /* PrintNodeId */
static void PrintArgument (Args arg, Bool brackets)
{
PrintState (arg -> arg_state);
PrintNodeId (arg -> arg_id, arg -> arg_pattern);
if (arg -> arg_pattern)
PrintNode (arg -> arg_pattern, brackets);
} /* PrintArgument */
static void PrintArguments (Args args, char separator, Bool brackets)
{
if (args)
{ PrintArgument (args, brackets);
for (args = args -> arg_next; args; args = args -> arg_next)
{ FPutC (separator, StdError);
PrintArgument (args, brackets);
}
}
} /* PrintArguments */
static void PrintNodeDefs (NodeDefs defs, Bool brackets);
static void PrintNode (Node node, Bool brackets)
{
if (IsOnACycle (node -> node_number))
FPutS ("<C>", StdError);
PrintState (node -> node_state);
if (node -> node_kind == NormalNodeKind)
{ if (node->node_symbol -> symb_kind == tuple_denot)
{ FPutC ('(', StdError);
PrintArguments (GetNodeArguments(node), ',', False);
FPutC (')', StdError);
}
else if (node->node_symbol -> symb_kind == list_type)
{ FPutC ('[', StdError);
PrintArguments (GetNodeArguments(node), ',', False);
FPutC (']', StdError);
}
else
{ if (brackets && GetNodeArguments(node))
FPutC ('(', StdError);
FPutS (ConvertSymbolToString (node->node_symbol), StdError);
if (GetNodeArguments(node))
{ FPutC (' ', StdError);
PrintArguments (GetNodeArguments(node),' ', True);
if (brackets)
FPutC (')', StdError);
}
}
}
else
{ Args elsepart, thenpart, condpart = GetIfArguments(node);
thenpart = condpart -> arg_next;
elsepart = thenpart -> arg_next;
if (brackets)
FPutC ('(', StdError);
FPutS ("IF ", StdError);
PrintArgument (condpart, True);
FPutC ('\n', StdError);
FPutS ("THEN ", StdError);
PrintArgument (thenpart, True);
if (node->node_then_node_defs)
{ FPutS ("[", StdError);
PrintNodeDefs (node->node_then_node_defs, False);
FPutS ("]\nELSE ", StdError);
}
else
FPutS ("\nELSE ", StdError);
PrintArgument (elsepart, True);
if (GetElseShared(node))
{ FPutS ("[\n", StdError);
PrintNodeDefs (GetElseShared(node), False);
FPutS ("]\n", StdError);
}
if (brackets)
FPutC (')', StdError);
}
} /* PrintNode */
static void PrintNodeDefs (NodeDefs defs, Bool brackets)
{
for ( ; defs; defs = defs -> def_next)
{ FPrintF (StdError, "%d: ", (int) defs->def_number);
PrintNodeId (defs -> def_id, defs -> def_node);
if (defs -> def_node)
PrintNode (defs -> def_node, False);
FPutS ("\n", StdError);
}
} /* PrintNodeDefs */
static void PrintRuleAlt (RuleAlts rulealt)
{
PrintNode (rulealt -> alt_lhs -> def_node, False);
FPutS (" -> ", StdError);
if (rulealt -> alt_kind == Contractum)
PrintNodeDefs (rulealt -> alt_rhs.alt_rhs_graph, False);
else
FPutS (rulealt -> alt_rhs.alt_rhs_root -> redir_id -> nid_name -> Name,
StdError);
FPutS (";\n", StdError);
} /* PrintRuleAlt */
static void PrintRule (Rule rule)
{
RuleAlts rulealt = rule -> rule_alts;
for (; rulealt; rulealt = rulealt -> alt_next);
PrintRuleAlt (rulealt);
} /* PrintRule */