From 6d7662f846e031ac52d609dc69349a1816d8e100 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 17 Feb 2021 14:45:54 +0100 Subject: syntax: support ES2015 shorthand property names Signed-off-by: Jo-Philipp Wich --- compiler.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'compiler.c') diff --git a/compiler.c b/compiler.c index e1e9f06..0256736 100644 --- a/compiler.c +++ b/compiler.c @@ -1648,10 +1648,23 @@ uc_compiler_compile_object(uc_compiler *compiler, bool assignable) uc_compiler_emit_constant(compiler, compiler->parser->prev.pos, compiler->parser->prev.val); - uc_compiler_parse_consume(compiler, TK_COLON); + /* If the property name is a plain label followed by a comma or + * closing curly brace, treat it as ES2015 property shorthand + * notation... */ + if (compiler->parser->prev.type == TK_LABEL && + (uc_compiler_parse_check(compiler, TK_COMMA) || + uc_compiler_parse_check(compiler, TK_RBRACE))) { + uc_compiler_emit_variable_rw(compiler, + compiler->parser->prev.val, 0); + } - /* parse value expression */ - uc_compiler_parse_precedence(compiler, P_ASSIGN); + /* ... otherwise treat it as ordinary `key: value` tuple */ + else { + uc_compiler_parse_consume(compiler, TK_COLON); + + /* parse value expression */ + uc_compiler_parse_precedence(compiler, P_ASSIGN); + } /* set items on stack so far... */ if (len >= 0xfffffffe) { -- cgit v1.2.3