From 662e85203dfba8aeadbbaff340595596305a4fab Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Fri, 11 Oct 2019 19:41:51 +0300 Subject: [PATCH] Added default number of arguments expected by builtin functions. This closes #207 issue on GitHub. --- src/njs_array.c | 52 ++++++++++++------------- src/njs_boolean.c | 4 +- src/njs_builtin.c | 2 +- src/njs_crypto.c | 16 ++++---- src/njs_date.c | 95 ++++++++++++++++++++++++---------------------- src/njs_error.c | 7 ++-- src/njs_fs.c | 14 +++---- src/njs_function.c | 40 +++++++------------ src/njs_json.c | 4 +- src/njs_math.c | 70 +++++++++++++++++----------------- src/njs_number.c | 22 +++++------ src/njs_object.c | 42 ++++++++++---------- src/njs_parser.c | 7 +++- src/njs_regexp.c | 6 +-- src/njs_string.c | 66 ++++++++++++++++---------------- src/njs_value.h | 5 ++- src/njs_vmcode.c | 2 + 17 files changed, 226 insertions(+), 228 deletions(-) diff --git a/src/njs_array.c b/src/njs_array.c index 9fb178ee..1d5f38b0 100644 --- a/src/njs_array.c +++ b/src/njs_array.c @@ -304,7 +304,7 @@ static const njs_object_prop_t njs_array_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isArray"), - .value = njs_native_function(njs_array_is_array, 0), + .value = njs_native_function(njs_array_is_array, 1, 0), .writable = 1, .configurable = 1, }, @@ -314,7 +314,7 @@ static const njs_object_prop_t njs_array_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("of"), - .value = njs_native_function(njs_array_of, 0), + .value = njs_native_function(njs_array_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -2736,7 +2736,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("slice"), - .value = njs_native_function(njs_array_prototype_slice, + .value = njs_native_function(njs_array_prototype_slice, 2, NJS_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -2745,7 +2745,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("push"), - .value = njs_native_function(njs_array_prototype_push, 0), + .value = njs_native_function(njs_array_prototype_push, 1, 0), .writable = 1, .configurable = 1, }, @@ -2753,7 +2753,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("pop"), - .value = njs_native_function(njs_array_prototype_pop, 0), + .value = njs_native_function(njs_array_prototype_pop, 0, 0), .writable = 1, .configurable = 1, }, @@ -2761,7 +2761,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("unshift"), - .value = njs_native_function(njs_array_prototype_unshift, 0), + .value = njs_native_function(njs_array_prototype_unshift, 1, 0), .writable = 1, .configurable = 1, }, @@ -2769,7 +2769,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("shift"), - .value = njs_native_function(njs_array_prototype_shift, 0), + .value = njs_native_function(njs_array_prototype_shift, 0, 0), .writable = 1, .configurable = 1, }, @@ -2777,7 +2777,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("splice"), - .value = njs_native_function(njs_array_prototype_splice, + .value = njs_native_function(njs_array_prototype_splice, 2, NJS_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -2786,7 +2786,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("reverse"), - .value = njs_native_function(njs_array_prototype_reverse, + .value = njs_native_function(njs_array_prototype_reverse, 0, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -2795,7 +2795,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_array_prototype_to_string, 0), + .value = njs_native_function(njs_array_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -2803,7 +2803,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("join"), - .value = njs_native_function(njs_array_prototype_join, + .value = njs_native_function(njs_array_prototype_join, 1, NJS_OBJECT_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -2812,7 +2812,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("concat"), - .value = njs_native_function(njs_array_prototype_concat, 0), + .value = njs_native_function(njs_array_prototype_concat, 1, 0), .writable = 1, .configurable = 1, }, @@ -2820,7 +2820,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("indexOf"), - .value = njs_native_function(njs_array_prototype_index_of, + .value = njs_native_function(njs_array_prototype_index_of, 1, NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -2829,7 +2829,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("lastIndexOf"), - .value = njs_native_function(njs_array_prototype_last_index_of, + .value = njs_native_function(njs_array_prototype_last_index_of, 1, NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -2839,7 +2839,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("includes"), - .value = njs_native_function(njs_array_prototype_includes, + .value = njs_native_function(njs_array_prototype_includes, 1, NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -2848,7 +2848,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("forEach"), - .value = njs_native_function(njs_array_prototype_for_each, 0), + .value = njs_native_function(njs_array_prototype_for_each, 1, 0), .writable = 1, .configurable = 1, }, @@ -2856,7 +2856,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("some"), - .value = njs_native_function(njs_array_prototype_some, 0), + .value = njs_native_function(njs_array_prototype_some, 1, 0), .writable = 1, .configurable = 1, }, @@ -2864,7 +2864,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("every"), - .value = njs_native_function(njs_array_prototype_every, 0), + .value = njs_native_function(njs_array_prototype_every, 1, 0), .writable = 1, .configurable = 1, }, @@ -2873,7 +2873,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fill"), - .value = njs_native_function(njs_array_prototype_fill, + .value = njs_native_function(njs_array_prototype_fill, 1, NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2883,7 +2883,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("filter"), - .value = njs_native_function(njs_array_prototype_filter, 0), + .value = njs_native_function(njs_array_prototype_filter, 1, 0), .writable = 1, .configurable = 1, }, @@ -2892,7 +2892,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("find"), - .value = njs_native_function(njs_array_prototype_find, 0), + .value = njs_native_function(njs_array_prototype_find, 1, 0), .writable = 1, .configurable = 1, }, @@ -2901,7 +2901,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("findIndex"), - .value = njs_native_function(njs_array_prototype_find_index, 0), + .value = njs_native_function(njs_array_prototype_find_index, 1, 0), .writable = 1, .configurable = 1, }, @@ -2909,7 +2909,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("map"), - .value = njs_native_function(njs_array_prototype_map, 0), + .value = njs_native_function(njs_array_prototype_map, 1, 0), .writable = 1, .configurable = 1, }, @@ -2917,7 +2917,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("reduce"), - .value = njs_native_function(njs_array_prototype_reduce, 0), + .value = njs_native_function(njs_array_prototype_reduce, 1, 0), .writable = 1, .configurable = 1, }, @@ -2925,7 +2925,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("reduceRight"), - .value = njs_native_function(njs_array_prototype_reduce_right, 0), + .value = njs_native_function(njs_array_prototype_reduce_right, 1, 0), .writable = 1, .configurable = 1, }, @@ -2933,7 +2933,7 @@ static const njs_object_prop_t njs_array_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("sort"), - .value = njs_native_function(njs_array_prototype_sort, 0), + .value = njs_native_function(njs_array_prototype_sort, 1, 0), .writable = 1, .configurable = 1, }, diff --git a/src/njs_boolean.c b/src/njs_boolean.c index 79c54bed..65139236 100644 --- a/src/njs_boolean.c +++ b/src/njs_boolean.c @@ -145,7 +145,7 @@ static const njs_object_prop_t njs_boolean_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_boolean_prototype_value_of, 0), + .value = njs_native_function(njs_boolean_prototype_value_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -153,7 +153,7 @@ static const njs_object_prop_t njs_boolean_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_boolean_prototype_to_string, 0), + .value = njs_native_function(njs_boolean_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, diff --git a/src/njs_builtin.c b/src/njs_builtin.c index 614fbf74..a66a6303 100644 --- a/src/njs_builtin.c +++ b/src/njs_builtin.c @@ -1117,7 +1117,7 @@ static const njs_object_prop_t njs_njs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("dump"), - .value = njs_native_function(njs_dump_value, + .value = njs_native_function(njs_dump_value, 0, NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_NUMBER_ARG), .configurable = 1, }, diff --git a/src/njs_crypto.c b/src/njs_crypto.c index 1993fad1..2e79e5e0 100644 --- a/src/njs_crypto.c +++ b/src/njs_crypto.c @@ -323,7 +323,7 @@ static const njs_object_prop_t njs_hash_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_hash_prototype_to_string, 0), + .value = njs_native_function(njs_hash_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -331,7 +331,7 @@ static const njs_object_prop_t njs_hash_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("update"), - .value = njs_native_function(njs_hash_prototype_update, + .value = njs_native_function(njs_hash_prototype_update, 0, NJS_OBJECT_ARG, NJS_SKIP_ARG), .writable = 1, .configurable = 1, @@ -340,7 +340,7 @@ static const njs_object_prop_t njs_hash_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("digest"), - .value = njs_native_function(njs_hash_prototype_digest, + .value = njs_native_function(njs_hash_prototype_digest, 0, NJS_OBJECT_ARG, NJS_SKIP_ARG), .writable = 1, .configurable = 1, @@ -585,7 +585,7 @@ static const njs_object_prop_t njs_hmac_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_hmac_prototype_to_string, 0), + .value = njs_native_function(njs_hmac_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -593,7 +593,7 @@ static const njs_object_prop_t njs_hmac_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("update"), - .value = njs_native_function(njs_hmac_prototype_update, + .value = njs_native_function(njs_hmac_prototype_update, 0, NJS_OBJECT_ARG, NJS_SKIP_ARG), .writable = 1, .configurable = 1, @@ -602,7 +602,7 @@ static const njs_object_prop_t njs_hmac_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("digest"), - .value = njs_native_function(njs_hmac_prototype_digest, + .value = njs_native_function(njs_hmac_prototype_digest, 0, NJS_OBJECT_ARG, NJS_SKIP_ARG), .writable = 1, .configurable = 1, @@ -650,7 +650,7 @@ static const njs_object_prop_t njs_crypto_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("createHash"), - .value = njs_native_function(njs_crypto_create_hash, + .value = njs_native_function(njs_crypto_create_hash, 0, NJS_SKIP_ARG), .writable = 1, .configurable = 1, @@ -659,7 +659,7 @@ static const njs_object_prop_t njs_crypto_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("createHmac"), - .value = njs_native_function(njs_crypto_create_hmac, + .value = njs_native_function(njs_crypto_create_hmac, 0, NJS_SKIP_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_date.c b/src/njs_date.c index f697f08c..379ae9c8 100644 --- a/src/njs_date.c +++ b/src/njs_date.c @@ -1016,7 +1016,7 @@ static const njs_object_prop_t njs_date_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("UTC"), - .value = njs_native_function(njs_date_utc, 0), + .value = njs_native_function(njs_date_utc, 7, 0), .writable = 1, .configurable = 1, }, @@ -1024,7 +1024,7 @@ static const njs_object_prop_t njs_date_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("now"), - .value = njs_native_function(njs_date_now, 0), + .value = njs_native_function(njs_date_now, 0, 0), .writable = 1, .configurable = 1, }, @@ -1032,7 +1032,7 @@ static const njs_object_prop_t njs_date_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("parse"), - .value = njs_native_function(njs_date_parse, + .value = njs_native_function(njs_date_parse, 1, NJS_SKIP_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -2034,7 +2034,8 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_date_prototype_value_of, NJS_DATE_ARG), + .value = njs_native_function(njs_date_prototype_value_of, 0, + NJS_DATE_ARG), .writable = 1, .configurable = 1, }, @@ -2042,7 +2043,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_date_prototype_to_string, + .value = njs_native_function(njs_date_prototype_to_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2051,7 +2052,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toDateString"), - .value = njs_native_function(njs_date_prototype_to_date_string, + .value = njs_native_function(njs_date_prototype_to_date_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2060,7 +2061,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toTimeString"), - .value = njs_native_function(njs_date_prototype_to_time_string, + .value = njs_native_function(njs_date_prototype_to_time_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2069,7 +2070,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toLocaleString"), - .value = njs_native_function(njs_date_prototype_to_string, + .value = njs_native_function(njs_date_prototype_to_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2078,7 +2079,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("toLocaleDateString"), - .value = njs_native_function(njs_date_prototype_to_date_string, + .value = njs_native_function(njs_date_prototype_to_date_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2087,7 +2088,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("toLocaleTimeString"), - .value = njs_native_function(njs_date_prototype_to_time_string, + .value = njs_native_function(njs_date_prototype_to_time_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2096,7 +2097,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toUTCString"), - .value = njs_native_function(njs_date_prototype_to_utc_string, + .value = njs_native_function(njs_date_prototype_to_utc_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2105,7 +2106,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toISOString"), - .value = njs_native_function(njs_date_prototype_to_iso_string, + .value = njs_native_function(njs_date_prototype_to_iso_string, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2114,7 +2115,8 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getTime"), - .value = njs_native_function(njs_date_prototype_value_of, NJS_DATE_ARG), + .value = njs_native_function(njs_date_prototype_value_of, 0, + NJS_DATE_ARG), .writable = 1, .configurable = 1, }, @@ -2122,7 +2124,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getFullYear"), - .value = njs_native_function(njs_date_prototype_get_full_year, + .value = njs_native_function(njs_date_prototype_get_full_year, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2131,7 +2133,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCFullYear"), - .value = njs_native_function(njs_date_prototype_get_utc_full_year, + .value = njs_native_function(njs_date_prototype_get_utc_full_year, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2140,7 +2142,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getMonth"), - .value = njs_native_function(njs_date_prototype_get_month, + .value = njs_native_function(njs_date_prototype_get_month, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2149,7 +2151,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCMonth"), - .value = njs_native_function(njs_date_prototype_get_utc_month, + .value = njs_native_function(njs_date_prototype_get_utc_month, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2158,7 +2160,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getDate"), - .value = njs_native_function(njs_date_prototype_get_date, + .value = njs_native_function(njs_date_prototype_get_date, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2167,7 +2169,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCDate"), - .value = njs_native_function(njs_date_prototype_get_utc_date, + .value = njs_native_function(njs_date_prototype_get_utc_date, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2176,7 +2178,8 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getDay"), - .value = njs_native_function(njs_date_prototype_get_day, NJS_DATE_ARG), + .value = njs_native_function(njs_date_prototype_get_day, 0, + NJS_DATE_ARG), .writable = 1, .configurable = 1, }, @@ -2184,7 +2187,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCDay"), - .value = njs_native_function(njs_date_prototype_get_utc_day, + .value = njs_native_function(njs_date_prototype_get_utc_day, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2193,7 +2196,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getHours"), - .value = njs_native_function(njs_date_prototype_get_hours, + .value = njs_native_function(njs_date_prototype_get_hours, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2202,7 +2205,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCHours"), - .value = njs_native_function(njs_date_prototype_get_utc_hours, + .value = njs_native_function(njs_date_prototype_get_utc_hours, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2211,7 +2214,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getMinutes"), - .value = njs_native_function(njs_date_prototype_get_minutes, + .value = njs_native_function(njs_date_prototype_get_minutes, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2220,7 +2223,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCMinutes"), - .value = njs_native_function(njs_date_prototype_get_utc_minutes, + .value = njs_native_function(njs_date_prototype_get_utc_minutes, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2229,7 +2232,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getSeconds"), - .value = njs_native_function(njs_date_prototype_get_seconds, + .value = njs_native_function(njs_date_prototype_get_seconds, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2238,7 +2241,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getUTCSeconds"), - .value = njs_native_function(njs_date_prototype_get_seconds, + .value = njs_native_function(njs_date_prototype_get_seconds, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2247,7 +2250,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getMilliseconds"), - .value = njs_native_function(njs_date_prototype_get_milliseconds, + .value = njs_native_function(njs_date_prototype_get_milliseconds, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2256,7 +2259,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getUTCMilliseconds"), - .value = njs_native_function(njs_date_prototype_get_milliseconds, + .value = njs_native_function(njs_date_prototype_get_milliseconds, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2265,7 +2268,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getTimezoneOffset"), - .value = njs_native_function(njs_date_prototype_get_timezone_offset, + .value = njs_native_function(njs_date_prototype_get_timezone_offset, 0, NJS_DATE_ARG), .writable = 1, .configurable = 1, @@ -2274,7 +2277,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setTime"), - .value = njs_native_function(njs_date_prototype_set_time, + .value = njs_native_function(njs_date_prototype_set_time, 1, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2283,7 +2286,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("setMilliseconds"), - .value = njs_native_function(njs_date_prototype_set_milliseconds, + .value = njs_native_function(njs_date_prototype_set_milliseconds, 1, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2292,7 +2295,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("setUTCMilliseconds"), - .value = njs_native_function(njs_date_prototype_set_milliseconds, + .value = njs_native_function(njs_date_prototype_set_milliseconds, 1, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2301,7 +2304,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setSeconds"), - .value = njs_native_function(njs_date_prototype_set_seconds, + .value = njs_native_function(njs_date_prototype_set_seconds, 2, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2310,7 +2313,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCSeconds"), - .value = njs_native_function(njs_date_prototype_set_seconds, + .value = njs_native_function(njs_date_prototype_set_seconds, 2, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2319,7 +2322,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setMinutes"), - .value = njs_native_function(njs_date_prototype_set_minutes, + .value = njs_native_function(njs_date_prototype_set_minutes, 3, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2329,7 +2332,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCMinutes"), - .value = njs_native_function(njs_date_prototype_set_utc_minutes, + .value = njs_native_function(njs_date_prototype_set_utc_minutes, 3, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2339,7 +2342,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setHours"), - .value = njs_native_function(njs_date_prototype_set_hours, + .value = njs_native_function(njs_date_prototype_set_hours, 4, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2349,7 +2352,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCHours"), - .value = njs_native_function(njs_date_prototype_set_utc_hours, + .value = njs_native_function(njs_date_prototype_set_utc_hours, 4, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2359,7 +2362,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setDate"), - .value = njs_native_function(njs_date_prototype_set_date, + .value = njs_native_function(njs_date_prototype_set_date, 1, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2368,7 +2371,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCDate"), - .value = njs_native_function(njs_date_prototype_set_utc_date, + .value = njs_native_function(njs_date_prototype_set_utc_date, 1, NJS_DATE_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2377,7 +2380,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setMonth"), - .value = njs_native_function(njs_date_prototype_set_month, + .value = njs_native_function(njs_date_prototype_set_month, 2, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2386,7 +2389,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCMonth"), - .value = njs_native_function(njs_date_prototype_set_utc_month, + .value = njs_native_function(njs_date_prototype_set_utc_month, 2, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -2395,7 +2398,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setFullYear"), - .value = njs_native_function(njs_date_prototype_set_full_year, + .value = njs_native_function(njs_date_prototype_set_full_year, 3, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2405,7 +2408,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("setUTCFullYear"), - .value = njs_native_function(njs_date_prototype_set_utc_full_year, + .value = njs_native_function(njs_date_prototype_set_utc_full_year, 3, NJS_DATE_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, @@ -2415,7 +2418,7 @@ static const njs_object_prop_t njs_date_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toJSON"), - .value = njs_native_function(njs_date_prototype_to_json, 0), + .value = njs_native_function(njs_date_prototype_to_json, 1, 0), .writable = 1, .configurable = 1, }, diff --git a/src/njs_error.c b/src/njs_error.c index e60178d7..6ca7b11f 100644 --- a/src/njs_error.c +++ b/src/njs_error.c @@ -734,7 +734,7 @@ static const njs_object_prop_t njs_error_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_error_prototype_value_of, 0), + .value = njs_native_function(njs_error_prototype_value_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -742,7 +742,7 @@ static const njs_object_prop_t njs_error_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_error_prototype_to_string, 0), + .value = njs_native_function(njs_error_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -816,7 +816,8 @@ static const njs_object_prop_t njs_internal_error_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_internal_error_prototype_to_string, 0), + .value = njs_native_function(njs_internal_error_prototype_to_string, + 0, 0), .writable = 1, .configurable = 1, }, diff --git a/src/njs_fs.c b/src/njs_fs.c index a70586ac..3256b318 100644 --- a/src/njs_fs.c +++ b/src/njs_fs.c @@ -1140,7 +1140,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("readFile"), - .value = njs_native_function(njs_fs_read_file, 0), + .value = njs_native_function(njs_fs_read_file, 0, 0), .writable = 1, .configurable = 1, }, @@ -1148,7 +1148,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("readFileSync"), - .value = njs_native_function(njs_fs_read_file_sync, 0), + .value = njs_native_function(njs_fs_read_file_sync, 0, 0), .writable = 1, .configurable = 1, }, @@ -1156,7 +1156,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("appendFile"), - .value = njs_native_function(njs_fs_append_file, 0), + .value = njs_native_function(njs_fs_append_file, 0, 0), .writable = 1, .configurable = 1, }, @@ -1164,7 +1164,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("appendFileSync"), - .value = njs_native_function(njs_fs_append_file_sync, 0), + .value = njs_native_function(njs_fs_append_file_sync, 0, 0), .writable = 1, .configurable = 1, }, @@ -1172,7 +1172,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("writeFile"), - .value = njs_native_function(njs_fs_write_file, 0), + .value = njs_native_function(njs_fs_write_file, 0, 0), .writable = 1, .configurable = 1, }, @@ -1180,7 +1180,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("writeFileSync"), - .value = njs_native_function(njs_fs_write_file_sync, 0), + .value = njs_native_function(njs_fs_write_file_sync, 0, 0), .writable = 1, .configurable = 1, }, @@ -1188,7 +1188,7 @@ static const njs_object_prop_t njs_fs_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("renameSync"), - .value = njs_native_function(njs_fs_rename_sync, NJS_STRING_ARG, + .value = njs_native_function(njs_fs_rename_sync, 0, NJS_STRING_ARG, NJS_STRING_ARG, 0), .writable = 1, .configurable = 1, diff --git a/src/njs_function.c b/src/njs_function.c index 96a23ac0..2a4ee501 100644 --- a/src/njs_function.c +++ b/src/njs_function.c @@ -1032,10 +1032,8 @@ static njs_int_t njs_function_instance_length(njs_vm_t *vm, njs_value_t *value, njs_value_t *setval, njs_value_t *retval) { - njs_uint_t n; - njs_object_t *proto; - njs_function_t *function; - njs_function_lambda_t *lambda; + njs_object_t *proto; + njs_function_t *function; proto = njs_object(value); @@ -1054,26 +1052,7 @@ njs_function_instance_length(njs_vm_t *vm, njs_value_t *value, function = (njs_function_t *) proto; - if (function->native) { - for (n = function->args_offset; n < NJS_ARGS_TYPES_MAX; n++) { - if (function->args_types[n] == 0) { - break; - } - } - - } else { - lambda = function->u.lambda; - n = lambda->nargs + 1 - lambda->rest_parameters; - } - - if (n >= function->args_offset) { - n -= function->args_offset; - - } else { - n = 0; - } - - njs_set_number(retval, n); + njs_set_number(retval, function->args_count); return NJS_OK; } @@ -1224,6 +1203,13 @@ njs_function_prototype_bind(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, args++; } + if (nargs > function->args_count) { + function->args_count = 0; + + } else { + function->args_count -= nargs - 1; + } + function->args_offset = nargs; size = nargs * sizeof(njs_value_t); @@ -1273,7 +1259,7 @@ static const njs_object_prop_t njs_function_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("call"), - .value = njs_native_function(njs_function_prototype_call, 0), + .value = njs_native_function(njs_function_prototype_call, 1, 0), .writable = 1, .configurable = 1, }, @@ -1281,7 +1267,7 @@ static const njs_object_prop_t njs_function_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("apply"), - .value = njs_native_function(njs_function_prototype_apply, 0), + .value = njs_native_function(njs_function_prototype_apply, 2, 0), .writable = 1, .configurable = 1, }, @@ -1289,7 +1275,7 @@ static const njs_object_prop_t njs_function_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("bind"), - .value = njs_native_function(njs_function_prototype_bind, 0), + .value = njs_native_function(njs_function_prototype_bind, 1, 0), .writable = 1, .configurable = 1, }, diff --git a/src/njs_json.c b/src/njs_json.c index e81e9494..feeeb407 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -2101,7 +2101,7 @@ static const njs_object_prop_t njs_json_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("parse"), - .value = njs_native_function(njs_json_parse, + .value = njs_native_function(njs_json_parse, 2, NJS_SKIP_ARG, NJS_STRING_ARG, NJS_OBJECT_ARG), .writable = 1, @@ -2112,7 +2112,7 @@ static const njs_object_prop_t njs_json_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("stringify"), - .value = njs_native_function(njs_json_stringify, + .value = njs_native_function(njs_json_stringify, 3, NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_SKIP_ARG), .writable = 1, diff --git a/src/njs_math.c b/src/njs_math.c index a2cc9dd6..48306e3e 100644 --- a/src/njs_math.c +++ b/src/njs_math.c @@ -833,7 +833,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("abs"), - .value = njs_native_function(njs_object_math_abs, + .value = njs_native_function(njs_object_math_abs, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -842,7 +842,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("acos"), - .value = njs_native_function(njs_object_math_acos, + .value = njs_native_function(njs_object_math_acos, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -852,7 +852,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("acosh"), - .value = njs_native_function(njs_object_math_acosh, + .value = njs_native_function(njs_object_math_acosh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -861,7 +861,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("asin"), - .value = njs_native_function(njs_object_math_asin, + .value = njs_native_function(njs_object_math_asin, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -871,7 +871,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("asinh"), - .value = njs_native_function(njs_object_math_asinh, + .value = njs_native_function(njs_object_math_asinh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -880,7 +880,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("atan"), - .value = njs_native_function(njs_object_math_atan, + .value = njs_native_function(njs_object_math_atan, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -889,7 +889,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("atan2"), - .value = njs_native_function(njs_object_math_atan2, + .value = njs_native_function(njs_object_math_atan2, 2, NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -899,7 +899,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("atanh"), - .value = njs_native_function(njs_object_math_atanh, + .value = njs_native_function(njs_object_math_atanh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -909,7 +909,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("cbrt"), - .value = njs_native_function(njs_object_math_cbrt, + .value = njs_native_function(njs_object_math_cbrt, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -918,7 +918,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("ceil"), - .value = njs_native_function(njs_object_math_ceil, + .value = njs_native_function(njs_object_math_ceil, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -928,7 +928,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("clz32"), - .value = njs_native_function(njs_object_math_clz32, + .value = njs_native_function(njs_object_math_clz32, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -937,7 +937,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("cos"), - .value = njs_native_function(njs_object_math_cos, + .value = njs_native_function(njs_object_math_cos, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -947,7 +947,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("cosh"), - .value = njs_native_function(njs_object_math_cosh, + .value = njs_native_function(njs_object_math_cosh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -956,7 +956,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("exp"), - .value = njs_native_function(njs_object_math_exp, + .value = njs_native_function(njs_object_math_exp, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -966,7 +966,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("expm1"), - .value = njs_native_function(njs_object_math_expm1, + .value = njs_native_function(njs_object_math_expm1, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -975,7 +975,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("floor"), - .value = njs_native_function(njs_object_math_floor, + .value = njs_native_function(njs_object_math_floor, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -985,7 +985,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fround"), - .value = njs_native_function(njs_object_math_fround, + .value = njs_native_function(njs_object_math_fround, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -995,7 +995,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("hypot"), - .value = njs_native_function(njs_object_math_hypot, 0), + .value = njs_native_function(njs_object_math_hypot, 2, 0), .writable = 1, .configurable = 1, }, @@ -1004,7 +1004,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("imul"), - .value = njs_native_function(njs_object_math_imul, + .value = njs_native_function(njs_object_math_imul, 2, NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1013,7 +1013,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("log"), - .value = njs_native_function(njs_object_math_log, + .value = njs_native_function(njs_object_math_log, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1023,7 +1023,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("log10"), - .value = njs_native_function(njs_object_math_log10, + .value = njs_native_function(njs_object_math_log10, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1033,7 +1033,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("log1p"), - .value = njs_native_function(njs_object_math_log1p, + .value = njs_native_function(njs_object_math_log1p, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1043,7 +1043,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("log2"), - .value = njs_native_function(njs_object_math_log2, + .value = njs_native_function(njs_object_math_log2, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1052,7 +1052,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("max"), - .value = njs_native_function(njs_object_math_max, 0), + .value = njs_native_function(njs_object_math_max, 2, 0), .writable = 1, .configurable = 1, }, @@ -1060,7 +1060,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("min"), - .value = njs_native_function(njs_object_math_min, 0), + .value = njs_native_function(njs_object_math_min, 2, 0), .writable = 1, .configurable = 1, }, @@ -1068,7 +1068,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("pow"), - .value = njs_native_function(njs_object_math_pow, + .value = njs_native_function(njs_object_math_pow, 2, NJS_SKIP_ARG, NJS_NUMBER_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1077,7 +1077,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("random"), - .value = njs_native_function(njs_object_math_random, 0), + .value = njs_native_function(njs_object_math_random, 0, 0), .writable = 1, .configurable = 1, }, @@ -1085,7 +1085,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("round"), - .value = njs_native_function(njs_object_math_round, + .value = njs_native_function(njs_object_math_round, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1095,7 +1095,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("sign"), - .value = njs_native_function(njs_object_math_sign, + .value = njs_native_function(njs_object_math_sign, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1104,7 +1104,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("sin"), - .value = njs_native_function(njs_object_math_sin, + .value = njs_native_function(njs_object_math_sin, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1114,7 +1114,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("sinh"), - .value = njs_native_function(njs_object_math_sinh, + .value = njs_native_function(njs_object_math_sinh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1123,7 +1123,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("sqrt"), - .value = njs_native_function(njs_object_math_sqrt, + .value = njs_native_function(njs_object_math_sqrt, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1132,7 +1132,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("tan"), - .value = njs_native_function(njs_object_math_tan, + .value = njs_native_function(njs_object_math_tan, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1142,7 +1142,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("tanh"), - .value = njs_native_function(njs_object_math_tanh, + .value = njs_native_function(njs_object_math_tanh, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -1152,7 +1152,7 @@ static const njs_object_prop_t njs_math_object_properties[] = { .type = NJS_PROPERTY, .name = njs_string("trunc"), - .value = njs_native_function(njs_object_math_trunc, + .value = njs_native_function(njs_object_math_trunc, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_number.c b/src/njs_number.c index bdb43d5a..0a4d6d99 100644 --- a/src/njs_number.c +++ b/src/njs_number.c @@ -415,7 +415,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isFinite"), - .value = njs_native_function(njs_number_is_finite, 0), + .value = njs_native_function(njs_number_is_finite, 1, 0), .writable = 1, .configurable = 1, }, @@ -424,7 +424,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isInteger"), - .value = njs_native_function(njs_number_is_integer, 0), + .value = njs_native_function(njs_number_is_integer, 1, 0), .writable = 1, .configurable = 1, }, @@ -433,7 +433,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isSafeInteger"), - .value = njs_native_function(njs_number_is_safe_integer, 0), + .value = njs_native_function(njs_number_is_safe_integer, 1, 0), .writable = 1, .configurable = 1, }, @@ -442,7 +442,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isNaN"), - .value = njs_native_function(njs_number_is_nan, 0), + .value = njs_native_function(njs_number_is_nan, 1, 0), .writable = 1, .configurable = 1, }, @@ -451,7 +451,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("parseFloat"), - .value = njs_native_function(njs_number_parse_float, + .value = njs_native_function(njs_number_parse_float, 1, NJS_SKIP_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -461,7 +461,7 @@ static const njs_object_prop_t njs_number_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("parseInt"), - .value = njs_native_function(njs_number_parse_int, + .value = njs_native_function(njs_number_parse_int, 2, NJS_SKIP_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -873,7 +873,7 @@ static const njs_object_prop_t njs_number_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_number_prototype_value_of, 0), + .value = njs_native_function(njs_number_prototype_value_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -881,7 +881,7 @@ static const njs_object_prop_t njs_number_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_number_prototype_to_string, + .value = njs_native_function(njs_number_prototype_to_string, 1, NJS_SKIP_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -890,7 +890,7 @@ static const njs_object_prop_t njs_number_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toFixed"), - .value = njs_native_function(njs_number_prototype_to_fixed, + .value = njs_native_function(njs_number_prototype_to_fixed, 1, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -899,7 +899,7 @@ static const njs_object_prop_t njs_number_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toPrecision"), - .value = njs_native_function(njs_number_prototype_to_precision, + .value = njs_native_function(njs_number_prototype_to_precision, 1, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -908,7 +908,7 @@ static const njs_object_prop_t njs_number_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toExponential"), - .value = njs_native_function(njs_number_prototype_to_exponential, + .value = njs_native_function(njs_number_prototype_to_exponential, 1, NJS_SKIP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_object.c b/src/njs_object.c index 961ba1f7..3633b4a4 100644 --- a/src/njs_object.c +++ b/src/njs_object.c @@ -1679,7 +1679,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("create"), - .value = njs_native_function(njs_object_create, 0), + .value = njs_native_function(njs_object_create, 2, 0), .writable = 1, .configurable = 1, }, @@ -1688,7 +1688,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("keys"), - .value = njs_native_function(njs_object_keys, + .value = njs_native_function(njs_object_keys, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1698,7 +1698,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("values"), - .value = njs_native_function(njs_object_values, + .value = njs_native_function(njs_object_values, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1708,7 +1708,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("entries"), - .value = njs_native_function(njs_object_entries, + .value = njs_native_function(njs_object_entries, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1718,7 +1718,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("defineProperty"), - .value = njs_native_function(njs_object_define_property, + .value = njs_native_function(njs_object_define_property, 3, NJS_SKIP_ARG, NJS_OBJECT_ARG, NJS_STRING_ARG, NJS_OBJECT_ARG), .writable = 1, @@ -1729,7 +1729,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("defineProperties"), - .value = njs_native_function(njs_object_define_properties, + .value = njs_native_function(njs_object_define_properties, 2, NJS_SKIP_ARG, NJS_OBJECT_ARG, NJS_OBJECT_ARG), .writable = 1, @@ -1740,7 +1740,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getOwnPropertyDescriptor"), - .value = njs_native_function(njs_object_get_own_property_descriptor, + .value = njs_native_function(njs_object_get_own_property_descriptor, 2, NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_STRING_ARG), .writable = 1, @@ -1751,7 +1751,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getOwnPropertyDescriptors"), - .value = njs_native_function(njs_object_get_own_property_descriptors, + .value = njs_native_function(njs_object_get_own_property_descriptors, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1761,7 +1761,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("getOwnPropertyNames"), - .value = njs_native_function(njs_object_get_own_property_names, + .value = njs_native_function(njs_object_get_own_property_names, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1771,7 +1771,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("getPrototypeOf"), - .value = njs_native_function(njs_object_get_prototype_of, + .value = njs_native_function(njs_object_get_prototype_of, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1781,7 +1781,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("freeze"), - .value = njs_native_function(njs_object_freeze, + .value = njs_native_function(njs_object_freeze, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1791,7 +1791,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isFrozen"), - .value = njs_native_function(njs_object_is_frozen, + .value = njs_native_function(njs_object_is_frozen, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1801,7 +1801,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("seal"), - .value = njs_native_function(njs_object_seal, + .value = njs_native_function(njs_object_seal, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1811,7 +1811,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isSealed"), - .value = njs_native_function(njs_object_is_sealed, + .value = njs_native_function(njs_object_is_sealed, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1821,7 +1821,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("preventExtensions"), - .value = njs_native_function(njs_object_prevent_extensions, + .value = njs_native_function(njs_object_prevent_extensions, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -1831,7 +1831,7 @@ static const njs_object_prop_t njs_object_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isExtensible"), - .value = njs_native_function(njs_object_is_extensible, + .value = njs_native_function(njs_object_is_extensible, 1, NJS_SKIP_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -2253,7 +2253,7 @@ static const njs_object_prop_t njs_object_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_object_prototype_value_of, 0), + .value = njs_native_function(njs_object_prototype_value_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -2261,7 +2261,7 @@ static const njs_object_prop_t njs_object_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_object_prototype_to_string, 0), + .value = njs_native_function(njs_object_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -2269,7 +2269,7 @@ static const njs_object_prop_t njs_object_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("hasOwnProperty"), - .value = njs_native_function(njs_object_prototype_has_own_property, + .value = njs_native_function(njs_object_prototype_has_own_property, 1, NJS_OBJECT_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -2278,7 +2278,7 @@ static const njs_object_prop_t njs_object_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_long_string("propertyIsEnumerable"), - .value = njs_native_function(njs_object_prototype_prop_is_enumerable, + .value = njs_native_function(njs_object_prototype_prop_is_enumerable, 1, NJS_OBJECT_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -2287,7 +2287,7 @@ static const njs_object_prop_t njs_object_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("isPrototypeOf"), - .value = njs_native_function(njs_object_prototype_is_prototype_of, + .value = njs_native_function(njs_object_prototype_is_prototype_of, 1, NJS_OBJECT_ARG, NJS_OBJECT_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_parser.c b/src/njs_parser.c index 8b870fe7..750ebc04 100644 --- a/src/njs_parser.c +++ b/src/njs_parser.c @@ -667,7 +667,12 @@ njs_parser_function_declaration(njs_vm_t *vm, njs_parser_t *parser) return NJS_TOKEN_ERROR; } - return njs_parser_function_lambda(vm, parser, function->u.lambda, token); + token = njs_parser_function_lambda(vm, parser, function->u.lambda, token); + + function->args_count = function->u.lambda->nargs + - function->u.lambda->rest_parameters; + + return token; } diff --git a/src/njs_regexp.c b/src/njs_regexp.c index 00e85d3d..3a453263 100644 --- a/src/njs_regexp.c +++ b/src/njs_regexp.c @@ -1232,7 +1232,7 @@ static const njs_object_prop_t njs_regexp_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_regexp_prototype_to_string, 0), + .value = njs_native_function(njs_regexp_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -1240,7 +1240,7 @@ static const njs_object_prop_t njs_regexp_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("test"), - .value = njs_native_function(njs_regexp_prototype_test, + .value = njs_native_function(njs_regexp_prototype_test, 1, NJS_OBJECT_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -1249,7 +1249,7 @@ static const njs_object_prop_t njs_regexp_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("exec"), - .value = njs_native_function(njs_regexp_prototype_exec, + .value = njs_native_function(njs_regexp_prototype_exec, 1, NJS_OBJECT_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_string.c b/src/njs_string.c index 23d8e51d..04892eaa 100644 --- a/src/njs_string.c +++ b/src/njs_string.c @@ -596,7 +596,7 @@ static const njs_object_prop_t njs_string_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("bytesFrom"), - .value = njs_native_function(njs_string_bytes_from, NJS_SKIP_ARG, + .value = njs_native_function(njs_string_bytes_from, 0, NJS_SKIP_ARG, NJS_SKIP_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -606,7 +606,7 @@ static const njs_object_prop_t njs_string_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fromCharCode"), - .value = njs_native_function(njs_string_from_char_code, 0), + .value = njs_native_function(njs_string_from_char_code, 1, 0), .writable = 1, .configurable = 1, }, @@ -615,7 +615,7 @@ static const njs_object_prop_t njs_string_constructor_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fromCodePoint"), - .value = njs_native_function(njs_string_from_code_point, 0), + .value = njs_native_function(njs_string_from_code_point, 1, 0), .writable = 1, .configurable = 1, }, @@ -4084,7 +4084,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("valueOf"), - .value = njs_native_function(njs_string_prototype_value_of, 0), + .value = njs_native_function(njs_string_prototype_value_of, 0, 0), .writable = 1, .configurable = 1, }, @@ -4092,7 +4092,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toString"), - .value = njs_native_function(njs_string_prototype_to_string, 0), + .value = njs_native_function(njs_string_prototype_to_string, 0, 0), .writable = 1, .configurable = 1, }, @@ -4100,7 +4100,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("concat"), - .value = njs_native_function(njs_string_prototype_concat, 0), + .value = njs_native_function(njs_string_prototype_concat, 1, 0), .writable = 1, .configurable = 1, }, @@ -4108,7 +4108,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fromUTF8"), - .value = njs_native_function(njs_string_prototype_from_utf8, + .value = njs_native_function(njs_string_prototype_from_utf8, 0, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4117,7 +4117,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toUTF8"), - .value = njs_native_function(njs_string_prototype_to_utf8, + .value = njs_native_function(njs_string_prototype_to_utf8, 0, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4126,7 +4126,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("fromBytes"), - .value = njs_native_function(njs_string_prototype_from_bytes, + .value = njs_native_function(njs_string_prototype_from_bytes, 0, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4135,7 +4135,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toBytes"), - .value = njs_native_function(njs_string_prototype_to_bytes, + .value = njs_native_function(njs_string_prototype_to_bytes, 0, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4144,7 +4144,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("slice"), - .value = njs_native_function(njs_string_prototype_slice, + .value = njs_native_function(njs_string_prototype_slice, 2, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4153,7 +4153,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("substring"), - .value = njs_native_function(njs_string_prototype_substring, + .value = njs_native_function(njs_string_prototype_substring, 2, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4162,7 +4162,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("substr"), - .value = njs_native_function(njs_string_prototype_substr, + .value = njs_native_function(njs_string_prototype_substr, 2, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4171,7 +4171,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("charAt"), - .value = njs_native_function(njs_string_prototype_char_at, + .value = njs_native_function(njs_string_prototype_char_at, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4180,7 +4180,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("charCodeAt"), - .value = njs_native_function(njs_string_prototype_char_code_at, + .value = njs_native_function(njs_string_prototype_char_code_at, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4190,7 +4190,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("codePointAt"), - .value = njs_native_function(njs_string_prototype_char_code_at, + .value = njs_native_function(njs_string_prototype_char_code_at, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4199,7 +4199,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("indexOf"), - .value = njs_native_function(njs_string_prototype_index_of, + .value = njs_native_function(njs_string_prototype_index_of, 1, NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4208,7 +4208,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("lastIndexOf"), - .value = njs_native_function(njs_string_prototype_last_index_of, + .value = njs_native_function(njs_string_prototype_last_index_of, 1, NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_NUMBER_ARG), .writable = 1, .configurable = 1, @@ -4218,7 +4218,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("includes"), - .value = njs_native_function(njs_string_prototype_includes, + .value = njs_native_function(njs_string_prototype_includes, 1, NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4228,7 +4228,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("startsWith"), - .value = njs_native_function(njs_string_prototype_starts_with, + .value = njs_native_function(njs_string_prototype_starts_with, 1, NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4238,7 +4238,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("endsWith"), - .value = njs_native_function(njs_string_prototype_ends_with, + .value = njs_native_function(njs_string_prototype_ends_with, 1, NJS_STRING_OBJECT_ARG, NJS_STRING_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4247,7 +4247,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toLowerCase"), - .value = njs_native_function(njs_string_prototype_to_lower_case, + .value = njs_native_function(njs_string_prototype_to_lower_case, 0, NJS_STRING_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -4256,7 +4256,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("toUpperCase"), - .value = njs_native_function(njs_string_prototype_to_upper_case, + .value = njs_native_function(njs_string_prototype_to_upper_case, 0, NJS_STRING_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -4265,7 +4265,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("trim"), - .value = njs_native_function(njs_string_prototype_trim, + .value = njs_native_function(njs_string_prototype_trim, 0, NJS_STRING_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -4275,7 +4275,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("trimStart"), - .value = njs_native_function(njs_string_prototype_trim_start, + .value = njs_native_function(njs_string_prototype_trim_start, 0, NJS_STRING_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -4285,7 +4285,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("trimEnd"), - .value = njs_native_function(njs_string_prototype_trim_end, + .value = njs_native_function(njs_string_prototype_trim_end, 0, NJS_STRING_OBJECT_ARG), .writable = 1, .configurable = 1, @@ -4295,7 +4295,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("repeat"), - .value = njs_native_function(njs_string_prototype_repeat, + .value = njs_native_function(njs_string_prototype_repeat, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4305,7 +4305,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("padStart"), - .value = njs_native_function(njs_string_prototype_pad_start, + .value = njs_native_function(njs_string_prototype_pad_start, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -4315,7 +4315,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("padEnd"), - .value = njs_native_function(njs_string_prototype_pad_end, + .value = njs_native_function(njs_string_prototype_pad_end, 1, NJS_STRING_OBJECT_ARG, NJS_INTEGER_ARG, NJS_STRING_ARG), .writable = 1, .configurable = 1, @@ -4324,7 +4324,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("search"), - .value = njs_native_function(njs_string_prototype_search, + .value = njs_native_function(njs_string_prototype_search, 1, NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG), .writable = 1, .configurable = 1, @@ -4333,7 +4333,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("match"), - .value = njs_native_function(njs_string_prototype_match, + .value = njs_native_function(njs_string_prototype_match, 1, NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG), .writable = 1, .configurable = 1, @@ -4342,7 +4342,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("split"), - .value = njs_native_function(njs_string_prototype_split, + .value = njs_native_function(njs_string_prototype_split, 2, NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG, NJS_INTEGER_ARG), .writable = 1, .configurable = 1, @@ -4351,7 +4351,7 @@ static const njs_object_prop_t njs_string_prototype_properties[] = { .type = NJS_PROPERTY, .name = njs_string("replace"), - .value = njs_native_function(njs_string_prototype_replace, + .value = njs_native_function(njs_string_prototype_replace, 2, NJS_STRING_OBJECT_ARG, NJS_REGEXP_ARG, NJS_FUNCTION_ARG), .writable = 1, .configurable = 1, diff --git a/src/njs_value.h b/src/njs_value.h index dd946b21..032ee4ab 100644 --- a/src/njs_value.h +++ b/src/njs_value.h @@ -242,7 +242,7 @@ struct njs_function_s { uint8_t args_types[NJS_ARGS_TYPES_MAX]; uint8_t args_offset; - uint8_t continuation_size; + uint8_t args_count; /* Function is a closure. */ uint8_t closure:1; @@ -391,12 +391,13 @@ typedef struct { } -#define njs_native_function(_function, ...) { \ +#define njs_native_function(_function, _args_count, ...) { \ .data = { \ .type = NJS_FUNCTION, \ .truth = 1, \ .u.function = & (njs_function_t) { \ .native = 1, \ + .args_count = _args_count, \ .args_types = { __VA_ARGS__ }, \ .args_offset = 1, \ .u.native = _function, \ diff --git a/src/njs_vmcode.c b/src/njs_vmcode.c index 21af6c29..bb90be00 100644 --- a/src/njs_vmcode.c +++ b/src/njs_vmcode.c @@ -992,6 +992,8 @@ njs_vmcode_function(njs_vm_t *vm, u_char *pc) return NJS_ERROR; } + function->args_count = lambda->nargs - lambda->rest_parameters; + njs_set_function(&vm->retval, function); return sizeof(njs_vmcode_function_t); -- 2.47.3