     malformed ctx, call, "Too many arguments to #{operator.symbol}"
   extraParamNames = positionalParams[nonLabeledArgs.length..]
   extraParams = map token_, ("_#{n}" for n in extraParamNames)
-  positionalArgs = map id, nonLabeledArgs # copy
-  extraArgs = map id, extraParams
-  argsInOrder = (for param in paramNames
-    (lookupInMap labeledArgs, param) or
-      positionalArgs.shift() or
-      extraArgs.shift())
+  argsInOrder = sortCallArguments paramNames, labeledArgs, nonLabeledArgs, extraParams
   sortedCall = (call_ operator,  argsInOrder)
 
   if ctx.assignTo()

          callSaturatedKnownCompile ctx, sortedCall
      retrieve call, sortedCall
      compiled

callConstructorPattern = (ctx, call, extraParamNames) ->
  operator = _operator call


exports.library = library

exports.sortedArgs = sortedArgs

exports.isForm = isForm
exports.isCall = isCall
exports.isAtom = isAtom
