OSDN Git Service

Customizing error messages.
authorSimon Forman <sforman@hushmail.com>
Sat, 10 Apr 2021 00:41:42 +0000 (17:41 -0700)
committerSimon Forman <sforman@hushmail.com>
Sat, 10 Apr 2021 00:41:42 +0000 (17:41 -0700)
joy/joy.py
joy/utils/generated_library.py

index 3f61e80..ad597a7 100644 (file)
@@ -136,8 +136,8 @@ def interp(stack=(), dictionary=None):
                 stack, _, dictionary = run(text, stack, dictionary)
             except UnknownSymbolError as sym:
                 print('Unknown:', sym)
-            except StackUnderflowError:
-                print('Not enough values on stack.')
+            except StackUnderflowError as e:
+                print(e)  # 'Not enough values on stack.'
             except NotAnIntError:
                 print('Not an integer.')
             except NotAListError as e:
index 6104979..8496db6 100644 (file)
@@ -158,7 +158,10 @@ def pop(stack):
     (a1 --)
 
   """
-  (a1, s23) = stack
+  try:
+    (a1, s23) = stack
+  except ValueError:
+    raise StackUnderflowError('Cannot pop empty stack.')
   return s23
 
 
@@ -224,8 +227,17 @@ def rest(stack):
     ([a1 ...0] -- [...0])
 
   """
-  ((a1, s0), s23) = stack
-  return (s0, s23)
+  try:
+    s0, stack = stack
+  except ValueError:
+    raise StackUnderflowError
+  if not isinstance(s0, tuple):
+    raise NotAListError('Not a list.')
+  try:
+    _, s1 = s0
+  except ValueError:
+    raise StackUnderflowError('Cannot take rest of empty list.')
+  return (s1, stack)
 
 
 def rolldown(stack):