Jacek Caban : jscript: Use already running interpreter for Function.apply( ) execution.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Mar 30 10:00:30 CDT 2016


Module: wine
Branch: master
Commit: 813609b8436b09373529652795856937e46b0e73
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=813609b8436b09373529652795856937e46b0e73

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Mar 29 17:49:28 2016 +0200

jscript: Use already running interpreter for Function.apply() execution.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/jscript/dispex.c   | 3 ++-
 dlls/jscript/function.c | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 5abb3a7..4f5a35f 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -377,7 +377,8 @@ static HRESULT invoke_prop_func(jsdisp_t *This, IDispatch *jsthis, dispex_prop_t
         if(prop->name || This->builtin_info->class != JSCLASS_FUNCTION) {
             vdisp_t vthis;
 
-            flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
+            if(This->builtin_info->class != JSCLASS_FUNCTION)
+                flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
             if(jsthis)
                 set_disp(&vthis, jsthis);
             else
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 617d835..45d5bab 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -274,12 +274,12 @@ static HRESULT invoke_value_proc(script_ctx_t *ctx, FunctionInstance *function,
 }
 
 static HRESULT call_function(script_ctx_t *ctx, FunctionInstance *function, IDispatch *this_obj,
-        unsigned argc, jsval_t *argv, jsval_t *r)
+        unsigned argc, jsval_t *argv, BOOL caller_execs_source, jsval_t *r)
 {
     if(function->value_proc)
         return invoke_value_proc(ctx, function, this_obj, DISPATCH_METHOD, argc, argv, r);
 
-    return invoke_source(ctx, function, this_obj, argc, argv, FALSE, FALSE, r);
+    return invoke_source(ctx, function, this_obj, argc, argv, FALSE, caller_execs_source, r);
 }
 
 static HRESULT function_to_string(FunctionInstance *function, jsstr_t **ret)
@@ -459,7 +459,7 @@ static HRESULT Function_apply(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un
     }
 
     if(SUCCEEDED(hres))
-        hres = call_function(ctx, function, this_obj, cnt, args, r);
+        hres = call_function(ctx, function, this_obj, cnt, args, (flags & DISPATCH_JSCRIPT_CALLEREXECSSOURCE) != 0, r);
 
     if(this_obj)
         IDispatch_Release(this_obj);
@@ -492,7 +492,7 @@ static HRESULT Function_call(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
         cnt = argc-1;
     }
 
-    hres = call_function(ctx, function, this_obj, cnt, argv+1, r);
+    hres = call_function(ctx, function, this_obj, cnt, argv+1, FALSE, r);
 
     if(this_obj)
         IDispatch_Release(this_obj);




More information about the wine-cvs mailing list