@@ -341,8 +341,6 @@ static void set_error(jq_state *jq, jv value) {
341
341
#define ON_BACKTRACK (op ) ((op)+NUM_OPCODES)
342
342
343
343
jv jq_next (jq_state * jq ) {
344
- jv cfunc_input [MAX_CFUNCTION_ARGS ];
345
-
346
344
jv_nomem_handler (jq -> nomem_handler , jq -> nomem_handler_data );
347
345
348
346
uint16_t * pc = stack_restore (jq );
@@ -909,33 +907,27 @@ jv jq_next(jq_state *jq) {
909
907
910
908
case CALL_BUILTIN : {
911
909
int nargs = * pc ++ ;
912
- jv top = stack_pop (jq );
913
- jv * in = cfunc_input ;
914
- in [0 ] = top ;
915
- for (int i = 1 ; i < nargs ; i ++ ) {
916
- in [i ] = stack_pop (jq );
917
- }
918
910
struct cfunction * function = & frame_current (jq )-> bc -> globals -> cfunctions [* pc ++ ];
911
+ jv in [MAX_CFUNCTION_ARGS ];
912
+ for (int i = 0 ; i < nargs ; ++ i )
913
+ in [i ] = stack_pop (jq );
914
+
915
+ jv top ;
919
916
switch (function -> nargs ) {
920
917
case 1 : top = function -> fptr .a1 (jq , in [0 ]); break ;
921
918
case 2 : top = function -> fptr .a2 (jq , in [0 ], in [1 ]); break ;
922
919
case 3 : top = function -> fptr .a3 (jq , in [0 ], in [1 ], in [2 ]); break ;
923
920
case 4 : top = function -> fptr .a4 (jq , in [0 ], in [1 ], in [2 ], in [3 ]); break ;
924
- // FIXME: a) up to 7 arguments (input + 6), b) should assert
925
- // because the compiler should not generate this error.
926
- default : return jv_invalid_with_msg (jv_string ("Function takes too many arguments" ))
921
+ default : assert (0 && "Invalid number of arguments" );
927
922
}
928
923
929
- if (jv_is_valid (top )) {
930
- stack_push (jq , top );
931
- } else if (jv_invalid_has_msg (jv_copy (top ))) {
932
- set_error (jq , top );
933
- goto do_backtrack ;
934
- } else {
935
- // C-coded function returns invalid w/o msg? -> backtrack, as if
936
- // it had returned `empty`
924
+ if (!jv_is_valid (top )) {
925
+ if (jv_invalid_has_msg (jv_copy (top )))
926
+ set_error (jq , top );
937
927
goto do_backtrack ;
938
928
}
929
+
930
+ stack_push (jq , top );
939
931
break ;
940
932
}
941
933
0 commit comments