OSDN Git Service

Bringing it in line with Nim version.
authorSimon Forman <sforman@hushmail.com>
Fri, 9 Apr 2021 23:58:38 +0000 (16:58 -0700)
committerSimon Forman <sforman@hushmail.com>
Fri, 9 Apr 2021 23:58:38 +0000 (16:58 -0700)
joy/joy.py
joy/library.py
joy/utils/errors.py [new file with mode: 0644]

index dfa4572..2870f51 100644 (file)
@@ -27,7 +27,11 @@ from builtins import input
 from traceback import print_exc
 from .parser import text_to_expression, ParseError, Symbol
 from .utils.stack import stack_to_string
-from .library import NotAnIntError, StackUnderflowError
+from .utils.errors import (
+    NotAListError,
+    NotAnIntError,
+    StackUnderflowError,
+    )
 
 
 class UnknownSymbolError(KeyError): pass
@@ -136,6 +140,8 @@ def interp(stack=(), dictionary=None):
                 print('Not enough values on stack.')
             except NotAnIntError:
                 print('Not an integer.')
+            except NotAListError:
+                print('Not a list.')
             except:
                 print_exc()
             print(stack_to_string(stack))
index 123de6e..72516a0 100644 (file)
@@ -30,6 +30,7 @@ import operator, math
 
 from .parser import text_to_expression, Symbol
 from .utils import generated_library as genlib
+from .utils.errors import NotAnIntError, StackUnderflowError
 from .utils.stack import (
     concat,
     expression_to_string,
@@ -189,10 +190,6 @@ while == swap [nullary] cons dup dipd concat loop
 )
 
 
-class NotAnIntError(Exception): pass
-class StackUnderflowError(Exception): pass
-
-
 def FunctionWrapper(f):
     '''Set name attribute.'''
     if not f.__doc__:
@@ -223,7 +220,11 @@ def BinaryBuiltinWrapper(f):
             (a, (b, stack)) = stack
         except ValueError:
             raise StackUnderflowError
-        if not isinstance(a, int) or not isinstance(b, int):
+        if (not isinstance(a, int)
+            or not isinstance(b, int)
+            or isinstance(a, bool)  # Because bools are ints in Python.
+            or isinstance(a, bool)
+            ):
             raise NotAnIntError
         result = f(b, a)
         return (result, stack), expression, dictionary
diff --git a/joy/utils/errors.py b/joy/utils/errors.py
new file mode 100644 (file)
index 0000000..4834ad3
--- /dev/null
@@ -0,0 +1,5 @@
+class NotAListError(Exception): pass
+class NotAnIntError(Exception): pass
+class StackUnderflowError(Exception): pass
+
+