Now all available objects are accessible through the global object.
const njs_object_init_t njs_array_constructor_init = {
- njs_str("Array"),
njs_array_constructor_properties,
njs_nitems(njs_array_constructor_properties),
};
const njs_object_init_t njs_array_prototype_init = {
- njs_str("Array"),
njs_array_prototype_properties,
njs_nitems(njs_array_prototype_properties),
};
const njs_object_init_t njs_array_instance_init = {
- njs_str("Array instance"),
njs_array_instance_properties,
njs_nitems(njs_array_instance_properties),
};
const njs_object_init_t njs_boolean_constructor_init = {
- njs_str("Boolean"),
njs_boolean_constructor_properties,
njs_nitems(njs_boolean_constructor_properties),
};
const njs_object_init_t njs_boolean_prototype_init = {
- njs_str("Boolean"),
njs_boolean_prototype_properties,
njs_nitems(njs_boolean_prototype_properties),
};
njs_lvlhsh_query_t lhq;
njs_regexp_pattern_t *pattern;
njs_object_prototype_t *prototype;
+ const njs_object_prop_t *prop;
const njs_object_init_t *obj, **p;
const njs_function_init_t *f;
static const njs_str_t sandbox_key = njs_str("sandbox");
+ static const njs_str_t name_key = njs_str("name");
shared = njs_mp_zalloc(vm->mem_pool, sizeof(njs_vm_shared_t));
if (njs_slow_path(shared == NULL)) {
}
}
- module->name = obj->name;
+ lhq.key = name_key;
+ lhq.key_hash = njs_djb_hash(name_key.start, name_key.length);
+ lhq.proto = &njs_object_hash_proto;
+
+ ret = njs_lvlhsh_find(&module->object.shared_hash, &lhq);
+ if (njs_fast_path(ret != NJS_OK)) {
+ return NJS_ERROR;
+ }
+
+ prop = lhq.value;
+
+ njs_string_get(&prop->value, &module->name);
module->object.shared = 1;
lhq.key = module->name;
const njs_object_init_t njs_global_this_init = {
- njs_str(""),
njs_global_this_object_properties,
njs_nitems(njs_global_this_object_properties)
};
const njs_object_init_t njs_njs_object_init = {
- njs_str("njs"),
njs_njs_object_properties,
njs_nitems(njs_njs_object_properties),
};
const njs_object_init_t njs_process_object_init = {
- njs_str("process"),
njs_process_object_properties,
njs_nitems(njs_process_object_properties),
};
const njs_object_init_t njs_hash_prototype_init = {
- njs_str("Hash"),
njs_hash_prototype_properties,
njs_nitems(njs_hash_prototype_properties),
};
const njs_object_init_t njs_hash_constructor_init = {
- njs_str("Hash"),
njs_hash_constructor_properties,
njs_nitems(njs_hash_constructor_properties),
};
const njs_object_init_t njs_hmac_prototype_init = {
- njs_str("Hmac"),
njs_hmac_prototype_properties,
njs_nitems(njs_hmac_prototype_properties),
};
const njs_object_init_t njs_hmac_constructor_init = {
- njs_str("Hmac"),
njs_hmac_constructor_properties,
njs_nitems(njs_hmac_constructor_properties),
};
const njs_object_init_t njs_crypto_object_init = {
- njs_str("crypto"),
njs_crypto_object_properties,
njs_nitems(njs_crypto_object_properties),
};
const njs_object_init_t njs_date_constructor_init = {
- njs_str("Date"),
njs_date_constructor_properties,
njs_nitems(njs_date_constructor_properties),
};
const njs_object_init_t njs_date_prototype_init = {
- njs_str("Date"),
njs_date_prototype_properties,
njs_nitems(njs_date_prototype_properties),
};
const njs_object_init_t njs_error_constructor_init = {
- njs_str("Error"),
njs_error_constructor_properties,
njs_nitems(njs_error_constructor_properties),
};
const njs_object_init_t njs_eval_error_constructor_init = {
- njs_str("EvalError"),
njs_eval_error_constructor_properties,
njs_nitems(njs_eval_error_constructor_properties),
};
const njs_object_init_t njs_internal_error_constructor_init = {
- njs_str("InternalError"),
njs_internal_error_constructor_properties,
njs_nitems(njs_internal_error_constructor_properties),
};
const njs_object_init_t njs_range_error_constructor_init = {
- njs_str("RangeError"),
njs_range_error_constructor_properties,
njs_nitems(njs_range_error_constructor_properties),
};
const njs_object_init_t njs_reference_error_constructor_init = {
- njs_str("ReferenceError"),
njs_reference_error_constructor_properties,
njs_nitems(njs_reference_error_constructor_properties),
};
const njs_object_init_t njs_syntax_error_constructor_init = {
- njs_str("SyntaxError"),
njs_syntax_error_constructor_properties,
njs_nitems(njs_syntax_error_constructor_properties),
};
const njs_object_init_t njs_type_error_constructor_init = {
- njs_str("TypeError"),
njs_type_error_constructor_properties,
njs_nitems(njs_type_error_constructor_properties),
};
const njs_object_init_t njs_uri_error_constructor_init = {
- njs_str("URIError"),
njs_uri_error_constructor_properties,
njs_nitems(njs_uri_error_constructor_properties),
};
const njs_object_init_t njs_memory_error_constructor_init = {
- njs_str("MemoryError"),
njs_memory_error_constructor_properties,
njs_nitems(njs_memory_error_constructor_properties),
};
const njs_object_init_t njs_error_prototype_init = {
- njs_str("Error"),
njs_error_prototype_properties,
njs_nitems(njs_error_prototype_properties),
};
const njs_object_init_t njs_eval_error_prototype_init = {
- njs_str("EvalError"),
njs_eval_error_prototype_properties,
njs_nitems(njs_eval_error_prototype_properties),
};
const njs_object_init_t njs_internal_error_prototype_init = {
- njs_str("InternalError"),
njs_internal_error_prototype_properties,
njs_nitems(njs_internal_error_prototype_properties),
};
const njs_object_init_t njs_range_error_prototype_init = {
- njs_str("RangeError"),
njs_range_error_prototype_properties,
njs_nitems(njs_range_error_prototype_properties),
};
const njs_object_init_t njs_reference_error_prototype_init = {
- njs_str("ReferenceError"),
njs_reference_error_prototype_properties,
njs_nitems(njs_reference_error_prototype_properties),
};
const njs_object_init_t njs_syntax_error_prototype_init = {
- njs_str("SyntaxError"),
njs_syntax_error_prototype_properties,
njs_nitems(njs_syntax_error_prototype_properties),
};
const njs_object_init_t njs_type_error_prototype_init = {
- njs_str("TypeError"),
njs_type_error_prototype_properties,
njs_nitems(njs_type_error_prototype_properties),
};
const njs_object_init_t njs_uri_error_prototype_init = {
- njs_str("URIError"),
njs_uri_error_prototype_properties,
njs_nitems(njs_uri_error_prototype_properties),
};
const njs_object_init_t njs_fs_object_init = {
- njs_str("fs"),
njs_fs_object_properties,
njs_nitems(njs_fs_object_properties),
};
const njs_object_init_t njs_arguments_object_instance_init = {
- njs_str("Argument object instance"),
njs_arguments_object_instance_properties,
njs_nitems(njs_arguments_object_instance_properties),
};
const njs_object_init_t njs_function_constructor_init = {
- njs_str("Function"),
njs_function_constructor_properties,
njs_nitems(njs_function_constructor_properties),
};
const njs_object_init_t njs_function_prototype_init = {
- njs_str("Function"),
njs_function_prototype_properties,
njs_nitems(njs_function_prototype_properties),
};
const njs_object_init_t njs_function_instance_init = {
- njs_str("Function instance"),
njs_function_instance_properties,
njs_nitems(njs_function_instance_properties),
};
const njs_object_init_t njs_arrow_instance_init = {
- njs_str("Arrow instance"),
njs_arrow_instance_properties,
njs_nitems(njs_arrow_instance_properties),
};
const njs_object_init_t njs_eval_function_init = {
- njs_str("eval"),
njs_eval_function_properties,
njs_nitems(njs_eval_function_properties),
};
const njs_object_init_t njs_json_object_init = {
- njs_str("JSON"),
njs_json_object_properties,
njs_nitems(njs_json_object_properties),
};
const njs_object_init_t njs_math_object_init = {
- njs_str("Math"),
njs_math_object_properties,
njs_nitems(njs_math_object_properties),
};
const njs_object_init_t njs_number_constructor_init = {
- njs_str("Number"),
njs_number_constructor_properties,
njs_nitems(njs_number_constructor_properties),
};
const njs_object_init_t njs_number_prototype_init = {
- njs_str("Number"),
njs_number_prototype_properties,
njs_nitems(njs_number_prototype_properties),
};
const njs_object_init_t njs_is_finite_function_init = {
- njs_str("isFinite"),
njs_is_finite_function_properties,
njs_nitems(njs_is_finite_function_properties),
};
const njs_object_init_t njs_object_constructor_init = {
- njs_str("Object"),
njs_object_constructor_properties,
njs_nitems(njs_object_constructor_properties),
};
const njs_object_init_t njs_object_prototype_init = {
- njs_str("Object"),
njs_object_prototype_properties,
njs_nitems(njs_object_prototype_properties),
};
struct njs_object_init_s {
- njs_str_t name;
const njs_object_prop_t *properties;
njs_uint_t items;
};
const njs_object_init_t njs_regexp_constructor_init = {
- njs_str("RegExp"),
njs_regexp_constructor_properties,
njs_nitems(njs_regexp_constructor_properties),
};
const njs_object_init_t njs_regexp_prototype_init = {
- njs_str("RegExp"),
njs_regexp_prototype_properties,
njs_nitems(njs_regexp_prototype_properties),
};
njs_uint_t nargs, njs_index_t unused);
static njs_int_t njs_ext_console_dump(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused);
-static njs_int_t njs_ext_console_help(njs_vm_t *vm, njs_value_t *args,
- njs_uint_t nargs, njs_index_t unused);
static njs_int_t njs_ext_console_time(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused);
static njs_int_t njs_ext_console_time_end(njs_vm_t *vm, njs_value_t *args,
njs_ext_console_dump,
0 },
- { njs_str("help"),
- NJS_EXTERN_METHOD,
- NULL,
- 0,
- NULL,
- NULL,
- NULL,
- NULL,
- njs_ext_console_help,
- 0 },
-
{ njs_str("time"),
NJS_EXTERN_METHOD,
NULL,
if (!opts->quiet) {
njs_printf("interactive njs %s\n\n", NJS_VERSION);
- njs_printf("v.<Tab> -> the properties and prototype methods of v.\n");
- njs_printf("type console.help() for more information\n\n");
+ njs_printf("v.<Tab> -> the properties and prototype methods of v.\n\n");
}
for ( ;; ) {
}
-static njs_int_t
-njs_ext_console_help(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
- njs_index_t unused)
-{
- const njs_object_init_t *obj, **objpp;
-
- njs_printf("VM built-in objects:\n");
-
- for (objpp = njs_constructor_init; *objpp != NULL; objpp++) {
- obj = *objpp;
-
- njs_printf(" %V\n", &obj->name);
- }
-
- for (objpp = njs_object_init; *objpp != NULL; objpp++) {
- obj = *objpp;
-
- njs_printf(" %V\n", &obj->name);
- }
-
- njs_printf("\nEmbedded objects:\n");
- njs_printf(" console\n");
-
- njs_printf("\n");
-
- njs_set_undefined(&vm->retval);
-
- return NJS_OK;
-}
-
-
static njs_int_t
njs_ext_console_time(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused)
const njs_object_init_t njs_string_constructor_init = {
- njs_str("String"),
njs_string_constructor_properties,
njs_nitems(njs_string_constructor_properties),
};
const njs_object_init_t njs_string_prototype_init = {
- njs_str("String"),
njs_string_prototype_properties,
njs_nitems(njs_string_prototype_properties),
};
const njs_object_init_t njs_string_instance_init = {
- njs_str("String instance"),
njs_string_instance_properties,
njs_nitems(njs_string_instance_properties),
};
expect -re "interactive njs \\d+\.\\d+\.\\d+\r\n\r"
expect "v.<Tab> -> the properties and prototype methods of v.\r
-type console.help() for more information\r
\r
>> "
"console.dump(1)\r\n1\r\nundefined\r\n>> "}
{"console.dump(1, 'a')\r\n"
"console.dump(1, 'a')\r\n1 a\r\nundefined\r\n>> "}
- {"console.help()\r\n"
- "console.help()\r\nVM built-in objects:"}
}
# console.time* functions