diff --git a/src/libjsparser/parser.c b/src/libjsparser/parser.c index 2069673a3..329dba23e 100644 --- a/src/libjsparser/parser.c +++ b/src/libjsparser/parser.c @@ -890,8 +890,21 @@ parse_argument_list (argument_list_type alt, idx_t obj) STACK_PUSH (IDX, token_data ()); break; } - case AL_FUNC_EXPR: case AL_ARRAY_DECL: + { + if (token_is (TOK_COMMA)) + { + STACK_PUSH (IDX, next_temp_name ()); + DUMP_OPCODE_3 (assignment, ID(1), OPCODE_ARG_TYPE_SIMPLE, ECMA_SIMPLE_VALUE_UNDEFINED); + DUMP_OPCODE_3 (meta, OPCODE_META_TYPE_VARG, ID(1), INVALID_VALUE); + STACK_INCR_HEAD(U8, 1); + STACK_DROP (IDX, 1); + skip_newlines (); + continue; + } + /* FALLTHRU */ + } + case AL_FUNC_EXPR: case AL_CONSTRUCT_EXPR: { parse_assignment_expression (); diff --git a/src/liboptimizer/pretty-printer.c b/src/liboptimizer/pretty-printer.c index 6c55080be..961ed7aa9 100644 --- a/src/liboptimizer/pretty-printer.c +++ b/src/liboptimizer/pretty-printer.c @@ -156,6 +156,9 @@ dump_variable (idx_t id) case ECMA_SIMPLE_VALUE_TRUE: \ __printf ("true"); \ break; \ + case ECMA_SIMPLE_VALUE_UNDEFINED: \ + __printf ("undefined"); \ + break; \ default: \ JERRY_UNREACHABLE (); \ } \ diff --git a/tests/jerry/array.js b/tests/jerry/array.js index 31ad7a658..880e7b857 100644 --- a/tests/jerry/array.js +++ b/tests/jerry/array.js @@ -71,3 +71,9 @@ assert(Array.prototype.length === 0); Array.prototype[0] = 'string value'; assert(Array.prototype.length === 1); assert(Array.prototype[0] === 'string value'); + +var c = [0,,,'3']; +assert (c[0] === 0); +assert (c[1] === undefined); +assert (c[2] === undefined); +assert (c[3] === '3');