Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
duk_api_object.c File Reference
#include "duk_internal.h"

Go to the source code of this file.

Functions

DUK_EXTERNAL duk_bool_t duk_get_prop (duk_context *ctx, duk_idx_t obj_index)
 
DUK_EXTERNAL duk_bool_t duk_get_prop_string (duk_context *ctx, duk_idx_t obj_index, const char *key)
 
DUK_EXTERNAL duk_bool_t duk_get_prop_index (duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
 
DUK_INTERNAL duk_bool_t duk_get_prop_stridx (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
 
DUK_INTERNAL duk_bool_t duk_get_prop_stridx_boolean (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_bool_t *out_has_prop)
 
DUK_LOCAL duk_bool_t duk__put_prop_shared (duk_context *ctx, duk_idx_t obj_idx, duk_idx_t idx_key)
 
DUK_EXTERNAL duk_bool_t duk_put_prop (duk_context *ctx, duk_idx_t obj_idx)
 
DUK_EXTERNAL duk_bool_t duk_put_prop_string (duk_context *ctx, duk_idx_t obj_idx, const char *key)
 
DUK_EXTERNAL duk_bool_t duk_put_prop_index (duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx)
 
DUK_INTERNAL duk_bool_t duk_put_prop_stridx (duk_context *ctx, duk_idx_t obj_idx, duk_small_int_t stridx)
 
DUK_EXTERNAL duk_bool_t duk_del_prop (duk_context *ctx, duk_idx_t obj_index)
 
DUK_EXTERNAL duk_bool_t duk_del_prop_string (duk_context *ctx, duk_idx_t obj_index, const char *key)
 
DUK_EXTERNAL duk_bool_t duk_del_prop_index (duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
 
DUK_INTERNAL duk_bool_t duk_del_prop_stridx (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
 
DUK_EXTERNAL duk_bool_t duk_has_prop (duk_context *ctx, duk_idx_t obj_index)
 
DUK_EXTERNAL duk_bool_t duk_has_prop_string (duk_context *ctx, duk_idx_t obj_index, const char *key)
 
DUK_EXTERNAL duk_bool_t duk_has_prop_index (duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
 
DUK_INTERNAL duk_bool_t duk_has_prop_stridx (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
 
DUK_INTERNAL void duk_xdef_prop (duk_context *ctx, duk_idx_t obj_index, duk_small_uint_t desc_flags)
 
DUK_INTERNAL void duk_xdef_prop_index (duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index, duk_small_uint_t desc_flags)
 
DUK_INTERNAL void duk_xdef_prop_stridx (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
 
DUK_INTERNAL void duk_xdef_prop_stridx_builtin (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_int_t builtin_idx, duk_small_uint_t desc_flags)
 
DUK_INTERNAL void duk_xdef_prop_stridx_thrower (duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
 
DUK_EXTERNAL void duk_def_prop (duk_context *ctx, duk_idx_t obj_index, duk_uint_t flags)
 
DUK_EXTERNAL void duk_compact (duk_context *ctx, duk_idx_t obj_index)
 
DUK_EXTERNAL void duk_enum (duk_context *ctx, duk_idx_t obj_index, duk_uint_t enum_flags)
 
DUK_EXTERNAL duk_bool_t duk_next (duk_context *ctx, duk_idx_t enum_index, duk_bool_t get_value)
 
DUK_EXTERNAL void duk_put_function_list (duk_context *ctx, duk_idx_t obj_index, const duk_function_list_entry *funcs)
 
DUK_EXTERNAL void duk_put_number_list (duk_context *ctx, duk_idx_t obj_index, const duk_number_list_entry *numbers)
 
DUK_EXTERNAL duk_bool_t duk_get_global_string (duk_context *ctx, const char *key)
 
DUK_EXTERNAL duk_bool_t duk_put_global_string (duk_context *ctx, const char *key)
 
DUK_EXTERNAL void duk_get_prototype (duk_context *ctx, duk_idx_t index)
 
DUK_EXTERNAL void duk_set_prototype (duk_context *ctx, duk_idx_t index)
 
DUK_EXTERNAL void duk_get_finalizer (duk_context *ctx, duk_idx_t index)
 
DUK_EXTERNAL void duk_set_finalizer (duk_context *ctx, duk_idx_t index)
 

Function Documentation

◆ duk__put_prop_shared()

DUK_LOCAL duk_bool_t duk__put_prop_shared ( duk_context * ctx,
duk_idx_t obj_idx,
duk_idx_t idx_key )

Definition at line 85 of file duktape-1.5.2/src-separate/duk_api_object.c.

85 {
86 duk_hthread *thr = (duk_hthread *) ctx;
87 duk_tval *tv_obj;
88 duk_tval *tv_key;
89 duk_tval *tv_val;
90 duk_small_int_t throw_flag;
91 duk_bool_t rc;
92
93 /* Note: copying tv_obj and tv_key to locals to shield against a valstack
94 * resize is not necessary for a property put right now (putprop protects
95 * against it internally).
96 */
97
98 /* Key and value indices are either (-2, -1) or (-1, -2). Given idx_key,
99 * idx_val is always (idx_key ^ 0x01).
100 */
101 DUK_ASSERT((idx_key == -2 && (idx_key ^ 1) == -1) ||
102 (idx_key == -1 && (idx_key ^ 1) == -2));
103 tv_obj = duk_require_tval(ctx, obj_idx);
104 tv_key = duk_require_tval(ctx, idx_key);
105 tv_val = duk_require_tval(ctx, idx_key ^ 1);
106 throw_flag = duk_is_strict_call(ctx);
107
108 rc = duk_hobject_putprop(thr, tv_obj, tv_key, tv_val, throw_flag);
109 DUK_ASSERT(rc == 0 || rc == 1);
110
111 duk_pop_2(ctx); /* remove key and value */
112 return rc; /* 1 if property found, 0 otherwise */
113}
duk_small_int_t duk_bool_t
DUK_EXTERNAL void duk_pop_2(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_is_strict_call(duk_context *ctx)
DUK_INTERNAL_DECL duk_tval * duk_require_tval(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key, duk_tval *tv_val, duk_bool_t throw_flag)

References DUK_ASSERT, duk_hobject_putprop(), duk_is_strict_call(), duk_pop_2(), and duk_require_tval().

Referenced by duk_put_prop(), duk_put_prop_index(), duk_put_prop_stridx(), and duk_put_prop_string().

◆ duk_compact()

DUK_EXTERNAL void duk_compact ( duk_context * ctx,
duk_idx_t obj_index )

Definition at line 441 of file duktape-1.5.2/src-separate/duk_api_object.c.

441 {
442 duk_hthread *thr = (duk_hthread *) ctx;
443 duk_hobject *obj;
444
446
447 obj = duk_get_hobject(ctx, obj_index);
448 if (obj) {
449 /* Note: this may fail, caller should protect the call if necessary */
451 }
452}
#define DUK_ASSERT_CTX_VALID(ctx)
DUK_INTERNAL_DECL void duk_hobject_compact_props(duk_hthread *thr, duk_hobject *obj)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject(duk_context *ctx, duk_idx_t index)

References DUK_ASSERT_CTX_VALID, duk_get_hobject(), and duk_hobject_compact_props().

◆ duk_def_prop()

DUK_EXTERNAL void duk_def_prop ( duk_context * ctx,
duk_idx_t obj_index,
duk_uint_t flags )

Definition at line 349 of file duktape-1.5.2/src-separate/duk_api_object.c.

349 {
350 duk_hthread *thr = (duk_hthread *) ctx;
351 duk_idx_t idx_base;
352 duk_hobject *obj;
353 duk_hstring *key;
354 duk_idx_t idx_value;
355 duk_hobject *get;
356 duk_hobject *set;
357 duk_uint_t is_data_desc;
358 duk_uint_t is_acc_desc;
359
361
362 obj = duk_require_hobject(ctx, obj_index);
363
364 is_data_desc = flags & (DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_HAVE_WRITABLE);
365 is_acc_desc = flags & (DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER);
366 if (is_data_desc && is_acc_desc) {
367 /* "Have" flags must not be conflicting so that they would
368 * apply to both a plain property and an accessor at the same
369 * time.
370 */
371 goto fail_invalid_desc;
372 }
373
374 idx_base = duk_get_top_index(ctx);
375 if (flags & DUK_DEFPROP_HAVE_SETTER) {
379 set = duk_get_hobject_or_lfunc_coerce(ctx, idx_base);
380 if (set != NULL && !DUK_HOBJECT_IS_CALLABLE(set)) {
381 goto fail_not_callable;
382 }
383 idx_base--;
384 } else {
385 set = NULL;
386 }
387 if (flags & DUK_DEFPROP_HAVE_GETTER) {
391 get = duk_get_hobject_or_lfunc_coerce(ctx, idx_base);
392 if (get != NULL && !DUK_HOBJECT_IS_CALLABLE(get)) {
393 goto fail_not_callable;
394 }
395 idx_base--;
396 } else {
397 get = NULL;
398 }
399 if (flags & DUK_DEFPROP_HAVE_VALUE) {
400 idx_value = idx_base;
401 idx_base--;
402 } else {
403 idx_value = (duk_idx_t) -1;
404 }
405 key = duk_require_hstring(ctx, idx_base);
406
407 duk_require_valid_index(ctx, idx_base);
408
410 flags /*defprop_flags*/,
411 obj,
412 key,
413 idx_value,
414 get,
415 set);
416
417 /* Clean up stack */
418
419 duk_set_top(ctx, idx_base);
420
421 /* [ ... obj ... ] */
422
423 return;
424
425 fail_invalid_desc:
427 return;
428
429 fail_not_callable:
431 return;
432}
duk_uint_fast32_t duk_uint_t
DUK_INTERNAL_DECL duk_hobject * duk_require_hobject(duk_context *ctx, duk_idx_t index)
#define DUK_ERROR_TYPE(thr, msg)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject_or_lfunc_coerce(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_IS_CALLABLE(h)
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_idx_t duk_get_top_index(duk_context *ctx)
DUK_EXTERNAL void duk_require_valid_index(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_hobject_define_property_helper(duk_context *ctx, duk_uint_t defprop_flags, duk_hobject *obj, duk_hstring *key, duk_idx_t idx_value, duk_hobject *get, duk_hobject *set)
#define DUK_STR_INVALID_DESCRIPTOR
DUK_INTERNAL_DECL duk_hstring * duk_require_hstring(duk_context *ctx, duk_idx_t index)
#define DUK_DEFPROP_HAVE_GETTER
#define DUK_TYPE_MASK_OBJECT
#define DUK_DEFPROP_HAVE_VALUE
#define DUK_TYPE_MASK_LIGHTFUNC
#define DUK_DEFPROP_HAVE_WRITABLE
#define DUK_DEFPROP_HAVE_SETTER
#define DUK_TYPE_MASK_UNDEFINED
#define duk_require_type_mask(ctx, index, mask)
#define NULL
Definition gmacros.h:924

References DUK_ASSERT_CTX_VALID, DUK_DEFPROP_HAVE_GETTER, DUK_DEFPROP_HAVE_SETTER, DUK_DEFPROP_HAVE_VALUE, DUK_DEFPROP_HAVE_WRITABLE, DUK_ERROR_TYPE, duk_get_hobject_or_lfunc_coerce(), duk_get_top_index(), duk_hobject_define_property_helper(), DUK_HOBJECT_IS_CALLABLE, duk_require_hobject(), duk_require_hstring(), duk_require_type_mask, duk_require_valid_index(), duk_set_top(), DUK_STR_INVALID_DESCRIPTOR, DUK_STR_NOT_CALLABLE, DUK_TYPE_MASK_LIGHTFUNC, DUK_TYPE_MASK_OBJECT, DUK_TYPE_MASK_UNDEFINED, and NULL.

◆ duk_del_prop()

DUK_EXTERNAL duk_bool_t duk_del_prop ( duk_context * ctx,
duk_idx_t obj_index )

Definition at line 154 of file duktape-1.5.2/src-separate/duk_api_object.c.

154 {
155 duk_hthread *thr = (duk_hthread *) ctx;
156 duk_tval *tv_obj;
157 duk_tval *tv_key;
158 duk_small_int_t throw_flag;
159 duk_bool_t rc;
160
162
163 /* Note: copying tv_obj and tv_key to locals to shield against a valstack
164 * resize is not necessary for a property delete right now.
165 */
166
167 tv_obj = duk_require_tval(ctx, obj_index);
168 tv_key = duk_require_tval(ctx, -1);
169 throw_flag = duk_is_strict_call(ctx);
170
171 rc = duk_hobject_delprop(thr, tv_obj, tv_key, throw_flag);
172 DUK_ASSERT(rc == 0 || rc == 1);
173
174 duk_pop(ctx); /* remove key */
175 return rc;
176}
DUK_INTERNAL_DECL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key, duk_bool_t throw_flag)
DUK_EXTERNAL void duk_pop(duk_context *ctx)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_hobject_delprop(), duk_is_strict_call(), duk_pop(), and duk_require_tval().

Referenced by duk_del_prop_index(), duk_del_prop_stridx(), and duk_del_prop_string().

◆ duk_del_prop_index()

DUK_EXTERNAL duk_bool_t duk_del_prop_index ( duk_context * ctx,
duk_idx_t obj_index,
duk_uarridx_t arr_index )

Definition at line 187 of file duktape-1.5.2/src-separate/duk_api_object.c.

187 {
189
190 obj_index = duk_require_normalize_index(ctx, obj_index);
191 duk_push_uarridx(ctx, arr_index);
192 return duk_del_prop(ctx, obj_index);
193}
DUK_EXTERNAL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t index)
#define duk_push_uarridx(ctx, val)
DUK_EXTERNAL duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_index)

References DUK_ASSERT_CTX_VALID, duk_del_prop(), duk_push_uarridx, and duk_require_normalize_index().

◆ duk_del_prop_stridx()

DUK_INTERNAL duk_bool_t duk_del_prop_stridx ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx )

Definition at line 195 of file duktape-1.5.2/src-separate/duk_api_object.c.

195 {
196 duk_hthread *thr = (duk_hthread *) ctx;
197
199 DUK_ASSERT_DISABLE(stridx >= 0);
201 DUK_UNREF(thr);
202
203 obj_index = duk_require_normalize_index(ctx, obj_index);
204 duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx));
205 return duk_del_prop(ctx, obj_index);
206}
#define DUK_ASSERT_DISABLE(x)
#define DUK_HTHREAD_GET_STRING(thr, idx)
DUK_INTERNAL_DECL void duk_push_hstring(duk_context *ctx, duk_hstring *h)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_ASSERT_DISABLE, duk_del_prop(), DUK_HEAP_NUM_STRINGS, DUK_HTHREAD_GET_STRING, duk_push_hstring(), duk_require_normalize_index(), and DUK_UNREF.

◆ duk_del_prop_string()

DUK_EXTERNAL duk_bool_t duk_del_prop_string ( duk_context * ctx,
duk_idx_t obj_index,
const char * key )

Definition at line 178 of file duktape-1.5.2/src-separate/duk_api_object.c.

178 {
180 DUK_ASSERT(key != NULL);
181
182 obj_index = duk_require_normalize_index(ctx, obj_index);
183 duk_push_string(ctx, key);
184 return duk_del_prop(ctx, obj_index);
185}
DUK_EXTERNAL const char * duk_push_string(duk_context *ctx, const char *str)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_del_prop(), duk_push_string(), duk_require_normalize_index(), and NULL.

◆ duk_enum()

DUK_EXTERNAL void duk_enum ( duk_context * ctx,
duk_idx_t obj_index,
duk_uint_t enum_flags )

Definition at line 456 of file duktape-1.5.2/src-separate/duk_api_object.c.

456 {
458
459 duk_dup(ctx, obj_index);
461 duk_hobject_enumerator_create(ctx, enum_flags); /* [target] -> [enum] */
462}
DUK_INTERNAL_DECL void duk_hobject_enumerator_create(duk_context *ctx, duk_small_uint_t enum_flags)
DUK_INTERNAL_DECL duk_hobject * duk_require_hobject_or_lfunc_coerce(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)

References DUK_ASSERT_CTX_VALID, duk_dup(), duk_hobject_enumerator_create(), and duk_require_hobject_or_lfunc_coerce().

◆ duk_get_finalizer()

DUK_EXTERNAL void duk_get_finalizer ( duk_context * ctx,
duk_idx_t index )

Definition at line 600 of file duktape-1.5.2/src-separate/duk_api_object.c.

600 {
602
604}
guint index
#define DUK_STRIDX_INT_FINALIZER
DUK_INTERNAL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)

References DUK_ASSERT_CTX_VALID, duk_get_prop_stridx(), DUK_STRIDX_INT_FINALIZER, and index.

◆ duk_get_global_string()

DUK_EXTERNAL duk_bool_t duk_get_global_string ( duk_context * ctx,
const char * key )

Definition at line 510 of file duktape-1.5.2/src-separate/duk_api_object.c.

510 {
511 duk_hthread *thr = (duk_hthread *) ctx;
512 duk_bool_t ret;
513
516
517 /* XXX: direct implementation */
518
520 ret = duk_get_prop_string(ctx, -1, key);
521 duk_remove(ctx, -2);
522 return ret;
523}
DUK_EXTERNAL void duk_remove(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_push_hobject(duk_context *ctx, duk_hobject *h)
DUK_EXTERNAL duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key)
duk_hobject * builtins[DUK_NUM_BUILTINS]

References duk_hthread::builtins, DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_BIDX_GLOBAL, duk_get_prop_string(), duk_push_hobject(), duk_remove(), and NULL.

◆ duk_get_prop()

DUK_EXTERNAL duk_bool_t duk_get_prop ( duk_context * ctx,
duk_idx_t obj_index )

Definition at line 15 of file duktape-1.5.2/src-separate/duk_api_object.c.

15 {
16 duk_hthread *thr = (duk_hthread *) ctx;
17 duk_tval *tv_obj;
18 duk_tval *tv_key;
19 duk_bool_t rc;
20
22
23 /* Note: copying tv_obj and tv_key to locals to shield against a valstack
24 * resize is not necessary for a property get right now.
25 */
26
27 tv_obj = duk_require_tval(ctx, obj_index);
28 tv_key = duk_require_tval(ctx, -1);
29
30 rc = duk_hobject_getprop(thr, tv_obj, tv_key);
31 DUK_ASSERT(rc == 0 || rc == 1);
32 /* a value is left on stack regardless of rc */
33
34 duk_remove(ctx, -2); /* remove key */
35 return rc; /* 1 if property found, 0 otherwise */
36}
DUK_INTERNAL_DECL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_hobject_getprop(), duk_remove(), and duk_require_tval().

Referenced by duk_get_prop_index(), duk_get_prop_stridx(), and duk_get_prop_string().

◆ duk_get_prop_index()

DUK_EXTERNAL duk_bool_t duk_get_prop_index ( duk_context * ctx,
duk_idx_t obj_index,
duk_uarridx_t arr_index )

Definition at line 47 of file duktape-1.5.2/src-separate/duk_api_object.c.

47 {
49
50 obj_index = duk_require_normalize_index(ctx, obj_index);
51 duk_push_uarridx(ctx, arr_index);
52 return duk_get_prop(ctx, obj_index);
53}
DUK_EXTERNAL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_index)

References DUK_ASSERT_CTX_VALID, duk_get_prop(), duk_push_uarridx, and duk_require_normalize_index().

◆ duk_get_prop_stridx()

◆ duk_get_prop_stridx_boolean()

DUK_INTERNAL duk_bool_t duk_get_prop_stridx_boolean ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx,
duk_bool_t * out_has_prop )

