123456789101112131415161718192021222324252627282930 |
- #include "sol.h"
-
- #include <stdarg.h>
-
- sol_object_t *sol_util_call(sol_state_t *state, sol_object_t *func, int elems, ...) {
- va_list va;
- sol_object_t *args = sol_new_list(state), *res = NULL;
- int i;
-
- if(sol_has_error(state)) return sol_incref(state->None);
-
- sol_list_insert(state, args, 0, func);
-
- va_start(va, elems);
- for(i=0; i<elems; i++) {
- sol_list_insert(state, args, i+1, va_arg(va, sol_object_t *));
- }
- va_end(va);
-
- if(!func->ops->call) return sol_incref(state->None);
- res = func->ops->call(state, args);
- if(!res) res = sol_incref(state->None);
- if(sol_has_error(state)) {
- sol_clear_error(state);
- sol_obj_free(res);
- res = sol_incref(state->None);
- }
-
- return res;
- }
|