Right now, if you make a script like this
`Vfunction``A(``Ccontext``A,``Cargs``A,``Cother``A,``Crandom``A,``Cthings``A){}`
You can pass values through to the additional args (`Cother`, `Crandom`, `Cthings`) only as a subscript call, and only if the script above is `Apublic`. You cannot pass extra args on the CLI, through a scriptor .call, or if the above script is `Aprivate`.
CLI is, I think, acceptable as is -- you only get 1 arg on the CLI, period, end of story. I can live with that.
But I'd like to be able to pass multiple args through to private subscript calls, or to scriptors.
To facilitate this, I would suggest
*) Change the internal wrapper (that does security checks) on private subscript calls from
`Vfunction``A(``Cc``A,``Ca``A) {`
`l// perform checks here`
`Vreturn` `N(our code)``A(``Cc``A,``Ca``A)`
`A}`
to
`Vfunction``A(``Cc``A,``Ca``A,``C...e``A) {`
`l// perform checks here`
`Vreturn` `N(our code)``A(``Cc``A,``Ca``A,``C...e``A)`
`A}`
*) Change the scriptor call function from
`Cscr``A.``Ccall``A=``Vfunction``A(``Cargs``A) {`
`Vreturn` `A#ns.``Cwhatever``A.``Lscript``A(``Chardcoded_context``A,``Cargs``A)`
`A}`
to
`Cscr``A.``Ccall``A=``Vfunction``A(``Cargs``A,``C...extra``A) {`
`Vreturn` `A#ns.``Cwhatever``A.``Lscript``A(``Chardcoded_context``A,``Cargs``A,``C...extra``A)`
`A}`
In both cases, I kept the current `Cargs`/`Ca` argument out of the spread/rest, because that way it doesn't need to interact with iterators (good for speed). As far as I know, the spread/rest iterators are currently safe, so this shouldn't open up any vulns (but that would need to be thoroughly double checked first). Also, this keeps the length of the functions the same (though this is only actually observable on a scriptor's .call function)
NOTE: In the private subscript case, this does get us a new "free" variable (`Ce`) accessible via closure. That can help code golf (which is why I stuck to the 1-letter names there), which isn't necessarily a bad thing. I used `Ce` because in the old old old days, `Ce` was a magic free variable we could use without defining. At some point we lost it, so this adds it back. It also happens to be a reasonable abbreviation for `Cextra`.