details: https://hg.nginx.org/njs/rev/49f6f5c81a11 branches: changeset: 2204:49f6f5c81a11 user: Dmitry Volyntsev <xei...@nginx.com> date: Wed Sep 20 21:48:41 2023 -0700 description: Shell: introduced error, info and warn methods for console object.
diffstat: external/njs_shell.c | 74 ++++++++++++++++++++++++++++++++++++++++----------- test/shell_test.exp | 22 +++++++++----- 2 files changed, 72 insertions(+), 24 deletions(-) diffs (196 lines): diff -r 6a94953b4053 -r 49f6f5c81a11 external/njs_shell.c --- a/external/njs_shell.c Wed Sep 20 19:19:58 2023 -0700 +++ b/external/njs_shell.c Wed Sep 20 21:48:41 2023 -0700 @@ -122,7 +122,7 @@ static char *njs_completion_generator(co #endif static njs_int_t njs_ext_console_log(njs_vm_t *vm, njs_value_t *args, - njs_uint_t nargs, njs_index_t indent, njs_value_t *retval); + njs_uint_t nargs, njs_index_t magic, njs_value_t *retval); 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); static njs_int_t njs_ext_console_time_end(njs_vm_t *vm, njs_value_t *args, @@ -156,7 +156,33 @@ static njs_external_t njs_ext_console[] .enumerable = 1, .u.method = { .native = njs_ext_console_log, - .magic8 = 1, +#define NJS_LOG_DUMP 16 +#define NJS_LOG_MASK 15 + .magic8 = NJS_LOG_LEVEL_INFO | NJS_LOG_DUMP, + } + }, + + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("error"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = njs_ext_console_log, + .magic8 = NJS_LOG_LEVEL_ERROR, + } + }, + + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("info"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = njs_ext_console_log, + .magic8 = NJS_LOG_LEVEL_INFO, } }, @@ -168,6 +194,7 @@ static njs_external_t njs_ext_console[] .enumerable = 1, .u.method = { .native = njs_ext_console_log, + .magic8 = NJS_LOG_LEVEL_INFO, } }, @@ -201,6 +228,18 @@ static njs_external_t njs_ext_console[] } }, + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("warn"), + .writable = 1, + .configurable = 1, + .enumerable = 1, + .u.method = { + .native = njs_ext_console_log, + .magic8 = NJS_LOG_LEVEL_WARN, + } + }, + }; @@ -1337,30 +1376,28 @@ next: static njs_int_t njs_ext_console_log(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, - njs_index_t indent, njs_value_t *retval) + njs_index_t magic, njs_value_t *retval) { - njs_str_t msg; - njs_uint_t n; + njs_str_t msg; + njs_uint_t n; + njs_log_level_t level; n = 1; + level = (njs_log_level_t) magic & NJS_LOG_MASK; while (n < nargs) { - if (njs_vm_value_dump(vm, &msg, njs_argument(args, n), 1, indent) + if (njs_vm_value_dump(vm, &msg, njs_argument(args, n), 1, + !!(magic & NJS_LOG_DUMP)) == NJS_ERROR) { return NJS_ERROR; } - njs_vm_log(vm, "%s", (n != 1) ? " " : ""); - njs_vm_log(vm, "%*s", msg.length, msg.start); + njs_vm_logger(vm, level, "%*s\n", msg.length, msg.start); n++; } - if (nargs > 1) { - njs_vm_log(vm, "\n"); - } - njs_value_undefined_set(retval); return NJS_OK; @@ -1604,11 +1641,16 @@ static void njs_console_log(njs_vm_t *vm, njs_external_ptr_t external, njs_log_level_t level, const u_char *start, size_t length) { - if (level == NJS_LOG_LEVEL_ERROR) { - njs_stderror("%*s", length, start); - - } else { + switch (level) { + case NJS_LOG_LEVEL_INFO: njs_printf("%*s", length, start); + break; + case NJS_LOG_LEVEL_WARN: + njs_printf("W: %*s", length, start); + break; + case NJS_LOG_LEVEL_ERROR: + njs_printf("E: %*s", length, start); + break; } } diff -r 6a94953b4053 -r 49f6f5c81a11 test/shell_test.exp --- a/test/shell_test.exp Wed Sep 20 19:19:58 2023 -0700 +++ b/test/shell_test.exp Wed Sep 20 21:48:41 2023 -0700 @@ -252,9 +252,9 @@ njs_test { {"console.log(1)\r\n" "console.log(1)\r\n1\r\nundefined\r\n>> "} {"console.log(1, 'a')\r\n" - "console.log(1, 'a')\r\n1 a\r\nundefined\r\n>> "} + "console.log(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "} {"print(1, 'a')\r\n" - "print(1, 'a')\r\n1 a\r\nundefined\r\n>> "} + "print(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "} {"console.log('\\tабв\\nгд')\r\n" "console.log('\\\\tабв\\\\nгд')\r\n\tабв\r\nгд\r\nundefined\r\n>> "} {"console.dump()\r\n" @@ -262,7 +262,13 @@ njs_test { {"console.dump(1)\r\n" "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.dump(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "} + {"console.error(42)\r\n" + "console.error(42)\r\nE: 42\r\nundefined\r\n>> "} + {"console.info(23)\r\n" + "console.info(23)\r\n23\r\nundefined\r\n>> "} + {"console.warn(37)\r\n" + "console.warn(37)\r\nW: 37\r\nundefined\r\n>> "} } # console.time* functions @@ -307,9 +313,9 @@ njs_test { njs_test { {"var print = console.log.bind(console); print(1, 'a', [1, 2])\r\n" - "1 a \\\[1,2]\r\nundefined\r\n>> "} + "1\r\na\r\n\\\[1,2]\r\nundefined\r\n>> "} {"var print = console.dump.bind(console); print(1, 'a', [1, 2])\r\n" - "1 a \\\[\r\n 1,\r\n 2\r\n]\r\nundefined\r\n>> "} + "1\r\na\r\n\\\[\r\n 1,\r\n 2\r\n]\r\nundefined\r\n>> "} {"var print = console.log.bind(console); print(console.a.a)\r\n" "TypeError: cannot get property \"a\" of undefined"} {"print(console.a.a)\r\n" @@ -318,8 +324,8 @@ njs_test { # Backtraces for external objects njs_test { - {"console.log(console.a.a)\r\n" - "console.log(console.a.a)\r\nThrown:\r\nTypeError:*at console.log (native)"} + {"console.info(console.a.a)\r\n" + "console.info(console.a.a)\r\nThrown:\r\nTypeError:*at console.info (native)"} } # dumper @@ -400,7 +406,7 @@ njs_test { njs_test { {"var t = setImmediate(console.log, 'a', 'aa')\r\n" - "undefined\r\na aa"} + "undefined\r\na\r\naa"} } njs_test { _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel