@@ -420,6 +420,19 @@ def visit_function_inline(self, node):
420420 # a separate pass so that we know whether to resolve a name as a local or a
421421 # global during the second pass.
422422 func_visitor = block .FunctionBlockVisitor (node )
423+
424+ for arg in reversed (node .args .args ):
425+ if isinstance (arg , ast .Tuple ):
426+ name = 'τ' .join (x .arg for x in arg .elts )
427+ from copy import deepcopy
428+ for j , elt in enumerate (reversed (arg .elts )):
429+ index = ast .Index (value = ast .Num (n = len (arg .elts ) - j - 1 , loc = arg .loc ), loc = arg .loc )
430+ subscript = ast .Subscript (value = ast .Name (id = name , ctx = None , loc = arg .loc ),
431+ slice = index , ctx = arg .ctx , loc = arg .loc )
432+ assign = ast .Assign (targets = [ast .Name (id = elt .arg , ctx = None , loc = arg .loc )],
433+ value = subscript , ctx = arg .ctx , loc = arg .loc )
434+ node .body .insert (0 , assign )
435+
423436 for child in node .body :
424437 func_visitor .visit (child )
425438 func_block = block .FunctionBlock (self .block , node .name , func_visitor .vars ,
@@ -443,9 +456,13 @@ def visit_function_inline(self, node):
443456 defaults = [None ] * (argc - len (args .defaults )) + args .defaults
444457 for i , (a , d ) in enumerate (zip (args .args , defaults )):
445458 with self .visit (d ) if d else expr .nil_expr as default :
459+ if isinstance (a , ast .Tuple ):
460+ name = util .go_str ('τ' .join (x .arg for x in a .elts ))
461+ else :
462+ name = util .go_str (a .arg )
446463 tmpl = '$args[$i] = πg.Param{Name: $name, Def: $default}'
447464 self .writer .write_tmpl (tmpl , args = func_args .expr , i = i ,
448- name = util . go_str ( a . arg ) , default = default .expr )
465+ name = name , default = default .expr )
449466 flags = []
450467 if args .vararg :
451468 flags .append ('πg.CodeFlagVarArg' )
0 commit comments