Ejemplo n.º 1
0
    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']])
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
def special_set(interp, form, env):
    lit = form.pyvalue
    value = interp.evalForm(lit[2], env)
    E.set(env, lit[1].name, value)
    return value