def testStack(self): interp = interpreter.defaultInterpreter() env = interpreter.defaultEnvironment() errors = [] def handle(interp): framenames = [x.name for x in interp.frames] errors.append(O.simplify(framenames)) raise #First, let's muck up the stack: E.set(env, '*exc-handler*', None) self.assertRaises(ZeroDivisionError, interp.evalString, ''' (defun (ham) (eggs)) (defun (eggs) (/ 1 0)) (ham) ''', env) # Now, let's see if it was cleaned properly (and that our # handler can work): E.set(env, '*exc-handler*', handle) self.assertRaises(ZeroDivisionError, interp.evalString, ''' (defun (foo) (bar)) (defun (bar) (/ 1 0)) (foo) ''', env) self.assertEquals(errors, [['foo', 'bar']])
def testSettingOuterOld(self): """ Setting x should change it in the frame where x was originally defined. """ E.set(self.env, "x", 3) self.assertEquals(self.init["x"], 3)
def testMaxInstructions(self): env = interpreter.defaultEnvironment() es('(+ 1 2)', env, maxInstructions=4) E.set(env, '*exc-handler*', None) self.assertRaises(interpreter.TooManyInstructions, es, '(+ 1 2 3)', env, maxInstructions=4)
def special_set(interp, form, env): lit = form.pyvalue value = interp.evalForm(lit[2], env) E.set(env, lit[1].name, value) return value