https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8dba275bd6f1e61a8d2c4f68529db60cb532bf41

commit 8dba275bd6f1e61a8d2c4f68529db60cb532bf41
Author:     Amine Khaldi <[email protected]>
AuthorDate: Sat Mar 17 13:11:29 2018 +0100
Commit:     Amine Khaldi <[email protected]>
CommitDate: Sat Mar 17 13:11:29 2018 +0100

    [JSCRIPT] Sync with Wine Staging 3.3. CORE-14434
---
 dll/win32/jscript/CMakeLists.txt  |   4 +-
 dll/win32/jscript/activex.c       |   9 +-
 dll/win32/jscript/array.c         | 107 ++++++++-
 dll/win32/jscript/bool.c          |   6 +
 dll/win32/jscript/cc_parser.tab.c | 144 ++++++-----
 dll/win32/jscript/cc_parser.tab.h |  82 +++++++
 dll/win32/jscript/cc_parser.y     |   6 +
 dll/win32/jscript/compile.c       |  33 ++-
 dll/win32/jscript/date.c          |  45 +++-
 dll/win32/jscript/decode.c        |   4 +
 dll/win32/jscript/dispex.c        |  20 +-
 dll/win32/jscript/engine.c        |  54 +++--
 dll/win32/jscript/engine.h        |   3 +-
 dll/win32/jscript/error.c         |   9 +
 dll/win32/jscript/function.c      |   7 +
 dll/win32/jscript/global.c        |  10 +
 dll/win32/jscript/jscript.c       |  16 +-
 dll/win32/jscript/jscript.h       |  81 +++----
 dll/win32/jscript/jscript_main.c  |  18 +-
 dll/win32/jscript/json.c          |  28 ++-
 dll/win32/jscript/jsregexp.c      |   7 +
 dll/win32/jscript/jsstr.c         |   4 +
 dll/win32/jscript/jsutils.c       |  10 +
 dll/win32/jscript/jsval.h         |   2 +-
 dll/win32/jscript/lex.c           |  14 ++
 dll/win32/jscript/math.c          |  11 +-
 dll/win32/jscript/number.c        |   7 +
 dll/win32/jscript/object.c        |   6 +
 dll/win32/jscript/parser.tab.c    | 490 +++++++++++++++++++-------------------
 dll/win32/jscript/parser.tab.h    |   8 +-
 dll/win32/jscript/parser.y        |   6 +
 dll/win32/jscript/precomp.h       |  24 ++
 dll/win32/jscript/regexp.c        |   7 +
 dll/win32/jscript/resource.h      |   2 +
 dll/win32/jscript/rsrc.rc         |   2 -
 dll/win32/jscript/string.c        |   8 +
 dll/win32/jscript/vbarray.c       |   4 +
 media/doc/README.WINE             |   2 +-
 38 files changed, 853 insertions(+), 447 deletions(-)

diff --git a/dll/win32/jscript/CMakeLists.txt b/dll/win32/jscript/CMakeLists.txt
index 01dc2daa5b..5551ee74a1 100644
--- a/dll/win32/jscript/CMakeLists.txt
+++ b/dll/win32/jscript/CMakeLists.txt
@@ -33,7 +33,7 @@ list(APPEND SOURCE
     regexp.c
     string.c
     vbarray.c
-    jscript.h)
+    precomp.h)
 
 list(APPEND jscript_rc_deps
     ${CMAKE_CURRENT_SOURCE_DIR}/jscript.rgs
@@ -54,5 +54,5 @@ add_dependencies(jscript jscript_idlheader stdole2)
 set_module_type(jscript win32dll)
 target_link_libraries(jscript uuid wine)
 add_importlibs(jscript user32 ole32 oleaut32 advapi32 msvcrt kernel32 ntdll)
-add_pch(jscript jscript.h SOURCE)
+add_pch(jscript precomp.h SOURCE)
 add_cd_file(TARGET jscript DESTINATION reactos/system32 FOR all)
diff --git a/dll/win32/jscript/activex.c b/dll/win32/jscript/activex.c
index 0bdf80e976..c7d9a66911 100644
--- a/dll/win32/jscript/activex.c
+++ b/dll/win32/jscript/activex.c
@@ -16,9 +16,16 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
 #include "jscript.h"
+#include "objsafe.h"
+#include "mshtmhst.h"
+
+#include "wine/debug.h"
 
-#include <mshtmhst.h>
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 /* Defined as extern in urlmon.idl, but not exported by uuid.lib */
 const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
diff --git a/dll/win32/jscript/array.c b/dll/win32/jscript/array.c
index 4fb70a3b76..fcccdd61f3 100644
--- a/dll/win32/jscript/array.c
+++ b/dll/win32/jscript/array.c
@@ -16,8 +16,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 typedef struct {
     jsdisp_t dispex;
 
@@ -37,6 +47,7 @@ static const WCHAR spliceW[] = {'s','p','l','i','c','e',0};
 static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
 static const WCHAR toLocaleStringW[] = 
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
 static const WCHAR unshiftW[] = {'u','n','s','h','i','f','t',0};
+static const WCHAR indexOfW[] = {'i','n','d','e','x','O','f',0};
 
 static const WCHAR default_separatorW[] = {',',0};
 
@@ -377,9 +388,10 @@ static HRESULT Array_pop(script_ctx_t *ctx, vdisp_t 
*vthis, WORD flags, unsigned
     hres = jsdisp_get_idx(jsthis, length, &val);
     if(SUCCEEDED(hres))
         hres = jsdisp_delete_idx(jsthis, length);
-    else if(hres == DISP_E_UNKNOWNNAME)
+    else if(hres == DISP_E_UNKNOWNNAME) {
         val = jsval_undefined();
-    else
+        hres = S_OK;
+    }else
         return hres;
 
     if(SUCCEEDED(hres))
@@ -938,6 +950,61 @@ static HRESULT Array_toLocaleString(script_ctx_t *ctx, 
vdisp_t *vthis, WORD flag
     return E_NOTIMPL;
 }
 
+static HRESULT Array_indexOf(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, 
unsigned argc, jsval_t *argv,
+        jsval_t *r)
+{
+    jsdisp_t *jsthis;
+    unsigned length, i, from = 0;
+    jsval_t search, value;
+    BOOL eq;
+    HRESULT hres;
+
+    TRACE("\n");
+
+    hres = get_length(ctx, vthis, &jsthis, &length);
+    if(FAILED(hres))
+        return hres;
+    if(!length) {
+        if(r) *r = jsval_number(-1);
+        return S_OK;
+    }
+
+    search = argc ? argv[0] : jsval_undefined();
+
+    if(argc > 1) {
+        double from_arg;
+
+        hres = to_integer(ctx, argv[1], &from_arg);
+        if(FAILED(hres))
+            return hres;
+
+        if(from_arg >= 0)
+            from = min(from_arg, length);
+        else
+            from = max(from_arg + length, 0);
+    }
+
+    for(i = from; i < length; i++) {
+        hres = jsdisp_get_idx(jsthis, i, &value);
+        if(hres == DISP_E_UNKNOWNNAME)
+            continue;
+        if(FAILED(hres))
+            return hres;
+
+        hres = jsval_strict_equal(value, search, &eq);
+        jsval_release(value);
+        if(FAILED(hres))
+            return hres;
+        if(eq) {
+            if(r) *r = jsval_number(i);
+            return S_OK;
+        }
+    }
+
+    if(r) *r = jsval_number(-1);
+    return S_OK;
+}
+
 /* ECMA-262 3rd Edition    15.4.4.13 */
 static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, 
unsigned argc, jsval_t *argv,
         jsval_t *r)
@@ -1036,6 +1103,7 @@ static void Array_on_put(jsdisp_t *dispex, const WCHAR 
*name)
 
 static const builtin_prop_t Array_props[] = {
     {concatW,                Array_concat,               PROPF_METHOD|1},
+    {indexOfW,               Array_indexOf,              
PROPF_ES5|PROPF_METHOD|1},
     {joinW,                  Array_join,                 PROPF_METHOD|1},
     {lengthW,                NULL,0,                     Array_get_length, 
Array_set_length},
     {popW,                   Array_pop,                  PROPF_METHOD},
@@ -1072,6 +1140,24 @@ static const builtin_info_t ArrayInst_info = {
     Array_on_put
 };
 
+/* ECMA-262 5.1 Edition    15.4.3.2 */
+static HRESULT ArrayConstr_isArray(script_ctx_t *ctx, vdisp_t *vthis, WORD 
flags, unsigned argc, jsval_t *argv, jsval_t *r)
+{
+    jsdisp_t *obj;
+
+    TRACE("\n");
+
+    if(!argc || !is_object_instance(argv[0])) {
+        if(r) *r = jsval_bool(FALSE);
+        return S_OK;
+    }
+
+    obj = iface_to_jsdisp(get_object(argv[0]));
+    if(r) *r = jsval_bool(obj && is_class(obj, JSCLASS_ARRAY));
+    if(obj) jsdisp_release(obj);
+    return S_OK;
+}
+
 static HRESULT ArrayConstr_value(script_ctx_t *ctx, vdisp_t *vthis, WORD 
flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
@@ -1146,6 +1232,21 @@ static HRESULT alloc_array(script_ctx_t *ctx, jsdisp_t 
*object_prototype, ArrayI
     return S_OK;
 }
 
+static const WCHAR isArrayW[] = {'i','s','A','r','r','a','y',0};
+
+static const builtin_prop_t ArrayConstr_props[] = {
+    {isArrayW,    ArrayConstr_isArray,    PROPF_ES5|PROPF_METHOD|1}
+};
+
+static const builtin_info_t ArrayConstr_info = {
+    JSCLASS_FUNCTION,
+    DEFAULT_FUNCTION_VALUE,
+    sizeof(ArrayConstr_props)/sizeof(*ArrayConstr_props),
+    ArrayConstr_props,
+    NULL,
+    NULL
+};
+
 HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, 
jsdisp_t **ret)
 {
     ArrayInstance *array;
@@ -1157,7 +1258,7 @@ HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t 
*object_prototype, jsdis
     if(FAILED(hres))
         return hres;
 
-    hres = create_builtin_constructor(ctx, ArrayConstr_value, ArrayW, NULL, 
PROPF_CONSTR|1, &array->dispex, ret);
+    hres = create_builtin_constructor(ctx, ArrayConstr_value, ArrayW, 
&ArrayConstr_info, PROPF_CONSTR|1, &array->dispex, ret);
 
     jsdisp_release(&array->dispex);
     return hres;
diff --git a/dll/win32/jscript/bool.c b/dll/win32/jscript/bool.c
index f7e8df2fce..75c98c2403 100644
--- a/dll/win32/jscript/bool.c
+++ b/dll/win32/jscript/bool.c
@@ -17,8 +17,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 typedef struct {
     jsdisp_t dispex;
 
diff --git a/dll/win32/jscript/cc_parser.tab.c 
b/dll/win32/jscript/cc_parser.tab.c
index 264d0719b7..2e46c11953 100644
--- a/dll/win32/jscript/cc_parser.tab.c
+++ b/dll/win32/jscript/cc_parser.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.0"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -70,15 +70,23 @@
 /* Copy the first part of user declarations.  */
 #line 19 "cc_parser.y" /* yacc.c:339  */
 
+
 #include "jscript.h"
+#include "engine.h"
+#include "parser.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 
 #line 84 "cc_parser.tab.c" /* yacc.c:339  */
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -90,7 +98,10 @@
 # define YYERROR_VERBOSE 0
 #endif
 
-
+/* In a future release of Bison, this section will be replaced
+   by #include "cc_parser.tab.h".  */
+#ifndef 
YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
+# define 
YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -128,7 +139,7 @@ union YYSTYPE
 
     ccval_t ccval;
 
-#line 140 "cc_parser.tab.c" /* yacc.c:355  */
+#line 143 "cc_parser.tab.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -138,7 +149,7 @@ union YYSTYPE
 
 int cc_parser_parse (parser_ctx_t *ctx);
 
-
+#endif /* 
!YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 #line 47 "cc_parser.y" /* yacc.c:358  */
@@ -235,7 +246,7 @@ static int cc_parser_lex(void *lval, parser_ctx_t *ctx)
 }
 
 
-#line 247 "cc_parser.tab.c" /* yacc.c:358  */
+#line 250 "cc_parser.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -292,30 +303,11 @@ typedef short int yytype_int16;
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#  define __attribute__(Spec) /* empty */
 # endif
 #endif
 
@@ -553,7 +545,7 @@ static const char *const yytname[] =
   "CCBitwiseORExpression", "CCBitwiseXORExpression",
   "CCBitwiseANDExpression", "CCEqualityExpression",
   "CCRelationalExpression", "CCShiftExpression", "CCAdditiveExpression",
-  "CCMultiplicativeExpression", YY_NULLPTR
+  "CCMultiplicativeExpression", YY_NULL
 };
 #endif
 
@@ -955,11 +947,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1016,7 +1008,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, 
yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, 
yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -1355,233 +1347,233 @@ yyreduce:
         case 2:
 #line 146 "cc_parser.y" /* yacc.c:1646  */
     { ctx->ccval = (yyvsp[0].ccval); YYACCEPT; }
-#line 1367 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1351 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 3:
 #line 149 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1373 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1357 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 4:
 #line 150 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[-1].ccval); }
-#line 1379 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1363 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 5:
 #line 151 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(!get_ccbool((yyvsp[0].ccval))); }
-#line 1385 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1369 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 6:
 #line 152 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'~' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1391 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1375 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 7:
 #line 153 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'+' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1397 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1381 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 8:
 #line 154 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'-' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1403 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1387 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 9:
 #line 157 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1409 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1393 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 10:
 #line 159 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'||' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1415 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1399 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 11:
 #line 162 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1421 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1405 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 12:
 #line 164 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'&&' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1427 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1411 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 13:
 #line 167 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1433 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1417 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 14:
 #line 169 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'|' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1439 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1423 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 15:
 #line 172 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1445 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1429 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 16:
 #line 174 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'^' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1451 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1435 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 17:
 #line 177 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1457 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1441 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 18:
 #line 179 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'&' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1463 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1447 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 19:
 #line 182 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1469 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1453 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 20:
 #line 184 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) == 
get_ccnum((yyvsp[0].ccval))); }
-#line 1475 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1459 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 21:
 #line 186 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) != 
get_ccnum((yyvsp[0].ccval))); }
-#line 1481 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1465 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 22:
 #line 188 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'===' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1487 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1471 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 23:
 #line 190 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'!==' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1493 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1477 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 24:
 #line 193 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1499 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1483 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 25:
 #line 195 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) < 