Definition at line 68 of file duktape-1.5.2/src-separate/duk_api_object.c.

68 {
69 duk_bool_t rc;
70
72 DUK_ASSERT_DISABLE(stridx >= 0);
74
75 rc = duk_get_prop_stridx(ctx, obj_index, stridx);
76 if (out_has_prop) {
77 *out_has_prop = rc;
78 }
79 rc = duk_to_boolean(ctx, -1);
80 DUK_ASSERT(rc == 0 || rc == 1);
81 duk_pop(ctx);
82 return rc;
83}
DUK_EXTERNAL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t index)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_ASSERT_DISABLE, duk_get_prop_stridx(), DUK_HEAP_NUM_STRINGS, duk_pop(), and duk_to_boolean().

◆ duk_get_prop_string()

DUK_EXTERNAL duk_bool_t duk_get_prop_string ( duk_context * ctx,
duk_idx_t obj_index,
const char * key )

Definition at line 38 of file duktape-1.5.2/src-separate/duk_api_object.c.

38 {
40 DUK_ASSERT(key != NULL);
41
42 obj_index = duk_require_normalize_index(ctx, obj_index);
43 duk_push_string(ctx, key);
44 return duk_get_prop(ctx, obj_index);
45}

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_get_prop(), duk_push_string(), duk_require_normalize_index(), and NULL.

