From e417842923f18f31da94c837bf4baa23b27c3821 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Fri, 9 Apr 2021 17:41:42 -0700 Subject: [PATCH] Customizing error messages. --- joy/joy.py | 4 ++-- joy/utils/generated_library.py | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/joy/joy.py b/joy/joy.py index 3f61e80..ad597a7 100644 --- a/joy/joy.py +++ b/joy/joy.py @@ -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: diff --git a/joy/utils/generated_library.py b/joy/utils/generated_library.py index 6104979..8496db6 100644 --- a/joy/utils/generated_library.py +++ b/joy/utils/generated_library.py @@ -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): -- 2.11.0