Define ... as a unary prefix operator, informally called "splat", at the same precedence level as !, ~, -, delete, typeof, void, etc.
Require that a splat expression be used only as the last or only actual parameter in a call or new expression.
Require the evaluated operand of splat to be an arguments or array object, else throw a TypeError?.
Evaluate splat once its operand has been evaluated by replacing the arguments or array object, call it A, with A.length actual trailing parameters from A[0] to A[A.length-1].
If the callee or constructor requires a different total number of arguments from the result after replacing A with its elements, throw a TypeError? as for any argument count mismatch.
Perform actual vs. formal type checking and conversion as usual, after replacing A with its elements and matching against trailing formals, including any optional ultimate ...rest parameter.
/be