Referenced by duk_get_global_string().

◆ duk_get_prototype()

DUK_EXTERNAL void duk_get_prototype ( duk_context * ctx,
duk_idx_t index )

Definition at line 545 of file duktape-1.5.2/src-separate/duk_api_object.c.

545 {
546 duk_hthread *thr = (duk_hthread *) ctx;
547 duk_hobject *obj;
549
551 DUK_UNREF(thr);
552
553 obj = duk_require_hobject(ctx, index);
554 DUK_ASSERT(obj != NULL);
555
556 /* XXX: shared helper for duk_push_hobject_or_undefined()? */
558 if (proto) {
560 } else {
562 }
563}
const char * proto
Definition civetweb.c:18378
#define DUK_HOBJECT_GET_PROTOTYPE(heap, h)
DUK_EXTERNAL void duk_push_undefined(duk_context *ctx)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_HOBJECT_GET_PROTOTYPE, duk_push_hobject(), duk_push_undefined(), duk_require_hobject(), DUK_UNREF, duk_hthread::heap, index, NULL, and proto.

◆ duk_has_prop()

DUK_EXTERNAL duk_bool_t duk_has_prop ( duk_context * ctx,
duk_idx_t obj_index )

Definition at line 208 of file duktape-1.5.2/src-separate/duk_api_object.c.