get_ccnum((yyvsp[0].ccval))); }
-#line 1505 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1489 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 26:
 #line 197 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) <= 
get_ccnum((yyvsp[0].ccval))); }
-#line 1511 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1495 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 27:
 #line 199 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) > 
get_ccnum((yyvsp[0].ccval))); }
-#line 1517 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1501 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 28:
 #line 201 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_bool(get_ccnum((yyvsp[-2].ccval)) >= 
get_ccnum((yyvsp[0].ccval))); }
-#line 1523 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1507 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 29:
 #line 204 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1529 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1513 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 30:
 #line 206 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'<<' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1535 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1519 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 31:
 #line 208 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1541 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1525 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 32:
 #line 210 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'>>>' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1547 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1531 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 33:
 #line 213 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1553 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1537 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 34:
 #line 215 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) + 
get_ccnum((yyvsp[0].ccval))); }
-#line 1559 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1543 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 35:
 #line 217 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) - 
get_ccnum((yyvsp[0].ccval))); }
-#line 1565 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1549 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 220 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = (yyvsp[0].ccval); }
-#line 1571 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1555 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 37:
 #line 222 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) * 
get_ccnum((yyvsp[0].ccval))); }
-#line 1577 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1561 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 38:
 #line 224 "cc_parser.y" /* yacc.c:1646  */
     { (yyval.ccval) = ccval_num(get_ccnum((yyvsp[-2].ccval)) / 
get_ccnum((yyvsp[0].ccval))); }
-#line 1583 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1567 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 39:
 #line 226 "cc_parser.y" /* yacc.c:1646  */
     { FIXME("'%%' expression not implemented\n"); ctx->hres = E_NOTIMPL; 
YYABORT; }
-#line 1589 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1573 "cc_parser.tab.c" /* yacc.c:1646  */
     break;
 
 
