diff --git a/interp.py b/interp.py index bec6528..9cb2b38 100644 --- a/interp.py +++ b/interp.py @@ -24,6 +24,13 @@ def verb_Read(self, args): return Text(input()) +class InterpreterError(BaseException): + def __init__(self, error): + self.error = error + + def __repr__(self): + return "InterpreterError(error '%s')" % (self.error) + class Interpreter: def __init__(self, env): self.env = env @@ -34,7 +41,7 @@ elif value.__class__ == ast_types.Text: return Text(value.value) else: - print("Unimplemented value: %s" % (value)) + raise InterpreterError("Unknown value type %s" % (value.__class__.__name__)) def run_statement(self, ast): subject = self.resolve_value(ast.subject) @@ -50,8 +57,7 @@ return self.env[ast.subject] def run_conditional(self, ast): - print("Unimplemented conditional") - return None + raise InterpreterError("Conditionals are unimplemented") def run_command(self, ast): if ast.__class__ == ast_types.Statement: @@ -61,8 +67,7 @@ elif ast.__class__ == ast_types.Conditional: return self.run_conditional(ast) else: - print("Unknown command %s" % (ast)) - return None + raise InterpreterError("Unknown command type %s" % (ast.__class__.__name__)) def run(self, ast): ret = None @@ -74,4 +79,8 @@ env = { "System": Module_System(), } - return Interpreter(env).run(ast) + try: + return Interpreter(env).run(ast) + except InterpreterError as e: + print("Interpreter error: %s" % (e)) + return None