Exemple #1
0
 def _test_myfrontend_bad (self, filename):
     source = open(os.path.join(self.path, filename)).read()
     try:
         mybuiltins.myfrontend(source, mybuiltins.initial_environment())
         self.failUnless(False, "The previous line should have thrown an "
                         "exception.")
     except MyFrontExceptions.MyFrontCompileTimeError, ct_err:
         embedded_exception = ct_err.args[0][1]
         self.failUnless(type(embedded_exception) ==
                         MyFrontExceptions.MyFrontSyntaxError)
         # XXX I don't know how brittle this is if we ever change
         # the syntax error message:
         msg = embedded_exception.args[0].split()
         line_index = msg.index('line') + 1
         line_no = int(msg[line_index][:-1])
         column_index = msg.index('column') + 1
         column_no = int(msg[column_index][:-1])
         unexpected_index = msg.index('unexpected') + 1
         unexpected_str = eval(msg[unexpected_index][:-1])
         source_line = source.split("\n")[line_no - 1]
         source_str = source_line[column_no:column_no +
                                  len(unexpected_str)]
         if __DEBUG__:
             print line_no, column_no, `source_line`,
             print `source_line[column_no - 1:]`, `unexpected_str`
         self.failUnlessEqual(source_str, unexpected_str)
Exemple #2
0
def nonquote_myboth (src, env = None):
    if env is None:
        env = mybuiltins.initial_environment()
    ast, env = env["myfrontend"](src, env)
    env = env.copy()
    _, env = env["myeval"](ast, env)
    return ast.body, env
Exemple #3
0
def main (*args):
    env = mybuiltins.initial_environment()
    for arg in args:
        text, env = mybuiltins._load_file(arg, env)
        myast, env = env['myfrontend'](text, env)
        pyast = myast_to_pyast(myast)
        pyast.lineno = pyast.col_offset = 0
        co = compile(pyast, 'xxx', 'exec')
        exec co in env
Exemple #4
0
def main (*args):
    for arg in args:
        print "_" * 70
        source = open(arg).read()
        ast, env0 = mybuiltins.myfrontend(source, mybuiltins.initial_environment())
        co0, env1 = mybuiltins.mybackend(ast, env0)
        dis.dis(co0)
        print "_" * 60
        co1 = compile(source, arg, "exec")
        dis.dis(co1)
Exemple #5
0
 def test_makequote (self):
     DUMMY_VALUE = 99
     def myprocessor (source):
         return DUMMY_VALUE
     env = mybuiltins.initial_environment()
     env["myquote"] = env["makequote"](myprocessor)
     _, env = env["myfront"](None, "quote [myquote] myval: anything\n\n",
                             env)
     self.assertEquals(env["myval"], DUMMY_VALUE)
     del env["myval"]
     _, env = env["myfront"](None, "quote [myquote]:\n\tno, really, "
                             "anything.\n\n", env)
     self.failUnlessRaises(KeyError, env.__getitem__, "myval")
Exemple #6
0
 def test_makequote_with_mutation (self):
     DUMMY_VALUE = "kookamungous"
     def myotherprocessor (source, env):
         if "sideeffectuals" in env:
             env["sideeffectuals"]["otherval"] = DUMMY_VALUE
         return DUMMY_VALUE, env
     env = mybuiltins.initial_environment()
     env["sideeffectuals"] = {}
     env["myquote2"] = mybuiltins.makequote(myotherprocessor, True)
     _, env = env["myfront"](None, "quote [myquote2] myval2: anything2\n\n",
                             env)
     self.assertEquals(env["myval2"], env["sideeffectuals"]["otherval"])
     self.assertEquals(env["myval2"], DUMMY_VALUE)
     del env["myval2"]
     env["sideeffectuals"] = {}
     _, env = env["myfront"](None, "quote [myquote2]:\n\tI'm serious,\n\t"
                             "anything.\n\n", env)
     self.assertEquals(env["sideeffectuals"]["otherval"], DUMMY_VALUE)
     self.failUnlessRaises(KeyError, env.__getitem__, "myval2")