*/
-#include <njs_main.h>
+#include <njs.h>
+#include <njs_unix.h>
+#include <njs_time.h>
+#include <njs_arr.h>
+#include <njs_queue.h>
+#include <njs_rbtree.h>
+#include <njs_lvlhsh.h>
+#include <njs_djb_hash.h>
#if (!defined NJS_FUZZER_TARGET && defined NJS_HAVE_READLINE)
typedef struct {
- njs_value_t name;
+ njs_opaque_value_t name;
uint64_t time;
} njs_timelabel_t;
if (vm != NULL) {
command.start = (u_char *) opts.command;
command.length = njs_strlen(opts.command);
- ret = njs_process_script(vm, vm->external, &command);
+ ret = njs_process_script(vm, njs_vm_external_ptr(vm), &command);
njs_vm_destroy(vm);
}
switch (*p) {
case '?':
case 'h':
- (void) write(STDOUT_FILENO, help, njs_length(help));
+ njs_printf("%*s", njs_length(help), help);
return ret;
case 'a':
static njs_int_t
njs_externals_init(njs_vm_t *vm)
{
- njs_int_t ret;
- njs_value_t *value, method;
- njs_console_t *console;
+ njs_int_t ret;
+ njs_value_t *value;
+ njs_console_t *console;
+ njs_opaque_value_t method;
static const njs_str_t console_name = njs_str("console");
static const njs_str_t print_name = njs_str("print");
static const njs_str_t console_log = njs_str("console.log");
- console = vm->options.external;
+ console = njs_vm_options(vm)->external;
njs_console_proto_id = njs_vm_external_prototype(vm, njs_ext_console,
njs_nitems(njs_ext_console));
return NJS_ERROR;
}
- value = njs_mp_zalloc(vm->mem_pool, sizeof(njs_opaque_value_t));
+ value = njs_mp_zalloc(njs_vm_memory_pool(vm), sizeof(njs_opaque_value_t));
if (njs_slow_path(value == NULL)) {
return NJS_ERROR;
}
return NJS_ERROR;
}
- ret = njs_vm_value(vm, &console_log, &method);
+ ret = njs_vm_value(vm, &console_log, njs_value_arg(&method));
if (njs_slow_path(ret != NJS_OK)) {
return NJS_ERROR;
}
- ret = njs_vm_bind(vm, &print_name, &method, 0);
+ ret = njs_vm_bind(vm, &print_name, njs_value_arg(&method), 0);
if (njs_slow_path(ret != NJS_OK)) {
return NJS_ERROR;
}
return;
}
- if (vm->options.interactive) {
+ if (njs_vm_options(vm)->interactive) {
njs_print(out.start, out.length);
njs_print("\n", 1);
}
static njs_int_t
njs_process_script(njs_vm_t *vm, void *runtime, const njs_str_t *script)
{
- u_char *start, *end;
- njs_int_t ret;
- njs_value_t retval;
+ u_char *start, *end;
+ njs_int_t ret;
+ njs_opaque_value_t retval;
start = script->start;
end = start + script->length;
if (ret == NJS_OK) {
if (start == end) {
- ret = njs_vm_start(vm, &retval);
+ ret = njs_vm_start(vm, njs_value_arg(&retval));
} else {
njs_vm_error(vm, "Extra characters at the end of the script");
}
}
- njs_process_output(vm, &retval, ret);
+ njs_process_output(vm, njs_value_arg(&retval), ret);
- if (!vm->options.interactive && ret == NJS_ERROR) {
+ if (!njs_vm_options(vm)->interactive && ret == NJS_ERROR) {
return NJS_ERROR;
}
ret = njs_vm_run(vm);
if (ret == NJS_ERROR) {
- njs_process_output(vm, &retval, ret);
+ njs_process_output(vm, njs_value_arg(&retval), ret);
- if (!vm->options.interactive) {
+ if (!njs_vm_options(vm)->interactive) {
return NJS_ERROR;
}
}
njs_vm_log(vm, "\n");
}
- njs_set_undefined(retval);
+ njs_value_undefined_set(retval);
return NJS_OK;
}
-static const njs_value_t njs_default_label = njs_string("default");
-
-
static njs_int_t
njs_ext_console_time(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused, njs_value_t *retval)
njs_timelabel_t *label;
njs_lvlhsh_query_t lhq;
+ static const njs_str_t default_label = njs_str("default");
+
console = njs_vm_external(vm, njs_console_proto_id, njs_argument(args, 0));
if (njs_slow_path(console == NULL)) {
- njs_type_error(vm, "external value is expected");
+ njs_vm_error(vm, "external value is expected");
return NJS_ERROR;
}
- value = njs_arg(args, nargs, 1);
+ name = default_label;
- if (njs_slow_path(!njs_is_string(value))) {
- if (njs_is_undefined(value)) {
- value = njs_value_arg(&njs_default_label);
+ value = njs_arg(args, nargs, 1);
- } else {
+ if (njs_slow_path(!njs_value_is_string(value))) {
+ if (!njs_value_is_undefined(value)) {
ret = njs_value_to_string(vm, value, value);
if (njs_slow_path(ret != NJS_OK)) {
return ret;
}
+
+ njs_value_string_get(value, &name);
}
- }
- njs_string_get(value, &name);
+ } else {
+ njs_value_string_get(value, &name);
+ }
- label = njs_mp_alloc(vm->mem_pool, sizeof(njs_timelabel_t));
+ label = njs_mp_alloc(njs_vm_memory_pool(vm), sizeof(njs_timelabel_t));
if (njs_slow_path(label == NULL)) {
- njs_memory_error(vm);
+ njs_vm_memory_error(vm);
return NJS_ERROR;
}
lhq.key = name;
lhq.key_hash = njs_djb_hash(name.start, name.length);
lhq.value = label;
- lhq.pool = vm->mem_pool;
+ lhq.pool = njs_vm_memory_pool(vm);
lhq.proto = &njs_timelabel_hash_proto;
ret = njs_lvlhsh_insert(&console->labels, &lhq);
if (njs_fast_path(ret == NJS_OK)) {
- /* GC: retain. */
- label->name = *value;
+ (void) njs_vm_value_string_set(vm, njs_value_arg(&label->name),
+ name.start, name.length);
} else {
- njs_mp_free(vm->mem_pool, label);
+ njs_mp_free(njs_vm_memory_pool(vm), label);
if (njs_slow_path(ret == NJS_ERROR)) {
- njs_internal_error(vm, "lvlhsh insert failed");
+ njs_vm_error(vm, "lvlhsh insert failed");
return NJS_ERROR;
}
label->time = njs_time();
- njs_set_undefined(retval);
+ njs_value_undefined_set(retval);
return NJS_OK;
}
njs_timelabel_t *label;
njs_lvlhsh_query_t lhq;
+ static const njs_str_t default_label = njs_str("default");
+
ns = njs_time();
console = njs_vm_external(vm, njs_console_proto_id, njs_argument(args, 0));
if (njs_slow_path(console == NULL)) {
- njs_type_error(vm, "external value is expected");
+ njs_vm_error(vm, "external value is expected");
return NJS_ERROR;
}
- value = njs_arg(args, nargs, 1);
+ name = default_label;
- if (njs_slow_path(!njs_is_string(value))) {
- if (njs_is_undefined(value)) {
- value = njs_value_arg(&njs_default_label);
+ value = njs_arg(args, nargs, 1);
- } else {
+ if (njs_slow_path(!njs_value_is_string(value))) {
+ if (!njs_value_is_undefined(value)) {
ret = njs_value_to_string(vm, value, value);
if (njs_slow_path(ret != NJS_OK)) {
return ret;
}
+
+ njs_value_string_get(value, &name);
}
- }
- njs_string_get(value, &name);
+ } else {
+ njs_value_string_get(value, &name);
+ }
lhq.key = name;
lhq.key_hash = njs_djb_hash(name.start, name.length);
- lhq.pool = vm->mem_pool;
+ lhq.pool = njs_vm_memory_pool(vm);
lhq.proto = &njs_timelabel_hash_proto;
ret = njs_lvlhsh_delete(&console->labels, &lhq);
njs_vm_log(vm, "%V: %uL.%06uLms\n", &name, ms, ns);
/* GC: release. */
- njs_mp_free(vm->mem_pool, label);
+ njs_mp_free(njs_vm_memory_pool(vm), label);
} else {
if (ret == NJS_ERROR) {
- njs_internal_error(vm, "lvlhsh delete failed");
+ njs_vm_error(vm, "lvlhsh delete failed");
return NJS_ERROR;
}
njs_vm_log(vm, "Timer \"%V\" doesn’t exist.\n", &name);
}
- njs_set_undefined(retval);
+ njs_value_undefined_set(retval);
return NJS_OK;
}
return NULL;
}
- ev = njs_mp_alloc(vm->mem_pool, sizeof(njs_ev_t));
+ ev = njs_mp_alloc(njs_vm_memory_pool(vm), sizeof(njs_ev_t));
if (njs_slow_path(ev == NULL)) {
return NULL;
}
lhq.replace = 0;
lhq.value = ev;
lhq.proto = &lvlhsh_proto;
- lhq.pool = vm->mem_pool;
+ lhq.pool = njs_vm_memory_pool(vm);
ret = njs_lvlhsh_insert(&console->events, &lhq);
if (njs_slow_path(ret != NJS_OK)) {
lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);
lhq.proto = &lvlhsh_proto;
- lhq.pool = vm->mem_pool;
+ lhq.pool = njs_vm_memory_pool(vm);
if (ev->link.prev != NULL) {
njs_queue_remove(&ev->link);
njs_vm_err(vm, "njs_lvlhsh_delete() failed\n");
}
- njs_mp_free(vm->mem_pool, ev);
+ njs_mp_free(njs_vm_memory_pool(vm), ev);
}
static njs_int_t
njs_timelabel_hash_test(njs_lvlhsh_query_t *lhq, void *data)
{
- njs_timelabel_t *label;
njs_str_t str;
+ njs_timelabel_t *label;
label = data;
- njs_string_get(&label->name, &str);
+ njs_value_string_get(njs_value_arg(&label->name), &str);
if (njs_strstr_eq(&lhq->key, &str)) {
return NJS_OK;