From: Dmitry Volyntsev Date: Wed, 7 Nov 2018 15:41:29 +0000 (+0300) Subject: njs_vm_run() is simplified. X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=21c150fa99c6e8562d0793a53afe3ae92c7c07f4;p=njs.git njs_vm_run() is simplified. --- diff --git a/njs/njs.c b/njs/njs.c index 4e789bb3..e687ebdc 100644 --- a/njs/njs.c +++ b/njs/njs.c @@ -183,8 +183,6 @@ njs_vm_create(njs_vm_opt_t *options) if (nxt_slow_path(ret != NXT_OK)) { return NULL; } - - vm->retval = njs_value_void; } } @@ -283,6 +281,13 @@ njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end) vm->scope_size = parser->scope_size; vm->variables_hash = parser->scope->variables; + if (vm->options.init) { + ret = njs_vm_init(vm); + if (nxt_slow_path(ret != NXT_OK)) { + return ret; + } + } + return NJS_OK; fail: @@ -360,8 +365,6 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external) goto fail; } - nvm->retval = njs_value_void; - return nvm; } @@ -436,6 +439,10 @@ njs_vm_init(njs_vm_t *vm) vm->trace.handler = njs_parser_trace_handler; vm->trace.data = vm; + if (njs_is_null(&vm->retval)) { + vm->retval = njs_value_void; + } + return NXT_OK; } @@ -558,12 +565,9 @@ njs_vm_post_event(njs_vm_t *vm, njs_vm_event_t vm_event, nxt_int_t njs_vm_run(njs_vm_t *vm) { - nxt_str_t s; nxt_int_t ret; - nxt_thread_log_debug("RUN:"); - - if (vm->backtrace != NULL) { + if (nxt_slow_path(vm->backtrace != NULL)) { nxt_array_reset(vm->backtrace); } @@ -573,42 +577,15 @@ njs_vm_run(njs_vm_t *vm) ret = njs_vm_handle_events(vm); } - if (nxt_slow_path(ret == NXT_AGAIN)) { - nxt_thread_log_debug("VM: AGAIN"); - return ret; - } + switch (ret) { + case NJS_STOP: + return NJS_OK; - if (nxt_slow_path(ret != NJS_STOP)) { - nxt_thread_log_debug("VM: ERROR"); + case NXT_AGAIN: + case NXT_ERROR: + default: return ret; } - - if (vm->retval.type == NJS_NUMBER) { - nxt_thread_log_debug("VM: %f", vm->retval.data.u.number); - - } else if (vm->retval.type == NJS_BOOLEAN) { - nxt_thread_log_debug("VM: boolean: %d", vm->retval.data.truth); - - } else if (vm->retval.type == NJS_STRING) { - - if (njs_vm_value_to_ext_string(vm, &s, &vm->retval, 0) == NJS_OK) { - nxt_thread_log_debug("VM: '%V'", &s); - } - - } else if (vm->retval.type == NJS_FUNCTION) { - nxt_thread_log_debug("VM: function"); - - } else if (vm->retval.type == NJS_NULL) { - nxt_thread_log_debug("VM: null"); - - } else if (vm->retval.type == NJS_VOID) { - nxt_thread_log_debug("VM: void"); - - } else { - nxt_thread_log_debug("VM: unknown: %d", vm->retval.type); - } - - return NJS_OK; } diff --git a/njs/njs.h b/njs/njs.h index 11c7c5d6..76bfa224 100644 --- a/njs/njs.h +++ b/njs/njs.h @@ -143,6 +143,7 @@ typedef struct { njs_vm_ops_t *ops; uint8_t trailer; /* 1 bit */ + uint8_t init; /* 1 bit */ uint8_t accumulative; /* 1 bit */ uint8_t backtrace; /* 1 bit */ uint8_t sandbox; /* 1 bit */ diff --git a/njs/njs_shell.c b/njs/njs_shell.c index 9de2ef8e..4f03d904 100644 --- a/njs/njs_shell.c +++ b/njs/njs_shell.c @@ -145,6 +145,7 @@ main(int argc, char **argv) nxt_memzero(&vm_options, sizeof(njs_vm_opt_t)); + vm_options.init = !opts.interactive; vm_options.accumulative = opts.interactive; vm_options.backtrace = 1; vm_options.sandbox = opts.sandbox;