fix bug with mark_non_var
This commit is contained in:
@@ -35,7 +35,7 @@ Extend rusty-wam to include the following, among other features:
|
||||
- A representation of 'partial strings' as difference lists
|
||||
of characters (_done_).
|
||||
* `term_expansion/2` and `goal_expansion/2` (_in progress_).
|
||||
* Definite Clause Grammars.
|
||||
* Definite Clause Grammars (_in progress_).
|
||||
* Attributed variables using the SICStus Prolog interface and
|
||||
semantics. Adding coroutines like `dif/2`, `freeze/2`, etc.
|
||||
is straightforward with attributed variables.
|
||||
|
||||
@@ -232,7 +232,6 @@ impl<'a> Allocator<'a> for DebrayAllocator
|
||||
{
|
||||
let r = cell.get();
|
||||
|
||||
if r.reg_num() == 0 {
|
||||
let r = match lvl {
|
||||
Level::Shallow => {
|
||||
let k = self.arg_c;
|
||||
@@ -244,12 +243,12 @@ impl<'a> Allocator<'a> for DebrayAllocator
|
||||
self.arg_c += 1;
|
||||
RegType::Temp(k)
|
||||
},
|
||||
_ => RegType::Temp(self.alloc_reg_to_non_var())
|
||||
_ if r.reg_num() == 0 => RegType::Temp(self.alloc_reg_to_non_var()),
|
||||
_ => r
|
||||
};
|
||||
|
||||
cell.set(r);
|
||||
}
|
||||
}
|
||||
|
||||
fn mark_var<Target>(&mut self, var: Rc<Var>, lvl: Level, cell: &'a Cell<VarReg>,
|
||||
term_loc: GenContext, target: &mut Vec<Target>)
|
||||
|
||||
@@ -25,7 +25,7 @@ term_expansion(Term0, (ModHead :- ModBody)) :-
|
||||
!,
|
||||
nonvar(Head),
|
||||
Head =.. [RuleName | Args],
|
||||
append(Args, ['$VAR'(0), '$VAR'(N)], ModArgs),
|
||||
append(Args, ['$VAR'(0), '$VAR'(N)], ModArgs), %% problematic line.
|
||||
ModHead =.. [RuleName | ModArgs],
|
||||
nonvar(Body),
|
||||
expand_body(Body, ModBody1, 0, N1),
|
||||
|
||||
Reference in New Issue
Block a user