parameters: (self, node, function, args, is_unbound_method)
return_statement: return self._substitute_method_call(
              node, function,
              "PyUnicode_Join", self.PyUnicode_Join_func_type,
              'join', is_unbound_method, args)
docstring: unicode.join() builds a list first => see if we can do this more efficiently
docstring_summary: unicode.join() builds a list first => see if we can do this more efficiently
docstring_tokens: unicode . join () builds a list first = > see if we can do this more efficiently
function: def _handle_simple_method_unicode_join(self, node, function, args, is_unbound_method):
          """
          unicode.join() builds a list first => see if we can do this more efficiently
          """
          if len(args) != 2:
              self._error_wrong_arg_count('unicode.join', node, args, "2")
              return node
          if isinstance(args[1], ExprNodes.GeneratorExpressionNode):
              gen_expr_node = args[1]
              loop_node = gen_expr_node.loop
  
              yield_statements = _find_yield_statements(loop_node)
              if yield_statements:
                  inlined_genexpr = ExprNodes.InlinedGeneratorExpressionNode(
                      node.pos, gen_expr_node, orig_func='list',
                      comprehension_type=Builtin.list_type)
  
                  for yield_expression, yield_stat_node in yield_statements:
                      append_node = ExprNodes.ComprehensionAppendNode(
                          yield_expression.pos,
                          expr=yield_expression,
                          target=inlined_genexpr.target)
  
                      Visitor.recursively_replace_node(gen_expr_node, yield_stat_node, append_node)
  
                  args[1] = inlined_genexpr
  
          return self._substitute_method_call(
              node, function,
              "PyUnicode_Join", self.PyUnicode_Join_func_type,
              'join', is_unbound_method, args)
function_tokens: def _handle_simple_method_unicode_join ( self , node , function , args , is_unbound_method ) : if len ( args ) != 2 : self . _error_wrong_arg_count ( 'unicode.join' , node , args , "2" ) return node if isinstance ( args [ 1 ] , ExprNodes . GeneratorExpressionNode ) : gen_expr_node = args [ 1 ] loop_node = gen_expr_node . loop yield_statements = _find_yield_statements ( loop_node ) if yield_statements : inlined_genexpr = ExprNodes . InlinedGeneratorExpressionNode ( node . pos , gen_expr_node , orig_func = 'list' , comprehension_type = Builtin . list_type ) for yield_expression , yield_stat_node in yield_statements : append_node = ExprNodes . ComprehensionAppendNode ( yield_expression . pos , expr = yield_expression , target = inlined_genexpr . target ) Visitor . recursively_replace_node ( gen_expr_node , yield_stat_node , append_node ) args [ 1 ] = inlined_genexpr return self . _substitute_method_call ( node , function , "PyUnicode_Join" , self . PyUnicode_Join_func_type , 'join' , is_unbound_method , args )