-#line 1593 "cc_parser.tab.c" /* yacc.c:1646  */
+#line 1577 "cc_parser.tab.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
diff --git a/dll/win32/jscript/cc_parser.tab.h 
b/dll/win32/jscript/cc_parser.tab.h
new file mode 100644
index 0000000000..275e13edfa
--- /dev/null
+++ b/dll/win32/jscript/cc_parser.tab.h
@@ -0,0 +1,82 @@
+/* A Bison parser, made by GNU Bison 3.0.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+#ifndef 
YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
+# define 
YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int cc_parser_debug;
+#endif
+
+/* Token type.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+  enum yytokentype
+  {
+    tEQ = 258,
+    tEQEQ = 259,
+    tNEQ = 260,
+    tNEQEQ = 261,
+    tLSHIFT = 262,
+    tRSHIFT = 263,
+    tRRSHIFT = 264,
+    tOR = 265,
+    tAND = 266,
+    tLEQ = 267,
+    tGEQ = 268,
+    tCCValue = 269
+  };
+#endif
+
+/* Value type.  */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
+{
+#line 36 "cc_parser.y" /* yacc.c:1909  */
+
+    ccval_t ccval;
+
+#line 73 "cc_parser.tab.h" /* yacc.c:1909  */
+};
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+int cc_parser_parse (parser_ctx_t *ctx);
+
+#endif /* 
!YY_CC_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_CC_PARSER_TAB_H_INCLUDED  */
diff --git a/dll/win32/jscript/cc_parser.y b/dll/win32/jscript/cc_parser.y
index d06ba7c703..18c1cb1c38 100644
--- a/dll/win32/jscript/cc_parser.y
+++ b/dll/win32/jscript/cc_parser.y
@@ -19,6 +19,12 @@
 %{
 
 #include "jscript.h"
+#include "engine.h"
+#include "parser.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 %}
 
diff --git a/dll/win32/jscript/compile.c b/dll/win32/jscript/compile.c
index b9dff8fe30..6e6be9135f 100644
--- a/dll/win32/jscript/compile.c
+++ b/dll/win32/jscript/compile.c
@@ -16,10 +16,17 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
+#include "engine.h"
+#include "parser.h"
 
-#include <wine/rbtree.h>
+#include "wine/rbtree.h"
+#include "wine/debug.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 WINE_DECLARE_DEBUG_CHANNEL(jscript_disas);
 
 typedef struct _statement_ctx_t {
@@ -854,29 +861,29 @@ static HRESULT literal_as_bstr(compiler_ctx_t *ctx, 
literal_t *literal, BSTR *st
 
 static HRESULT compile_array_literal(compiler_ctx_t *ctx, 
array_literal_expression_t *expr)
 {
-    unsigned i, elem_cnt = expr->length;
+    unsigned length = 0;
     array_element_t *iter;
+    unsigned array_instr;
     HRESULT hres;
 
-    for(iter = expr->element_list; iter; iter = iter->next) {
-        elem_cnt += iter->elision+1;
+    array_instr = push_instr(ctx, OP_carray);
 
-        for(i=0; i < iter->elision; i++) {
-            if(!push_instr(ctx, OP_undefined))
-                return E_OUTOFMEMORY;
-        }
+    for(iter = expr->element_list; iter; iter = iter->next) {
+        length += iter->elision;
 
         hres = compile_expression(ctx, iter->expr, TRUE);
         if(FAILED(hres))
             return hres;
-    }
 
-    for(i=0; i < expr->length; i++) {
-        if(!push_instr(ctx, OP_undefined))
-            return E_OUTOFMEMORY;
+        hres = push_instr_uint(ctx, OP_carray_set, length);
+        if(FAILED(hres))
+            return hres;
+
+        length++;
     }
 
-    return push_instr_uint(ctx, OP_carray, elem_cnt);
+    instr_ptr(ctx, array_instr)->u.arg[0].uint = length + expr->length;
+    return S_OK;
 }
 
 static HRESULT compile_object_literal(compiler_ctx_t *ctx, 
property_value_expression_t *expr)
diff --git a/dll/win32/jscript/date.c b/dll/win32/jscript/date.c
index fb81dd4606..f784d51afb 100644
--- a/dll/win32/jscript/date.c
+++ b/dll/win32/jscript/date.c
@@ -17,8 +17,19 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <limits.h>
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 /* 1601 to 1970 is 369 years plus 89 leap days */
 #define TIME_EPOCH  ((ULONGLONG)(369 * 365 + 89) * 86400 * 1000)
 
@@ -81,6 +92,7 @@ static const WCHAR getYearW[] = 
{'g','e','t','Y','e','a','r',0};
 static const WCHAR setYearW[] = {'s','e','t','Y','e','a','r',0};
 
 static const WCHAR UTCW[] = {'U','T','C',0};
+static const WCHAR nowW[] = {'n','o','w',0};
 static const WCHAR parseW[] = {'p','a','r','s','e',0};
 
 static inline DateInstance *date_from_jsdisp(jsdisp_t *jsdisp)
@@ -441,6 +453,17 @@ static inline DOUBLE time_clip(DOUBLE time)
     return floor(time);
 }
 
+static double date_now(void)
+{
+    FILETIME ftime;
+    LONGLONG time;
+
+    GetSystemTimeAsFileTime(&ftime);
+    time = ((LONGLONG)ftime.dwHighDateTime << 32) + ftime.dwLowDateTime;
+
+    return time/10000 - TIME_EPOCH;
+}
+
 static SYSTEMTIME create_systemtime(DOUBLE time)
 {
     SYSTEMTIME st;
@@ -2350,6 +2373,15 @@ static HRESULT DateConstr_UTC(script_ctx_t *ctx, vdisp_t 
*jsthis, WORD flags, un
     return hres;
 }
 
+/* ECMA-262 5.1 Edition    15.9.4.4 */
+static HRESULT DateConstr_now(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, 
unsigned argc, jsval_t *argv, jsval_t *r)
+{
+    TRACE("\n");
+
+    if(r) *r = jsval_number(date_now());
+    return S_OK;
+}
+
 static HRESULT DateConstr_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD 
flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
@@ -2362,19 +2394,11 @@ static HRESULT DateConstr_value(script_ctx_t *ctx, 
vdisp_t *jsthis, WORD flags,
     case DISPATCH_CONSTRUCT:
         switch(argc) {
         /* ECMA-262 3rd Edition    15.9.3.3 */
-        case 0: {
-            FILETIME time;
-            LONGLONG lltime;
-
-            GetSystemTimeAsFileTime(&time);
-            lltime = ((LONGLONG)time.dwHighDateTime<<32)
-                + time.dwLowDateTime;
-
-            hres = create_date(ctx, NULL, lltime/10000-TIME_EPOCH, &date);
+        case 0:
+            hres = create_date(ctx, NULL, date_now(), &date);
             if(FAILED(hres))
                 return hres;
             break;
-        }
 
         /* ECMA-262 3rd Edition    15.9.3.2 */
         case 1: {
@@ -2443,6 +2467,7 @@ static HRESULT DateConstr_value(script_ctx_t *ctx, 
vdisp_t *jsthis, WORD flags,
 
 static const builtin_prop_t DateConstr_props[] = {
     {UTCW,    DateConstr_UTC,    PROPF_METHOD},
+    {nowW,    DateConstr_now,    PROPF_HTML|PROPF_METHOD},
     {parseW,  DateConstr_parse,  PROPF_METHOD}
 };
 
diff --git a/dll/win32/jscript/decode.c b/dll/win32/jscript/decode.c
index 1799b91864..d402d7c961 100644
--- a/dll/win32/jscript/decode.c
+++ b/dll/win32/jscript/decode.c
@@ -18,6 +18,10 @@
 
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 /*
  * This file implements algorithm for decoding scripts encoded by
  * screnc.exe. The 'secret' algorithm that's well documented here:
diff --git a/dll/win32/jscript/dispex.c b/dll/win32/jscript/dispex.c
index 8bc03d1662..ffb351e2ac 100644
--- a/dll/win32/jscript/dispex.c
+++ b/dll/win32/jscript/dispex.c
@@ -16,8 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/unicode.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 #define FDEX_VERSION_MASK 0xf0000000
 #define GOLDEN_RATIO 0x9E3779B9U
 
@@ -83,8 +90,19 @@ static const builtin_prop_t *find_builtin_prop(jsdisp_t 
*This, const WCHAR *name
         i = (min+max)/2;
 
         r = strcmpW(name, This->builtin_info->props[i].name);
-        if(!r)
+        if(!r) {
+            /* Skip prop if it's available only in higher compatibility mode. 
*/
+            unsigned version = (This->builtin_info->props[i].flags & 
PROPF_VERSION_MASK)
+                >> PROPF_VERSION_SHIFT;
+            if(version && version > This->ctx->version)
+                return NULL;
+
+            /* Skip prop if it's available only in HTML mode and we're not 
running in HTML mode. */
+            if((This->builtin_info->props[i].flags & PROPF_HTML) && 
!This->ctx->html_mode)
+                return NULL;
+
             return This->builtin_info->props + i;
+        }
 
         if(r < 0)
             max = i-1;
diff --git a/dll/win32/jscript/engine.c b/dll/win32/jscript/engine.c
index 16fe6aaeae..d41afa5c3b 100644
--- a/dll/win32/jscript/engine.c
+++ b/dll/win32/jscript/engine.c
@@ -16,7 +16,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
+#include "engine.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static const WCHAR booleanW[] = {'b','o','o','l','e','a','n',0};
 static const WCHAR functionW[] = {'f','u','n','c','t','i','o','n',0};
@@ -514,7 +525,7 @@ static HRESULT disp_cmp(IDispatch *disp1, IDispatch *disp2, 
BOOL *ret)
 }
 
 /* ECMA-262 3rd Edition    11.9.6 */
-static HRESULT equal2_values(jsval_t lval, jsval_t rval, BOOL *ret)
+HRESULT jsval_strict_equal(jsval_t lval, jsval_t rval, BOOL *ret)
 {
     jsval_type_t type = jsval_type(lval);
 
@@ -843,7 +854,7 @@ static HRESULT interp_case(script_ctx_t *ctx)
     TRACE("\n");
 
     v = stack_pop(ctx);
-    hres = equal2_values(stack_top(ctx), v, &b);
+    hres = jsval_strict_equal(stack_top(ctx), v, &b);
     jsval_release(v);
     if(FAILED(hres))
         return hres;
@@ -1290,7 +1301,7 @@ static HRESULT interp_local(script_ctx_t *ctx)
     jsval_t copy;
     HRESULT hres;
 
-    TRACE("%d\n", arg);
+    TRACE("%d: %s\n", arg, debugstr_w(local_name(frame, arg)));
 
     if(!frame->base_scope || !frame->base_scope->frame)
         return identifier_value(ctx, local_name(frame, arg));
@@ -1393,8 +1404,6 @@ static HRESULT interp_carray(script_ctx_t *ctx)
 {
     const unsigned arg = get_op_uint(ctx, 0);
     jsdisp_t *array;
-    jsval_t val;
-    unsigned i;
     HRESULT hres;
 
     TRACE("%u\n", arg);
@@ -1403,20 +1412,27 @@ static HRESULT interp_carray(script_ctx_t *ctx)
     if(FAILED(hres))
         return hres;
 
-    i = arg;
-    while(i--) {
-        val = stack_pop(ctx);
-        hres = jsdisp_propput_idx(array, i, val);
-        jsval_release(val);
-        if(FAILED(hres)) {
-            jsdisp_release(array);
-            return hres;
-        }
-    }
-
     return stack_push(ctx, jsval_obj(array));
 }
 
+static HRESULT interp_carray_set(script_ctx_t *ctx)
+{
+    const unsigned index = get_op_uint(ctx, 0);
+    jsval_t value, array;
+    HRESULT hres;
+
+    value = stack_pop(ctx);
+
+    TRACE("[%u] = %s\n", index, debugstr_jsval(value));
+
+    array = stack_top(ctx);
+    assert(is_object_instance(array));
+
+    hres = jsdisp_propput_idx(iface_to_jsdisp(get_object(array)), index, 
value);
+    jsval_release(value);
+    return hres;
+}
+
 /* ECMA-262 3rd Edition    11.1.5 */
 static HRESULT interp_new_obj(script_ctx_t *ctx)
 {
@@ -2092,7 +2108,7 @@ static HRESULT interp_preinc(script_ctx_t *ctx)
 static HRESULT equal_values(script_ctx_t *ctx, jsval_t lval, jsval_t rval, 
BOOL *ret)
 {
     if(jsval_type(lval) == jsval_type(rval) || (is_number(lval) && 
is_number(rval)))
-       return equal2_values(lval, rval, ret);
+       return jsval_strict_equal(lval, rval, ret);
 
     /* FIXME: NULL disps should be handled in more general way */
     if(is_object_instance(lval) && !get_object(lval))
@@ -2222,7 +2238,7 @@ static HRESULT interp_eq2(script_ctx_t *ctx)
 
     TRACE("%s === %s\n", debugstr_jsval(l), debugstr_jsval(r));
 
-    hres = equal2_values(r, l, &b);
+    hres = jsval_strict_equal(r, l, &b);
     jsval_release(l);
     jsval_release(r);
     if(FAILED(hres))
@@ -2243,7 +2259,7 @@ static HRESULT interp_neq2(script_ctx_t *ctx)
     r = stack_pop(ctx);
     l = stack_pop(ctx);
 
-    hres = equal2_values(r, l, &b);
+    hres = jsval_strict_equal(r, l, &b);
     jsval_release(l);
     jsval_release(r);
     if(FAILED(hres))
diff --git a/dll/win32/jscript/engine.h b/dll/win32/jscript/engine.h
index ce4c326730..6d40e30905 100644
--- a/dll/win32/jscript/engine.h
+++ b/dll/win32/jscript/engine.h
@@ -23,12 +23,13 @@
     X(and,        1, 0,0)                  \
     X(array,      1, 0,0)                  \
     X(assign,     1, 0,0)                  \
-    X(assign_call,1, ARG_UINT,   0)       \
+    X(assign_call,1, ARG_UINT,   0)        \
     X(bool,       1, ARG_INT,    0)        \
     X(bneg,       1, 0,0)                  \
     X(call,       1, ARG_UINT,   ARG_UINT) \
     X(call_member,1, ARG_UINT,   ARG_UINT) \
     X(carray,     1, ARG_UINT,   0)        \
+    X(carray_set, 1, ARG_UINT,   0)        \
     X(case,       0, ARG_ADDR,   0)        \
     X(cnd_nz,     0, ARG_ADDR,   0)        \
     X(cnd_z,      0, ARG_ADDR,   0)        \
diff --git a/dll/win32/jscript/error.c b/dll/win32/jscript/error.c
index 835f06e77d..b855b8798b 100644
--- a/dll/win32/jscript/error.c
+++ b/dll/win32/jscript/error.c
@@ -16,8 +16,17 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 static const WCHAR descriptionW[] = 
{'d','e','s','c','r','i','p','t','i','o','n',0};
 static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0};
 static const WCHAR nameW[] = {'n','a','m','e',0};
diff --git a/dll/win32/jscript/function.c b/dll/win32/jscript/function.c
index c1456c24c9..8480a3bf1a 100644
--- a/dll/win32/jscript/function.c
+++ b/dll/win32/jscript/function.c
@@ -16,7 +16,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
+#include "engine.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 typedef struct {
     jsdisp_t dispex;
diff --git a/dll/win32/jscript/global.c b/dll/win32/jscript/global.c
index 4ac33b3cd0..6cd5ee9f6a 100644
--- a/dll/win32/jscript/global.c
+++ b/dll/win32/jscript/global.c
@@ -16,8 +16,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <limits.h>
+
 #include "jscript.h"
+#include "engine.h"
+
+#include "wine/debug.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static const WCHAR NaNW[] = {'N','a','N',0};
 static const WCHAR InfinityW[] = {'I','n','f','i','n','i','t','y',0};
diff --git a/dll/win32/jscript/jscript.c b/dll/win32/jscript/jscript.c
index 9e8b3cb29c..15d81d2c53 100644
--- a/dll/win32/jscript/jscript.c
+++ b/dll/win32/jscript/jscript.c
@@ -16,7 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
+#include "engine.h"
+#include "objsafe.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 #ifdef _WIN64
 
@@ -47,6 +55,7 @@ typedef struct {
     LONG thread_id;
     LCID lcid;
     DWORD version;
+    BOOL html_mode;
     BOOL is_encode;
 
     IActiveScriptSite *site;
@@ -704,6 +713,7 @@ static HRESULT WINAPI 
JScriptParse_InitNew(IActiveScriptParse *iface)
     ctx->active_script = &This->IActiveScript_iface;
     ctx->safeopt = This->safeopt;
     ctx->version = This->version;
+    ctx->html_mode = This->html_mode;
     ctx->ei.val = jsval_undefined();
     heap_pool_init(&ctx->tmp_heap);
 
@@ -912,12 +922,14 @@ static HRESULT WINAPI 
JScriptProperty_SetProperty(IActiveScriptProperty *iface,
 
     switch(dwProperty) {
     case SCRIPTPROP_INVOKEVERSIONING:
-        if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0 || V_I4(pvarValue) 
> 15) {
+        if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0
+           || (V_I4(pvarValue) > 15 && !(V_I4(pvarValue) & 
SCRIPTLANGUAGEVERSION_HTML))) {
             WARN("invalid value %s\n", debugstr_variant(pvarValue));
             return E_INVALIDARG;
         }
 
-        This->version = V_I4(pvarValue);
+        This->version = V_I4(pvarValue) & 0x1ff;
+        This->html_mode = (V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML) != 0;
         break;
     default:
         FIXME("Unimplemented property %x\n", dwProperty);
diff --git a/dll/win32/jscript/jscript.h b/dll/win32/jscript/jscript.h
index 1a5101917b..6f06062a8b 100644
--- a/dll/win32/jscript/jscript.h
+++ b/dll/win32/jscript/jscript.h
@@ -16,36 +16,37 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#ifndef _WINE_JSCRIPT_H
-#define _WINE_JSCRIPT_H
+#pragma once
 
-#include <wine/config.h>
-#include <wine/port.h>
-
-#include <assert.h>
 #include <stdarg.h>
-
-#define WIN32_NO_STATUS
-#define _INC_WINDOWS
-#define COM_NO_WINDOWS_H
+#include <stdio.h>
 
 #define COBJMACROS
 
-#include <windef.h>
-#include <winbase.h>
-#include <objbase.h>
-#include <oleauto.h>
-#include <dispex.h>
-#include <activscp.h>
-#include <objsafe.h>
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+#include "dispex.h"
+#include "activscp.h"
 
-#include <wine/debug.h>
-#include <wine/list.h>
-#include <wine/unicode.h>
+#include "resource.h"
 
-WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+#include "wine/unicode.h"
+#include "wine/heap.h"
+#include "wine/list.h"
 
-#include "resource.h"
+/*
+ * This is Wine jscript extension for ES5 compatible mode. Native IE9+ 
implements
+ * a separated JavaScript enging in side MSHTML. We implement its features here
+ * and enable it when HTML flag is specified in SCRIPTPROP_INVOKEVERSIONING 
property.
+ */
+#define SCRIPTLANGUAGEVERSION_HTML 0x400
+
+/*
+ * This is Wine jscript extension for ES5 compatible mode. Allowed only in 
HTML mode.
+ */
+#define SCRIPTLANGUAGEVERSION_ES5  0x102
 
 typedef struct _jsval_t jsval_t;
 typedef struct _jsstr_t jsstr_t;
@@ -68,26 +69,6 @@ void heap_pool_clear(heap_pool_t*) DECLSPEC_HIDDEN;
 void heap_pool_free(heap_pool_t*) DECLSPEC_HIDDEN;
 heap_pool_t *heap_pool_mark(heap_pool_t*) DECLSPEC_HIDDEN;
 
-static inline void* __WINE_ALLOC_SIZE(1) heap_alloc(size_t size)
-{
-    return HeapAlloc(GetProcessHeap(), 0, size);
-}
-
-static inline void* __WINE_ALLOC_SIZE(1) heap_alloc_zero(size_t size)
-{
-    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
-}
-
-static inline void* __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, size_t size)
-{
-    return HeapReAlloc(GetProcessHeap(), 0, mem, size);
-}
-
-static inline BOOL heap_free(void *mem)
-{
-    return HeapFree(GetProcessHeap(), 0, mem);
-}
-
 static inline LPWSTR heap_strdupW(LPCWSTR str)
 {
     LPWSTR ret = NULL;
@@ -115,6 +96,11 @@ extern HINSTANCE jscript_hinstance DECLSPEC_HIDDEN;
 #define PROPF_CONST       0x0800
 #define PROPF_DONTDELETE  0x1000
 
+#define PROPF_VERSION_MASK  0x01ff0000
+#define PROPF_VERSION_SHIFT 16
+#define PROPF_HTML          (SCRIPTLANGUAGEVERSION_HTML << PROPF_VERSION_SHIFT)
+#define PROPF_ES5           
((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES5) << PROPF_VERSION_SHIFT)
+
 /*
  * This is our internal dispatch flag informing calee that it's called 
directly from interpreter.
  * If calee is executed as interpreted function, we may let already running 
interpreter to take
@@ -357,6 +343,8 @@ HRESULT to_string(script_ctx_t*,jsval_t,jsstr_t**) 
DECLSPEC_HIDDEN;
 HRESULT to_flat_string(script_ctx_t*,jsval_t,jsstr_t**,const WCHAR**) 
DECLSPEC_HIDDEN;
 HRESULT to_object(script_ctx_t*,jsval_t,IDispatch**) DECLSPEC_HIDDEN;
 
+HRESULT jsval_strict_equal(jsval_t,jsval_t,BOOL*) DECLSPEC_HIDDEN;
+
 HRESULT variant_change_type(script_ctx_t*,VARIANT*,VARIANT*,VARTYPE) 
DECLSPEC_HIDDEN;
 
 HRESULT decode_source(WCHAR*) DECLSPEC_HIDDEN;
@@ -412,6 +400,7 @@ struct _script_ctx_t {
     IInternetHostSecurityManager *secmgr;
     DWORD safeopt;
     DWORD version;
+    BOOL html_mode;
     LCID lcid;
     cc_ctx_t *cc;
     JSCaller *jscaller;
@@ -516,7 +505,7 @@ static inline BOOL is_int32(double d)
 
 static inline DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
 {
-    return (ctx->version << 28) | flags;
+    return ((ctx->version & 0xff) << 28) | flags;
 }
 
 #define FACILITY_JSCRIPT 10
@@ -585,9 +574,3 @@ static inline void unlock_module(void)
 {
     InterlockedDecrement(&module_ref);
 }
-
-#include "engine.h"
-#include "parser.h"
-#include "regexp.h"
-
-#endif /* _WINE_JSCRIPT_H */
diff --git a/dll/win32/jscript/jscript_main.c b/dll/win32/jscript/jscript_main.c
index 03f1f56465..9f9f4121f7 100644
--- a/dll/win32/jscript/jscript_main.c
+++ b/dll/win32/jscript/jscript_main.c
@@ -16,14 +16,26 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "initguid.h"
+
 #include "jscript.h"
 
-#include <rpcproxy.h>
-#include <initguid.h>
-#include <jscript_classes.h>
+#include "winreg.h"
+#include "advpub.h"
+#include "activaut.h"
+#include "objsafe.h"
+#include "mshtmhst.h"
+#include "rpcproxy.h"
+#include "jscript_classes.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 LONG module_ref = 0;
 
+DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+
 HINSTANCE jscript_hinstance;
 
 static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID 
riid, void **ppv)
diff --git a/dll/win32/jscript/json.c b/dll/win32/jscript/json.c
index fd1e471eee..fc23b54c0d 100644
--- a/dll/win32/jscript/json.c
+++ b/dll/win32/jscript/json.c
@@ -16,7 +16,16 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
+#include "parser.h"
+
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static const WCHAR parseW[] = {'p','a','r','s','e',0};
 static const WCHAR stringifyW[] = {'s','t','r','i','n','g','i','f','y',0};
@@ -536,15 +545,18 @@ static HRESULT stringify_array(stringify_ctx_t *ctx, 
jsdisp_t *obj)
         }
 
         hres = jsdisp_get_idx(obj, i, &val);
-        if(FAILED(hres))
-            return hres;
-
-        hres = stringify(ctx, val);
-        if(FAILED(hres))
+        if(SUCCEEDED(hres)) {
+            hres = stringify(ctx, val);
+            if(FAILED(hres))
+                return hres;
+            if(hres == S_FALSE && !append_string(ctx, nullW))
+                return E_OUTOFMEMORY;
+        }else if(hres == DISP_E_UNKNOWNNAME) {
+            if(!append_string(ctx, nullW))
+                return E_OUTOFMEMORY;
+        }else {
             return hres;
-
-        if(hres == S_FALSE && !append_string(ctx, nullW))
-            return E_OUTOFMEMORY;
+        }
     }
 
     if((length && *ctx->gap && !append_char(ctx, '\n')) || !append_char(ctx, 
']'))
diff --git a/dll/win32/jscript/jsregexp.c b/dll/win32/jscript/jsregexp.c
index 6615005404..5798635cb8 100644
--- a/dll/win32/jscript/jsregexp.c
+++ b/dll/win32/jscript/jsregexp.c
@@ -16,7 +16,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <math.h>
+
 #include "jscript.h"
+#include "regexp.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 typedef struct {
     jsdisp_t dispex;
diff --git a/dll/win32/jscript/jsstr.c b/dll/win32/jscript/jsstr.c
index 6eb7dea34a..6a39c4c3dc 100644
--- a/dll/win32/jscript/jsstr.c
+++ b/dll/win32/jscript/jsstr.c
@@ -16,8 +16,12 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
 /*
  * This is the length of a string that is considered to be long enough to be
  * worth the rope to avoid copy.
diff --git a/dll/win32/jscript/jsutils.c b/dll/win32/jscript/jsutils.c
index fb691afe8d..4556ec45a3 100644
--- a/dll/win32/jscript/jsutils.c
+++ b/dll/win32/jscript/jsutils.c
@@ -16,8 +16,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
+#include "engine.h"
+
+#include "wine/debug.h"
 
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 WINE_DECLARE_DEBUG_CHANNEL(heap);
 
 const char *debugstr_jsval(const jsval_t v)
diff --git a/dll/win32/jscript/jsval.h b/dll/win32/jscript/jsval.h
index 1121425373..963f59f6a0 100644
--- a/dll/win32/jscript/jsval.h
+++ b/dll/win32/jscript/jsval.h
@@ -246,4 +246,4 @@ HRESULT jsval_to_variant(jsval_t,VARIANT*) DECLSPEC_HIDDEN;
 void jsval_release(jsval_t) DECLSPEC_HIDDEN;
 HRESULT jsval_copy(jsval_t,jsval_t*) DECLSPEC_HIDDEN;
 
-#endif /* JSVAL_H */
+#endif
diff --git a/dll/win32/jscript/lex.c b/dll/win32/jscript/lex.c
index 2471aaa40d..352395865f 100644
--- a/dll/win32/jscript/lex.c
+++ b/dll/win32/jscript/lex.c
@@ -16,10 +16,24 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <limits.h>
+
 #include "jscript.h"
+#include "activscp.h"
+#include "objsafe.h"
+#include "engine.h"
+#include "parser.h"
 
 #include "parser.tab.h"
 
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 static const WCHAR breakW[] = {'b','r','e','a','k',0};
 static const WCHAR caseW[] = {'c','a','s','e',0};
 static const WCHAR catchW[] = {'c','a','t','c','h',0};
diff --git a/dll/win32/jscript/math.c b/dll/win32/jscript/math.c
index 77c2062380..ef906f5439 100644
--- a/dll/win32/jscript/math.c
+++ b/dll/win32/jscript/math.c
@@ -17,9 +17,18 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <limits.h>
+
 #include "jscript.h"
+#include "ntsecapi.h"
+
+#include "wine/debug.h"
 
-#include <ntsecapi.h>
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static const WCHAR EW[] = {'E',0};
 static const WCHAR LOG2EW[] = {'L','O','G','2','E',0};
diff --git a/dll/win32/jscript/number.c b/dll/win32/jscript/number.c
index 94ec171785..94c8cc4e07 100644
--- a/dll/win32/jscript/number.c
+++ b/dll/win32/jscript/number.c
@@ -16,8 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <math.h>
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 typedef struct {
     jsdisp_t dispex;
 
diff --git a/dll/win32/jscript/object.c b/dll/win32/jscript/object.c
index 9a02618d5d..de09060e8a 100644
--- a/dll/win32/jscript/object.c
+++ b/dll/win32/jscript/object.c
@@ -16,8 +16,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <assert.h>
+
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
 static const WCHAR toLocaleStringW[] = 
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
 static const WCHAR valueOfW[] = {'v','a','l','u','e','O','f',0};
diff --git a/dll/win32/jscript/parser.tab.c b/dll/win32/jscript/parser.tab.c
index 798cd1df55..d72f750ba0 100644
--- a/dll/win32/jscript/parser.tab.c
+++ b/dll/win32/jscript/parser.tab.c
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.0"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -72,6 +72,12 @@
 
 
 #include "jscript.h"
+#include "engine.h"
+#include "parser.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static int parser_error(parser_ctx_t*,const char*);
 static void set_error(parser_ctx_t*,UINT);
@@ -185,11 +191,11 @@ static source_elements_t 
*source_elements_add_statement(source_elements_t*,state
 
 #line 193 "parser.tab.c" /* yacc.c:339  */
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -201,7 +207,10 @@ static source_elements_t 
*source_elements_add_statement(source_elements_t*,state
 # define YYERROR_VERBOSE 0
 #endif
 
-
+/* In a future release of Bison, this section will be replaced
+   by #include "parser.tab.h".  */
+#ifndef YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
+# define YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -289,7 +298,7 @@ union YYSTYPE
     struct _variable_list_t *variable_list;
     variable_declaration_t  *variable_declaration;
 
-#line 299 "parser.tab.c" /* yacc.c:355  */
+#line 302 "parser.tab.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -299,11 +308,11 @@ union YYSTYPE
 
 int parser_parse (parser_ctx_t *ctx);
 
-
+#endif /* !YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED 
 */
 
 /* Copy the second part of user declarations.  */
 
-#line 313 "parser.tab.c" /* yacc.c:358  */
+#line 316 "parser.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -360,30 +369,11 @@ typedef short int yytype_int16;
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+#  define __attribute__(Spec) /* empty */
 # endif
 #endif
 
@@ -673,7 +663,7 @@ static const char *const yytname[] =
   "ArrayLiteral", "ElementList", "Elision", "Elision_opt", "ObjectLiteral",
   "PropertyNameAndValueList", "PropertyName", "Identifier_opt", "Literal",
   "BooleanLiteral", "semicolon_opt", "left_bracket", "right_bracket",
-  "semicolon", YY_NULLPTR
+  "semicolon", YY_NULL
 };
 #endif
 
@@ -1433,11 +1423,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1494,7 +1484,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, 
yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, 
yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -1833,1279 +1823,1279 @@ yyreduce:
         case 2:
 #line 253 "parser.y" /* yacc.c:1646  */
     { program_parsed(ctx, (yyvsp[-2].source_elements)); }
-#line 1843 "parser.tab.c" /* yacc.c:1646  */
+#line 1827 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 3:
 #line 256 "parser.y" /* yacc.c:1646  */
     {}
-#line 1849 "parser.tab.c" /* yacc.c:1646  */
+#line 1833 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 4:
 #line 257 "parser.y" /* yacc.c:1646  */
     {}
-#line 1855 "parser.tab.c" /* yacc.c:1646  */
+#line 1839 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 5:
 #line 261 "parser.y" /* yacc.c:1646  */
     { (yyval.source_elements) = new_source_elements(ctx); }
-#line 1861 "parser.tab.c" /* yacc.c:1646  */
+#line 1845 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 6:
 #line 263 "parser.y" /* yacc.c:1646  */
     { (yyval.source_elements) = 
source_elements_add_statement((yyvsp[-1].source_elements), 
(yyvsp[0].statement)); }
-#line 1867 "parser.tab.c" /* yacc.c:1646  */
+#line 1851 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 7:
 #line 268 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_function_expression(ctx, NULL, 
(yyvsp[-4].parameter_list), (yyvsp[-1].source_elements), NULL, 
(yyvsp[-6].srcptr), (yyvsp[0].srcptr)-(yyvsp[-6].srcptr)+1); }
-#line 1873 "parser.tab.c" /* yacc.c:1646  */
+#line 1857 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 8:
 #line 270 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_function_expression(ctx, (yyvsp[-6].identifier), 
(yyvsp[-4].parameter_list), (yyvsp[-1].source_elements), NULL, 
(yyvsp[-7].srcptr), (yyvsp[0].srcptr)-(yyvsp[-7].srcptr)+1); }
-#line 1879 "parser.tab.c" /* yacc.c:1646  */
+#line 1863 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 9:
 #line 272 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_function_expression(ctx, (yyvsp[-6].identifier), 
(yyvsp[-4].parameter_list), (yyvsp[-1].source_elements), 
(yyvsp[-8].identifier), (yyvsp[-9].srcptr), 
(yyvsp[0].srcptr)-(yyvsp[-9].srcptr)+1); }
-#line 1885 "parser.tab.c" /* yacc.c:1646  */
+#line 1869 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 10:
 #line 275 "parser.y" /* yacc.c:1646  */
     { (yyval.srcptr) = (yyvsp[0].srcptr); }
-#line 1891 "parser.tab.c" /* yacc.c:1646  */
+#line 1875 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 11:
 #line 279 "parser.y" /* yacc.c:1646  */
     { (yyval.source_elements) = (yyvsp[0].source_elements); }
-#line 1897 "parser.tab.c" /* yacc.c:1646  */
+#line 1881 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 12:
 #line 283 "parser.y" /* yacc.c:1646  */
     { (yyval.parameter_list) = new_parameter_list(ctx, (yyvsp[0].identifier)); 
}
-#line 1903 "parser.tab.c" /* yacc.c:1646  */
+#line 1887 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 13:
 #line 285 "parser.y" /* yacc.c:1646  */
     { (yyval.parameter_list) = parameter_list_add(ctx, 
(yyvsp[-2].parameter_list), (yyvsp[0].identifier)); }
-#line 1909 "parser.tab.c" /* yacc.c:1646  */
+#line 1893 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 14:
 #line 289 "parser.y" /* yacc.c:1646  */
     { (yyval.parameter_list) = NULL; }
-#line 1915 "parser.tab.c" /* yacc.c:1646  */
+#line 1899 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 15:
 #line 290 "parser.y" /* yacc.c:1646  */
     { (yyval.parameter_list) = (yyvsp[0].parameter_list); }
-#line 1921 "parser.tab.c" /* yacc.c:1646  */
+#line 1905 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 16:
 #line 294 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1927 "parser.tab.c" /* yacc.c:1646  */
+#line 1911 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 17:
 #line 295 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1933 "parser.tab.c" /* yacc.c:1646  */
+#line 1917 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 18:
 #line 296 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1939 "parser.tab.c" /* yacc.c:1646  */
+#line 1923 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 19:
 #line 297 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_expression_statement(ctx, (yyvsp[0].expr)); }
-#line 1945 "parser.tab.c" /* yacc.c:1646  */
+#line 1929 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 20:
 #line 298 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1951 "parser.tab.c" /* yacc.c:1646  */
+#line 1935 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 21:
 #line 299 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1957 "parser.tab.c" /* yacc.c:1646  */
+#line 1941 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 22:
 #line 300 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1963 "parser.tab.c" /* yacc.c:1646  */
+#line 1947 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 23:
 #line 301 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1969 "parser.tab.c" /* yacc.c:1646  */
+#line 1953 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 24:
 #line 302 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1975 "parser.tab.c" /* yacc.c:1646  */
+#line 1959 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 25:
 #line 303 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1981 "parser.tab.c" /* yacc.c:1646  */
+#line 1965 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 26:
 #line 304 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1987 "parser.tab.c" /* yacc.c:1646  */
+#line 1971 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 27:
 #line 305 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1993 "parser.tab.c" /* yacc.c:1646  */
+#line 1977 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 28:
 #line 306 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1999 "parser.tab.c" /* yacc.c:1646  */
+#line 1983 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 29:
 #line 307 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 2005 "parser.tab.c" /* yacc.c:1646  */
+#line 1989 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 30:
 #line 308 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 2011 "parser.tab.c" /* yacc.c:1646  */
+#line 1995 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 31:
 #line 312 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_list) = new_statement_list(ctx, (yyvsp[0].statement)); }
-#line 2017 "parser.tab.c" /* yacc.c:1646  */
+#line 2001 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 32:
 #line 314 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_list) = statement_list_add((yyvsp[-1].statement_list), 
(yyvsp[0].statement)); }
-#line 2023 "parser.tab.c" /* yacc.c:1646  */
+#line 2007 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 33:
 #line 318 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_list) = NULL; }
-#line 2029 "parser.tab.c" /* yacc.c:1646  */
+#line 2013 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 34:
 #line 319 "parser.y" /* yacc.c:1646  */
     { (yyval.statement_list) = (yyvsp[0].statement_list); }
-#line 2035 "parser.tab.c" /* yacc.c:1646  */
+#line 2019 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 35:
 #line 323 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_block_statement(ctx, 
(yyvsp[-1].statement_list)); }
-#line 2041 "parser.tab.c" /* yacc.c:1646  */
+#line 2025 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 324 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_block_statement(ctx, NULL); }
-#line 2047 "parser.tab.c" /* yacc.c:1646  */
+#line 2031 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 37:
 #line 329 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_var_statement(ctx, (yyvsp[-1].variable_list)); }
