1 ///////////////////////////////////////////////////////////////////////////////
3 // This file implements the helper routines for the
4 // constraint compiler, which is based (very, very, I mean, very)
5 // loosely on the Warren Abstract Machine (WAM).
7 ///////////////////////////////////////////////////////////////////////////////
14 ///////////////////////////////////////////////////////////////////////////////
16 // Instantiate the datatypes
18 ///////////////////////////////////////////////////////////////////////////////
19 instantiate datatype VarKind, WAM, Label, List<WAM>, List<Label>,
20 Instness, Determinism;
22 ///////////////////////////////////////////////////////////////////////////////
26 ///////////////////////////////////////////////////////////////////////////////
28 ///////////////////////////////////////////////////////////////////////////////
30 // Dereference a determinism variable.
32 ///////////////////////////////////////////////////////////////////////////////
33 Determinism deref (Determinism det)
34 { match while (det) { VAR_DET (d as ! UNKNOWN_DET): { det = d; } }
38 ///////////////////////////////////////////////////////////////////////////////
40 // Dereference an instantiatedness variable.
42 ///////////////////////////////////////////////////////////////////////////////
43 Instness deref (Instness inst)
44 { match while (inst) { VARinst (i as ! NOinst): { inst = i; } }
48 ///////////////////////////////////////////////////////////////////////////////
50 // Pretty print the determinism.
52 ///////////////////////////////////////////////////////////////////////////////
53 std::ostream& operator << (std::ostream& f, Determinism d)
55 { UNKNOWN_DET: { f << "unknown"; }
56 | DET: { f << "det"; }
57 | SEMI_DET: { f << "semidet"; }
58 | MULTI_DET: { f << "multidet"; }
59 | NON_DET: { f << "nondet"; }
60 | FAIL_DET: { f << "fail"; }
61 | ERROR_DET: { f << "error"; }
62 | VAR_DET _: { f << "???"; }
67 ///////////////////////////////////////////////////////////////////////////////
69 // Instantiateness analysis.
71 ///////////////////////////////////////////////////////////////////////////////
73 ///////////////////////////////////////////////////////////////////////////////
75 // Determinism analysis.
77 ///////////////////////////////////////////////////////////////////////////////