.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Array"),
+ .configurable = 1,
},
/* Array.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Array.prototype. */
.type = NJS_METHOD,
.name = njs_string("isArray"),
.value = njs_native_function(njs_array_is_array, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.type = NJS_METHOD,
.name = njs_string("of"),
.value = njs_native_function(njs_array_of, 0, 0),
+ .configurable = 1,
},
};
.value = njs_native_function(njs_array_prototype_slice,
njs_continuation_size(njs_array_slice_t),
NJS_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("push"),
.value = njs_native_function(njs_array_prototype_push, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("pop"),
.value = njs_native_function(njs_array_prototype_pop, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("unshift"),
.value = njs_native_function(njs_array_prototype_unshift, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("shift"),
.value = njs_native_function(njs_array_prototype_shift, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("splice"),
.value = njs_native_function(njs_array_prototype_splice, 0,
NJS_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("reverse"),
.value = njs_native_function(njs_array_prototype_reverse, 0,
NJS_OBJECT_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toString"),
.value = njs_native_function(njs_array_prototype_to_string,
NJS_CONTINUATION_SIZE, 0),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_array_prototype_join,
njs_continuation_size(njs_array_join_t),
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("concat"),
.value = njs_native_function(njs_array_prototype_concat, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("indexOf"),
.value = njs_native_function(njs_array_prototype_index_of, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("lastIndexOf"),
.value = njs_native_function(njs_array_prototype_last_index_of, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* ES7. */
.name = njs_string("includes"),
.value = njs_native_function(njs_array_prototype_includes, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("forEach"),
.value = njs_native_function(njs_array_prototype_for_each,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("some"),
.value = njs_native_function(njs_array_prototype_some,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("every"),
.value = njs_native_function(njs_array_prototype_every,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
/* ES6. */
.value = njs_native_function(njs_array_prototype_fill, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("filter"),
.value = njs_native_function(njs_array_prototype_filter,
njs_continuation_size(njs_array_filter_t), 0),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("find"),
.value = njs_native_function(njs_array_prototype_find,
njs_continuation_size(njs_array_find_t), 0),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("findIndex"),
.value = njs_native_function(njs_array_prototype_find_index,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("map"),
.value = njs_native_function(njs_array_prototype_map,
njs_continuation_size(njs_array_map_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("reduce"),
.value = njs_native_function(njs_array_prototype_reduce,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("reduceRight"),
.value = njs_native_function(njs_array_prototype_reduce_right,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("sort"),
.value = njs_native_function(njs_array_prototype_sort,
njs_continuation_size(njs_array_iter_t), 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Boolean"),
+ .configurable = 1,
},
/* Boolean.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Boolean.prototype. */
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_boolean_prototype_value_of, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_boolean_prototype_to_string, 0, 0),
+ .configurable = 1,
},
};
.name = njs_string("dump"),
.value = njs_native_function(njs_dump_value, 0,
NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Hash"),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_hash_prototype_to_string, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("update"),
.value = njs_native_function(njs_hash_prototype_update, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .configurable = 1,
},
{
.name = njs_string("digest"),
.value = njs_native_function(njs_hash_prototype_digest, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Hmac"),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_hmac_prototype_to_string, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("update"),
.value = njs_native_function(njs_hmac_prototype_update, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .configurable = 1,
},
{
.name = njs_string("digest"),
.value = njs_native_function(njs_hmac_prototype_digest, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("crypto"),
+ .configurable = 1,
},
{
.name = njs_string("createHash"),
.value = njs_native_function(njs_crypto_create_hash, 0,
NJS_SKIP_ARG),
+ .configurable = 1,
},
{
.name = njs_string("createHmac"),
.value = njs_native_function(njs_crypto_create_hmac, 0,
NJS_SKIP_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Date"),
+ .configurable = 1,
},
/* Date.length == 7. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 7.0),
+ .configurable = 1,
},
/* Date.prototype. */
.type = NJS_METHOD,
.name = njs_string("UTC"),
.value = njs_native_function(njs_date_utc, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("now"),
.value = njs_native_function(njs_date_now, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("parse"),
.value = njs_native_function(njs_date_parse, 0,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .configurable = 1,
},
{
.name = njs_string("valueOf"),
.value = njs_native_function(njs_date_prototype_value_of, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toString"),
.value = njs_native_function(njs_date_prototype_to_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toDateString"),
.value = njs_native_function(njs_date_prototype_to_date_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toTimeString"),
.value = njs_native_function(njs_date_prototype_to_time_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toLocaleString"),
.value = njs_native_function(njs_date_prototype_to_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("toLocaleDateString"),
.value = njs_native_function(njs_date_prototype_to_date_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("toLocaleTimeString"),
.value = njs_native_function(njs_date_prototype_to_time_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toUTCString"),
.value = njs_native_function(njs_date_prototype_to_utc_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toISOString"),
.value = njs_native_function(njs_date_prototype_to_iso_string, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getTime"),
.value = njs_native_function(njs_date_prototype_value_of, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getFullYear"),
.value = njs_native_function(njs_date_prototype_get_full_year, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCFullYear"),
.value = njs_native_function(njs_date_prototype_get_utc_full_year, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getMonth"),
.value = njs_native_function(njs_date_prototype_get_month, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCMonth"),
.value = njs_native_function(njs_date_prototype_get_utc_month, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getDate"),
.value = njs_native_function(njs_date_prototype_get_date, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCDate"),
.value = njs_native_function(njs_date_prototype_get_utc_date, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getDay"),
.value = njs_native_function(njs_date_prototype_get_day, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCDay"),
.value = njs_native_function(njs_date_prototype_get_utc_day, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getHours"),
.value = njs_native_function(njs_date_prototype_get_hours, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCHours"),
.value = njs_native_function(njs_date_prototype_get_utc_hours, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getMinutes"),
.value = njs_native_function(njs_date_prototype_get_minutes, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCMinutes"),
.value = njs_native_function(njs_date_prototype_get_utc_minutes, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getSeconds"),
.value = njs_native_function(njs_date_prototype_get_seconds, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("getUTCSeconds"),
.value = njs_native_function(njs_date_prototype_get_seconds, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("getMilliseconds"),
.value = njs_native_function(njs_date_prototype_get_milliseconds, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("getUTCMilliseconds"),
.value = njs_native_function(njs_date_prototype_get_milliseconds, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("getTimezoneOffset"),
.value = njs_native_function(njs_date_prototype_get_timezone_offset, 0,
NJS_DATE_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setTime"),
.value = njs_native_function(njs_date_prototype_set_time, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("setMilliseconds"),
.value = njs_native_function(njs_date_prototype_set_milliseconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("setUTCMilliseconds"),
.value = njs_native_function(njs_date_prototype_set_milliseconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setSeconds"),
.value = njs_native_function(njs_date_prototype_set_seconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setUTCSeconds"),
.value = njs_native_function(njs_date_prototype_set_seconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_minutes, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_utc_minutes, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_hours, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_utc_hours, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setDate"),
.value = njs_native_function(njs_date_prototype_set_date, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setUTCDate"),
.value = njs_native_function(njs_date_prototype_set_utc_date, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setMonth"),
.value = njs_native_function(njs_date_prototype_set_month, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("setUTCMonth"),
.value = njs_native_function(njs_date_prototype_set_utc_month, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_full_year, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_date_prototype_set_utc_full_year, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toJSON"),
.value = njs_native_function(njs_date_prototype_to_json,
NJS_CONTINUATION_SIZE, 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Error"),
+ .configurable = 1,
},
/* Error.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Error.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("EvalError"),
+ .configurable = 1,
},
/* EvalError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* EvalError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("InternalError"),
+ .configurable = 1,
},
/* InternalError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* InternalError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("RangeError"),
+ .configurable = 1,
},
/* RangeError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* RangeError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("ReferenceError"),
+ .configurable = 1,
},
/* ReferenceError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* ReferenceError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("SyntaxError"),
+ .configurable = 1,
},
/* SyntaxError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* SyntaxError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("TypeError"),
+ .configurable = 1,
},
/* TypeError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* TypeError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("URIError"),
+ .configurable = 1,
},
/* URIError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* URIError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("MemoryError"),
+ .configurable = 1,
},
/* MemoryError.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* MemoryError.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Error"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("message"),
.value = njs_string(""),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_error_prototype_value_of, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_error_prototype_to_string, 0, 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("EvalError"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("InternalError"),
+ .configurable = 1,
},
{
.name = njs_string("toString"),
.value = njs_native_function(njs_internal_error_prototype_to_string,
0, 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("RangeError"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("ReferenceError"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("SyntaxError"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("TypeError"),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("URIError"),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("fs"),
+ .configurable = 1,
},
{
.name = njs_string("readFile"),
.value = njs_native_function(njs_fs_read_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("readFileSync"),
.value = njs_native_function(njs_fs_read_file_sync, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("appendFile"),
.value = njs_native_function(njs_fs_append_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("appendFileSync"),
.value = njs_native_function(njs_fs_append_file_sync,
njs_continuation_size(njs_fs_cont_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("writeFile"),
.value = njs_native_function(njs_fs_write_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .configurable = 1,
},
{
.name = njs_string("writeFileSync"),
.value = njs_native_function(njs_fs_write_file_sync,
njs_continuation_size(njs_fs_cont_t), 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Function"),
+ .configurable = 1,
},
/* Function.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Function.prototype. */
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string(""),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 0, 0.0),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("call"),
.value = njs_native_function(njs_function_prototype_call, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("apply"),
.value = njs_native_function(njs_function_prototype_apply, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("bind"),
.value = njs_native_function(njs_function_prototype_bind, 0, 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("length"),
.value = njs_prop_handler(njs_function_instance_length),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("length"),
.value = njs_prop_handler(njs_function_instance_length),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("eval"),
+ .configurable = 1,
},
/* eval.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
njs_continuation_size(njs_json_parse_t),
NJS_SKIP_ARG, NJS_STRING_ARG,
NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* JSON.stringify(). */
njs_continuation_size(njs_json_stringify_t),
NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_SKIP_ARG,
NJS_SKIP_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_object_prototype_proto),
+ .configurable = 1,
},
{
.name = njs_string("abs"),
.value = njs_native_function(njs_object_math_abs, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("acos"),
.value = njs_native_function(njs_object_math_acos, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("acosh"),
.value = njs_native_function(njs_object_math_acosh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("asin"),
.value = njs_native_function(njs_object_math_asin, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("asinh"),
.value = njs_native_function(njs_object_math_asinh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("atan"),
.value = njs_native_function(njs_object_math_atan, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("atan2"),
.value = njs_native_function(njs_object_math_atan2, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("atanh"),
.value = njs_native_function(njs_object_math_atanh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("cbrt"),
.value = njs_native_function(njs_object_math_cbrt, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("ceil"),
.value = njs_native_function(njs_object_math_ceil, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("clz32"),
.value = njs_native_function(njs_object_math_clz32, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("cos"),
.value = njs_native_function(njs_object_math_cos, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("cosh"),
.value = njs_native_function(njs_object_math_cosh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("exp"),
.value = njs_native_function(njs_object_math_exp, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("expm1"),
.value = njs_native_function(njs_object_math_expm1, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("floor"),
.value = njs_native_function(njs_object_math_floor, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("fround"),
.value = njs_native_function(njs_object_math_fround, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.type = NJS_METHOD,
.name = njs_string("hypot"),
.value = njs_native_function(njs_object_math_hypot, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("imul"),
.value = njs_native_function(njs_object_math_imul, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("log"),
.value = njs_native_function(njs_object_math_log, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("log10"),
.value = njs_native_function(njs_object_math_log10, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("log1p"),
.value = njs_native_function(njs_object_math_log1p, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("log2"),
.value = njs_native_function(njs_object_math_log2, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("max"),
.value = njs_native_function(njs_object_math_max, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("min"),
.value = njs_native_function(njs_object_math_min, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("pow"),
.value = njs_native_function(njs_object_math_pow, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("random"),
.value = njs_native_function(njs_object_math_random, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("round"),
.value = njs_native_function(njs_object_math_round, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("sign"),
.value = njs_native_function(njs_object_math_sign, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("sin"),
.value = njs_native_function(njs_object_math_sin, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("sinh"),
.value = njs_native_function(njs_object_math_sinh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("sqrt"),
.value = njs_native_function(njs_object_math_sqrt, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("tan"),
.value = njs_native_function(njs_object_math_tan, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("tanh"),
.value = njs_native_function(njs_object_math_tanh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("trunc"),
.value = njs_native_function(njs_object_math_trunc, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Number"),
+ .configurable = 1,
},
/* Number.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Number.prototype. */
.type = NJS_METHOD,
.name = njs_string("isFinite"),
.value = njs_native_function(njs_number_is_finite, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.type = NJS_METHOD,
.name = njs_string("isInteger"),
.value = njs_native_function(njs_number_is_integer, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.type = NJS_METHOD,
.name = njs_string("isSafeInteger"),
.value = njs_native_function(njs_number_is_safe_integer, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.type = NJS_METHOD,
.name = njs_string("isNaN"),
.value = njs_native_function(njs_number_is_nan, 0, 0),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("parseFloat"),
.value = njs_native_function(njs_number_parse_float, 0,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("parseInt"),
.value = njs_native_function(njs_number_parse_int, 0,
NJS_SKIP_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_number_prototype_value_of, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("toString"),
.value = njs_native_function(njs_number_prototype_to_string, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("isNaN"),
+ .configurable = 1,
},
/* isNaN.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("isFinite"),
+ .configurable = 1,
},
/* isFinite.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("parseInt"),
+ .configurable = 1,
},
/* parseInt.length == 2. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 2.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("parseFloat"),
+ .configurable = 1,
},
/* parseFloat.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
prop = pq->lhq.value;
if (prop->type != NJS_WHITEOUT) {
- pq->shared = 0;
-
return ret;
}
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Object"),
+ .configurable = 1,
},
/* Object.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* Object.prototype. */
.type = NJS_METHOD,
.name = njs_string("create"),
.value = njs_native_function(njs_object_create, 0, 0),
+ .configurable = 1,
},
/* Object.keys(). */
.name = njs_string("keys"),
.value = njs_native_function(njs_object_keys, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* ES8: Object.values(). */
.name = njs_string("values"),
.value = njs_native_function(njs_object_values, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* ES8: Object.entries(). */
.name = njs_string("entries"),
.value = njs_native_function(njs_object_entries, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.defineProperty(). */
.value = njs_native_function(njs_object_define_property, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG,
NJS_STRING_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.defineProperties(). */
.value = njs_native_function(njs_object_define_properties, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG,
NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.getOwnPropertyDescriptor(). */
.value = njs_native_function(njs_object_get_own_property_descriptor, 0,
NJS_SKIP_ARG, NJS_SKIP_ARG,
NJS_STRING_ARG),
+ .configurable = 1,
},
/* Object.getOwnPropertyDescriptors(). */
.name = njs_long_string("getOwnPropertyDescriptors"),
.value = njs_native_function(njs_object_get_own_property_descriptors, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.getOwnPropertyNames(). */
.name = njs_long_string("getOwnPropertyNames"),
.value = njs_native_function(njs_object_get_own_property_names, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.getPrototypeOf(). */
.name = njs_string("getPrototypeOf"),
.value = njs_native_function(njs_object_get_prototype_of, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.freeze(). */
.name = njs_string("freeze"),
.value = njs_native_function(njs_object_freeze, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.isFrozen(). */
.name = njs_string("isFrozen"),
.value = njs_native_function(njs_object_is_frozen, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.seal(). */
.name = njs_string("seal"),
.value = njs_native_function(njs_object_seal, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.isSealed(). */
.name = njs_string("isSealed"),
.value = njs_native_function(njs_object_is_sealed, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.preventExtensions(). */
.name = njs_long_string("preventExtensions"),
.value = njs_native_function(njs_object_prevent_extensions, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
/* Object.isExtensible(). */
.name = njs_string("isExtensible"),
.value = njs_native_function(njs_object_is_extensible, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
};
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_object_prototype_proto),
.writable = 1,
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_object_prototype_value_of, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_object_prototype_to_string, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("hasOwnProperty"),
.value = njs_native_function(njs_object_prototype_has_own_property, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
{
.name = njs_long_string("propertyIsEnumerable"),
.value = njs_native_function(njs_object_prototype_prop_is_enumerable, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
{
.name = njs_string("isPrototypeOf"),
.value = njs_native_function(njs_object_prototype_is_prototype_of, 0,
NJS_OBJECT_ARG, NJS_OBJECT_ARG),
+ .configurable = 1,
},
};
(pq)->lhq.key.length = 0; \
(pq)->lhq.value = NULL; \
(pq)->query = _query; \
+ (pq)->shared = 0; \
(pq)->own = _own; \
} while (0)
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("RegExp"),
+ .configurable = 1,
},
/* RegExp.length == 2. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 2.0),
+ .configurable = 1,
},
/* RegExp.prototype. */
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("global"),
.value = njs_prop_handler(njs_regexp_prototype_global),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("ignoreCase"),
.value = njs_prop_handler(njs_regexp_prototype_ignore_case),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("multiline"),
.value = njs_prop_handler(njs_regexp_prototype_multiline),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("source"),
.value = njs_prop_handler(njs_regexp_prototype_source),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_regexp_prototype_to_string, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("test"),
.value = njs_native_function(njs_regexp_prototype_test, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
{
.name = njs_string("exec"),
.value = njs_native_function(njs_regexp_prototype_exec, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("String"),
+ .configurable = 1,
},
/* String.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
/* String.prototype. */
.name = njs_string("bytesFrom"),
.value = njs_native_function(njs_string_bytes_from, 0, NJS_SKIP_ARG,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
/* String.fromCharCode(). */
.type = NJS_METHOD,
.name = njs_string("fromCharCode"),
.value = njs_native_function(njs_string_from_char_code, 0, 0),
+ .configurable = 1,
},
/* String.fromCodePoint(), ECMAScript 6. */
.type = NJS_METHOD,
.name = njs_string("fromCodePoint"),
.value = njs_native_function(njs_string_from_char_code, 0, 0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .configurable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_string_prototype_value_of, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_string_prototype_to_string, 0, 0),
+ .configurable = 1,
},
{
.type = NJS_METHOD,
.name = njs_string("concat"),
.value = njs_native_function(njs_string_prototype_concat, 0, 0),
+ .configurable = 1,
},
{
.name = njs_string("fromUTF8"),
.value = njs_native_function(njs_string_prototype_from_utf8, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toUTF8"),
.value = njs_native_function(njs_string_prototype_to_utf8, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("fromBytes"),
.value = njs_native_function(njs_string_prototype_from_bytes, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toBytes"),
.value = njs_native_function(njs_string_prototype_to_bytes, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("slice"),
.value = njs_native_function(njs_string_prototype_slice, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("substring"),
.value = njs_native_function(njs_string_prototype_substring, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("substr"),
.value = njs_native_function(njs_string_prototype_substr, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("charAt"),
.value = njs_native_function(njs_string_prototype_char_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("charCodeAt"),
.value = njs_native_function(njs_string_prototype_char_code_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* String.codePointAt(), ECMAScript 6. */
.name = njs_string("codePointAt"),
.value = njs_native_function(njs_string_prototype_char_code_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("indexOf"),
.value = njs_native_function(njs_string_prototype_index_of, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("lastIndexOf"),
.value = njs_native_function(njs_string_prototype_last_index_of, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("includes"),
.value = njs_native_function(njs_string_prototype_includes, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("startsWith"),
.value = njs_native_function(njs_string_prototype_starts_with, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("endsWith"),
.value = njs_native_function(njs_string_prototype_ends_with, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toLowerCase"),
.value = njs_native_function(njs_string_prototype_to_lower_case, 0,
NJS_STRING_OBJECT_ARG),
+ .configurable = 1,
},
{
.name = njs_string("toUpperCase"),
.value = njs_native_function(njs_string_prototype_to_upper_case, 0,
NJS_STRING_OBJECT_ARG),
+ .configurable = 1,
},
{
.name = njs_string("trim"),
.value = njs_native_function(njs_string_prototype_trim, 0,
NJS_STRING_OBJECT_ARG),
+ .configurable = 1,
},
/* ES6. */
.name = njs_string("repeat"),
.value = njs_native_function(njs_string_prototype_repeat, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
/* ES8. */
.name = njs_string("padStart"),
.value = njs_native_function(njs_string_prototype_pad_start, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
/* ES8. */
.name = njs_string("padEnd"),
.value = njs_native_function(njs_string_prototype_pad_end, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG),
+ .configurable = 1,
},
{
.name = njs_string("search"),
.value = njs_native_function(njs_string_prototype_search, 0,
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG),
+ .configurable = 1,
},
{
.name = njs_string("match"),
.value = njs_native_function(njs_string_prototype_match, 0,
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG),
+ .configurable = 1,
},
{
.name = njs_string("split"),
.value = njs_native_function(njs_string_prototype_split, 0,
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG, NJS_INTEGER_ARG),
+ .configurable = 1,
},
{
.value = njs_native_function(njs_string_prototype_replace,
njs_continuation_size(njs_string_replace_t),
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG, NJS_FUNCTION_ARG),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("toString"),
+ .configurable = 1,
},
/* toString.length == 0. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 0, 0.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("encodeURI"),
+ .configurable = 1,
},
/* encodeURI.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_long_string("encodeURIComponent"),
+ .configurable = 1,
},
/* encodeURIComponent.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("decodeURI"),
+ .configurable = 1,
},
/* decodeURI.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_long_string("decodeURIComponent"),
+ .configurable = 1,
},
/* decodeURIComponent.length == 1. */
.type = NJS_PROPERTY,
.name = njs_string("length"),
.value = njs_value(NJS_NUMBER, 1, 1.0),
+ .configurable = 1,
},
};
njs_value_t *property)
{
njs_ret_t ret;
- njs_object_prop_t *prop;
+ njs_object_prop_t *prop, *whipeout;
njs_property_query_t pq;
njs_property_query_init(&pq, NJS_PROPERTY_QUERY_DELETE, 1);
case NXT_OK:
prop = pq.lhq.value;
+ if (nxt_slow_path(!prop->configurable)) {
+ njs_type_error(vm, "Cannot delete property \"%V\" of %s",
+ &pq.lhq.key, njs_type_string(object->type));
+ return NXT_ERROR;
+ }
+
+ if (nxt_slow_path(pq.shared)) {
+ whipeout = nxt_mp_align(vm->mem_pool, sizeof(njs_value_t),
+ sizeof(njs_object_prop_t));
+ if (nxt_slow_path(whipeout == NULL)) {
+ njs_memory_error(vm);
+ return NXT_ERROR;
+ }
+
+ njs_set_invalid(&whipeout->value);
+ whipeout->name = prop->name;
+ whipeout->type = NJS_WHITEOUT;
+
+ pq.lhq.replace = 0;
+ pq.lhq.value = whipeout;
+ pq.lhq.pool = vm->mem_pool;
+
+ ret = nxt_lvlhsh_insert(&pq.prototype->hash, &pq.lhq);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ njs_internal_error(vm, "lvlhsh insert failed");
+ return NXT_ERROR;
+ }
+
+ break;
+ }
+
switch (prop->type) {
case NJS_PROPERTY:
case NJS_METHOD:
goto done;
case NJS_PROPERTY_HANDLER:
- if (prop->configurable) {
- ret = prop->value.data.u.prop_handler(vm, object, NULL, NULL);
- if (nxt_slow_path(ret != NXT_OK)) {
- return ret;
- }
-
- goto done;
+ ret = prop->value.data.u.prop_handler(vm, object, NULL, NULL);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ return ret;
}
- break;
+ goto done;
default:
njs_internal_error(vm, "unexpected property type \"%s\" "
return NXT_ERROR;
}
- if (nxt_slow_path(!prop->configurable)) {
- njs_type_error(vm, "Cannot delete property \"%V\" of %s",
- &pq.lhq.key, njs_type_string(object->type));
- return NXT_ERROR;
- }
-
/* GC: release value. */
prop->type = NJS_WHITEOUT;
njs_set_invalid(&prop->value);
{ nxt_string("var o = Object.create({a:1}); o.a = 2; delete o.a; o.a"),
nxt_string("1") },
+ { nxt_string("delete Array.name"),
+ nxt_string("true") },
+
+ { nxt_string("delete Math.max"),
+ nxt_string("true") },
+
+ { nxt_string("delete Math.max.length"),
+ nxt_string("true") },
+
+ { nxt_string("function f(a,b) {} "
+ "[f.length, delete f.length, f.length, delete f.length]"),
+ nxt_string("2,true,0,true") },
+
{ nxt_string("njs.dump({break:1,3:2,'a':4,\"b\":2,true:1,null:0})"),
nxt_string("{break:1,3:2,a:4,b:2,true:1,null:0}") },
"var c = new Cl('a', 'b'); Cl.prototype.z = 1; c.z"),
nxt_string("1") },
- /* Math object is immutable. */
+ /**/
- { nxt_string("delete Math.max"),
- nxt_string("TypeError: Cannot delete property \"max\" of object") },
+ { nxt_string("delete Math.E"),
+ nxt_string("TypeError: Cannot delete property \"E\" of object") },
{ nxt_string("Math.E = 1"),
nxt_string("TypeError: Cannot assign to read-only property \"E\" of object") },
{ nxt_string("Object.isExtensible(Object.freeze([]))"),
nxt_string("false") },
+ { nxt_string(
+ "var fail;"
+ "function isConfigurableMethods(o) {"
+ " var except = ["
+ " 'prototype',"
+ " ];"
+ " return Object.getOwnPropertyNames(o)"
+ " .filter(v => !except.includes(v)"
+ " && typeof o[v] == 'function')"
+ " .every(v => Object.getOwnPropertyDescriptor(o, v)"
+ " .configurable"
+ " || !(fail = `${o.name}.${v}`));"
+ "}"
+ "["
+ " Boolean, Boolean.prototype,"
+ " Number, Number.prototype,"
+ " String, String.prototype,"
+ " Object, Object.prototype,"
+ " Array, Array.prototype,"
+ " Function, Function.prototype,"
+ " RegExp, RegExp.prototype,"
+ " Date, Date.prototype,"
+ " Error, Error.prototype,"
+ " Math,"
+ " JSON,"
+ "].every(obj => isConfigurableMethods(obj)) || fail"),
+
+ nxt_string("true") },
+
{ nxt_string("new Date(undefined)"),
nxt_string("Invalid Date") },