Implemented the Debug trait for all data structures

This commit is contained in:
notoria
2020-04-26 02:18:45 +02:00
parent ae9232a2cb
commit c98e869564
33 changed files with 198 additions and 67 deletions

View File

@@ -27,7 +27,7 @@ libc = "0.2.62"
nix = "0.15.0" nix = "0.15.0"
num-rug-adapter = { optional = true, version = "0.1.3" } num-rug-adapter = { optional = true, version = "0.1.3" }
ordered-float = "0.5.0" ordered-float = "0.5.0"
prolog_parser = { version = "0.8.53", default-features = false } prolog_parser = { version = "0.8.54", default-features = false }
ref_thread_local = "0.0.0" ref_thread_local = "0.0.0"
rug = { version = "1.4.0", optional = true } rug = { version = "1.4.0", optional = true }
rustyline = "6.0.0" rustyline = "6.0.0"

View File

@@ -23,6 +23,7 @@ use std::ops::{Add, Div, Mul, Neg, Sub};
use std::rc::Rc; use std::rc::Rc;
use std::vec::Vec; use std::vec::Vec;
#[derive(Debug)]
pub struct ArithInstructionIterator<'a> { pub struct ArithInstructionIterator<'a> {
state_stack: Vec<TermIterState<'a>>, state_stack: Vec<TermIterState<'a>>,
} }
@@ -68,6 +69,7 @@ impl<'a> ArithInstructionIterator<'a> {
} }
} }
#[derive(Debug)]
pub enum ArithTermRef<'a> { pub enum ArithTermRef<'a> {
Constant(&'a Constant), Constant(&'a Constant),
Op(ClauseName, usize), // name, arity. Op(ClauseName, usize), // name, arity.
@@ -109,6 +111,7 @@ impl<'a> Iterator for ArithInstructionIterator<'a> {
} }
} }
#[derive(Debug)]
pub struct ArithmeticEvaluator<'a> { pub struct ArithmeticEvaluator<'a> {
bindings: &'a AllocVarDict, bindings: &'a AllocVarDict,
interm: Vec<ArithmeticTerm>, interm: Vec<ArithmeticTerm>,

View File

@@ -8,7 +8,7 @@ use ref_thread_local::RefThreadLocal;
use std::collections::BTreeMap; use std::collections::BTreeMap;
#[derive(Clone, Copy, Eq, PartialEq)] #[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub enum CompareNumberQT { pub enum CompareNumberQT {
GreaterThan, GreaterThan,
LessThan, LessThan,
@@ -31,7 +31,7 @@ impl CompareNumberQT {
} }
} }
#[derive(Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompareTermQT { pub enum CompareTermQT {
LessThan, LessThan,
LessThanOrEqual, LessThanOrEqual,
@@ -50,7 +50,7 @@ impl CompareTermQT {
} }
} }
#[derive(Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub enum ArithmeticTerm { pub enum ArithmeticTerm {
Reg(RegType), Reg(RegType),
Interm(usize), Interm(usize),
@@ -67,7 +67,7 @@ impl ArithmeticTerm {
} }
} }
#[derive(Clone, Eq, PartialEq)] #[derive(Debug, Clone, Eq, PartialEq)]
pub enum InlinedClauseType { pub enum InlinedClauseType {
CompareNumber(CompareNumberQT, ArithmeticTerm, ArithmeticTerm), CompareNumber(CompareNumberQT, ArithmeticTerm, ArithmeticTerm),
IsAtom(RegType), IsAtom(RegType),
@@ -145,7 +145,7 @@ impl InlinedClauseType {
} }
} }
#[derive(Copy, Clone, Eq, PartialEq)] #[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum SystemClauseType { pub enum SystemClauseType {
AbolishClause, AbolishClause,
AbolishModuleClause, AbolishModuleClause,
@@ -557,7 +557,7 @@ impl SystemClauseType {
} }
} }
#[derive(Clone, Eq, PartialEq)] #[derive(Debug, Clone, Eq, PartialEq)]
pub enum BuiltInClauseType { pub enum BuiltInClauseType {
AcyclicTerm, AcyclicTerm,
Arg, Arg,
@@ -575,7 +575,7 @@ pub enum BuiltInClauseType {
Sort, Sort,
} }
#[derive(Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub enum ClauseType { pub enum ClauseType {
BuiltIn(BuiltInClauseType), BuiltIn(BuiltInClauseType),
CallN, CallN,

View File

@@ -17,12 +17,14 @@ use std::cell::Cell;
use std::rc::Rc; use std::rc::Rc;
use std::vec::Vec; use std::vec::Vec;
#[derive(Debug)]
pub struct CodeGenerator<TermMarker> { pub struct CodeGenerator<TermMarker> {
marker: TermMarker, marker: TermMarker,
pub var_count: IndexMap<Rc<Var>, usize>, pub var_count: IndexMap<Rc<Var>, usize>,
non_counted_bt: bool, non_counted_bt: bool,
} }
#[derive(Debug)]
pub struct ConjunctInfo<'a> { pub struct ConjunctInfo<'a> {
pub perm_vs: VariableFixtures<'a>, pub perm_vs: VariableFixtures<'a>,
pub num_of_chunks: usize, pub num_of_chunks: usize,

View File

@@ -12,6 +12,7 @@ use std::cell::Cell;
use std::collections::BTreeSet; use std::collections::BTreeSet;
use std::rc::Rc; use std::rc::Rc;
#[derive(Debug)]
pub struct DebrayAllocator { pub struct DebrayAllocator {
bindings: IndexMap<Rc<Var>, VarData>, bindings: IndexMap<Rc<Var>, VarData>,
arg_c: usize, arg_c: usize,

View File

@@ -30,7 +30,7 @@ valid_time([H1,H2,M1,M2], T) :-
memberd_t(H2, [0,1,2,3,4,5,6,7,8,9], TH2), memberd_t(H2, [0,1,2,3,4,5,6,7,8,9], TH2),
memberd_t(M1, [0,1,2,3,4,5], TM1), memberd_t(M1, [0,1,2,3,4,5], TM1),
memberd_t(M2, [0,1,2,3,4,5,6,7,8,9], TM2), memberd_t(M2, [0,1,2,3,4,5,6,7,8,9], TM2),
( maplist(=(true), [TH1, TH2, TM1, TM2]) -> ( maplist(=(true), [TH1, TH2, TM1, TM2]) ->
( H1 =:= 2 -> ( H1 =:= 2 ->
( H2 =< 3 -> ( H2 =< 3 ->
T = true T = true

View File

@@ -13,6 +13,7 @@ use std::rc::Rc;
use std::vec::Vec; use std::vec::Vec;
// labeled with chunk numbers. // labeled with chunk numbers.
#[derive(Debug)]
pub enum VarStatus { pub enum VarStatus {
Perm(usize), Perm(usize),
Temp(usize, TempVarData), // Perm(chunk_num) | Temp(chunk_num, _) Temp(usize, TempVarData), // Perm(chunk_num) | Temp(chunk_num, _)
@@ -22,6 +23,7 @@ pub type OccurrenceSet = BTreeSet<(GenContext, usize)>;
// Perm: 0 initially, a stack register once processed. // Perm: 0 initially, a stack register once processed.
// Temp: labeled with chunk_num and temp offset (unassigned if 0). // Temp: labeled with chunk_num and temp offset (unassigned if 0).
#[derive(Debug)]
pub enum VarData { pub enum VarData {
Perm(usize), Perm(usize),
Temp(usize, usize, TempVarData), Temp(usize, usize, TempVarData),
@@ -36,6 +38,7 @@ impl VarData {
} }
} }
#[derive(Debug)]
pub struct TempVarData { pub struct TempVarData {
pub last_term_arity: usize, pub last_term_arity: usize,
pub use_set: OccurrenceSet, pub use_set: OccurrenceSet,
@@ -79,6 +82,7 @@ impl TempVarData {
type VariableFixture<'a> = (VarStatus, Vec<&'a Cell<VarReg>>); type VariableFixture<'a> = (VarStatus, Vec<&'a Cell<VarReg>>);
#[derive(Debug)]
pub struct VariableFixtures<'a>{ pub struct VariableFixtures<'a>{
perm_vars: IndexMap<Rc<Var>, VariableFixture<'a>>, perm_vars: IndexMap<Rc<Var>, VariableFixture<'a>>,
last_chunk_temp_vars: IndexSet<Rc<Var>> last_chunk_temp_vars: IndexSet<Rc<Var>>
@@ -248,6 +252,7 @@ impl<'a> VariableFixtures<'a> {
} }
} }
#[derive(Debug)]
pub struct UnsafeVarMarker { pub struct UnsafeVarMarker {
pub unsafe_vars: IndexMap<RegType, usize>, pub unsafe_vars: IndexMap<RegType, usize>,
pub safe_vars: IndexSet<RegType>, pub safe_vars: IndexSet<RegType>,

View File

@@ -22,7 +22,7 @@ pub type PredicateKey = (ClauseName, usize); // name, arity.
// of vars (we get their adjoining cells this way). // of vars (we get their adjoining cells this way).
pub type JumpStub = Vec<Term>; pub type JumpStub = Vec<Term>;
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum TopLevel { pub enum TopLevel {
Declaration(Declaration), Declaration(Declaration),
Fact(Term, usize, usize), // Term, line_num, col_num Fact(Term, usize, usize), // Term, line_num, col_num
@@ -42,7 +42,7 @@ impl TopLevel {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum Level { pub enum Level {
Deep, Deep,
Root, Root,
@@ -58,7 +58,7 @@ impl Level {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum QueryTerm { pub enum QueryTerm {
// register, clause type, subterms, use default call policy. // register, clause type, subterms, use default call policy.
Clause(Cell<RegType>, ClauseType, Vec<Box<Term>>, bool), Clause(Cell<RegType>, ClauseType, Vec<Box<Term>>, bool),
@@ -86,13 +86,13 @@ impl QueryTerm {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub struct Rule { pub struct Rule {
pub head: (ClauseName, Vec<Box<Term>>, QueryTerm), pub head: (ClauseName, Vec<Box<Term>>, QueryTerm),
pub clauses: Vec<QueryTerm>, pub clauses: Vec<QueryTerm>,
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub struct Predicate(pub Vec<PredicateClause>); pub struct Predicate(pub Vec<PredicateClause>);
impl Predicate { impl Predicate {
@@ -114,7 +114,7 @@ impl Predicate {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum ListingSource { pub enum ListingSource {
File(ClauseName, PathBuf), // filename, path File(ClauseName, PathBuf), // filename, path
User, User,
@@ -326,7 +326,7 @@ impl ClauseConsistency for Predicate {
pub type CompiledResult = (Predicate, VecDeque<TopLevel>); pub type CompiledResult = (Predicate, VecDeque<TopLevel>);
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum PredicateClause { pub enum PredicateClause {
Fact(Term, usize, usize), // Term, line number, column number. Fact(Term, usize, usize), // Term, line number, column number.
Rule(Rule, usize, usize), // Term, line number, column number. Rule(Rule, usize, usize), // Term, line number, column number.
@@ -371,7 +371,7 @@ impl PredicateClause {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum ModuleSource { pub enum ModuleSource {
Library(ClauseName), Library(ClauseName),
File(ClauseName), File(ClauseName),
@@ -392,13 +392,13 @@ impl ModuleSource {
pub type ScopedPredicateKey = (ClauseName, PredicateKey); // module name, predicate indicator. pub type ScopedPredicateKey = (ClauseName, PredicateKey); // module name, predicate indicator.
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum MultiFileIndicator { pub enum MultiFileIndicator {
LocalScoped(ClauseName, usize), // name, arity LocalScoped(ClauseName, usize), // name, arity
ModuleScoped(ScopedPredicateKey), ModuleScoped(ScopedPredicateKey),
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum Declaration { pub enum Declaration {
Dynamic(ClauseName, usize), // name, arity Dynamic(ClauseName, usize), // name, arity
EndOfFile, EndOfFile,
@@ -433,7 +433,7 @@ impl Declaration {
} }
} }
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct OpDecl(pub usize, pub Specifier, pub ClauseName); pub struct OpDecl(pub usize, pub Specifier, pub ClauseName);
impl OpDecl { impl OpDecl {
@@ -558,18 +558,19 @@ pub fn fetch_op_spec(
pub type ModuleDir = IndexMap<ClauseName, Module>; pub type ModuleDir = IndexMap<ClauseName, Module>;
#[derive(Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub enum ModuleExport { pub enum ModuleExport {
OpDecl(OpDecl), OpDecl(OpDecl),
PredicateKey(PredicateKey), PredicateKey(PredicateKey),
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub struct ModuleDecl { pub struct ModuleDecl {
pub name: ClauseName, pub name: ClauseName,
pub exports: Vec<ModuleExport>, pub exports: Vec<ModuleExport>,
} }
#[derive(Debug)]
pub struct Module { pub struct Module {
pub atom_tbl: TabledData<Atom>, pub atom_tbl: TabledData<Atom>,
pub module_decl: ModuleDecl, pub module_decl: ModuleDecl,
@@ -587,7 +588,7 @@ pub struct Module {
pub listing_src: ListingSource, pub listing_src: ListingSource,
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum Number { pub enum Number {
Float(OrderedFloat<f64>), Float(OrderedFloat<f64>),
Integer(Rc<Integer>), Integer(Rc<Integer>),

View File

@@ -7,6 +7,7 @@ use std::cmp::Ordering;
use std::ops::Deref; use std::ops::Deref;
use std::vec::Vec; use std::vec::Vec;
#[derive(Debug)]
pub struct HCPreOrderIterator<'a> { pub struct HCPreOrderIterator<'a> {
pub machine_st: &'a MachineState, pub machine_st: &'a MachineState,
pub state_stack: Vec<Addr>, pub state_stack: Vec<Addr>,
@@ -127,6 +128,7 @@ pub trait MutStackHCIterator<'b> where Self: Iterator
fn stack(&'b mut self) -> Self::MutStack; fn stack(&'b mut self) -> Self::MutStack;
} }
#[derive(Debug)]
pub struct HCPostOrderIterator<'a> { pub struct HCPostOrderIterator<'a> {
base_iter: HCPreOrderIterator<'a>, base_iter: HCPreOrderIterator<'a>,
parent_stack: Vec<(usize, Addr)>, // number of children, parent node. parent_stack: Vec<(usize, Addr)>, // number of children, parent node.
@@ -229,6 +231,7 @@ impl<'b, 'a: 'b> MutStackHCIterator<'b> for HCPreOrderIterator<'a> {
} }
} }
#[derive(Debug)]
pub struct HCAcyclicIterator<'a> { pub struct HCAcyclicIterator<'a> {
iter: HCPreOrderIterator<'a>, iter: HCPreOrderIterator<'a>,
seen: IndexSet<Addr>, seen: IndexSet<Addr>,
@@ -269,6 +272,7 @@ impl<'a> Iterator for HCAcyclicIterator<'a>
} }
} }
#[derive(Debug)]
pub struct HCZippedAcyclicIterator<'a> { pub struct HCZippedAcyclicIterator<'a> {
i1: HCPreOrderIterator<'a>, i1: HCPreOrderIterator<'a>,
i2: HCPreOrderIterator<'a>, i2: HCPreOrderIterator<'a>,

View File

@@ -18,7 +18,7 @@ use std::ops::{Range, RangeFrom};
use std::rc::Rc; use std::rc::Rc;
/* contains the location, name, precision and Specifier of the parent op. */ /* contains the location, name, precision and Specifier of the parent op. */
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum DirectedOp { pub enum DirectedOp {
Left(ClauseName, SharedOpDesc), Left(ClauseName, SharedOpDesc),
Right(ClauseName, SharedOpDesc), Right(ClauseName, SharedOpDesc),
@@ -162,7 +162,7 @@ fn char_to_string(is_quoted: bool, c: char) -> String {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
enum TokenOrRedirect { enum TokenOrRedirect {
Atom(ClauseName), Atom(ClauseName),
BarAsOp, BarAsOp,
@@ -197,6 +197,7 @@ pub trait HCValueOutputter {
fn range_from(&self, range: RangeFrom<usize>) -> &str; fn range_from(&self, range: RangeFrom<usize>) -> &str;
} }
#[derive(Debug)]
pub struct PrinterOutputter { pub struct PrinterOutputter {
contents: String, contents: String,
} }
@@ -335,6 +336,7 @@ impl MachineState {
type ReverseHeapVarDict = IndexMap<Addr, Rc<Var>>; type ReverseHeapVarDict = IndexMap<Addr, Rc<Var>>;
#[derive(Debug)]
pub struct HCPrinter<'a, Outputter> { pub struct HCPrinter<'a, Outputter> {
outputter: Outputter, outputter: Outputter,
machine_st: &'a MachineState, machine_st: &'a MachineState,

View File

@@ -45,6 +45,7 @@ impl ArithmeticTerm {
} }
} }
#[derive(Debug)]
pub enum ChoiceInstruction { pub enum ChoiceInstruction {
DefaultRetryMeElse(usize), DefaultRetryMeElse(usize),
DefaultTrustMe, DefaultTrustMe,
@@ -75,6 +76,7 @@ impl ChoiceInstruction {
} }
} }
#[derive(Debug)]
pub enum CutInstruction { pub enum CutInstruction {
Cut(RegType), Cut(RegType),
GetLevel(RegType), GetLevel(RegType),
@@ -104,6 +106,7 @@ impl CutInstruction {
} }
} }
#[derive(Debug)]
pub enum IndexedChoiceInstruction { pub enum IndexedChoiceInstruction {
Retry(usize), Retry(usize),
Trust(usize), Trust(usize),
@@ -140,6 +143,7 @@ impl IndexedChoiceInstruction {
} }
} }
#[derive(Debug)]
pub enum Line { pub enum Line {
Arithmetic(ArithmeticInstruction), Arithmetic(ArithmeticInstruction),
Choice(ChoiceInstruction), Choice(ChoiceInstruction),
@@ -175,7 +179,7 @@ impl Line {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum ArithmeticInstruction { pub enum ArithmeticInstruction {
Add(ArithmeticTerm, ArithmeticTerm, usize), Add(ArithmeticTerm, ArithmeticTerm, usize),
Sub(ArithmeticTerm, ArithmeticTerm, usize), Sub(ArithmeticTerm, ArithmeticTerm, usize),
@@ -374,6 +378,7 @@ impl ArithmeticInstruction {
} }
} }
#[derive(Debug)]
pub enum ControlInstruction { pub enum ControlInstruction {
Allocate(usize), // num_frames. Allocate(usize), // num_frames.
// name, arity, perm_vars after threshold, last call, use default call policy. // name, arity, perm_vars after threshold, last call, use default call policy.
@@ -419,6 +424,7 @@ impl ControlInstruction {
} }
} }
#[derive(Debug)]
pub enum IndexingInstruction { pub enum IndexingInstruction {
SwitchOnTerm(usize, usize, usize, usize), SwitchOnTerm(usize, usize, usize, usize),
SwitchOnConstant(usize, IndexMap<Constant, usize>), SwitchOnConstant(usize, IndexMap<Constant, usize>),
@@ -459,7 +465,7 @@ impl IndexingInstruction {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum FactInstruction { pub enum FactInstruction {
GetConstant(Level, Constant, RegType), GetConstant(Level, Constant, RegType),
GetList(Level, RegType), GetList(Level, RegType),
@@ -571,7 +577,7 @@ impl FactInstruction {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum QueryInstruction { pub enum QueryInstruction {
GetVariable(RegType, usize), GetVariable(RegType, usize),
PutConstant(Level, Constant, RegType), PutConstant(Level, Constant, RegType),

View File

@@ -6,11 +6,12 @@ use crate::prolog::machine::machine_indices::*;
use std::cell::Cell; use std::cell::Cell;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::fmt;
use std::iter::*; use std::iter::*;
use std::rc::Rc; use std::rc::Rc;
use std::vec::Vec; use std::vec::Vec;
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum TermRef<'a> { pub enum TermRef<'a> {
AnonVar(Level), AnonVar(Level),
Cons(Level, &'a Cell<RegType>, &'a Term, &'a Term), Cons(Level, &'a Cell<RegType>, &'a Term, &'a Term),
@@ -33,6 +34,7 @@ impl<'a> TermRef<'a> {
} }
} }
#[derive(Debug)]
pub enum TermIterState<'a> { pub enum TermIterState<'a> {
AnonVar(Level), AnonVar(Level),
Constant(Level, &'a Cell<RegType>, &'a Constant), Constant(Level, &'a Cell<RegType>, &'a Constant),
@@ -124,6 +126,7 @@ impl<'a> TermIterState<'a> {
} }
} }
#[derive(Debug)]
pub struct QueryIterator<'a> { pub struct QueryIterator<'a> {
state_stack: Vec<TermIterState<'a>>, state_stack: Vec<TermIterState<'a>>,
} }
@@ -294,6 +297,7 @@ impl<'a> Iterator for QueryIterator<'a> {
} }
} }
#[derive(Debug)]
pub struct FactIterator<'a> { pub struct FactIterator<'a> {
state_queue: VecDeque<TermIterState<'a>>, state_queue: VecDeque<TermIterState<'a>>,
iterable_root: bool, iterable_root: bool,
@@ -402,6 +406,7 @@ pub fn breadth_first_iter(term: &Term, iterable_root: bool) -> FactIterator {
FactIterator::new(term, iterable_root) FactIterator::new(term, iterable_root)
} }
#[derive(Debug)]
pub enum ChunkedTerm<'a> { pub enum ChunkedTerm<'a> {
HeadClause(ClauseName, &'a Vec<Box<Term>>), HeadClause(ClauseName, &'a Vec<Box<Term>>),
BodyTerm(&'a QueryTerm), BodyTerm(&'a QueryTerm),
@@ -439,6 +444,18 @@ pub struct ChunkedIterator<'a> {
cut_var_in_head: bool, cut_var_in_head: bool,
} }
impl<'a> fmt::Debug for ChunkedIterator<'a> {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt.debug_struct("ChunkedIterator")
.field("chunk_num", &self.chunk_num)
// Hacky solution.
.field("iter", &"Box<dyn Iterator<Item = ChunkedTerm<'a>> + 'a>")
.field("deep_cut_encountered", &self.deep_cut_encountered)
.field("cut_var_in_head", &self.cut_var_in_head)
.finish()
}
}
type ChunkedIteratorItem<'a> = (usize, usize, Vec<ChunkedTerm<'a>>); type ChunkedIteratorItem<'a> = (usize, usize, Vec<ChunkedTerm<'a>>);
type RuleBodyIteratorItem<'a> = (usize, usize, Vec<&'a QueryTerm>); type RuleBodyIteratorItem<'a> = (usize, usize, Vec<&'a QueryTerm>);

View File

@@ -9,7 +9,7 @@ between(Lower, Upper, X) :-
must_be(integer, Lower), must_be(integer, Lower),
must_be(integer, Upper), must_be(integer, Upper),
can_be(integer, X), can_be(integer, X),
between_(Lower, Upper, X). between_(Lower, Upper, X).
between_(Lower, Upper, Lower) :- between_(Lower, Upper, Lower) :-
Lower =< Upper. Lower =< Upper.

View File

@@ -291,7 +291,7 @@ wkl_add_to_existing_answer_cluster(Worklist, Answer) :-
wkl_add_to_new_answer_cluster( wkl_add_to_new_answer_cluster(
wkl_worklist(Dll,_Ria,_FlagExecutingWork,_AlreadyInMetaworklist,_TableIdentifier), wkl_worklist(Dll,_Ria,_FlagExecutingWork,_AlreadyInMetaworklist,_TableIdentifier),
Answer,AnswerClusterPointer Answer,AnswerClusterPointer
) :- ) :-
dll_append_left(Dll,wkl_answer_cluster(AnswerFlag),AnswerClusterPointer), dll_append_left(Dll,wkl_answer_cluster(AnswerFlag),AnswerClusterPointer),
put_atts(AnswerFlag, wkl_answer_cluster([Answer])). put_atts(AnswerFlag, wkl_answer_cluster([Answer])).

View File

@@ -8,6 +8,7 @@ pub static PROJECT_ATTRS: &str = include_str!("project_attributes.pl");
pub(super) type Bindings = Vec<(usize, Addr)>; pub(super) type Bindings = Vec<(usize, Addr)>;
#[derive(Debug)]
pub(super) struct AttrVarInitializer { pub(super) struct AttrVarInitializer {
pub(super) attribute_goals: Vec<Addr>, pub(super) attribute_goals: Vec<Addr>,
pub(super) attr_var_queue: Vec<usize>, pub(super) attr_var_queue: Vec<usize>,

View File

@@ -12,6 +12,7 @@ use indexmap::IndexSet;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::mem; use std::mem;
#[derive(Debug)]
pub struct CodeRepo { pub struct CodeRepo {
pub(super) cached_query: Code, pub(super) cached_query: Code,
pub(super) goal_expanders: Code, pub(super) goal_expanders: Code,

View File

@@ -409,6 +409,7 @@ fn compile_into_module_impl(
Ok(compiler.drop_expansions(&mut wam.code_repo)) Ok(compiler.drop_expansions(&mut wam.code_repo))
} }
#[derive(Debug)]
pub struct GatherResult { pub struct GatherResult {
dynamic_clause_map: DynamicClauseMap, dynamic_clause_map: DynamicClauseMap,
pub(crate) worker_results: Vec<PredicateCompileQueue>, pub(crate) worker_results: Vec<PredicateCompileQueue>,
@@ -423,6 +424,7 @@ pub struct GatherResult {
in_situ_module_dir: ModuleStubDir, in_situ_module_dir: ModuleStubDir,
} }
#[derive(Debug)]
pub struct ClauseCodeGenerator { pub struct ClauseCodeGenerator {
len_offset: usize, len_offset: usize,
code: Code, code: Code,
@@ -529,6 +531,7 @@ fn insert_or_refresh_term_dir_quantum(
} }
} }
#[derive(Debug)]
pub struct ListingCompiler { pub struct ListingCompiler {
module: Option<Module>, module: Option<Module>,
user_term_dir: TermDir, user_term_dir: TermDir,

View File

@@ -7,7 +7,7 @@ use std::ops::IndexMut;
type Trail = Vec<(Ref, HeapCellValue)>; type Trail = Vec<(Ref, HeapCellValue)>;
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum AttrVarPolicy { pub enum AttrVarPolicy {
DeepCopy, DeepCopy,
StripAttributes StripAttributes
@@ -28,6 +28,7 @@ fn copy_term<T: CopierTarget>(target: T, addr: Addr, attr_var_policy: AttrVarPol
copy_term_state.copy_term_impl(addr); copy_term_state.copy_term_impl(addr);
} }
#[derive(Debug)]
struct CopyTermState<T: CopierTarget> { struct CopyTermState<T: CopierTarget> {
trail: Trail, trail: Trail,
scan: usize, scan: usize,

View File

@@ -11,6 +11,7 @@ use std::mem;
use std::ops::{Index, IndexMut}; use std::ops::{Index, IndexMut};
use std::ptr; use std::ptr;
#[derive(Debug)]
pub(crate) struct StandardHeapTraits {} pub(crate) struct StandardHeapTraits {}
impl RawBlockTraits for StandardHeapTraits { impl RawBlockTraits for StandardHeapTraits {
@@ -25,6 +26,7 @@ impl RawBlockTraits for StandardHeapTraits {
} }
} }
#[derive(Debug)]
pub(crate) struct HeapTemplate<T: RawBlockTraits> { pub(crate) struct HeapTemplate<T: RawBlockTraits> {
buf: RawBlock<T>, buf: RawBlock<T>,
_marker: PhantomData<HeapCellValue>, _marker: PhantomData<HeapCellValue>,
@@ -39,6 +41,7 @@ impl<T: RawBlockTraits> Drop for HeapTemplate<T> {
} }
} }
#[derive(Debug)]
pub(crate) pub(crate)
struct HeapIntoIter<T: RawBlockTraits> { struct HeapIntoIter<T: RawBlockTraits> {
offset: usize, offset: usize,
@@ -72,6 +75,7 @@ impl<T: RawBlockTraits> Iterator for HeapIntoIter<T> {
} }
} }
#[derive(Debug)]
pub(crate) pub(crate)
struct HeapIter<'a, T: RawBlockTraits> { struct HeapIter<'a, T: RawBlockTraits> {
offset: usize, offset: usize,
@@ -110,6 +114,7 @@ fn print_heap_terms<'a, I: Iterator<Item = &'a HeapCellValue>>(heap: I, h: usize
} }
} }
#[derive(Debug)]
pub(crate) pub(crate)
struct HeapIterMut<'a, T: RawBlockTraits> { struct HeapIterMut<'a, T: RawBlockTraits> {
offset: usize, offset: usize,

View File

@@ -10,12 +10,13 @@ use std::rc::Rc;
pub(crate) type MachineStub = Vec<HeapCellValue>; pub(crate) type MachineStub = Vec<HeapCellValue>;
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
enum ErrorProvenance { enum ErrorProvenance {
Constructed, // if constructed, offset the addresses. Constructed, // if constructed, offset the addresses.
Received, // otherwise, preserve the addresses. Received, // otherwise, preserve the addresses.
} }
#[derive(Debug)]
pub(super) struct MachineError { pub(super) struct MachineError {
stub: MachineStub, stub: MachineStub,
location: Option<(usize, usize)>, // line_num, col_num location: Option<(usize, usize)>, // line_num, col_num
@@ -447,7 +448,7 @@ impl MachineError {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum Permission { pub enum Permission {
Access, Access,
Create, Create,
@@ -469,7 +470,7 @@ impl Permission {
} }
// from 7.12.2 b) of 13211-1:1995 // from 7.12.2 b) of 13211-1:1995
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum ValidType { pub enum ValidType {
Atom, Atom,
Atomic, Atomic,
@@ -514,7 +515,7 @@ impl ValidType {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum DomainErrorType { pub enum DomainErrorType {
NotLessThanZero, NotLessThanZero,
Order, Order,
@@ -534,7 +535,7 @@ impl DomainErrorType {
} }
// from 7.12.2 f) of 13211-1:1995 // from 7.12.2 f) of 13211-1:1995
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum RepFlag { pub enum RepFlag {
Character, Character,
CharacterCode, CharacterCode,
@@ -558,7 +559,7 @@ impl RepFlag {
} }
// from 7.12.2 g) of 13211-1:1995 // from 7.12.2 g) of 13211-1:1995
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum EvalError { pub enum EvalError {
FloatOverflow, FloatOverflow,
Undefined, Undefined,
@@ -578,7 +579,7 @@ impl EvalError {
} }
// used by '$skip_max_list'. // used by '$skip_max_list'.
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub(super) enum CycleSearchResult { pub(super) enum CycleSearchResult {
EmptyList, EmptyList,
NotList, NotList,
@@ -722,6 +723,7 @@ impl MachineState {
} }
} }
#[derive(Debug)]
pub enum ExistenceError { pub enum ExistenceError {
Module(ClauseName), Module(ClauseName),
Procedure(ClauseName, usize), Procedure(ClauseName, usize),
@@ -729,6 +731,7 @@ pub enum ExistenceError {
Stream(Addr), Stream(Addr),
} }
#[derive(Debug)]
pub enum SessionError { pub enum SessionError {
CannotOverwriteBuiltIn(ClauseName), CannotOverwriteBuiltIn(ClauseName),
CannotOverwriteImport(ClauseName), CannotOverwriteImport(ClauseName),
@@ -741,6 +744,7 @@ pub enum SessionError {
ParserError(ParserError), ParserError(ParserError),
} }
#[derive(Debug)]
pub enum EvalSession { pub enum EvalSession {
EntrySuccess, EntrySuccess,
Error(SessionError), Error(SessionError),

View File

@@ -21,16 +21,17 @@ use std::cell::RefCell;
use std::cmp::Ordering; use std::cmp::Ordering;
use std::collections::{BTreeMap, VecDeque}; use std::collections::{BTreeMap, VecDeque};
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fmt;
use std::mem; use std::mem;
use std::ops::{Add, AddAssign, Sub, SubAssign}; use std::ops::{Add, AddAssign, Sub, SubAssign};
use std::rc::Rc; use std::rc::Rc;
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct OrderedOpDirKey(pub ClauseName, pub Fixity); pub struct OrderedOpDirKey(pub ClauseName, pub Fixity);
pub type OssifiedOpDir = BTreeMap<OrderedOpDirKey, (usize, Specifier)>; pub type OssifiedOpDir = BTreeMap<OrderedOpDirKey, (usize, Specifier)>;
#[derive(Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DBRef { pub enum DBRef {
NamedPred(ClauseName, usize, Option<SharedOpDesc>), NamedPred(ClauseName, usize, Option<SharedOpDesc>),
Op( Op(
@@ -43,7 +44,7 @@ pub enum DBRef {
} }
// 7.2 // 7.2
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum TermOrderCategory { pub enum TermOrderCategory {
Variable, Variable,
FloatingPoint, FloatingPoint,
@@ -52,7 +53,7 @@ pub enum TermOrderCategory {
Compound, Compound,
} }
#[derive(Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Addr { pub enum Addr {
AttrVar(usize), AttrVar(usize),
Char(char), Char(char),
@@ -71,7 +72,7 @@ pub enum Addr {
Usize(usize), Usize(usize),
} }
#[derive(Clone, Copy, Hash, Eq, PartialEq, PartialOrd)] #[derive(Debug, Clone, Copy, Hash, Eq, PartialEq, PartialOrd)]
pub enum Ref { pub enum Ref {
AttrVar(usize), AttrVar(usize),
HeapCell(usize), HeapCell(usize),
@@ -361,7 +362,7 @@ impl SubAssign<usize> for Addr {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum TrailRef { pub enum TrailRef {
Ref(Ref), Ref(Ref),
AttrVarHeapLink(usize), AttrVarHeapLink(usize),
@@ -374,6 +375,7 @@ impl From<Ref> for TrailRef {
} }
} }
#[derive(Debug)]
pub enum HeapCellValue { pub enum HeapCellValue {
Addr(Addr), Addr(Addr),
Atom(ClauseName, Option<SharedOpDesc>), Atom(ClauseName, Option<SharedOpDesc>),
@@ -446,7 +448,7 @@ impl From<Addr> for HeapCellValue {
} }
} }
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd)] #[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)]
pub enum IndexPtr { pub enum IndexPtr {
DynamicUndefined, // a predicate, declared as dynamic, whose location in code is as yet undefined. DynamicUndefined, // a predicate, declared as dynamic, whose location in code is as yet undefined.
Undefined, Undefined,
@@ -456,7 +458,7 @@ pub enum IndexPtr {
UserTermExpansion UserTermExpansion
} }
#[derive(Clone, Ord, PartialOrd, Eq, PartialEq)] #[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq)]
pub struct CodeIndex(pub Rc<RefCell<(IndexPtr, ClauseName)>>); pub struct CodeIndex(pub Rc<RefCell<(IndexPtr, ClauseName)>>);
impl CodeIndex { impl CodeIndex {
@@ -511,7 +513,7 @@ impl From<(usize, ClauseName)> for CodeIndex {
} }
} }
#[derive(Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
pub enum DynamicAssertPlace { pub enum DynamicAssertPlace {
Back, Back,
Front, Front,
@@ -535,7 +537,7 @@ impl DynamicAssertPlace {
} }
} }
#[derive(Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
pub enum DynamicTransactionType { pub enum DynamicTransactionType {
Abolish, Abolish,
Assert(DynamicAssertPlace), Assert(DynamicAssertPlace),
@@ -545,7 +547,7 @@ pub enum DynamicTransactionType {
Retract, // dynamic index of the clause to remove. Retract, // dynamic index of the clause to remove.
} }
#[derive(Clone, Copy, PartialOrd, Ord, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq)]
pub enum REPLCodePtr { pub enum REPLCodePtr {
CompileBatch, CompileBatch,
UseModule, UseModule,
@@ -554,7 +556,7 @@ pub enum REPLCodePtr {
UseQualifiedModuleFromFile UseQualifiedModuleFromFile
} }
#[derive(Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub enum CodePtr { pub enum CodePtr {
BuiltInClause(BuiltInClauseType, LocalCodePtr), // local is the successor call. BuiltInClause(BuiltInClauseType, LocalCodePtr), // local is the successor call.
CallN(usize, LocalCodePtr, bool), // arity, local, last call. CallN(usize, LocalCodePtr, bool), // arity, local, last call.
@@ -773,7 +775,7 @@ impl AddAssign<usize> for CodePtr {
pub type HeapVarDict = IndexMap<Rc<Var>, Addr>; pub type HeapVarDict = IndexMap<Rc<Var>, Addr>;
pub type AllocVarDict = IndexMap<Rc<Var>, VarData>; pub type AllocVarDict = IndexMap<Rc<Var>, VarData>;
#[derive(Clone)] #[derive(Debug, Clone)]
pub struct DynamicPredicateInfo { pub struct DynamicPredicateInfo {
pub(super) clauses_subsection_p: usize, // a LocalCodePtr::DirEntry value. pub(super) clauses_subsection_p: usize, // a LocalCodePtr::DirEntry value.
} }
@@ -793,6 +795,7 @@ pub type DynamicCodeDir = IndexMap<(ClauseName, ClauseName, usize), DynamicPredi
pub type GlobalVarDir = IndexMap<ClauseName, (Ball, Option<usize>)>; pub type GlobalVarDir = IndexMap<ClauseName, (Ball, Option<usize>)>;
#[derive(Debug)]
pub(crate) struct ModuleStub { pub(crate) struct ModuleStub {
pub(crate) atom_tbl: TabledData<Atom>, pub(crate) atom_tbl: TabledData<Atom>,
pub(crate) in_situ_code_dir: InSituCodeDir, pub(crate) in_situ_code_dir: InSituCodeDir,
@@ -810,6 +813,7 @@ impl ModuleStub {
pub(crate) type ModuleStubDir = IndexMap<ClauseName, ModuleStub>; pub(crate) type ModuleStubDir = IndexMap<ClauseName, ModuleStub>;
pub(crate) type StreamAliasDir = IndexMap<ClauseName, Stream>; pub(crate) type StreamAliasDir = IndexMap<ClauseName, Stream>;
#[derive(Debug)]
pub struct IndexStore { pub struct IndexStore {
pub(super) atom_tbl: TabledData<Atom>, pub(super) atom_tbl: TabledData<Atom>,
pub(super) code_dir: CodeDir, pub(super) code_dir: CodeDir,
@@ -960,6 +964,7 @@ impl IndexStore {
pub type CodeDir = BTreeMap<PredicateKey, CodeIndex>; pub type CodeDir = BTreeMap<PredicateKey, CodeIndex>;
pub type TermDir = IndexMap<PredicateKey, (Predicate, VecDeque<TopLevel>)>; pub type TermDir = IndexMap<PredicateKey, (Predicate, VecDeque<TopLevel>)>;
#[derive(Debug)]
pub struct TermDirQuantumEntry { pub struct TermDirQuantumEntry {
pub old_terms: (Predicate, VecDeque<TopLevel>), pub old_terms: (Predicate, VecDeque<TopLevel>),
pub new_terms: (Predicate, VecDeque<TopLevel>), pub new_terms: (Predicate, VecDeque<TopLevel>),
@@ -988,6 +993,7 @@ impl TermDirQuantumEntry {
} }
} }
#[derive(Debug)]
pub struct TermDirQuantum(IndexMap<PredicateKey, TermDirQuantumEntry>); pub struct TermDirQuantum(IndexMap<PredicateKey, TermDirQuantumEntry>);
impl TermDirQuantum { impl TermDirQuantum {
@@ -1031,7 +1037,7 @@ impl TermDirQuantum {
} }
} }
#[derive(Clone, Copy, PartialEq, Eq, Ord, PartialOrd)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd)]
pub enum CompileTimeHook { pub enum CompileTimeHook {
GoalExpansion, GoalExpansion,
TermExpansion, TermExpansion,
@@ -1085,6 +1091,16 @@ pub enum RefOrOwned<'a, T: 'a> {
Owned(T), Owned(T),
} }
impl<'a, T: 'a + fmt::Debug> fmt::Debug for RefOrOwned<'a, T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
&RefOrOwned::Borrowed(ref borrowed) =>
write!(f, "Borrowed({:?})", borrowed),
&RefOrOwned::Owned(ref owned) => write!(f, "Owned({:?})", owned),
}
}
}
impl<'a, T> RefOrOwned<'a, T> { impl<'a, T> RefOrOwned<'a, T> {
pub fn as_ref(&'a self) -> &'a T { pub fn as_ref(&'a self) -> &'a T {
match self { match self {

View File

@@ -21,10 +21,12 @@ use indexmap::{IndexMap, IndexSet};
use std::cmp::Ordering; use std::cmp::Ordering;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fmt;
use std::io::Write; use std::io::Write;
use std::mem; use std::mem;
use std::ops::{Index, IndexMut}; use std::ops::{Index, IndexMut};
#[derive(Debug)]
pub(crate) struct HeapPStrIter<'a> { pub(crate) struct HeapPStrIter<'a> {
focus: Addr, focus: Addr,
machine_st: &'a MachineState, machine_st: &'a MachineState,
@@ -74,7 +76,7 @@ impl<'a> HeapPStrIter<'a> {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub(crate) enum PStrIteratee { pub(crate) enum PStrIteratee {
Char(char), Char(char),
PStrSegment(usize, usize), PStrSegment(usize, usize),
@@ -100,7 +102,7 @@ impl<'a> Iterator for HeapPStrIter<'a> {
} else { } else {
Addr::EmptyList Addr::EmptyList
}; };
return Some(PStrIteratee::PStrSegment(h, n)); return Some(PStrIteratee::PStrSegment(h, n));
} else { } else {
unreachable!() unreachable!()
@@ -306,6 +308,7 @@ fn compare_pstr_to_string<'a>(
Some(s_offset) Some(s_offset)
} }
#[derive(Debug)]
pub struct Ball { pub struct Ball {
pub(super) boundary: usize, pub(super) boundary: usize,
pub(super) stub: Heap, pub(super) stub: Heap,
@@ -357,6 +360,7 @@ impl Ball {
} }
} }
#[derive(Debug)]
pub(super) struct CopyTerm<'a> { pub(super) struct CopyTerm<'a> {
state: &'a mut MachineState, state: &'a mut MachineState,
} }
@@ -404,6 +408,7 @@ impl<'a> CopierTarget for CopyTerm<'a> {
} }
} }
#[derive(Debug)]
pub(super) struct CopyBallTerm<'a> { pub(super) struct CopyBallTerm<'a> {
stack: &'a mut Stack, stack: &'a mut Stack,
heap: &'a mut Heap, heap: &'a mut Heap,
@@ -529,13 +534,13 @@ impl IndexMut<RegType> for MachineState {
pub type Registers = Vec<Addr>; pub type Registers = Vec<Addr>;
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub(super) enum MachineMode { pub(super) enum MachineMode {
Read, Read,
Write, Write,
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub(super) enum HeapPtr { pub(super) enum HeapPtr {
HeapCell(usize), HeapCell(usize),
PStrChar(usize, usize), PStrChar(usize, usize),
@@ -576,6 +581,7 @@ impl Default for HeapPtr {
} }
} }
#[derive(Debug)]
pub struct MachineState { pub struct MachineState {
pub(super) s: HeapPtr, pub(super) s: HeapPtr,
pub(super) p: CodePtr, pub(super) p: CodePtr,
@@ -934,7 +940,7 @@ fn try_in_situ(
pub(crate) type CallResult = Result<(), Vec<HeapCellValue>>; pub(crate) type CallResult = Result<(), Vec<HeapCellValue>>;
pub(crate) trait CallPolicy: Any { pub(crate) trait CallPolicy: Any + fmt::Debug {
fn retry_me_else(&mut self, machine_st: &mut MachineState, offset: usize) -> CallResult { fn retry_me_else(&mut self, machine_st: &mut MachineState, offset: usize) -> CallResult {
let b = machine_st.b; let b = machine_st.b;
let n = machine_st.stack.index_or_frame(b).prelude.univ_prelude.num_cells; let n = machine_st.stack.index_or_frame(b).prelude.univ_prelude.num_cells;
@@ -1517,10 +1523,12 @@ impl CallPolicy for CWILCallPolicy {
downcast!(dyn CallPolicy); downcast!(dyn CallPolicy);
#[derive(Debug)]
pub(crate) struct DefaultCallPolicy {} pub(crate) struct DefaultCallPolicy {}
impl CallPolicy for DefaultCallPolicy {} impl CallPolicy for DefaultCallPolicy {}
#[derive(Debug)]
pub(crate) struct CWILCallPolicy { pub(crate) struct CWILCallPolicy {
pub(crate) prev_policy: Box<dyn CallPolicy>, pub(crate) prev_policy: Box<dyn CallPolicy>,
count: Integer, count: Integer,
@@ -1601,7 +1609,7 @@ impl CWILCallPolicy {
} }
} }
pub(crate) trait CutPolicy: Any { pub(crate) trait CutPolicy: Any + fmt::Debug {
// returns true iff we fail or cut redirected the MachineState's p itself // returns true iff we fail or cut redirected the MachineState's p itself
fn cut(&mut self, machine_st: &mut MachineState, r: RegType) -> bool; fn cut(&mut self, machine_st: &mut MachineState, r: RegType) -> bool;
} }
@@ -1627,6 +1635,7 @@ fn cut_body(machine_st: &mut MachineState, addr: &Addr) -> bool {
false false
} }
#[derive(Debug)]
pub(crate) struct DefaultCutPolicy {} pub(crate) struct DefaultCutPolicy {}
pub(super) fn deref_cut(machine_st: &mut MachineState, r: RegType) { pub(super) fn deref_cut(machine_st: &mut MachineState, r: RegType) {
@@ -1641,6 +1650,7 @@ impl CutPolicy for DefaultCutPolicy {
} }
} }
#[derive(Debug)]
pub(crate) struct SCCCutPolicy { pub(crate) struct SCCCutPolicy {
// locations of cleaners, cut points, the previous block // locations of cleaners, cut points, the previous block
cont_pts: Vec<(Addr, usize, usize)>, cont_pts: Vec<(Addr, usize, usize)>,

View File

@@ -53,6 +53,7 @@ use std::path::PathBuf;
use std::rc::Rc; use std::rc::Rc;
use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicBool;
#[derive(Debug)]
pub struct MachinePolicies { pub struct MachinePolicies {
call_policy: Box<dyn CallPolicy>, call_policy: Box<dyn CallPolicy>,
cut_policy: Box<dyn CutPolicy>, cut_policy: Box<dyn CutPolicy>,
@@ -79,6 +80,7 @@ impl Default for MachinePolicies {
} }
} }
#[derive(Debug)]
pub struct Machine { pub struct Machine {
pub(super) machine_st: MachineState, pub(super) machine_st: MachineState,
pub(super) inner_heap: Heap, pub(super) inner_heap: Heap,

View File

@@ -7,6 +7,7 @@ use std::ops::RangeFrom;
use std::slice; use std::slice;
use std::str; use std::str;
#[derive(Debug)]
pub struct PartialString { pub struct PartialString {
buf: *const u8, buf: *const u8,
len: usize, len: usize,
@@ -46,6 +47,7 @@ fn scan_for_terminator<Iter: Iterator<Item = char>>(iter: Iter) -> usize {
terminator_idx terminator_idx
} }
#[derive(Debug)]
pub struct PStrIter { pub struct PStrIter {
buf: *const u8, buf: *const u8,
len: usize, len: usize,

View File

@@ -14,6 +14,7 @@ pub(crate) trait RawBlockTraits {
} }
} }
#[derive(Debug)]
pub(crate) struct RawBlock<T: RawBlockTraits> { pub(crate) struct RawBlock<T: RawBlockTraits> {
pub(crate) size: usize, pub(crate) size: usize,
pub(crate) base: *const u8, pub(crate) base: *const u8,

View File

@@ -7,6 +7,7 @@ use std::mem;
use std::ops::{Index, IndexMut}; use std::ops::{Index, IndexMut};
use std::ptr; use std::ptr;
#[derive(Debug)]
struct StackTraits {} struct StackTraits {}
impl RawBlockTraits for StackTraits { impl RawBlockTraits for StackTraits {
@@ -35,6 +36,7 @@ const fn prelude_size<Prelude>() -> usize {
(size & !(align - 1)) + align (size & !(align - 1)) + align
} }
#[derive(Debug)]
pub struct Stack { pub struct Stack {
buf: RawBlock<StackTraits>, buf: RawBlock<StackTraits>,
_marker: PhantomData<Addr>, _marker: PhantomData<Addr>,
@@ -47,11 +49,12 @@ impl Drop for Stack {
} }
} }
#[derive(Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct FramePrelude { pub struct FramePrelude {
pub num_cells: usize, pub num_cells: usize,
} }
#[derive(Debug)]
pub struct AndFramePrelude { pub struct AndFramePrelude {
pub univ_prelude: FramePrelude, pub univ_prelude: FramePrelude,
pub e: usize, pub e: usize,
@@ -59,6 +62,7 @@ pub struct AndFramePrelude {
pub interrupt_cp: LocalCodePtr, pub interrupt_cp: LocalCodePtr,
} }
#[derive(Debug)]
pub struct AndFrame { pub struct AndFrame {
pub prelude: AndFramePrelude, pub prelude: AndFramePrelude,
} }
@@ -99,6 +103,7 @@ impl IndexMut<usize> for AndFrame {
} }
} }
#[derive(Debug)]
pub struct OrFramePrelude { pub struct OrFramePrelude {
pub univ_prelude: FramePrelude, pub univ_prelude: FramePrelude,
pub e: usize, pub e: usize,
@@ -113,6 +118,7 @@ pub struct OrFramePrelude {
pub attr_var_init_bindings_b: usize, pub attr_var_init_bindings_b: usize,
} }
#[derive(Debug)]
pub struct OrFrame { pub struct OrFrame {
pub prelude: OrFramePrelude, pub prelude: OrFramePrelude,
} }

View File

@@ -11,13 +11,13 @@ use std::hash::{Hash, Hasher};
use std::net::TcpStream; use std::net::TcpStream;
use std::rc::Rc; use std::rc::Rc;
#[derive(Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum StreamType { pub enum StreamType {
Binary, Binary,
Text, Text,
} }
#[derive(Clone, Copy, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EOFAction { pub enum EOFAction {
EOFCode, EOFCode,
Error, Error,
@@ -37,7 +37,26 @@ pub enum StreamInstance {
TcpStream(TcpStream), TcpStream(TcpStream),
} }
#[derive(Clone)] impl fmt::Debug for StreamInstance {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
&StreamInstance::Bytes(ref bytes) =>
write!(fmt, "Bytes({:?})", bytes),
&StreamInstance::DynReadSource(_) =>
write!(fmt, "DynReadSource(_)"), // Hacky solution.
&StreamInstance::File(ref file) => write!(fmt, "File({:?})", file),
&StreamInstance::Null => write!(fmt, "Null"),
&StreamInstance::ReadlineStream(ref readline_stream) =>
write!(fmt, "ReadlineStream({:?})", readline_stream),
&StreamInstance::Stdin => write!(fmt, "Stdin"),
&StreamInstance::Stdout => write!(fmt, "Stdout"),
&StreamInstance::TcpStream(ref tcp_stream) =>
write!(fmt, "TcpStream({:?})", tcp_stream),
}
}
}
#[derive(Debug, Clone)]
struct WrappedStreamInstance(Rc<RefCell<StreamInstance>>); struct WrappedStreamInstance(Rc<RefCell<StreamInstance>>);
impl WrappedStreamInstance { impl WrappedStreamInstance {
@@ -95,7 +114,7 @@ impl fmt::Display for StreamError {
impl Error for StreamError {} impl Error for StreamError {}
#[derive(Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct StreamOptions { pub struct StreamOptions {
pub stream_type: StreamType, pub stream_type: StreamType,
pub reposition: bool, pub reposition: bool,
@@ -115,7 +134,7 @@ impl Default for StreamOptions {
} }
} }
#[derive(Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Stream { pub struct Stream {
pub options: StreamOptions, pub options: StreamOptions,
stream_inst: WrappedStreamInstance, stream_inst: WrappedStreamInstance,

View File

@@ -61,6 +61,7 @@ pub fn get_single_char() -> char {
c c
} }
#[derive(Debug)]
struct BrentAlgState { struct BrentAlgState {
hare: Addr, hare: Addr,
tortoise: Addr, tortoise: Addr,

View File

@@ -47,6 +47,7 @@ fn extract_from_list(
} }
} }
#[derive(Debug)]
pub struct TermStream<'a> { pub struct TermStream<'a> {
stack: Vec<Term>, stack: Vec<Term>,
pub(crate) wam: &'a mut Machine, pub(crate) wam: &'a mut Machine,
@@ -57,6 +58,7 @@ pub struct TermStream<'a> {
top_level_terms: Vec<(Term, usize, usize)>, // term, line_num, col_num. top_level_terms: Vec<(Term, usize, usize)>, // term, line_num, col_num.
} }
#[derive(Debug)]
pub struct ExpansionAdditionResult { pub struct ExpansionAdditionResult {
term_expansion_additions: (Predicate, VecDeque<TopLevel>), term_expansion_additions: (Predicate, VecDeque<TopLevel>),
goal_expansion_additions: (Predicate, VecDeque<TopLevel>), goal_expansion_additions: (Predicate, VecDeque<TopLevel>),

View File

@@ -14,6 +14,7 @@ use std::borrow::BorrowMut;
use std::cell::Cell; use std::cell::Cell;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::fmt;
use std::mem; use std::mem;
use std::ops::DerefMut; use std::ops::DerefMut;
use std::rc::Rc; use std::rc::Rc;
@@ -23,6 +24,15 @@ enum IndexSource<'a, T> {
Local(&'a mut T) Local(&'a mut T)
} }
impl<'a, T: fmt::Debug> fmt::Debug for IndexSource<'a, T> {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
IndexSource::TermStream => write!(fmt, "TermStream"),
IndexSource::Local(ref local) => write!(fmt, "Local({:?})", local),
}
}
}
fn op_dir<'a, 'b: 'a>(from: &'b IndexSource<'a, IndexStore>) -> RefOrOwned<'a, OpDir> { fn op_dir<'a, 'b: 'a>(from: &'b IndexSource<'a, IndexStore>) -> RefOrOwned<'a, OpDir> {
match from { match from {
IndexSource::TermStream => RefOrOwned::Owned(OpDir::new()), IndexSource::TermStream => RefOrOwned::Owned(OpDir::new()),
@@ -30,6 +40,7 @@ fn op_dir<'a, 'b: 'a>(from: &'b IndexSource<'a, IndexStore>) -> RefOrOwned<'a, O
} }
} }
#[derive(Debug)]
struct CompositeIndices<'a, 'b, 'c> { struct CompositeIndices<'a, 'b, 'c> {
term_stream: &'b mut TermStream<'a>, term_stream: &'b mut TermStream<'a>,
index_src: IndexSource<'c, IndexStore>, index_src: IndexSource<'c, IndexStore>,
@@ -690,6 +701,7 @@ fn setup_declaration<'a, 'b, 'c>(
} }
} }
#[derive(Debug)]
struct RelationWorker { struct RelationWorker {
flags: MachineFlags, flags: MachineFlags,
dynamic_clauses: Vec<(Term, Term)>, // Head, Body. dynamic_clauses: Vec<(Term, Term)>, // Head, Body.
@@ -1141,6 +1153,7 @@ pub type DynamicClause = Vec<(Term, Term)>;
pub type DynamicClauseMap = IndexMap<(ClauseName, usize), DynamicClause>; pub type DynamicClauseMap = IndexMap<(ClauseName, usize), DynamicClause>;
#[derive(Debug)]
pub struct TopLevelBatchWorker<'a> { pub struct TopLevelBatchWorker<'a> {
pub(crate) term_stream: TermStream<'a>, pub(crate) term_stream: TermStream<'a>,
rel_worker: RelationWorker, rel_worker: RelationWorker,

View File

@@ -35,6 +35,7 @@ pub mod readline {
} }
} }
#[derive(Debug)]
pub struct ReadlineStream { pub struct ReadlineStream {
rl: Editor<()>, rl: Editor<()>,
pending_input: Cursor<String>, pending_input: Cursor<String>,
@@ -114,12 +115,14 @@ fn write_term_to_heap(term: &Term, machine_st: &mut MachineState) -> TermWriteRe
term_writer.write_term_to_heap(term) term_writer.write_term_to_heap(term)
} }
#[derive(Debug)]
struct TermWriter<'a> { struct TermWriter<'a> {
machine_st: &'a mut MachineState, machine_st: &'a mut MachineState,
queue: SubtermDeque, queue: SubtermDeque,
var_dict: HeapVarDict, var_dict: HeapVarDict,
} }
#[derive(Debug)]
pub struct TermWriteResult { pub struct TermWriteResult {
pub(crate) heap_loc: usize, pub(crate) heap_loc: usize,
pub(crate) var_dict: HeapVarDict, pub(crate) var_dict: HeapVarDict,

View File

@@ -33,6 +33,6 @@ test_queries_on_predicates :-
assertz((p(X, Y) :- q(Z), p(X, X))), assertz((p(X, Y) :- q(Z), p(X, X))),
once(p(X,b)), once(p(X,b)),
retract((p(X, Y) :- q(Z), p(X, X))), retract((p(X, Y) :- q(Z), p(X, X))),
retract(q(z)). retract(q(z)).
:- initialization(test_queries_on_predicates). :- initialization(test_queries_on_predicates).

View File

@@ -24,5 +24,5 @@ test_queries_on_setup_call_cleanup :-
findall(Pat, catch(setup_call_cleanup(true,throw(goal),throw(cl)), Pat, true), [goal]), findall(Pat, catch(setup_call_cleanup(true,throw(goal),throw(cl)), Pat, true), [goal]),
findall(Pat, catch(( setup_call_cleanup(true,(G=1;G=2),throw(cl)), throw(cont)), Pat, true), [cont]), findall(Pat, catch(( setup_call_cleanup(true,(G=1;G=2),throw(cl)), throw(cont)), Pat, true), [cont]),
findall([X,Y], (setup_call_cleanup(true, (X=1;X=2), writeq(a)), setup_call_cleanup(true,(Y=1;Y=2),writeq(b)), !), [[1,1]]). findall([X,Y], (setup_call_cleanup(true, (X=1;X=2), writeq(a)), setup_call_cleanup(true,(Y=1;Y=2),writeq(b)), !), [[1,1]]).
:- initialization(test_queries_on_setup_call_cleanup). :- initialization(test_queries_on_setup_call_cleanup).