[pypy-svn] r44101 - in pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Thu Jun 7 19:04:09 CEST 2007
Author: cfbolz
Date: Thu Jun 7 19:04:08 2007
New Revision: 44101
Modified:
pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/compiler.py
pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/interpreter.py
pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_compiler.py
Log:
fix some problems with the local variable activation concept
Modified: pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/compiler.py
==============================================================================
--- pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/compiler.py (original)
+++ pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/compiler.py Thu Jun 7 19:04:08 2007
@@ -47,10 +47,12 @@
self.varmap = {}
self.can_contain_cut = False
result = Code()
+ self.activate_vars_later = True
self.compile_termbuilding(head)
result.opcode_head = self.getbytecode()
if body is not None:
self.add_localactivations()
+ self.activate_vars_later = False
self.compile_body(body)
result.opcode = self.getbytecode()
result.constants = self.constants
@@ -100,12 +102,10 @@
i = builtins_index[body.signature]
self.compile_termbuilding(body)
self.emit_opcode(opcodedesc.CALL_BUILTIN, i)
- self.add_localactivations()
else:
self.compile_termbuilding(body)
num = self.getfunction(body.signature)
self.emit_opcode(opcodedesc.STATIC_CALL, num)
- self.add_localactivations()
def compile_localvar(self, var):
try:
@@ -113,7 +113,8 @@
except KeyError:
num = self.varmap[var] = len(self.varmap)
self.emit_opcode(opcodedesc.MAKELOCALVAR, num)
- self.emit_opcode(opcodedesc.ACTIVATE_LOCAL, num, True)
+ self.emit_opcode(opcodedesc.ACTIVATE_LOCAL, num,
+ self.activate_vars_later)
return
self.emit_opcode(opcodedesc.PUTLOCALVAR, num)
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 19:04:08 2007
@@ -134,7 +134,7 @@
stack.append(self.code.constants[number])
def MAKELOCALVAR(self, stack, number):
- result = self.localvarcache[number] = self.engine.heap.newvar()
+ result = self.localvarcache[number] = LocalVar()
stack.append(result)
def PUTLOCALVAR(self, stack, number):
@@ -145,7 +145,7 @@
def ACTIVATE_LOCAL(self, stack, number):
var = self.localvarcache[number]
if isinstance(var, LocalVar):
- self.localvarcache[number] = var.dereference(self.heap)
+ self.localvarcache[number] = var.dereference(self.engine.heap)
var.active = True
def MAKETERM(self, stack, number):
Modified: pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_compiler.py
==============================================================================
--- pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_compiler.py (original)
+++ pypy/branch/prolog-bytecode/pypy/lang/prolog/interpreter/test/test_compiler.py Thu Jun 7 19:04:08 2007
@@ -85,8 +85,7 @@
code = compile(head, body, e)
assert code.opcode_head == "m\x00\x00t\x00\x00"
assert code.opcode.startswith(
- "a\x00\x00m\x00\x01l\x00\x00c\x00\x00t\x00\x01t\x00\x02b\x00\x02"
- "a\x00\x01")
+ "a\x00\x00m\x00\x01a\x00\x01l\x00\x00c\x00\x00t\x00\x01t\x00\x02b")
assert code.constants == [Number(1)]
assert code.term_info == [("f", 1, "f/1"), ("-", 2, "-/2"),
("is", 2, "is/2")]
More information about the Pypy-commit
mailing list