-#line 2053 "parser.tab.c" /* yacc.c:1646  */
+#line 2037 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 38:
 #line 333 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_list) = new_variable_list(ctx, 
(yyvsp[0].variable_declaration)); }
-#line 2059 "parser.tab.c" /* yacc.c:1646  */
+#line 2043 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 39:
 #line 335 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_list) = variable_list_add(ctx, 
(yyvsp[-2].variable_list), (yyvsp[0].variable_declaration)); }
-#line 2065 "parser.tab.c" /* yacc.c:1646  */
+#line 2049 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 40:
 #line 340 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_list) = new_variable_list(ctx, 
(yyvsp[0].variable_declaration)); }
-#line 2071 "parser.tab.c" /* yacc.c:1646  */
+#line 2055 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 41:
 #line 342 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_list) = variable_list_add(ctx, 
(yyvsp[-2].variable_list), (yyvsp[0].variable_declaration)); }
-#line 2077 "parser.tab.c" /* yacc.c:1646  */
+#line 2061 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 42:
 #line 347 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_declaration) = new_variable_declaration(ctx, 
(yyvsp[-1].identifier), (yyvsp[0].expr)); }
-#line 2083 "parser.tab.c" /* yacc.c:1646  */
+#line 2067 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 43:
 #line 352 "parser.y" /* yacc.c:1646  */
     { (yyval.variable_declaration) = new_variable_declaration(ctx, 
(yyvsp[-1].identifier), (yyvsp[0].expr)); }
-#line 2089 "parser.tab.c" /* yacc.c:1646  */
+#line 2073 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 44:
 #line 356 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = NULL; }
