diff --git a/pscript/parser2.py b/pscript/parser2.py
index 302b9e72..806b9cbe 100644
--- a/pscript/parser2.py
+++ b/pscript/parser2.py
@@ -934,17 +934,17 @@ def parse_FunctionDef(self, node, lambda_=False, asyn=False):
             if not node.kwargs_node:
                 code.append(", '%s'" % func_name or 'anonymous')
             code.append(');')
+            if vararg_code2:
+                code.append(self.lf(vararg_code2))
             # Apply values of positional args
             # inside if, because standard arguments are invalid
             args_var = 'arguments[0].flx_args'
             if len(argnames) > 1:
                 args_var = self.dummy('args')
                 code.append(self.lf('%s = arguments[0].flx_args;' % args_var))
-            for i, name in enumerate(argnames):
+            for i, name in reversed(list(enumerate(argnames))):
                 code.append(self.lf('%s = %s[%i];' % (name, args_var, i)))
             # End if
-            if vararg_code2:
-                code.append(self.lf(vararg_code2))
             self._indent -= 1
             code.append(self.lf('}'))
             if vararg_code1: