/** array = sort(a, sorting_func); */ static mpdm_t F_sort(F_ARGS) { mpdm_t r, v; v = mpdm_ref(A0); r = mpdm_sort_cb(mpdm_clone(v), 1, A1); mpdm_unref(v); return r; }
/** v = eval(code, args); */ static mpdm_t F_eval(F_ARGS) { mpdm_t r, c; a = mpdm_ref(mpdm_clone(a)); c = mpdm_shift(a); r = mpsl_eval(c, a, l); mpdm_unref(a); return r; }
/** string = sprintf(fmt, arg1 [,arg2 ... argn]); */ static mpdm_t F_sprintf(F_ARGS) { mpdm_t f, v, r; a = mpdm_ref(mpdm_clone(a)); f = mpdm_shift(a); /* if the first argument is an array, take it as the arguments */ if ((v = mpdm_get_i(a, 0)) != NULL && mpdm_type(v) == MPDM_TYPE_ARRAY) a = v; r = mpdm_sprintf(f, a); mpdm_unref(a); return r; }
/** o = new(c1 [, c2, ...cn]); */ static mpdm_t F_new(F_ARGS) { int n; mpdm_t r = MPDM_O(); for (n = 0; n < mpdm_size(a); n++) { mpdm_t w, v, i; int m = 0; w = mpdm_ref(A(n)); if (mpdm_type(w) == MPDM_TYPE_OBJECT) { while (mpdm_iterator(w, &m, &v, &i)) mpdm_set(r, mpdm_clone(v), i); } mpdm_unref(w); } return r; }
O_TYPE O_literal(O_ARGS) { return mpdm_clone(C1); }
/** v2 = clone(v); */ static mpdm_t F_clone(F_ARGS) { return mpdm_clone(A0); }