.type = NJS_METHOD,
.name = njs_string("isArray"),
.value = njs_native_function(njs_array_is_array, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("of"),
.value = njs_native_function(njs_array_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("length"),
.value = njs_prop_handler(njs_array_length),
- .writable = 1
+ .writable = 1,
},
{
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("push"),
.value = njs_native_function(njs_array_prototype_push, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("pop"),
.value = njs_native_function(njs_array_prototype_pop, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("unshift"),
.value = njs_native_function(njs_array_prototype_unshift, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("shift"),
.value = njs_native_function(njs_array_prototype_shift, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("splice"),
.value = njs_native_function(njs_array_prototype_splice, 0,
NJS_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("reverse"),
.value = njs_native_function(njs_array_prototype_reverse, 0,
NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toString"),
.value = njs_native_function(njs_array_prototype_to_string,
NJS_CONTINUATION_SIZE, 0),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_array_prototype_join,
njs_continuation_size(njs_array_join_t),
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("concat"),
.value = njs_native_function(njs_array_prototype_concat, 0, 0),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("includes"),
.value = njs_native_function(njs_array_prototype_includes, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("forEach"),
.value = njs_native_function(njs_array_prototype_for_each,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("some"),
.value = njs_native_function(njs_array_prototype_some,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("every"),
.value = njs_native_function(njs_array_prototype_every,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_array_prototype_fill, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("filter"),
.value = njs_native_function(njs_array_prototype_filter,
njs_continuation_size(njs_array_filter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("find"),
.value = njs_native_function(njs_array_prototype_find,
njs_continuation_size(njs_array_find_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("findIndex"),
.value = njs_native_function(njs_array_prototype_find_index,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("map"),
.value = njs_native_function(njs_array_prototype_map,
njs_continuation_size(njs_array_map_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("reduce"),
.value = njs_native_function(njs_array_prototype_reduce,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("reduceRight"),
.value = njs_native_function(njs_array_prototype_reduce_right,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("sort"),
.value = njs_native_function(njs_array_prototype_sort,
njs_continuation_size(njs_array_iter_t), 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_boolean_prototype_value_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_boolean_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_hash_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("update"),
.value = njs_native_function(njs_hash_prototype_update, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("digest"),
.value = njs_native_function(njs_hash_prototype_digest, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_hmac_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("update"),
.value = njs_native_function(njs_hmac_prototype_update, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("digest"),
.value = njs_native_function(njs_hmac_prototype_digest, 0,
NJS_OBJECT_ARG, NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.name = njs_string("createHash"),
.value = njs_native_function(njs_crypto_create_hash, 0,
NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("createHmac"),
.value = njs_native_function(njs_crypto_create_hmac, 0,
NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("UTC"),
.value = njs_native_function(njs_date_utc, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("now"),
.value = njs_native_function(njs_date_now, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("parse"),
.value = njs_native_function(njs_date_parse, 0,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("valueOf"),
.value = njs_native_function(njs_date_prototype_value_of, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toString"),
.value = njs_native_function(njs_date_prototype_to_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toDateString"),
.value = njs_native_function(njs_date_prototype_to_date_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toTimeString"),
.value = njs_native_function(njs_date_prototype_to_time_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toLocaleString"),
.value = njs_native_function(njs_date_prototype_to_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("toLocaleDateString"),
.value = njs_native_function(njs_date_prototype_to_date_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("toLocaleTimeString"),
.value = njs_native_function(njs_date_prototype_to_time_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toUTCString"),
.value = njs_native_function(njs_date_prototype_to_utc_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toISOString"),
.value = njs_native_function(njs_date_prototype_to_iso_string, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getTime"),
.value = njs_native_function(njs_date_prototype_value_of, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getFullYear"),
.value = njs_native_function(njs_date_prototype_get_full_year, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCFullYear"),
.value = njs_native_function(njs_date_prototype_get_utc_full_year, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getMonth"),
.value = njs_native_function(njs_date_prototype_get_month, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCMonth"),
.value = njs_native_function(njs_date_prototype_get_utc_month, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getDate"),
.value = njs_native_function(njs_date_prototype_get_date, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCDate"),
.value = njs_native_function(njs_date_prototype_get_utc_date, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getDay"),
.value = njs_native_function(njs_date_prototype_get_day, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCDay"),
.value = njs_native_function(njs_date_prototype_get_utc_day, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getHours"),
.value = njs_native_function(njs_date_prototype_get_hours, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCHours"),
.value = njs_native_function(njs_date_prototype_get_utc_hours, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getMinutes"),
.value = njs_native_function(njs_date_prototype_get_minutes, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCMinutes"),
.value = njs_native_function(njs_date_prototype_get_utc_minutes, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getSeconds"),
.value = njs_native_function(njs_date_prototype_get_seconds, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getUTCSeconds"),
.value = njs_native_function(njs_date_prototype_get_seconds, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("getMilliseconds"),
.value = njs_native_function(njs_date_prototype_get_milliseconds, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("getUTCMilliseconds"),
.value = njs_native_function(njs_date_prototype_get_milliseconds, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("getTimezoneOffset"),
.value = njs_native_function(njs_date_prototype_get_timezone_offset, 0,
NJS_DATE_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("setTime"),
.value = njs_native_function(njs_date_prototype_set_time, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("setMilliseconds"),
.value = njs_native_function(njs_date_prototype_set_milliseconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("setUTCMilliseconds"),
.value = njs_native_function(njs_date_prototype_set_milliseconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("setSeconds"),
.value = njs_native_function(njs_date_prototype_set_seconds, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_date_prototype_set_minutes, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG,
NJS_NUMBER_ARG),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("setDate"),
.value = njs_native_function(njs_date_prototype_set_date, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("setUTCDate"),
.value = njs_native_function(njs_date_prototype_set_utc_date, 0,
NJS_DATE_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toJSON"),
.value = njs_native_function(njs_date_prototype_to_json,
NJS_CONTINUATION_SIZE, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("Error"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY,
.name = njs_string("message"),
.value = njs_string(""),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_error_prototype_value_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_error_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("EvalError"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("InternalError"),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toString"),
.value = njs_native_function(njs_internal_error_prototype_to_string,
0, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("RangeError"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("ReferenceError"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("SyntaxError"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("TypeError"),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY,
.name = njs_string("name"),
.value = njs_string("URIError"),
+ .writable = 1,
.configurable = 1,
},
};
.name = njs_string("readFile"),
.value = njs_native_function(njs_fs_read_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("readFileSync"),
.value = njs_native_function(njs_fs_read_file_sync, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("appendFile"),
.value = njs_native_function(njs_fs_append_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("appendFileSync"),
.value = njs_native_function(njs_fs_append_file_sync,
njs_continuation_size(njs_fs_cont_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("writeFile"),
.value = njs_native_function(njs_fs_write_file,
njs_continuation_size(njs_fs_cont_t), 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("writeFileSync"),
.value = njs_native_function(njs_fs_write_file_sync,
njs_continuation_size(njs_fs_cont_t), 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("call"),
.value = njs_native_function(njs_function_prototype_call, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("apply"),
.value = njs_native_function(njs_function_prototype_apply, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("bind"),
.value = njs_native_function(njs_function_prototype_bind, 0, 0),
+ .writable = 1,
.configurable = 1,
},
};
njs_continuation_size(njs_json_parse_t),
NJS_SKIP_ARG, NJS_STRING_ARG,
NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
njs_continuation_size(njs_json_stringify_t),
NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_SKIP_ARG,
NJS_SKIP_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_object_prototype_proto),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("abs"),
.value = njs_native_function(njs_object_math_abs, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("acos"),
.value = njs_native_function(njs_object_math_acos, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("acosh"),
.value = njs_native_function(njs_object_math_acosh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("asin"),
.value = njs_native_function(njs_object_math_asin, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("asinh"),
.value = njs_native_function(njs_object_math_asinh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("atan"),
.value = njs_native_function(njs_object_math_atan, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("atan2"),
.value = njs_native_function(njs_object_math_atan2, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("atanh"),
.value = njs_native_function(njs_object_math_atanh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("cbrt"),
.value = njs_native_function(njs_object_math_cbrt, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("ceil"),
.value = njs_native_function(njs_object_math_ceil, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("clz32"),
.value = njs_native_function(njs_object_math_clz32, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("cos"),
.value = njs_native_function(njs_object_math_cos, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("cosh"),
.value = njs_native_function(njs_object_math_cosh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("exp"),
.value = njs_native_function(njs_object_math_exp, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("expm1"),
.value = njs_native_function(njs_object_math_expm1, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("floor"),
.value = njs_native_function(njs_object_math_floor, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("fround"),
.value = njs_native_function(njs_object_math_fround, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("hypot"),
.value = njs_native_function(njs_object_math_hypot, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("imul"),
.value = njs_native_function(njs_object_math_imul, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("log"),
.value = njs_native_function(njs_object_math_log, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("log10"),
.value = njs_native_function(njs_object_math_log10, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("log1p"),
.value = njs_native_function(njs_object_math_log1p, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("log2"),
.value = njs_native_function(njs_object_math_log2, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("max"),
.value = njs_native_function(njs_object_math_max, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("min"),
.value = njs_native_function(njs_object_math_min, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("pow"),
.value = njs_native_function(njs_object_math_pow, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("random"),
.value = njs_native_function(njs_object_math_random, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("round"),
.value = njs_native_function(njs_object_math_round, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("sign"),
.value = njs_native_function(njs_object_math_sign, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("sin"),
.value = njs_native_function(njs_object_math_sin, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("sinh"),
.value = njs_native_function(njs_object_math_sinh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("sqrt"),
.value = njs_native_function(njs_object_math_sqrt, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("tan"),
.value = njs_native_function(njs_object_math_tan, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("tanh"),
.value = njs_native_function(njs_object_math_tanh, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("trunc"),
.value = njs_native_function(njs_object_math_trunc, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_METHOD,
.name = njs_string("isFinite"),
.value = njs_native_function(njs_number_is_finite, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("isInteger"),
.value = njs_native_function(njs_number_is_integer, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("isSafeInteger"),
.value = njs_native_function(njs_number_is_safe_integer, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("isNaN"),
.value = njs_native_function(njs_number_is_nan, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("parseFloat"),
.value = njs_native_function(njs_number_parse_float, 0,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("parseInt"),
.value = njs_native_function(njs_number_parse_int, 0,
NJS_SKIP_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("__proto__"),
.value = njs_prop_handler(njs_primitive_prototype_get_proto),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_number_prototype_value_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toString"),
.value = njs_native_function(njs_number_prototype_to_string, 0,
NJS_SKIP_ARG, NJS_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_METHOD,
.name = njs_string("create"),
.value = njs_native_function(njs_object_create, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("keys"),
.value = njs_native_function(njs_object_keys, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("values"),
.value = njs_native_function(njs_object_values, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("entries"),
.value = njs_native_function(njs_object_entries, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_object_define_property, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG,
NJS_STRING_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_object_define_properties, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG,
NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.value = njs_native_function(njs_object_get_own_property_descriptor, 0,
NJS_SKIP_ARG, NJS_SKIP_ARG,
NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("getOwnPropertyDescriptors"),
.value = njs_native_function(njs_object_get_own_property_descriptors, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("getOwnPropertyNames"),
.value = njs_native_function(njs_object_get_own_property_names, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("getPrototypeOf"),
.value = njs_native_function(njs_object_get_prototype_of, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("freeze"),
.value = njs_native_function(njs_object_freeze, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("isFrozen"),
.value = njs_native_function(njs_object_is_frozen, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("seal"),
.value = njs_native_function(njs_object_seal, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("isSealed"),
.value = njs_native_function(njs_object_is_sealed, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("preventExtensions"),
.value = njs_native_function(njs_object_prevent_extensions, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("isExtensible"),
.value = njs_native_function(njs_object_is_extensible, 0,
NJS_SKIP_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_object_prototype_value_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_object_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("hasOwnProperty"),
.value = njs_native_function(njs_object_prototype_has_own_property, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_long_string("propertyIsEnumerable"),
.value = njs_native_function(njs_object_prototype_prop_is_enumerable, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("isPrototypeOf"),
.value = njs_native_function(njs_object_prototype_is_prototype_of, 0,
NJS_OBJECT_ARG, NJS_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_regexp_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("test"),
.value = njs_native_function(njs_regexp_prototype_test, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("exec"),
.value = njs_native_function(njs_regexp_prototype_exec, 0,
NJS_OBJECT_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
};
.name = njs_string("bytesFrom"),
.value = njs_native_function(njs_string_bytes_from, 0, NJS_SKIP_ARG,
NJS_SKIP_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("fromCharCode"),
.value = njs_native_function(njs_string_from_char_code, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("fromCodePoint"),
.value = njs_native_function(njs_string_from_char_code, 0, 0),
+ .writable = 1,
.configurable = 1,
},
};
.type = NJS_PROPERTY_HANDLER,
.name = njs_string("constructor"),
.value = njs_prop_handler(njs_object_prototype_create_constructor),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("valueOf"),
.value = njs_native_function(njs_string_prototype_value_of, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("toString"),
.value = njs_native_function(njs_string_prototype_to_string, 0, 0),
+ .writable = 1,
.configurable = 1,
},
.type = NJS_METHOD,
.name = njs_string("concat"),
.value = njs_native_function(njs_string_prototype_concat, 0, 0),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("charAt"),
.value = njs_native_function(njs_string_prototype_char_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("charCodeAt"),
.value = njs_native_function(njs_string_prototype_char_code_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("codePointAt"),
.value = njs_native_function(njs_string_prototype_char_code_at, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.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),
+ .writable = 1,
.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_NUMBER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("includes"),
.value = njs_native_function(njs_string_prototype_includes, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("startsWith"),
.value = njs_native_function(njs_string_prototype_starts_with, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("endsWith"),
.value = njs_native_function(njs_string_prototype_ends_with, 0,
NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toLowerCase"),
.value = njs_native_function(njs_string_prototype_to_lower_case, 0,
NJS_STRING_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("toUpperCase"),
.value = njs_native_function(njs_string_prototype_to_upper_case, 0,
NJS_STRING_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("trim"),
.value = njs_native_function(njs_string_prototype_trim, 0,
NJS_STRING_OBJECT_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("repeat"),
.value = njs_native_function(njs_string_prototype_repeat, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("padStart"),
.value = njs_native_function(njs_string_prototype_pad_start, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("padEnd"),
.value = njs_native_function(njs_string_prototype_pad_end, 0,
NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("search"),
.value = njs_native_function(njs_string_prototype_search, 0,
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG),
+ .writable = 1,
.configurable = 1,
},
.name = njs_string("match"),
.value = njs_native_function(njs_string_prototype_match, 0,
NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG),
+ .writable = 1,
.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),
+ .writable = 1,
.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),
+ .writable = 1,
.configurable = 1,
},
};
{ nxt_string("var a = []; a.concat([])"),
nxt_string("") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var s = { toString: function() { return 'S' } };"
"var v = { toString: 8, valueOf: function() { return 'V' } };"
"var o = [9]; o.join = function() { return 'O' };"
{ nxt_string("var a = [1,2,3]; a.join = 'NO';"
"Object.prototype.toString = function () { return 'A' }; a"),
nxt_string("[object Array]") },
-#endif
{ nxt_string("Array.prototype.toString.call(1)"),
nxt_string("[object Number]") },
"(function(){(function(){(function(){})})})})})})})"),
nxt_string("SyntaxError: The maximum function nesting level is \"5\" in 1") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("Function.prototype.toString = function () {return 'X'};"
"eval"),
nxt_string("X") },
-#endif
{ nxt_string("var o = {f:function(x){ return x**2}}; o.f\n(2)"),
nxt_string("4") },
{ nxt_string("Error('e')"),
nxt_string("Error: e") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var e = Error('e'); e.name = 'E'; e"),
nxt_string("E: e") },
{ nxt_string("var e = Error(); e.name = ''; e.message = 'e'; e"),
nxt_string("e") },
-#endif
{ nxt_string("Error('e').name + ': ' + Error('e').message"),
nxt_string("Error: e") },
{ nxt_string("URIError('e').name + ': ' + URIError('e').message"),
nxt_string("URIError: e") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var e = EvalError('e'); e.name = 'E'; e"),
nxt_string("E: e") },
{ nxt_string("var e = MemoryError('e'); e.name = 'E'"),
nxt_string("TypeError: Cannot add property \"name\", object is not extensible") },
-#endif
{ nxt_string("EvalError.prototype.name"),
nxt_string("EvalError") },
"var a = []; for(var p in x) a.push(p); a"),
nxt_string("a,b,0,1,2") },
+ { nxt_string("var o = Object.create(Math); o.abs = -5; Math.abs(o.abs)"),
+ nxt_string("5") },
+
{ nxt_string("Object.prototype.toString.call(Object.prototype)"),
nxt_string("[object Object]") },
{ nxt_string("Array.constructor === Function"),
nxt_string("true") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var a = []; a.join = 'OK'; a"),
nxt_string("[object Array]") },
-#endif
{ nxt_string("[].__proto__ === Array.prototype"),
nxt_string("true") },
{ nxt_string("Object.create(Math).hasOwnProperty('abs')"),
nxt_string("false") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var m = Object.create(Math); m.abs = 3;"
"[m.hasOwnProperty('abs'), m.abs]"),
nxt_string("true,3") },
{ nxt_string("var m = Object.create(Math); m.abs = Math.floor;"
"[m.hasOwnProperty('abs'), delete m.abs, m.abs(-1)]"),
nxt_string("true,true,1") },
-#endif
{ nxt_string("Object.getOwnPropertyDescriptor({a:1}, 'a').value"),
nxt_string("1") },
nxt_string("true") },
+ { nxt_string(
+ "var fail;"
+ "function isWritableMethods(o) {"
+ " var except = ["
+ " 'prototype',"
+ " ];"
+ " return Object.getOwnPropertyNames(o)"
+ " .filter(v => !except.includes(v)"
+ " && typeof o[v] == 'function')"
+ " .every(v => Object.getOwnPropertyDescriptor(o, v)"
+ " .writable"
+ " || !(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 => isWritableMethods(obj)) || fail"),
+
+ nxt_string("true") },
+
{ nxt_string("new Date(undefined)"),
nxt_string("Invalid Date") },
{ nxt_string("JSON.stringify(URIError('e'))"),
nxt_string("{}") },
-#if 0 /* Most built-in methods and properties must be writable. */
{ nxt_string("var e = URIError('e'); e.name = 'E'; JSON.stringify(e)"),
nxt_string("{\"name\":\"E\"}") },
-#endif
{ nxt_string("var e = URIError('e'); e.message = 'E'; JSON.stringify(e)"),
nxt_string("{}") },