208 {
209 duk_hthread *thr = (duk_hthread *) ctx;
210 duk_tval *tv_obj;
211 duk_tval *tv_key;
212 duk_bool_t rc;
213
215
216 /* Note: copying tv_obj and tv_key to locals to shield against a valstack
217 * resize is not necessary for a property existence check right now.
218 */
219
220 tv_obj = duk_require_tval(ctx, obj_index);
221 tv_key = duk_require_tval(ctx, -1);
222
223 rc = duk_hobject_hasprop(thr, tv_obj, tv_key);
224 DUK_ASSERT(rc == 0 || rc == 1);
225
226 duk_pop(ctx); /* remove key */
227 return rc; /* 1 if property found, 0 otherwise */
228}
DUK_INTERNAL_DECL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_hobject_hasprop(), duk_pop(), and duk_require_tval().

Referenced by duk_has_prop_index(), duk_has_prop_stridx(), and duk_has_prop_string().

◆ duk_has_prop_index()

DUK_EXTERNAL duk_bool_t duk_has_prop_index ( duk_context * ctx,
duk_idx_t obj_index,
duk_uarridx_t arr_index )

Definition at line 239 of file duktape-1.5.2/src-separate/duk_api_object.c.

239 {
241
242 obj_index = duk_require_normalize_index(ctx, obj_index);
243 duk_push_uarridx(ctx, arr_index);
244 return duk_has_prop(ctx, obj_index);
245}
DUK_EXTERNAL duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_index)

