On Sat, Jan 05, 2019 at 09:22:34AM -0800, Steve Kargl wrote:
> On Sat, Jan 05, 2019 at 01:23:14PM +0100, Thomas Koenig wrote:
> > 
> > Maybe it would be better to put the checking and argument reordering
> > into its own routine (something like gfc_check_minloc_maxloc in
> > check.c) so all three arguments would be present, with an
> > expression possibly containing NULL, for the later routines.
> > This could add some clarity and save code duplication later,
> > when the second part of the patch is done.
> > 
> > However, I do not feel strongly about that. If you feel that your
> > current approach is better, that is fine by me.
> > 
> 
> Thanks, Thomas.  I tried a few things and finally landed on
> the keyword vs positional handling and argument checking in
> simplify_ieee_selected_real_kind.  The actual heavy lifting
> comes from gfc_simplify_selected_real_kind where the constant
> expressions are extracted and gfortran tries to determine a
> valid kind.  I see if I can moving the keyword/positional
> and checking into a separate function.
> 

Well, that was quick.  Moving code around is problematic.  The
hijacking of the interface checking causes gfortran to see from
1 to 3 actual arguments.  A simple example is ISRK(r=3.14) (yes,
an invalid call).  This has exact 1 actual argument, namely,
arg=expr->value.function.actual.  So, gfortran see arg->next=NULL
and arg->next->next obvious cannot exist.  The re-ordering would
require allocation of next and next->next to get the number of
actual arguments to match P,R,RADIX, so that we can extract 
pointers to the expressions.  Not worth the effort at the moment.

Of I might change my mind when I try to tackle the hijacking of

  function rknd(n) result r
    use ieee_arithmetic
    integer n
    r = ieee_selected_real_kind(p=n)
  end function rknd

-- 
Steve

Reply via email to