-#line 2095 "parser.tab.c" /* yacc.c:1646  */
+#line 2079 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 45:
 #line 357 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2101 "parser.tab.c" /* yacc.c:1646  */
+#line 2085 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 46:
 #line 362 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2107 "parser.tab.c" /* yacc.c:1646  */
+#line 2091 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 47:
 #line 366 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = NULL; }
-#line 2113 "parser.tab.c" /* yacc.c:1646  */
+#line 2097 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 48:
 #line 367 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2119 "parser.tab.c" /* yacc.c:1646  */
+#line 2103 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 49:
 #line 372 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2125 "parser.tab.c" /* yacc.c:1646  */
+#line 2109 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 50:
 #line 376 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EMPTY, 0); }
-#line 2131 "parser.tab.c" /* yacc.c:1646  */
+#line 2115 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 51:
 #line 381 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_expression_statement(ctx, (yyvsp[-1].expr)); }
-#line 2137 "parser.tab.c" /* yacc.c:1646  */
+#line 2121 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 52:
 #line 386 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_if_statement(ctx, (yyvsp[-4].expr), 
(yyvsp[-2].statement), (yyvsp[0].statement)); }
-#line 2143 "parser.tab.c" /* yacc.c:1646  */
+#line 2127 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 53:
 #line 388 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_if_statement(ctx, (yyvsp[-2].expr), 