References DUK_ASSERT_CTX_VALID, duk_has_prop(), duk_push_uarridx, and duk_require_normalize_index().

◆ duk_has_prop_stridx()

DUK_INTERNAL duk_bool_t duk_has_prop_stridx ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx )

◆ duk_has_prop_string()

DUK_EXTERNAL duk_bool_t duk_has_prop_string ( duk_context * ctx,
duk_idx_t obj_index,
const char * key )

Definition at line 230 of file duktape-1.5.2/src-separate/duk_api_object.c.

230 {
232 DUK_ASSERT(key != NULL);
233
234 obj_index = duk_require_normalize_index(ctx, obj_index);
235 duk_push_string(ctx, key);
236 return duk_has_prop(ctx, obj_index);
237}

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_has_prop(), duk_push_string(), duk_require_normalize_index(), and NULL.

◆ duk_next()

DUK_EXTERNAL duk_bool_t duk_next ( duk_context * ctx,
duk_idx_t enum_index,
duk_bool_t get_value )

Definition at line 464 of file duktape-1.5.2/src-separate/duk_api_object.c.

464 {
466
467 duk_require_hobject(ctx, enum_index);
468 duk_dup(ctx, enum_index);
469 return duk_hobject_enumerator_next(ctx, get_value);
470}
DUK_INTERNAL_DECL duk_bool_t duk_hobject_enumerator_next(duk_context *ctx, duk_bool_t get_value)

