[pypy-svn] r44075 - in pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Thu Jun 7 11:14:30 CEST 2007
Author: cfbolz
Date: Thu Jun 7 11:14:29 2007
New Revision: 44075
Modified:
pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/interpreter.py
pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_interpreter.py
Log:
eh, nasty bug: the orders of the term arguments were reversed
Modified: pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/interpreter.py
==============================================================================
--- pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/interpreter.py (original)
+++ pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/interpreter.py Thu Jun 7 11:14:29 2007
@@ -125,10 +125,10 @@
def MAKETERM(self, stack, number, *ignored):
name, numargs, signature = self.code.term_info[number]
args = [None] * numargs
- i = 0
- while i < numargs:
+ i = numargs - 1
+ while i >= 0:
args[i] = stack.pop()
- i += 1
+ i -= 1
stack.append(Term(name, args, signature))
def CALL_BUILTIN(self, stack, number, continuation, *ignored):
@@ -155,6 +155,7 @@
self.engine.heap.revert(oldstate)
rule = rulechain.rule
rulechain = rulechain.next
+ raise error.UnificationFailed
def CLEAR_LOCAL(self, stack, number, *ignored):
self.localvarcache[number] = None
Modified: pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_interpreter.py
==============================================================================
--- pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_interpreter.py (original)
+++ pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_interpreter.py Thu Jun 7 11:14:29 2007
@@ -1,5 +1,5 @@
import py
-from pypy.lang.prolog.interpreter.interpreter import Rule
+from pypy.lang.prolog.interpreter.interpreter import Rule, Frame
from pypy.lang.prolog.interpreter.parsing import get_engine, get_query_and_vars
def test_simple():
@@ -20,4 +20,13 @@
assert cont is c2
assert vars['X'].dereference(e.heap).name == 'a'
+def test_build_term():
+ e = get_engine("")
+ head, body = get_query_and_vars("f(X, Y) :- X = a, Y = b.")[0].args
+ r = Rule(head, body, e)
+ frame = Frame(e, r.code)
+ frame.run(frame.code.opcode_head, 0, None)
+ frame.run(frame.code.opcode, 0, None)
+ assert frame.stack[0].args[0].dereference(e.heap).name == "a"
+ assert frame.stack[0].args[1].dereference(e.heap).name == "b"
More information about the pypy-svn
mailing list