def runFunction():

            self.push_scope()
            for name in args:
                self.add_binding(node, Argument(name, node), report_redef=False)
            if isinstance(node.body, list):
                # case for FunctionDefs
                for stmt in node.body:
                    self.handleNode(stmt, node)
            else:
                # case for Lambdas
                self.handleNode(node.body, node)

            def checkUnusedAssignments():
                """Check to see if any assignments have not been used."""
                for name, binding in self.scope.unusedAssignments():
                    self.report(messages.UnusedVariable, binding.source, name)
            self.defer_assignment(checkUnusedAssignments)

            if PY2:
                def checkReturnWithArgumentInsideGenerator():
                    """Check to see if there are any return statements with
                    arguments but the function is a generator."""
                    if self.is_generator(node):
                        stmt = self.find_return_with_argument(node)
                        if stmt is not None:
                            self.report(messages.ReturnWithArgsInsideGenerator, stmt)
                self.defer_assignment(checkReturnWithArgumentInsideGenerator)
            self.pop_scope()