References DUK_ASSERT_CTX_VALID, duk_dup(), duk_hobject_enumerator_next(), and duk_require_hobject().

◆ duk_put_function_list()

DUK_EXTERNAL void duk_put_function_list ( duk_context * ctx,
duk_idx_t obj_index,
const duk_function_list_entry * funcs )

Definition at line 476 of file duktape-1.5.2/src-separate/duk_api_object.c.

476 {
477 const duk_function_list_entry *ent = funcs;
478
480
481 obj_index = duk_require_normalize_index(ctx, obj_index);
482 if (ent != NULL) {
483 while (ent->key != NULL) {
484 duk_push_c_function(ctx, ent->value, ent->nargs);
485 duk_put_prop_string(ctx, obj_index, ent->key);
486 ent++;
487 }
488 }
489}
DUK_EXTERNAL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_function func, duk_int_t nargs)
DUK_EXTERNAL duk_bool_t duk_put_prop_string(duk_context *ctx, duk_idx_t obj_idx, const char *key)
static const luaL_Reg funcs[]
duk_idx_t nargs
duk_c_function value
const char * key

References DUK_ASSERT_CTX_VALID, duk_push_c_function(), duk_put_prop_string(), duk_require_normalize_index(), funcs, duk_function_list_entry::key, duk_function_list_entry::nargs, NULL, and duk_function_list_entry::value.

◆ duk_put_global_string()

DUK_EXTERNAL duk_bool_t duk_put_global_string ( duk_context * ctx,
const char * key )

Definition at line 525 of file duktape-1.5.2/src-separate/duk_api_object.c.

525 {
526 duk_hthread *thr = (duk_hthread *) ctx;
527 duk_bool_t ret;
528
531
532 /* XXX: direct implementation */
533
535 duk_insert(ctx, -2);
536 ret = duk_put_prop_string(ctx, -2, key); /* [ ... global val ] -> [ ... global ] */
537 duk_pop(ctx);
538 return ret;
539}
DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_index)

References duk_hthread::builtins, DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_BIDX_GLOBAL, duk_insert(), duk_pop(), duk_push_hobject(), duk_put_prop_string(), and NULL.

◆ duk_put_number_list()

DUK_EXTERNAL void duk_put_number_list ( duk_context * ctx,
duk_idx_t obj_index,
const duk_number_list_entry * numbers )

Definition at line 491 of file duktape-1.5.2/src-separate/duk_api_object.c.

491 {
492 const duk_number_list_entry *ent = numbers;
493
495
496 obj_index = duk_require_normalize_index(ctx, obj_index);
497 if (ent != NULL) {
498 while (ent->key != NULL) {
499 duk_push_number(ctx, ent->value);
500 duk_put_prop_string(ctx, obj_index, ent->key);
501 ent++;
502 }
503 }
504}
DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val)
duk_double_t value
const char * key

References DUK_ASSERT_CTX_VALID, duk_push_number(), duk_put_prop_string(), duk_require_normalize_index(), duk_number_list_entry::key, NULL, and duk_number_list_entry::value.

◆ duk_put_prop()

DUK_EXTERNAL duk_bool_t duk_put_prop ( duk_context * ctx,
duk_idx_t obj_idx )

Definition at line 115 of file duktape-1.5.2/src-separate/duk_api_object.c.

