code: public List<IRElement> handleNamedArgs( List<IRExpression> explicitArgs, int[] namedArgOrder )
    {
      List<IRElement> namedArgElements = new ArrayList<IRElement>();
      if( namedArgOrder != null && namedArgOrder.length > 0 )
      {
        boolean b = namedArgOrder.length == explicitArgs.size();
        assert b;
        //noinspection ForLoopReplaceableByForEach
        for( int i = 0; i < namedArgOrder.length; i++ )
        {
          IRExpression argExpr = explicitArgs.get( namedArgOrder[i] );
          IRSymbol tempArgSymbol = _cc().makeAndIndexTempSymbol( argExpr.getType() );
          namedArgElements.add( buildAssignment( tempArgSymbol, argExpr ) );
          explicitArgs.set( namedArgOrder[i], identifier( tempArgSymbol ) );
        }
      }
      return namedArgElements;
    }
docs: Facilitates evaluation of named args in lexical order.  E.g.,
  <pre>
  callMe( :param3 = expr1, :param1 = expr2, :param2 = expr3 )
  </pre>
  is parsed as:
  <pre>
  callMe( expr2, expr3, expr1 )
  </pre>
  which is compiled to:
  <pre>
  temp1 = expr1
  temp2 = expr2
  temp3 = expr3
  callMe( temp2, temp3, temp1 )
  </pre>
  @param explicitArgs  The arg expressions in proper order for the target call. The expressions are replaced with the temp vars.
  @param namedArgOrder The lexical ordering of the args
  @return The temp var assignments in lexical order