From: Dmitry Volyntsev Date: Tue, 3 Apr 2018 10:56:54 +0000 (+0300) Subject: Added global njs object. X-Git-Tag: 0.2.0~1 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=92c408a6230edaa1aa176d8ff27d22d2ef69b6a0;p=njs.git Added global njs object. --- diff --git a/njs/njs_builtin.c b/njs/njs_builtin.c index a9c25d2e..1e1b668a 100644 --- a/njs/njs_builtin.c +++ b/njs/njs_builtin.c @@ -50,9 +50,11 @@ static nxt_array_t *njs_vm_expression_completions(njs_vm_t *vm, nxt_str_t *expression); static nxt_array_t *njs_object_completions(njs_vm_t *vm, njs_object_t *object); +const njs_object_init_t njs_njs_object_init; const njs_object_init_t *njs_object_init[] = { NULL, /* global this */ + &njs_njs_object_init, /* global njs object */ &njs_math_object_init, /* Math */ &njs_json_object_init, /* JSON */ }; @@ -1086,3 +1088,20 @@ njs_builtin_match_native_function(njs_vm_t *vm, njs_function_t *function, return NXT_DECLINED; } + + +static const njs_object_prop_t njs_njs_object_properties[] = +{ + { + .type = NJS_PROPERTY, + .name = njs_string("version"), + .value = njs_string(NJS_VERSION), + }, +}; + + +const njs_object_init_t njs_njs_object_init = { + nxt_string("njs"), + njs_njs_object_properties, + nxt_nitems(njs_njs_object_properties), +}; diff --git a/njs/njs_generator.c b/njs/njs_generator.c index 7e73a1a2..cc3ee547 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -307,6 +307,7 @@ njs_generator(njs_vm_t *vm, njs_parser_t *parser, njs_parser_node_t *node) return njs_generate_name(vm, parser, node); case NJS_TOKEN_GLOBAL_THIS: + case NJS_TOKEN_NJS: case NJS_TOKEN_MATH: case NJS_TOKEN_JSON: case NJS_TOKEN_EVAL: diff --git a/njs/njs_lexer_keyword.c b/njs/njs_lexer_keyword.c index 87236955..939bde29 100644 --- a/njs/njs_lexer_keyword.c +++ b/njs/njs_lexer_keyword.c @@ -68,6 +68,7 @@ static const njs_keyword_t njs_keywords[] = { /* Builtin objects. */ { nxt_string("this"), NJS_TOKEN_THIS, 0 }, + { nxt_string("njs"), NJS_TOKEN_NJS, 0 }, { nxt_string("Math"), NJS_TOKEN_MATH, 0 }, { nxt_string("JSON"), NJS_TOKEN_JSON, 0 }, diff --git a/njs/njs_parser.c b/njs/njs_parser.c index 7b33e7e7..3b010430 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -1989,6 +1989,7 @@ njs_parser_terminal(njs_vm_t *vm, njs_parser_t *parser, njs_token_t token) /* Fall through. */ + case NJS_TOKEN_NJS: case NJS_TOKEN_MATH: case NJS_TOKEN_JSON: return njs_parser_builtin_object(vm, parser, node); diff --git a/njs/njs_parser.h b/njs/njs_parser.h index c2a33db4..6d1b261d 100644 --- a/njs/njs_parser.h +++ b/njs/njs_parser.h @@ -165,6 +165,7 @@ typedef enum { #define NJS_TOKEN_FIRST_OBJECT NJS_TOKEN_GLOBAL_THIS NJS_TOKEN_GLOBAL_THIS, + NJS_TOKEN_NJS, NJS_TOKEN_MATH, NJS_TOKEN_JSON, diff --git a/njs/njs_vm.h b/njs/njs_vm.h index 6d605c43..c182ddd7 100644 --- a/njs/njs_vm.h +++ b/njs/njs_vm.h @@ -870,6 +870,7 @@ enum njs_constructor_e { enum njs_object_e { NJS_OBJECT_THIS = 0, + NJS_OBJECT_NJS, NJS_OBJECT_MATH, NJS_OBJECT_JSON, #define NJS_OBJECT_MAX (NJS_OBJECT_JSON + 1) diff --git a/njs/test/njs_expect_test.exp b/njs/test/njs_expect_test.exp index ba91edc7..ce61f379 100644 --- a/njs/test/njs_expect_test.exp +++ b/njs/test/njs_expect_test.exp @@ -23,6 +23,11 @@ type console.help() for more information\r expect eof } +njs_test { + {"njs.version\r\n" + "njs.version\r\n\*\.\*\.\*"} +} + # simple multi line interation njs_test { {"var a = 1\r\n" diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 900074c1..88f40e37 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -5741,6 +5741,9 @@ static njs_unit_test_t njs_test[] = { nxt_string("this"), nxt_string("[object Object]") }, + { nxt_string("njs"), + nxt_string("[object Object]") }, + { nxt_string("var o = Object(); o"), nxt_string("[object Object]") },