(yyvsp[0].statement), NULL); }
-#line 2149 "parser.tab.c" /* yacc.c:1646  */
+#line 2133 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 54:
 #line 393 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, TRUE, (yyvsp[-2].expr), 
(yyvsp[-5].statement)); }
-#line 2155 "parser.tab.c" /* yacc.c:1646  */
+#line 2139 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 55:
 #line 395 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, FALSE, (yyvsp[-2].expr), 
(yyvsp[0].statement)); }
-#line 2161 "parser.tab.c" /* yacc.c:1646  */
+#line 2145 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 56:
 #line 397 "parser.y" /* yacc.c:1646  */
     { if(!explicit_error(ctx, (yyvsp[0].expr), ';')) YYABORT; }
-#line 2167 "parser.tab.c" /* yacc.c:1646  */
+#line 2151 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 57:
 #line 399 "parser.y" /* yacc.c:1646  */
     { if(!explicit_error(ctx, (yyvsp[0].expr), ';')) YYABORT; }
-#line 2173 "parser.tab.c" /* yacc.c:1646  */
+#line 2157 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 58:
 #line 401 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_for_statement(ctx, NULL, (yyvsp[-8].expr), 
(yyvsp[-5].expr), (yyvsp[-2].expr), (yyvsp[0].statement)); }
-#line 2179 "parser.tab.c" /* yacc.c:1646  */
+#line 2163 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 59:
 #line 403 "parser.y" /* yacc.c:1646  */
     { if(!explicit_error(ctx, (yyvsp[0].variable_list), ';')) YYABORT; }
-#line 2185 "parser.tab.c" /* yacc.c:1646  */
+#line 2169 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 60:
 #line 405 "parser.y" /* yacc.c:1646  */
     { if(!explicit_error(ctx, (yyvsp[0].expr), ';')) YYABORT; }
-#line 2191 "parser.tab.c" /* yacc.c:1646  */
+#line 2175 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 61:
 #line 407 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_for_statement(ctx, (yyvsp[-8].variable_list), 
NULL, (yyvsp[-5].expr), (yyvsp[-2].expr), (yyvsp[0].statement)); }
-#line 2197 "parser.tab.c" /* yacc.c:1646  */
+#line 2181 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 62:
 #line 409 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_forin_statement(ctx, NULL, (yyvsp[-4].expr), 
(yyvsp[-2].expr), (yyvsp[0].statement)); }
-#line 2203 "parser.tab.c" /* yacc.c:1646  */
+#line 2187 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 63:
 #line 411 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_forin_statement(ctx, 
(yyvsp[-4].variable_declaration), NULL, (yyvsp[-2].expr), 
(yyvsp[0].statement)); }
-#line 2209 "parser.tab.c" /* yacc.c:1646  */
+#line 2193 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 64:
 #line 416 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_continue_statement(ctx, (yyvsp[-1].identifier)); 
}
-#line 2215 "parser.tab.c" /* yacc.c:1646  */
+#line 2199 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 65:
 #line 421 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_break_statement(ctx, (yyvsp[-1].identifier)); }
-#line 2221 "parser.tab.c" /* yacc.c:1646  */
+#line 2205 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 66:
 #line 426 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_return_statement(ctx, (yyvsp[-1].expr)); }
-#line 2227 "parser.tab.c" /* yacc.c:1646  */
+#line 2211 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 67:
 #line 431 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_with_statement(ctx, (yyvsp[-2].expr), 
(yyvsp[0].statement)); }
-#line 2233 "parser.tab.c" /* yacc.c:1646  */
+#line 2217 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 68:
 #line 436 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_labelled_statement(ctx, (yyvsp[-2].identifier), 
(yyvsp[0].statement)); }
-#line 2239 "parser.tab.c" /* yacc.c:1646  */
+#line 2223 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 69:
 #line 441 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_switch_statement(ctx, (yyvsp[-2].expr), 
(yyvsp[0].case_clausule)); }
-#line 2245 "parser.tab.c" /* yacc.c:1646  */
+#line 2229 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 70:
 #line 446 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_block(ctx, (yyvsp[-1].case_list), NULL, 
NULL); }
-#line 2251 "parser.tab.c" /* yacc.c:1646  */
+#line 2235 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 71:
 #line 448 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_block(ctx, (yyvsp[-3].case_list), 
(yyvsp[-2].case_clausule), (yyvsp[-1].case_list)); }
-#line 2257 "parser.tab.c" /* yacc.c:1646  */
+#line 2241 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 72:
 #line 452 "parser.y" /* yacc.c:1646  */
     { (yyval.case_list) = NULL; }
-#line 2263 "parser.tab.c" /* yacc.c:1646  */
+#line 2247 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 73:
 #line 453 "parser.y" /* yacc.c:1646  */
     { (yyval.case_list) = (yyvsp[0].case_list); }
-#line 2269 "parser.tab.c" /* yacc.c:1646  */
+#line 2253 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 74:
 #line 457 "parser.y" /* yacc.c:1646  */
     { (yyval.case_list) = new_case_list(ctx, (yyvsp[0].case_clausule)); }
-#line 2275 "parser.tab.c" /* yacc.c:1646  */
+#line 2259 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 75:
 #line 459 "parser.y" /* yacc.c:1646  */
     { (yyval.case_list) = case_list_add(ctx, (yyvsp[-1].case_list), 
(yyvsp[0].case_clausule)); }
-#line 2281 "parser.tab.c" /* yacc.c:1646  */
+#line 2265 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 76:
 #line 464 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_clausule(ctx, (yyvsp[-2].expr), 
(yyvsp[0].statement_list)); }
-#line 2287 "parser.tab.c" /* yacc.c:1646  */
+#line 2271 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 77:
 #line 469 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_clausule(ctx, NULL, 
(yyvsp[0].statement_list)); }
-#line 2293 "parser.tab.c" /* yacc.c:1646  */
+#line 2277 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 78:
 #line 474 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_throw_statement(ctx, (yyvsp[-1].expr)); }
-#line 2299 "parser.tab.c" /* yacc.c:1646  */
+#line 2283 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 79:
 #line 478 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_try_statement(ctx, (yyvsp[-1].statement), 
(yyvsp[0].catch_block), NULL); }
-#line 2305 "parser.tab.c" /* yacc.c:1646  */
+#line 2289 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 80:
 #line 479 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_try_statement(ctx, (yyvsp[-1].statement), NULL, 
(yyvsp[0].statement)); }
-#line 2311 "parser.tab.c" /* yacc.c:1646  */
+#line 2295 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 81:
 #line 481 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_try_statement(ctx, (yyvsp[-2].statement), 
(yyvsp[-1].catch_block), (yyvsp[0].statement)); }
-#line 2317 "parser.tab.c" /* yacc.c:1646  */
+#line 2301 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 82:
 #line 486 "parser.y" /* yacc.c:1646  */
     { (yyval.catch_block) = new_catch_block(ctx, (yyvsp[-2].identifier), 
(yyvsp[0].statement)); }
-#line 2323 "parser.tab.c" /* yacc.c:1646  */
+#line 2307 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 83:
 #line 490 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 2329 "parser.tab.c" /* yacc.c:1646  */
+#line 2313 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 84:
 #line 494 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = NULL; }
-#line 2335 "parser.tab.c" /* yacc.c:1646  */
+#line 2319 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 85:
 #line 495 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2341 "parser.tab.c" /* yacc.c:1646  */
+#line 2325 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 86:
 #line 498 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2347 "parser.tab.c" /* yacc.c:1646  */
+#line 2331 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 87:
 #line 499 "parser.y" /* yacc.c:1646  */
     { set_error(ctx, JS_E_SYNTAX); YYABORT; }
-#line 2353 "parser.tab.c" /* yacc.c:1646  */
+#line 2337 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 88:
 #line 503 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2359 "parser.tab.c" /* yacc.c:1646  */
+#line 2343 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 89:
 #line 505 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_COMMA, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2365 "parser.tab.c" /* yacc.c:1646  */
+#line 2349 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 90:
 #line 509 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = NULL; }
-#line 2371 "parser.tab.c" /* yacc.c:1646  */
+#line 2355 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 91:
 #line 510 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2377 "parser.tab.c" /* yacc.c:1646  */
+#line 2361 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 92:
 #line 515 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2383 "parser.tab.c" /* yacc.c:1646  */
+#line 2367 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 93:
 #line 517 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_COMMA, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2389 "parser.tab.c" /* yacc.c:1646  */
+#line 2373 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 94:
 #line 520 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = (yyvsp[0].ival); }
-#line 2395 "parser.tab.c" /* yacc.c:1646  */
+#line 2379 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 95:
 #line 521 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = EXPR_ASSIGNDIV; }
-#line 2401 "parser.tab.c" /* yacc.c:1646  */
+#line 2385 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 96:
 #line 525 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2407 "parser.tab.c" /* yacc.c:1646  */
+#line 2391 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 97:
 #line 527 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_ASSIGN, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2413 "parser.tab.c" /* yacc.c:1646  */
+#line 2397 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 98:
 #line 529 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2419 "parser.tab.c" /* yacc.c:1646  */
+#line 2403 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 99:
 #line 534 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2425 "parser.tab.c" /* yacc.c:1646  */
+#line 2409 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 100:
 #line 536 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_ASSIGN, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2431 "parser.tab.c" /* yacc.c:1646  */
+#line 2415 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 101:
 #line 538 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2437 "parser.tab.c" /* yacc.c:1646  */
+#line 2421 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 102:
 #line 542 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2443 "parser.tab.c" /* yacc.c:1646  */
+#line 2427 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 103:
 #line 544 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_conditional_expression(ctx, (yyvsp[-4].expr), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2449 "parser.tab.c" /* yacc.c:1646  */
+#line 2433 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 104:
 #line 549 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2455 "parser.tab.c" /* yacc.c:1646  */
+#line 2439 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 105:
 #line 551 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_conditional_expression(ctx, (yyvsp[-4].expr), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2461 "parser.tab.c" /* yacc.c:1646  */
+#line 2445 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 106:
 #line 555 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2467 "parser.tab.c" /* yacc.c:1646  */
+#line 2451 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 107:
 #line 557 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_OR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2473 "parser.tab.c" /* yacc.c:1646  */
+#line 2457 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 108:
 #line 562 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2479 "parser.tab.c" /* yacc.c:1646  */
+#line 2463 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 109:
 #line 564 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_OR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2485 "parser.tab.c" /* yacc.c:1646  */
+#line 2469 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 110:
 #line 568 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2491 "parser.tab.c" /* yacc.c:1646  */
