[JSCRIPT] Sync with Wine 3.0. CORE-14225
authorAmine Khaldi <amine.khaldi@reactos.org>
Thu, 18 Jan 2018 23:45:08 +0000 (00:45 +0100)
committerAmine Khaldi <amine.khaldi@reactos.org>
Thu, 18 Jan 2018 23:45:08 +0000 (00:45 +0100)
dll/win32/jscript/compile.c
dll/win32/jscript/dispex.c
dll/win32/jscript/engine.c
dll/win32/jscript/jsutils.c
media/doc/README.WINE

index 7afbf01..b9dff8f 100644 (file)
@@ -1867,12 +1867,13 @@ static BOOL alloc_variable(compiler_ctx_t *ctx, const WCHAR *name)
     return alloc_local(ctx, ident, ctx->func->var_cnt++);
 }
 
     return alloc_local(ctx, ident, ctx->func->var_cnt++);
 }
 
-static BOOL visit_function_expression(compiler_ctx_t *ctx, function_expression_t *expr)
+static HRESULT visit_function_expression(compiler_ctx_t *ctx, function_expression_t *expr)
 {
     expr->func_id = ctx->func->func_cnt++;
     ctx->func_tail = ctx->func_tail ? (ctx->func_tail->next = expr) : (ctx->func_head = expr);
 
 {
     expr->func_id = ctx->func->func_cnt++;
     ctx->func_tail = ctx->func_tail ? (ctx->func_tail->next = expr) : (ctx->func_head = expr);
 
-    return !expr->identifier || expr->event_target || alloc_variable(ctx, expr->identifier);
+    return !expr->identifier || expr->event_target || alloc_variable(ctx, expr->identifier)
+        ? S_OK : E_OUTOFMEMORY;
 }
 
 static HRESULT visit_expression(compiler_ctx_t *ctx, expression_t *expr)
 }
 
 static HRESULT visit_expression(compiler_ctx_t *ctx, expression_t *expr)
@@ -1985,7 +1986,7 @@ static HRESULT visit_expression(compiler_ctx_t *ctx, expression_t *expr)
         break;
     }
     case EXPR_FUNC:
         break;
     }
     case EXPR_FUNC:
-        visit_function_expression(ctx, (function_expression_t*)expr);
+        hres = visit_function_expression(ctx, (function_expression_t*)expr);
         break;
     case EXPR_MEMBER:
         hres = visit_expression(ctx, ((member_expression_t*)expr)->expression);
         break;
     case EXPR_MEMBER:
         hres = visit_expression(ctx, ((member_expression_t*)expr)->expression);
index a6c14d6..8bc03d1 100644 (file)
@@ -1096,6 +1096,8 @@ HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, uns
             return E_FAIL;
         }
 
             return E_FAIL;
         }
 
+        if(ctx != jsdisp->ctx)
+            flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
         hres = jsdisp_call(jsdisp, id, flags, argc, argv, ret);
         jsdisp_release(jsdisp);
         return hres;
         hres = jsdisp_call(jsdisp, id, flags, argc, argv, ret);
         jsdisp_release(jsdisp);
         return hres;
