Now actually implemented:
`+((["":14]), "", 14);
Compiler Error: 1:Too few arguments to `+ (got 3). Compiler Error: 1:Expected: object
One interesting problem along the way was the splice operator, but it now creates a proper closure. I've also made it continue with the argument checking after the first failure:
$ cat plice_test.pike string foo(int a, int b, int c, float f, string s) { return s; }
array(int) a = ({ 1, 2, 3 });
int main(int argc, array(string) argv) { werror("Test: %O\n", typeof(foo(1, @a, "bar", this))); }
$ pike.old splice_test.pike splice_test.pike:7:Bad argument 4 to foo. splice_test.pike:7:Expected: function(int, int, int, float, string : string) splice_test.pike:7:Got : function(int(1..1), int | object(implements 65619) | string | void ... : void | mixed) Pike: Failed to compile script: Compilation failed. ... $ pike splice_test.pike splice_test.pike:7: Warning: The splice operator argument has a max length of 2. splice_test.pike:7:Bad argument 3 to foo. splice_test.pike:7:Expected: int | float splice_test.pike:7:Got : string(8) splice_test.pike:7:Bad argument 4 to foo. splice_test.pike:7:Expected: float | string | int splice_test.pike:7:Got : object(implements program(/home/grubba/src/Pike/7.7/build/dmalloc/splice_test.pike)) Pike: Failed to compile script: Compilation failed. ...
Enabling the new argument checker is currently done by enabling the #define NEW_ARG_CHECK in las.c.
Enjoy.