+#line 2475 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 111:
 #line 570 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_AND, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2497 "parser.tab.c" /* yacc.c:1646  */
+#line 2481 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 112:
 #line 575 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2503 "parser.tab.c" /* yacc.c:1646  */
+#line 2487 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 113:
 #line 577 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_AND, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2509 "parser.tab.c" /* yacc.c:1646  */
+#line 2493 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 114:
 #line 581 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2515 "parser.tab.c" /* yacc.c:1646  */
+#line 2499 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 115:
 #line 583 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BOR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2521 "parser.tab.c" /* yacc.c:1646  */
+#line 2505 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 116:
 #line 588 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2527 "parser.tab.c" /* yacc.c:1646  */
+#line 2511 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 117:
 #line 590 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BOR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2533 "parser.tab.c" /* yacc.c:1646  */
+#line 2517 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 118:
 #line 594 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2539 "parser.tab.c" /* yacc.c:1646  */
+#line 2523 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 119:
 #line 596 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BXOR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2545 "parser.tab.c" /* yacc.c:1646  */
+#line 2529 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 120:
 #line 601 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2551 "parser.tab.c" /* yacc.c:1646  */
+#line 2535 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 121:
 #line 603 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BXOR, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2557 "parser.tab.c" /* yacc.c:1646  */
+#line 2541 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 122:
 #line 607 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2563 "parser.tab.c" /* yacc.c:1646  */
+#line 2547 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 123:
 #line 609 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BAND, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2569 "parser.tab.c" /* yacc.c:1646  */
+#line 2553 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 124:
 #line 614 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2575 "parser.tab.c" /* yacc.c:1646  */
+#line 2559 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 125:
 #line 616 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_BAND, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2581 "parser.tab.c" /* yacc.c:1646  */
+#line 2565 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 126:
 #line 620 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2587 "parser.tab.c" /* yacc.c:1646  */
+#line 2571 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 127:
 #line 622 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2593 "parser.tab.c" /* yacc.c:1646  */
+#line 2577 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 128:
 #line 626 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2599 "parser.tab.c" /* yacc.c:1646  */
+#line 2583 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 129:
 #line 628 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2605 "parser.tab.c" /* yacc.c:1646  */
+#line 2589 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 130:
 #line 632 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2611 "parser.tab.c" /* yacc.c:1646  */
+#line 2595 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 131:
 #line 634 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2617 "parser.tab.c" /* yacc.c:1646  */
+#line 2601 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 132:
 #line 636 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_INSTANCEOF, 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2623 "parser.tab.c" /* yacc.c:1646  */
+#line 2607 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 133:
 #line 638 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_IN, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2629 "parser.tab.c" /* yacc.c:1646  */
+#line 2613 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 134:
 #line 642 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2635 "parser.tab.c" /* yacc.c:1646  */
+#line 2619 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 135:
 #line 644 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2641 "parser.tab.c" /* yacc.c:1646  */
+#line 2625 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 136:
 #line 646 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_INSTANCEOF, 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2647 "parser.tab.c" /* yacc.c:1646  */
+#line 2631 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 137:
 #line 650 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2653 "parser.tab.c" /* yacc.c:1646  */
+#line 2637 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 138:
 #line 652 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, (yyvsp[-1].ival), 
(yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 2659 "parser.tab.c" /* yacc.c:1646  */
+#line 2643 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 139:
 #line 657 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2665 "parser.tab.c" /* yacc.c:1646  */
+#line 2649 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 140:
 #line 659 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_ADD, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2671 "parser.tab.c" /* yacc.c:1646  */
+#line 2655 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 141:
 #line 661 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_SUB, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2677 "parser.tab.c" /* yacc.c:1646  */
+#line 2661 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 142:
 #line 665 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2683 "parser.tab.c" /* yacc.c:1646  */
+#line 2667 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 143:
 #line 667 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_MUL, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2689 "parser.tab.c" /* yacc.c:1646  */
+#line 2673 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 144:
 #line 669 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_DIV, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2695 "parser.tab.c" /* yacc.c:1646  */
+#line 2679 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 145:
 #line 671 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_MOD, (yyvsp[-2].expr), 
(yyvsp[0].expr)); }
-#line 2701 "parser.tab.c" /* yacc.c:1646  */
+#line 2685 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 146:
 #line 675 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2707 "parser.tab.c" /* yacc.c:1646  */
+#line 2691 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 147:
 #line 677 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_DELETE, (yyvsp[0].expr)); }
-#line 2713 "parser.tab.c" /* yacc.c:1646  */
+#line 2697 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 148:
 #line 678 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_VOID, (yyvsp[0].expr)); }
-#line 2719 "parser.tab.c" /* yacc.c:1646  */
+#line 2703 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 149:
 #line 680 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_TYPEOF, (yyvsp[0].expr)); }
-#line 2725 "parser.tab.c" /* yacc.c:1646  */
+#line 2709 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 150:
 #line 681 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_PREINC, (yyvsp[0].expr)); }
-#line 2731 "parser.tab.c" /* yacc.c:1646  */
+#line 2715 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 151:
 #line 682 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_PREDEC, (yyvsp[0].expr)); }
-#line 2737 "parser.tab.c" /* yacc.c:1646  */
+#line 2721 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 152:
 #line 683 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_PLUS, (yyvsp[0].expr)); }
-#line 2743 "parser.tab.c" /* yacc.c:1646  */
+#line 2727 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 153:
 #line 684 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_MINUS, (yyvsp[0].expr)); }
-#line 2749 "parser.tab.c" /* yacc.c:1646  */
+#line 2733 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 154:
 #line 685 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_BITNEG, (yyvsp[0].expr)); }
-#line 2755 "parser.tab.c" /* yacc.c:1646  */
+#line 2739 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 155:
 #line 686 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_LOGNEG, (yyvsp[0].expr)); }
-#line 2761 "parser.tab.c" /* yacc.c:1646  */
+#line 2745 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 156:
 #line 691 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2767 "parser.tab.c" /* yacc.c:1646  */
+#line 2751 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 157:
 #line 693 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_POSTINC, 
(yyvsp[-1].expr)); }
-#line 2773 "parser.tab.c" /* yacc.c:1646  */
+#line 2757 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 158:
 #line 695 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_unary_expression(ctx, EXPR_POSTDEC, 
(yyvsp[-1].expr)); }
-#line 2779 "parser.tab.c" /* yacc.c:1646  */
+#line 2763 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 159:
 #line 700 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2785 "parser.tab.c" /* yacc.c:1646  */
+#line 2769 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 160:
 #line 701 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2791 "parser.tab.c" /* yacc.c:1646  */
+#line 2775 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 161:
 #line 705 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2797 "parser.tab.c" /* yacc.c:1646  */
+#line 2781 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 162:
 #line 706 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_new_expression(ctx, (yyvsp[0].expr), NULL); }
-#line 2803 "parser.tab.c" /* yacc.c:1646  */
+#line 2787 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 163:
 #line 710 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2809 "parser.tab.c" /* yacc.c:1646  */
+#line 2793 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 164:
 #line 711 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2815 "parser.tab.c" /* yacc.c:1646  */
+#line 2799 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 165:
 #line 713 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_ARRAY, (yyvsp[-3].expr), 
(yyvsp[-1].expr)); }
-#line 2821 "parser.tab.c" /* yacc.c:1646  */
+#line 2805 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 166:
 #line 715 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_member_expression(ctx, (yyvsp[-2].expr), 
(yyvsp[0].identifier)); }
-#line 2827 "parser.tab.c" /* yacc.c:1646  */
+#line 2811 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 167:
 #line 717 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_new_expression(ctx, (yyvsp[-1].expr), 
(yyvsp[0].argument_list)); }
-#line 2833 "parser.tab.c" /* yacc.c:1646  */
+#line 2817 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 168:
 #line 722 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_call_expression(ctx, (yyvsp[-1].expr), 
(yyvsp[0].argument_list)); }
-#line 2839 "parser.tab.c" /* yacc.c:1646  */
+#line 2823 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 169:
 #line 724 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_call_expression(ctx, (yyvsp[-1].expr), 
(yyvsp[0].argument_list)); }
-#line 2845 "parser.tab.c" /* yacc.c:1646  */
+#line 2829 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 170:
 #line 726 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_binary_expression(ctx, EXPR_ARRAY, (yyvsp[-3].expr), 
(yyvsp[-1].expr)); }
-#line 2851 "parser.tab.c" /* yacc.c:1646  */
+#line 2835 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 171:
 #line 728 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_member_expression(ctx, (yyvsp[-2].expr), 
(yyvsp[0].identifier)); }
-#line 2857 "parser.tab.c" /* yacc.c:1646  */
+#line 2841 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 172:
 #line 732 "parser.y" /* yacc.c:1646  */
     { (yyval.argument_list) = NULL; }
-#line 2863 "parser.tab.c" /* yacc.c:1646  */
+#line 2847 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 173:
 #line 733 "parser.y" /* yacc.c:1646  */
     { (yyval.argument_list) = (yyvsp[-1].argument_list); }
-#line 2869 "parser.tab.c" /* yacc.c:1646  */
+#line 2853 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 174:
 #line 737 "parser.y" /* yacc.c:1646  */
     { (yyval.argument_list) = new_argument_list(ctx, (yyvsp[0].expr)); }
-#line 2875 "parser.tab.c" /* yacc.c:1646  */
+#line 2859 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 175:
 #line 739 "parser.y" /* yacc.c:1646  */
     { (yyval.argument_list) = argument_list_add(ctx, 
(yyvsp[-2].argument_list), (yyvsp[0].expr)); }
-#line 2881 "parser.tab.c" /* yacc.c:1646  */
+#line 2865 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 176:
 #line 743 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_expression(ctx, EXPR_THIS, 0); }
-#line 2887 "parser.tab.c" /* yacc.c:1646  */
+#line 2871 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 177:
 #line 744 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_identifier_expression(ctx, (yyvsp[0].identifier)); }
-#line 2893 "parser.tab.c" /* yacc.c:1646  */
+#line 2877 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 178:
 #line 745 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_literal_expression(ctx, (yyvsp[0].literal)); }
-#line 2899 "parser.tab.c" /* yacc.c:1646  */
+#line 2883 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 179:
 #line 746 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2905 "parser.tab.c" /* yacc.c:1646  */
+#line 2889 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 180:
 #line 747 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 2911 "parser.tab.c" /* yacc.c:1646  */
+#line 2895 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 181:
 #line 748 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = (yyvsp[-1].expr); }
-#line 2917 "parser.tab.c" /* yacc.c:1646  */
+#line 2901 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 182:
 #line 752 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_array_literal_expression(ctx, NULL, 0); }
-#line 2923 "parser.tab.c" /* yacc.c:1646  */
+#line 2907 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 183:
 #line 753 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_array_literal_expression(ctx, NULL, 
(yyvsp[-1].ival)+1); }
-#line 2929 "parser.tab.c" /* yacc.c:1646  */
+#line 2913 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 184:
 #line 754 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_array_literal_expression(ctx, 
(yyvsp[-1].element_list), 0); }
-#line 2935 "parser.tab.c" /* yacc.c:1646  */
+#line 2919 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 185:
 #line 756 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_array_literal_expression(ctx, 
