int duk_builtin_object_constructor_is_frozen(duk_context *ctx) { duk_hobject *h; int rc; h = duk_require_hobject(ctx, 0); DUK_ASSERT(h != NULL); rc = duk_hobject_object_is_sealed_frozen_helper(h, 1 /*is_frozen*/); duk_push_boolean(ctx, rc); return 1; }
duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_context *ctx) { duk_hobject *h; duk_bool_t is_frozen; duk_bool_t rc; h = duk_require_hobject(ctx, 0); DUK_ASSERT(h != NULL); is_frozen = duk_get_current_magic(ctx); rc = duk_hobject_object_is_sealed_frozen_helper(h, is_frozen /*is_frozen*/); duk_push_boolean(ctx, rc); return 1; }
DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_context *ctx) { duk_hobject *h; duk_bool_t is_frozen; duk_bool_t rc; h = duk_require_hobject_or_lfunc(ctx, 0); if (!h) { duk_push_true(ctx); /* frozen and sealed */ } else { is_frozen = duk_get_current_magic(ctx); rc = duk_hobject_object_is_sealed_frozen_helper(h, is_frozen /*is_frozen*/); duk_push_boolean(ctx, rc); } return 1; }
DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_hthread *thr) { duk_hobject *h; duk_bool_t is_frozen; duk_uint_t mask; is_frozen = (duk_bool_t) duk_get_current_magic(thr); mask = duk_get_type_mask(thr, 0); if (mask & (DUK_TYPE_MASK_LIGHTFUNC | DUK_TYPE_MASK_BUFFER)) { DUK_ASSERT(is_frozen == 0 || is_frozen == 1); duk_push_boolean(thr, (mask & DUK_TYPE_MASK_LIGHTFUNC) ? 1 : /* lightfunc always frozen and sealed */ (is_frozen ^ 1)); /* buffer sealed but not frozen (index props writable) */ } else { /* ES2015 Sections 19.1.2.12, 19.1.2.13: anything other than an object * is considered to be already sealed and frozen. */ h = duk_get_hobject(thr, 0); duk_push_boolean(thr, (h == NULL) || duk_hobject_object_is_sealed_frozen_helper(thr, h, is_frozen /*is_frozen*/)); } return 1; }