115 {
117 return duk__put_prop_shared(ctx, obj_idx, -2);
118}
DUK_LOCAL duk_bool_t duk__put_prop_shared(duk_context *ctx, duk_idx_t obj_idx, duk_idx_t idx_key)

References duk__put_prop_shared(), and DUK_ASSERT_CTX_VALID.

◆ duk_put_prop_index()

DUK_EXTERNAL duk_bool_t duk_put_prop_index ( duk_context * ctx,
duk_idx_t obj_idx,
duk_uarridx_t arr_idx )

Definition at line 133 of file duktape-1.5.2/src-separate/duk_api_object.c.

133 {
135
136 obj_idx = duk_require_normalize_index(ctx, obj_idx);
137 duk_push_uarridx(ctx, arr_idx);
138 return duk__put_prop_shared(ctx, obj_idx, -1);
139}

References duk__put_prop_shared(), DUK_ASSERT_CTX_VALID, duk_push_uarridx, and duk_require_normalize_index().

◆ duk_put_prop_stridx()

DUK_INTERNAL duk_bool_t duk_put_prop_stridx ( duk_context * ctx,
duk_idx_t obj_idx,
duk_small_int_t stridx )

◆ duk_put_prop_string()

DUK_EXTERNAL duk_bool_t duk_put_prop_string ( duk_context * ctx,
duk_idx_t obj_idx,
const char * key )

Definition at line 120 of file duktape-1.5.2/src-separate/duk_api_object.c.

120 {
122 DUK_ASSERT(key != NULL);
123
124 /* Careful here and with other duk_put_prop_xxx() helpers: the
125 * target object and the property value may be in the same value
126 * stack slot (unusual, but still conceptually clear).
127 */
128 obj_idx = duk_normalize_index(ctx, obj_idx);
129 (void) duk_push_string(ctx, key);
130 return duk__put_prop_shared(ctx, obj_idx, -1);
131}
DUK_EXTERNAL duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t index)

References duk__put_prop_shared(), DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_normalize_index(), duk_push_string(), and NULL.

Referenced by duk_put_function_list(), duk_put_global_string(), and duk_put_number_list().

◆ duk_set_finalizer()

DUK_EXTERNAL void duk_set_finalizer ( duk_context * ctx,
duk_idx_t index )

Definition at line 606 of file duktape-1.5.2/src-separate/duk_api_object.c.

606 {
608
610}
DUK_INTERNAL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t obj_idx, duk_small_int_t stridx)

References DUK_ASSERT_CTX_VALID, duk_put_prop_stridx(), DUK_STRIDX_INT_FINALIZER, and index.

◆ duk_set_prototype()

DUK_EXTERNAL void duk_set_prototype ( duk_context * ctx,
duk_idx_t index )

Definition at line 565 of file duktape-1.5.2/src-separate/duk_api_object.c.

565 {
566 duk_hthread *thr = (duk_hthread *) ctx;
567 duk_hobject *obj;
569
571
572 obj = duk_require_hobject(ctx, index);
573 DUK_ASSERT(obj != NULL);
576 proto = duk_get_hobject(ctx, -1);
577 /* proto can also be NULL here (allowed explicitly) */
578
579#if defined(DUK_USE_ROM_OBJECTS)
581 DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); /* XXX: "read only object"? */
582 return;
583 }
584#endif
585
587
588 duk_pop(ctx);
589}
#define DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h, p)
#define DUK_HEAPHDR_HAS_READONLY(h)
#define DUK_STR_NOT_CONFIGURABLE

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_ERROR_TYPE, duk_get_hobject(), DUK_HEAPHDR_HAS_READONLY, DUK_HOBJECT_SET_PROTOTYPE_UPDREF, duk_pop(), duk_require_hobject(), duk_require_type_mask, DUK_STR_NOT_CONFIGURABLE, DUK_TYPE_MASK_OBJECT, DUK_TYPE_MASK_UNDEFINED, index, NULL, and proto.

◆ duk_xdef_prop()

DUK_INTERNAL void duk_xdef_prop ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_uint_t desc_flags )

Definition at line 265 of file duktape-1.5.2/src-separate/duk_api_object.c.

265 {
266 duk_hthread *thr = (duk_hthread *) ctx;
267 duk_hobject *obj;
268 duk_hstring *key;
269
271
272 obj = duk_require_hobject(ctx, obj_index);
273 DUK_ASSERT(obj != NULL);
274 key = duk_to_hstring(ctx, -2);
275 DUK_ASSERT(key != NULL);
276 DUK_ASSERT(duk_require_tval(ctx, -1) != NULL);
277
278 duk_hobject_define_property_internal(thr, obj, key, desc_flags);
279
280 duk_pop(ctx); /* pop key */
281}
DUK_INTERNAL_DECL duk_hstring * duk_to_hstring(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_small_uint_t flags)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_hobject_define_property_internal(), duk_pop(), duk_require_hobject(), duk_require_tval(), duk_to_hstring(), and NULL.