(yyvsp[-3].element_list), (yyvsp[-1].ival)+1); }
-#line 2941 "parser.tab.c" /* yacc.c:1646  */
+#line 2925 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 186:
 #line 761 "parser.y" /* yacc.c:1646  */
     { (yyval.element_list) = new_element_list(ctx, (yyvsp[-1].ival), 
(yyvsp[0].expr)); }
-#line 2947 "parser.tab.c" /* yacc.c:1646  */
+#line 2931 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 187:
 #line 763 "parser.y" /* yacc.c:1646  */
     { (yyval.element_list) = element_list_add(ctx, (yyvsp[-3].element_list), 
(yyvsp[-1].ival), (yyvsp[0].expr)); }
-#line 2953 "parser.tab.c" /* yacc.c:1646  */
+#line 2937 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 188:
 #line 767 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = 1; }
-#line 2959 "parser.tab.c" /* yacc.c:1646  */
+#line 2943 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 189:
 #line 768 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = (yyvsp[-1].ival) + 1; }
-#line 2965 "parser.tab.c" /* yacc.c:1646  */
+#line 2949 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 190:
 #line 772 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = 0; }
-#line 2971 "parser.tab.c" /* yacc.c:1646  */
+#line 2955 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 191:
 #line 773 "parser.y" /* yacc.c:1646  */
     { (yyval.ival) = (yyvsp[0].ival); }
-#line 2977 "parser.tab.c" /* yacc.c:1646  */
+#line 2961 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 192:
 #line 777 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_prop_and_value_expression(ctx, NULL); }
-#line 2983 "parser.tab.c" /* yacc.c:1646  */
+#line 2967 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 193:
 #line 779 "parser.y" /* yacc.c:1646  */
     { (yyval.expr) = new_prop_and_value_expression(ctx, 
(yyvsp[-1].property_list)); }
-#line 2989 "parser.tab.c" /* yacc.c:1646  */
+#line 2973 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 194:
 #line 784 "parser.y" /* yacc.c:1646  */
     { (yyval.property_list) = new_property_list(ctx, (yyvsp[-2].literal), 
(yyvsp[0].expr)); }
-#line 2995 "parser.tab.c" /* yacc.c:1646  */
+#line 2979 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 195:
 #line 786 "parser.y" /* yacc.c:1646  */
     { (yyval.property_list) = property_list_add(ctx, 
(yyvsp[-4].property_list), (yyvsp[-2].literal), (yyvsp[0].expr)); }
-#line 3001 "parser.tab.c" /* yacc.c:1646  */
+#line 2985 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 196:
 #line 790 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_string_literal(ctx, (yyvsp[0].identifier)); }
-#line 3007 "parser.tab.c" /* yacc.c:1646  */
+#line 2991 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 197:
 #line 791 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_string_literal(ctx, (yyvsp[0].wstr)); }
-#line 3013 "parser.tab.c" /* yacc.c:1646  */
+#line 2997 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 198:
 #line 792 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[0].literal); }
-#line 3019 "parser.tab.c" /* yacc.c:1646  */
+#line 3003 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 199:
 #line 796 "parser.y" /* yacc.c:1646  */
     { (yyval.identifier) = NULL; }
-#line 3025 "parser.tab.c" /* yacc.c:1646  */
+#line 3009 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 200:
 #line 797 "parser.y" /* yacc.c:1646  */
     { (yyval.identifier) = (yyvsp[0].identifier); }
-#line 3031 "parser.tab.c" /* yacc.c:1646  */
+#line 3015 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 201:
 #line 801 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_null_literal(ctx); }
-#line 3037 "parser.tab.c" /* yacc.c:1646  */
+#line 3021 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 202:
 #line 802 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[0].literal); }
-#line 3043 "parser.tab.c" /* yacc.c:1646  */
+#line 3027 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 203:
 #line 803 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[0].literal); }
-#line 3049 "parser.tab.c" /* yacc.c:1646  */
+#line 3033 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 204:
 #line 804 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_string_literal(ctx, (yyvsp[0].wstr)); }
-#line 3055 "parser.tab.c" /* yacc.c:1646  */
+#line 3039 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 205:
 #line 805 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = parse_regexp(ctx);
                                   if(!(yyval.literal)) YYABORT; }
-#line 3062 "parser.tab.c" /* yacc.c:1646  */
+#line 3046 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 206:
 #line 807 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = parse_regexp(ctx);
                                   if(!(yyval.literal)) YYABORT; }
-#line 3069 "parser.tab.c" /* yacc.c:1646  */
+#line 3053 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 207:
 #line 812 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_boolean_literal(ctx, VARIANT_TRUE); }
-#line 3075 "parser.tab.c" /* yacc.c:1646  */
+#line 3059 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 208:
 #line 813 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = new_boolean_literal(ctx, VARIANT_FALSE); }
-#line 3081 "parser.tab.c" /* yacc.c:1646  */
+#line 3065 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 209:
 #line 814 "parser.y" /* yacc.c:1646  */
     { (yyval.literal) = (yyvsp[0].literal); }
-#line 3087 "parser.tab.c" /* yacc.c:1646  */
+#line 3071 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 211:
 #line 818 "parser.y" /* yacc.c:1646  */
     { if(!allow_auto_semicolon(ctx)) {YYABORT;} }
-#line 3093 "parser.tab.c" /* yacc.c:1646  */
+#line 3077 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 213:
 #line 822 "parser.y" /* yacc.c:1646  */
     { set_error(ctx, JS_E_MISSING_LBRACKET); YYABORT; }
-#line 3099 "parser.tab.c" /* yacc.c:1646  */
+#line 3083 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 215:
 #line 826 "parser.y" /* yacc.c:1646  */
     { set_error(ctx, JS_E_MISSING_RBRACKET); YYABORT; }
-#line 3105 "parser.tab.c" /* yacc.c:1646  */
+#line 3089 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 217:
 #line 830 "parser.y" /* yacc.c:1646  */
     { set_error(ctx, JS_E_MISSING_SEMICOLON); YYABORT; }
-#line 3111 "parser.tab.c" /* yacc.c:1646  */
+#line 3095 "parser.tab.c" /* yacc.c:1646  */
     break;
 
 
-#line 3115 "parser.tab.c" /* yacc.c:1646  */
+#line 3099 "parser.tab.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
diff --git a/dll/win32/jscript/parser.tab.h b/dll/win32/jscript/parser.tab.h
index 0233eaf9e4..096db230a2 100644
--- a/dll/win32/jscript/parser.tab.h
+++ b/dll/win32/jscript/parser.tab.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.0.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_PARSER_PARSER_TAB_H_INCLUDED
-# define YY_PARSER_PARSER_TAB_H_INCLUDED
+#ifndef YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
+# define YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -129,4 +129,4 @@ union YYSTYPE
 
 int parser_parse (parser_ctx_t *ctx);
 
-#endif /* !YY_PARSER_PARSER_TAB_H_INCLUDED  */
+#endif /* !YY_PARSER_E_REACTOSSYNC_GCC_DLL_WIN32_JSCRIPT_PARSER_TAB_H_INCLUDED 
 */
diff --git a/dll/win32/jscript/parser.y b/dll/win32/jscript/parser.y
index b97e7fd5e0..59e67575fc 100644
--- a/dll/win32/jscript/parser.y
+++ b/dll/win32/jscript/parser.y
@@ -19,6 +19,12 @@
 %{
 
 #include "jscript.h"
+#include "engine.h"
+#include "parser.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 static int parser_error(parser_ctx_t*,const char*);
 static void set_error(parser_ctx_t*,UINT);
diff --git a/dll/win32/jscript/precomp.h b/dll/win32/jscript/precomp.h
new file mode 100644
index 0000000000..abd64f187f
--- /dev/null
+++ b/dll/win32/jscript/precomp.h
@@ -0,0 +1,24 @@
+
+#ifndef _JSCRIPT_PRECOMP_H
+#define _JSCRIPT_PRECOMP_H
+
+#include <wine/config.h>
+#include <wine/port.h>
+
+#include <assert.h>
+
+#define WIN32_NO_STATUS
+#define _INC_WINDOWS
+#define COM_NO_WINDOWS_H
+
+#include "jscript.h"
+
+#include <objsafe.h>
+
+#include <wine/debug.h>
+
+#include "engine.h"
+#include "parser.h"
+#include "regexp.h"
+
+#endif /* !_JSCRIPT_PRECOMP_H */
diff --git a/dll/win32/jscript/regexp.c b/dll/win32/jscript/regexp.c
index 6152ea0f65..cca7cc556c 100644
--- a/dll/win32/jscript/regexp.c
+++ b/dll/win32/jscript/regexp.c
@@ -31,7 +31,14 @@
  * the Initial Developer. All Rights Reserved.
  */
 
+#include <assert.h>
+
 #include "jscript.h"
+#include "regexp.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 /* FIXME: Better error handling */
 #define ReportRegExpError(a,b,c)
diff --git a/dll/win32/jscript/resource.h b/dll/win32/jscript/resource.h
index f5184bd483..bb78ec19f0 100644
--- a/dll/win32/jscript/resource.h
+++ b/dll/win32/jscript/resource.h
@@ -18,6 +18,8 @@
 
 #pragma once
 
+#include <windef.h>
+
 #define JSCRIPT_MAJOR_VERSION 5
 #define JSCRIPT_MINOR_VERSION 8
 #define JSCRIPT_BUILD_VERSION 16475
diff --git a/dll/win32/jscript/rsrc.rc b/dll/win32/jscript/rsrc.rc
index ea0bdb992f..f843d1e94a 100644
--- a/dll/win32/jscript/rsrc.rc
+++ b/dll/win32/jscript/rsrc.rc
@@ -16,8 +16,6 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include <windef.h>
-
 #include "resource.h"
 
 /* @makedep: jscript.rgs */
diff --git a/dll/win32/jscript/string.c b/dll/win32/jscript/string.c
index 5d636e6d4c..ad978f245c 100644
--- a/dll/win32/jscript/string.c
+++ b/dll/win32/jscript/string.c
@@ -16,7 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "config.h"
+#include "wine/port.h"
+
 #include "jscript.h"
+#include "regexp.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
 
 typedef struct {
     jsdisp_t dispex;
diff --git a/dll/win32/jscript/vbarray.c b/dll/win32/jscript/vbarray.c
index 3f38b582ff..23122282e7 100644
--- a/dll/win32/jscript/vbarray.c
+++ b/dll/win32/jscript/vbarray.c
@@ -18,6 +18,10 @@
 
 #include "jscript.h"
 
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+
 typedef struct {
     jsdisp_t dispex;
 
diff --git a/media/doc/README.WINE b/media/doc/README.WINE
index 93a5a04a6b..bd747fa90b 100644
--- a/media/doc/README.WINE
+++ b/media/doc/README.WINE
@@ -85,7 +85,7 @@ reactos/dll/win32/inseng              # Synced to 
WineStaging-3.3
 reactos/dll/win32/iphlpapi            # Out of sync
 reactos/dll/win32/itircl              # Synced to WineStaging-3.3
 reactos/dll/win32/itss                # Synced to WineStaging-3.3
-reactos/dll/win32/jscript             # Synced to Wine-3.0
+reactos/dll/win32/jscript             # Synced to WineStaging-3.3
 reactos/dll/win32/jsproxy             # Synced to WineStaging-2.16
 reactos/dll/win32/loadperf            # Synced to WineStaging-2.9
 reactos/dll/win32/lz32                # Synced to WineStaging-2.9

Reply via email to