@@ -397,55 +397,56 @@ def visit_FunctionDef(self, node):
397397 writer .write ('def %s(args, kwargs):' % node .name )
398398 writer .push ()
399399
400- # new pythonjs' python function arguments handling
401- # create the structure representing the functions arguments
402- # first create the defaultkwargs JSObject
403- writer .write ('var(signature, arguments)' )
404- L = len (node .args .defaults )
405- kwargsdefault = map (lambda x : keyword (self .visit (x [0 ]), x [1 ]), zip (node .args .args [- L :], node .args .defaults ))
406- kwargsdefault = Call (
407- Name ('JSObject' , None ),
408- [],
409- kwargsdefault ,
410- None ,
411- None
412- )
413- args = Call (
414- Name ('JSArray' , None ),
415- map (lambda x : Str (x .id ), node .args .args ),
416- [],
417- None ,
418- None
419- )
420- keywords = list ([
421- keyword (Name ('kwargs' , None ), kwargsdefault ),
422- keyword (Name ('args' , None ), args ),
423- ])
424- if node .args .vararg :
425- keywords .append (keyword (Name ('vararg' , None ), Str (node .args .vararg )))
426- if node .args .kwarg :
427- keywords .append (keyword (Name ('varkwarg' , None ), Str (node .args .kwarg )))
428-
429- prebody = list ()
430-
431- # create a JS Object to store the value of each parameter
432- signature = ', ' .join (map (lambda x : '%s=%s' % (self .visit (x .arg ), self .visit (x .value )), keywords ))
433- writer .write ('signature = JSObject(%s)' % signature )
434- writer .write ('arguments = get_arguments(signature, args, kwargs)' )
435- # # then for each argument assign its value
436- for arg in node .args .args :
437- writer .write ("""JS("var %s = arguments['%s']")""" % (arg .id , arg .id ))
438- if node .args .vararg :
439- writer .write ("""JS("var %s = arguments['%s']")""" % (node .args .vararg , node .args .vararg ))
440- # turn it into a list
441- expr = '%s = get_attribute(list, "__call__")(create_array(%s), {});'
442- expr = expr % (node .args .vararg , node .args .vararg )
443- writer .write (expr )
444- if node .args .kwarg :
445- writer .write ("""JS('var %s = arguments["%s"]')""" % (node .args .kwarg , node .args .kwarg ))
446- expr = '%s = get_attribute(dict, "__call__")(create_array(%s), {});'
447- expr = expr % (node .args .kwarg , node .args .kwarg )
448- writer .write (expr )
400+ if len (node .args .defaults ) or len (node .args .args ) or node .args .vararg or node .args .kwarg :
401+ # new pythonjs' python function arguments handling
402+ # create the structure representing the functions arguments
403+ # first create the defaultkwargs JSObject
404+ writer .write ('var(signature, arguments)' )
405+ L = len (node .args .defaults )
406+ kwargsdefault = map (lambda x : keyword (self .visit (x [0 ]), x [1 ]), zip (node .args .args [- L :], node .args .defaults ))
407+ kwargsdefault = Call (
408+ Name ('JSObject' , None ),
409+ [],
410+ kwargsdefault ,
411+ None ,
412+ None
413+ )
414+ args = Call (
415+ Name ('JSArray' , None ),
416+ map (lambda x : Str (x .id ), node .args .args ),
417+ [],
418+ None ,
419+ None
420+ )
421+ keywords = list ([
422+ keyword (Name ('kwargs' , None ), kwargsdefault ),
423+ keyword (Name ('args' , None ), args ),
424+ ])
425+ if node .args .vararg :
426+ keywords .append (keyword (Name ('vararg' , None ), Str (node .args .vararg )))
427+ if node .args .kwarg :
428+ keywords .append (keyword (Name ('varkwarg' , None ), Str (node .args .kwarg )))
429+
430+ prebody = list () ## NOT USED?
431+
432+ # create a JS Object to store the value of each parameter
433+ signature = ', ' .join (map (lambda x : '%s=%s' % (self .visit (x .arg ), self .visit (x .value )), keywords ))
434+ writer .write ('signature = JSObject(%s)' % signature )
435+ writer .write ('arguments = get_arguments(signature, args, kwargs)' )
436+ # # then for each argument assign its value
437+ for arg in node .args .args :
438+ writer .write ("""JS("var %s = arguments['%s']")""" % (arg .id , arg .id ))
439+ if node .args .vararg :
440+ writer .write ("""JS("var %s = arguments['%s']")""" % (node .args .vararg , node .args .vararg ))
441+ # turn it into a list
442+ expr = '%s = get_attribute(list, "__call__")(create_array(%s), {});'
443+ expr = expr % (node .args .vararg , node .args .vararg )
444+ writer .write (expr )
445+ if node .args .kwarg :
446+ writer .write ("""JS('var %s = arguments["%s"]')""" % (node .args .kwarg , node .args .kwarg ))
447+ expr = '%s = get_attribute(dict, "__call__")(create_array(%s), {});'
448+ expr = expr % (node .args .kwarg , node .args .kwarg )
449+ writer .write (expr )
449450
450451 map (self .visit , node .body )
451452 writer .pull ()
0 commit comments