◆ duk_xdef_prop_index()

DUK_INTERNAL void duk_xdef_prop_index ( duk_context * ctx,
duk_idx_t obj_index,
duk_uarridx_t arr_index,
duk_small_uint_t desc_flags )

Definition at line 283 of file duktape-1.5.2/src-separate/duk_api_object.c.

283 {
284 duk_hthread *thr = (duk_hthread *) ctx;
285 duk_hobject *obj;
286
288
289 obj = duk_require_hobject(ctx, obj_index);
290 DUK_ASSERT(obj != NULL);
291
292 duk_hobject_define_property_internal_arridx(thr, obj, arr_index, desc_flags);
293 /* value popped by call */
294}
DUK_INTERNAL_DECL void duk_hobject_define_property_internal_arridx(duk_hthread *thr, duk_hobject *obj, duk_uarridx_t arr_idx, duk_small_uint_t flags)

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, duk_hobject_define_property_internal_arridx(), duk_require_hobject(), and NULL.

◆ duk_xdef_prop_stridx()

DUK_INTERNAL void duk_xdef_prop_stridx ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx,
duk_small_uint_t desc_flags )

Definition at line 296 of file duktape-1.5.2/src-separate/duk_api_object.c.

296 {
297 duk_hthread *thr = (duk_hthread *) ctx;
298 duk_hobject *obj;
299 duk_hstring *key;
300
302 DUK_ASSERT_DISABLE(stridx >= 0);
304
305 obj = duk_require_hobject(ctx, obj_index);
306 DUK_ASSERT(obj != NULL);
307 key = DUK_HTHREAD_GET_STRING(thr, stridx);
308 DUK_ASSERT(key != NULL);
309 DUK_ASSERT(duk_require_tval(ctx, -1) != NULL);
310
311 duk_hobject_define_property_internal(thr, obj, key, desc_flags);
312 /* value popped by call */
313}

References DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_ASSERT_DISABLE, DUK_HEAP_NUM_STRINGS, duk_hobject_define_property_internal(), DUK_HTHREAD_GET_STRING, duk_require_hobject(), duk_require_tval(), and NULL.

◆ duk_xdef_prop_stridx_builtin()

DUK_INTERNAL void duk_xdef_prop_stridx_builtin ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx,
duk_small_int_t builtin_idx,
duk_small_uint_t desc_flags )

Definition at line 315 of file duktape-1.5.2/src-separate/duk_api_object.c.

315 {
316 duk_hthread *thr = (duk_hthread *) ctx;
317 duk_hobject *obj;
318 duk_hstring *key;
319
321 DUK_ASSERT_DISABLE(stridx >= 0);
323 DUK_ASSERT_DISABLE(builtin_idx >= 0);
324 DUK_ASSERT(builtin_idx < DUK_NUM_BUILTINS);
325
326 obj = duk_require_hobject(ctx, obj_index);
327 DUK_ASSERT(obj != NULL);
328 key = DUK_HTHREAD_GET_STRING(thr, stridx);
329 DUK_ASSERT(key != NULL);
330
331 duk_push_hobject(ctx, thr->builtins[builtin_idx]);
332 duk_hobject_define_property_internal(thr, obj, key, desc_flags);
333 /* value popped by call */
334}

References duk_hthread::builtins, DUK_ASSERT, DUK_ASSERT_CTX_VALID, DUK_ASSERT_DISABLE, DUK_HEAP_NUM_STRINGS, duk_hobject_define_property_internal(), DUK_HTHREAD_GET_STRING, DUK_NUM_BUILTINS, duk_push_hobject(), duk_require_hobject(), and NULL.

◆ duk_xdef_prop_stridx_thrower()

DUK_INTERNAL void duk_xdef_prop_stridx_thrower ( duk_context * ctx,
duk_idx_t obj_index,
duk_small_int_t stridx,
duk_small_uint_t desc_flags )

Definition at line 341 of file duktape-1.5.2/src-separate/duk_api_object.c.

341 {
342 duk_hthread *thr = (duk_hthread *) ctx;
343 duk_hobject *obj = duk_require_hobject(ctx, obj_index);
345 duk_hobject_define_accessor_internal(thr, obj, DUK_HTHREAD_GET_STRING(thr, stridx), thrower, thrower, desc_flags);
346}
DUK_INTERNAL_DECL void duk_hobject_define_accessor_internal(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_hobject *getter, duk_hobject *setter, duk_small_uint_t propflags)
#define DUK_BIDX_TYPE_ERROR_THROWER

References duk_hthread::builtins, DUK_BIDX_TYPE_ERROR_THROWER, duk_hobject_define_accessor_internal(), DUK_HTHREAD_GET_STRING, and duk_require_hobject().