Esempio n. 1
0
 def testWriteExceptDispatcherMultipleExcept(self):
   visitor = stmt.StatementVisitor(_MakeModuleBlock())
   handlers = [ast.ExceptHandler(type=ast.Name(id='foo')),
               ast.ExceptHandler(type=ast.Name(id='bar'))]
   self.assertEqual(visitor._write_except_dispatcher(  # pylint: disable=protected-access
       'exc', 'tb', handlers), [1, 2])
   expected = re.compile(
       r'ResolveGlobal\(.*foo.*\bif .*\bIsInstance\(.*\{.*goto Label1.*'
       r'ResolveGlobal\(.*bar.*\bif .*\bIsInstance\(.*\{.*goto Label2.*'
       r'\bRaise\(exc\.ToObject\(\), nil, tb\.ToObject\(\)\)', re.DOTALL)
   self.assertRegexpMatches(visitor.writer.getvalue(), expected)
Esempio n. 2
0
 def testWriteExceptDispatcherBareExceptionNotLast(self):
   visitor = stmt.StatementVisitor(_MakeModuleBlock())
   handlers = [ast.ExceptHandler(type=None),
               ast.ExceptHandler(type=ast.Name(id='foo'))]
   self.assertRaisesRegexp(util.ParseError, r"default 'except:' must be last",
                           visitor._write_except_dispatcher,  # pylint: disable=protected-access
                           'exc', 'tb', handlers)
Esempio n. 3
0
 def testWriteExceptDispatcherBareExcept(self):
   visitor = stmt.StatementVisitor(_MakeModuleBlock())
   handlers = [ast.ExceptHandler(type=ast.Name(id='foo')),
               ast.ExceptHandler(type=None)]
   self.assertEqual(visitor._write_except_dispatcher(  # pylint: disable=protected-access
       'exc', 'tb', handlers), [1, 2])
   expected = re.compile(r'ResolveGlobal\(.*foo.*\bIsInstance\(.*'
                         r'goto Label1.*goto Label2', re.DOTALL)
   self.assertRegexpMatches(visitor.writer.getvalue(), expected)
Esempio n. 4
0
 def visit_FunctionDef(self, node):
   self._write_py_context(node.lineno + len(node.decorator_list))
   func = self.visit_function_inline(node)
   self.block.bind_var(self.writer, node.name, func.expr)
   while node.decorator_list:
     decorator = node.decorator_list.pop()
     wrapped = ast.Name(id=node.name)
     decorated = ast.Call(func=decorator, args=[wrapped], keywords=[],
                          starargs=None, kwargs=None)
     target = ast.Assign(targets=[wrapped], value=decorated, loc=node.loc)
     self.visit_Assign(target)