This brings Python Joy into congruence with Nim.
It's hacky. I edited the generated file. The more complicated functions like popop will not generate the same errors as the Nim versions. This is only congruence in the sense that the current jtest suite passes identically on both. Ideally I should be generating both the Nim and Python code from the Prolog compiler.
This commit is contained in:
parent
8e0472a5ff
commit
7f193fbdbe
|
|
@ -222,7 +222,7 @@ def BinaryBuiltinWrapper(f):
|
||||||
try:
|
try:
|
||||||
(a, (b, stack)) = stack
|
(a, (b, stack)) = stack
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise StackUnderflowError
|
raise StackUnderflowError('Not enough values on stack.')
|
||||||
if (not isinstance(a, int)
|
if (not isinstance(a, int)
|
||||||
or not isinstance(b, int)
|
or not isinstance(b, int)
|
||||||
or isinstance(a, bool) # Because bools are ints in Python.
|
or isinstance(a, bool) # Because bools are ints in Python.
|
||||||
|
|
@ -849,7 +849,7 @@ def i(stack, expression, dictionary):
|
||||||
try:
|
try:
|
||||||
quote, stack = stack
|
quote, stack = stack
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise StackUnderflowError
|
raise StackUnderflowError('Not enough values on stack.')
|
||||||
return stack, concat(quote, expression), dictionary
|
return stack, concat(quote, expression), dictionary
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1174,7 +1174,7 @@ def dip(stack, expression, dictionary):
|
||||||
try:
|
try:
|
||||||
(quote, (x, stack)) = stack
|
(quote, (x, stack)) = stack
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise StackUnderflowError
|
raise StackUnderflowError('Not enough values on stack.')
|
||||||
expression = (x, expression)
|
expression = (x, expression)
|
||||||
return stack, concat(quote, expression), dictionary
|
return stack, concat(quote, expression), dictionary
|
||||||
|
|
||||||
|
|
@ -1378,13 +1378,13 @@ def loop(stack, expression, dictionary):
|
||||||
try:
|
try:
|
||||||
quote, stack = stack
|
quote, stack = stack
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise StackUnderflowError
|
raise StackUnderflowError('Not enough values on stack.')
|
||||||
if not isinstance(quote, tuple):
|
if not isinstance(quote, tuple):
|
||||||
raise NotAListError('Loop body not a list.')
|
raise NotAListError('Loop body not a list.')
|
||||||
try:
|
try:
|
||||||
(flag, stack) = stack
|
(flag, stack) = stack
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise StackUnderflowError
|
raise StackUnderflowError('Not enough values on stack.')
|
||||||
if flag:
|
if flag:
|
||||||
expression = concat(quote, (quote, (S_loop, expression)))
|
expression = concat(quote, (quote, (S_loop, expression)))
|
||||||
return stack, expression, dictionary
|
return stack, expression, dictionary
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@ def cons(stack):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try: s0, stack = stack
|
try: s0, stack = stack
|
||||||
except ValueError: raise StackUnderflowError
|
except ValueError: raise StackUnderflowError('Not enough values on stack.')
|
||||||
if not isinstance(s0, tuple): raise NotAListError
|
if not isinstance(s0, tuple): raise NotAListError('Not a list.')
|
||||||
try: a1, s23 = stack
|
try: a1, s23 = stack
|
||||||
except ValueError: raise StackUnderflowError
|
except ValueError: raise StackUnderflowError('Not enough values on stack.')
|
||||||
return ((a1, s0), s23)
|
return ((a1, s0), s23)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ def concat(quote, expression):
|
||||||
temp = []
|
temp = []
|
||||||
while quote:
|
while quote:
|
||||||
if not isinstance(quote, tuple):
|
if not isinstance(quote, tuple):
|
||||||
raise NotAListError
|
raise NotAListError('Not a list.')
|
||||||
item, quote = quote
|
item, quote = quote
|
||||||
temp.append(item)
|
temp.append(item)
|
||||||
for item in reversed(temp):
|
for item in reversed(temp):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue