From 9499a075bc2a9bcbff66385c854e15b8a54126a9 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 1 Feb 2019 18:09:02 +0300 Subject: [PATCH] Fixed parsing object literals. --- njs/njs_parser.c | 15 ++++++++++----- njs/test/njs_unit_test.c | 12 ++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/njs/njs_parser.c b/njs/njs_parser.c index bd767a86..22de2110 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -2163,9 +2163,18 @@ njs_parser_object(njs_vm_t *vm, njs_parser_t *parser, njs_parser_node_t *obj) token = njs_parser_property_name(vm, parser, token); break; - default: + case NJS_TOKEN_NUMBER: + case NJS_TOKEN_STRING: + case NJS_TOKEN_ESCAPE_STRING: token = njs_parser_terminal(vm, parser, token); break; + + default: + return NJS_TOKEN_ILLEGAL; + } + + if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { + return token; } object = njs_parser_node_new(vm, parser, NJS_TOKEN_OBJECT_VALUE); @@ -2183,10 +2192,6 @@ njs_parser_object(njs_vm_t *vm, njs_parser_t *parser, njs_parser_node_t *obj) propref->left = object; propref->right = parser->node; - if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { - return token; - } - token = njs_parser_match(vm, parser, token, NJS_TOKEN_COLON); if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { return token; diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index dcf00916..95fae275 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -2816,6 +2816,18 @@ static njs_unit_test_t njs_test[] = { nxt_string("var o = Object.create({a:1}); o.a = 2; delete o.a; o.a"), nxt_string("1") }, + { nxt_string("njs.dump({break:1,3:2,'a':4,\"b\":2,true:1,null:0})"), + nxt_string("{break:1,3:2,a:4,b:2,true:1,null:0}") }, + + { nxt_string("var o1 = {a:1,b:2}, o2 = {c:3}; o1.a + o2.c"), + nxt_string("4") }, + + { nxt_string("({[]:1})"), + nxt_string("SyntaxError: Unexpected token \"[\" in 1") }, + + { nxt_string("({'AB\n\\cd':1})['AB\n\\cd']"), + nxt_string("1") }, + /* Inheritance. */ { nxt_string("function Foo() {this.bar = 10;}; Foo.prototype.bar = 42; " -- 2.47.3