Skip to content
Prev 5862 / 63424 Next

too many arguments in foreign function call

"Warnes, Gregory R" <gregory_r_warnes@groton.pfizer.com> writes:
Some anxiety that there might be platforms that really don't allow
many parameters, I suppose. (As opposed to the arbitrary limit imposed
by R, essentially caused by the programmer giving up after

    case 65:
        retval = (SEXP)fun(
            cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
            cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
            cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
            cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
            cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
            cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
            cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
            cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
            cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
            cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
            cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
            cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
            cargs[60], cargs[61], cargs[62], cargs[63], cargs[64]);
        break;

There's obviously no portable and neat way of doing variable length
argument lists.)

You don't need to go via SEXPs to solve your problem, and in fact not
even to C. You could for instance use (pardon, my Fortran is getting
rusty): 

      subroutine doit(work, p, i)
      double precision work(1)
      integer p(59), i(25)
      call myfun(work(1),work(p(1)),work(p(2)),....,work(p(59)),
     +           i(1),...,i(25))
      return
      end