@@ -1184,6 +1186,8 @@ HRESULT disp_call_value(script_ctx_t *ctx, IDispatch *disp, IDispatch *jsthis, W
 
     jsdisp = iface_to_jsdisp(disp);
     if(jsdisp) {
 
     jsdisp = iface_to_jsdisp(disp);
     if(jsdisp) {
+        if(ctx != jsdisp->ctx)
+            flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
         hres = jsdisp_call_value(jsdisp, jsthis, flags, argc, argv, r);
         jsdisp_release(jsdisp);
         return hres;
         hres = jsdisp_call_value(jsdisp, jsthis, flags, argc, argv, r);
         jsdisp_release(jsdisp);
         return hres;
index a731930..16fe6aa 100644 (file)
@@ -18,8 +18,6 @@
 
 #include "jscript.h"
 
 
 #include "jscript.h"
 
-WINE_DECLARE_DEBUG_CHANNEL(jscript_except);
-
 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};
 static const WCHAR numberW[] = {'n','u','m','b','e','r',0};
 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};
 static const WCHAR numberW[] = {'n','u','m','b','e','r',0};
@@ -2661,29 +2659,27 @@ static void print_backtrace(script_ctx_t *ctx)
     call_frame_t *frame;
 
     for(frame = ctx->call_ctx; frame; frame = frame->prev_frame) {
     call_frame_t *frame;
 
     for(frame = ctx->call_ctx; frame; frame = frame->prev_frame) {
-        TRACE_(jscript_except)("%u\t", depth);
+        WARN("%u\t", depth);
         depth++;
 
         if(frame->this_obj && frame->this_obj != to_disp(ctx->global) && frame->this_obj != ctx->host_global)
         depth++;
 
         if(frame->this_obj && frame->this_obj != to_disp(ctx->global) && frame->this_obj != ctx->host_global)
-            TRACE_(jscript_except)("%p->", frame->this_obj);
-        TRACE_(jscript_except)("%s(", frame->function->name ? debugstr_w(frame->function->name) : "[unnamed]");
+            WARN("%p->", frame->this_obj);
+        WARN("%s(", frame->function->name ? debugstr_w(frame->function->name) : "[unnamed]");
         if(frame->base_scope && frame->base_scope->frame) {
             for(i=0; i < frame->argc; i++) {
                 if(i < frame->function->param_cnt)
         if(frame->base_scope && frame->base_scope->frame) {
             for(i=0; i < frame->argc; i++) {
                 if(i < frame->function->param_cnt)
-                    TRACE_(jscript_except)("%s%s=%s", i ? ", " : "",
-                                           debugstr_w(frame->function->params[i]),
-                                           debugstr_jsval(ctx->stack[local_off(frame, -i-1)]));
+                    WARN("%s%s=%s", i ? ", " : "", debugstr_w(frame->function->params[i]),
+                         debugstr_jsval(ctx->stack[local_off(frame, -i-1)]));
                 else
                 else
-                    TRACE_(jscript_except)("%s%s", i ? ", " : "",
-                                           debugstr_jsval(ctx->stack[local_off(frame, -i-1)]));
+                    WARN("%s%s", i ? ", " : "", debugstr_jsval(ctx->stack[local_off(frame, -i-1)]));
             }
         }else {
             }
         }else {
-            TRACE_(jscript_except)("[detached frame]");
+            WARN("[detached frame]");
         }
         }
-        TRACE_(jscript_except)(")\n");
+        WARN(")\n");
 
         if(!(frame->flags & EXEC_RETURN_TO_INTERP)) {
 
         if(!(frame->flags & EXEC_RETURN_TO_INTERP)) {
-            TRACE_(jscript_except)("%u\t[native code]\n", depth);
+            WARN("%u\t[native code]\n", depth);
             depth++;
         }
     }
             depth++;
         }
     }
@@ -2697,26 +2693,24 @@ static HRESULT unwind_exception(script_ctx_t *ctx, HRESULT exception_hres)
     unsigned catch_off;
     HRESULT hres;
 
     unsigned catch_off;
     HRESULT hres;
 
-    TRACE("%08x\n", exception_hres);
-
-    if(TRACE_ON(jscript_except)) {
+    if(WARN_ON(jscript)) {
         jsdisp_t *error_obj;
         jsval_t msg;
 
         static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0};
 
         jsdisp_t *error_obj;
         jsval_t msg;
 
         static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0};
 
-        TRACE_(jscript_except)("Exception %08x %s", exception_hres, debugstr_jsval(ctx->ei.val));
+        WARN("Exception %08x %s", exception_hres, debugstr_jsval(ctx->ei.val));
         if(jsval_type(ctx->ei.val) == JSV_OBJECT) {
             error_obj = to_jsdisp(get_object(ctx->ei.val));
             if(error_obj) {
                 hres = jsdisp_propget_name(error_obj, messageW, &msg);
                 if(SUCCEEDED(hres)) {
         if(jsval_type(ctx->ei.val) == JSV_OBJECT) {
             error_obj = to_jsdisp(get_object(ctx->ei.val));
             if(error_obj) {
                 hres = jsdisp_propget_name(error_obj, messageW, &msg);
                 if(SUCCEEDED(hres)) {
-                    TRACE_(jscript_except)(" (message %s)", debugstr_jsval(msg));
+                    WARN(" (message %s)", debugstr_jsval(msg));
                     jsval_release(msg);
                 }
             }
         }
                     jsval_release(msg);
                 }
             }
         }
-        TRACE_(jscript_except)(" in:\n");
+        WARN(" in:\n");
 
         print_backtrace(ctx);
     }
 
         print_backtrace(ctx);
     }
index 20b30f0..fb691af 100644 (file)
@@ -287,12 +287,22 @@ HRESULT variant_to_jsval(VARIANT *var, jsval_t *r)
     case VT_I2:
         *r = jsval_number(V_I2(var));
         return S_OK;
     case VT_I2:
         *r = jsval_number(V_I2(var));
         return S_OK;
+    case VT_UI2:
+        *r = jsval_number(V_UI2(var));
+        return S_OK;
     case VT_INT:
         *r = jsval_number(V_INT(var));
         return S_OK;
     case VT_UI4:
         *r = jsval_number(V_UI4(var));
         return S_OK;
     case VT_INT:
         *r = jsval_number(V_INT(var));
         return S_OK;
     case VT_UI4:
         *r = jsval_number(V_UI4(var));
         return S_OK;
+    case VT_UI8:
+        /*
+         * Native doesn't support VT_UI8 here, but it's needed for IE9+ APIs
+         * (native IE9 doesn't use jscript.dll for JavaScript).
+         */
+        *r = jsval_number(V_UI8(var));
+        return S_OK;
     case VT_R4:
         *r = jsval_number(V_R4(var));
         return S_OK;
     case VT_R4:
         *r = jsval_number(V_R4(var));
         return S_OK;
index 52792aa..13f6bdd 100644 (file)
@@ -85,7 +85,7 @@ reactos/dll/win32/inseng              # Synced to Wine-3.0
 reactos/dll/win32/iphlpapi            # Out of sync
 reactos/dll/win32/itircl              # Synced to WineStaging-2.9
 reactos/dll/win32/itss                # Synced to Wine-3.0
 reactos/dll/win32/iphlpapi            # Out of sync
 reactos/dll/win32/itircl              # Synced to WineStaging-2.9
 reactos/dll/win32/itss                # Synced to Wine-3.0
-reactos/dll/win32/jscript             # Synced to WineStaging-2.16
+reactos/dll/win32/jscript             # Synced to Wine-3.0
 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
 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