DUK_EXTERNAL void duk_call_prop(duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs) { /* * XXX: if duk_handle_call() took values through indices, this could be * made much more sensible. However, duk_handle_call() needs to fudge * the 'this' and 'func' values to handle bound function chains, which * is now done "in-place", so this is not a trivial change. */ DUK_ASSERT_CTX_VALID(ctx); obj_idx = duk_require_normalize_index(ctx, obj_idx); /* make absolute */ duk__call_prop_prep_stack(ctx, obj_idx, nargs); duk_call_method(ctx, nargs); }
DUK_LOCAL duk_ret_t duk__pcall_prop_raw(duk_context *ctx, void *udata) { duk_idx_t obj_idx; duk_idx_t nargs; duk__pcall_prop_args *args; DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT(udata != NULL); args = (duk__pcall_prop_args *) udata; obj_idx = args->obj_idx; nargs = args->nargs; obj_idx = duk_require_normalize_index(ctx, obj_idx); /* make absolute */ duk__call_prop_prep_stack(ctx, obj_idx, nargs); duk_call_method(ctx, nargs); return 1; }
DUK_LOCAL duk_ret_t duk__pcall_prop_raw(duk_context *ctx) { duk_idx_t obj_index; duk_idx_t nargs; /* Get the original arguments. Note that obj_index may be a relative * index so the stack must have the same top when we use it. */ DUK_ASSERT_CTX_VALID(ctx); obj_index = (duk_idx_t) duk_get_int(ctx, -2); nargs = (duk_idx_t) duk_get_int(ctx, -1); duk_pop_2(ctx); obj_index = duk_require_normalize_index(ctx, obj_index); /* make absolute */ duk__call_prop_prep_stack(ctx, obj_index, nargs); duk_call_method(ctx, nargs); return 1; }