Jacek Caban : jscript: Use helpers to access string buffer in engine.c.

Alexandre Julliard julliard at winehq.org
Wed Mar 27 15:40:05 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar 27 11:02:42 2013 +0100

jscript: Use helpers to access string buffer in engine.c.

---

 dlls/jscript/engine.c |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index a8a9aea..a84faec 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -346,7 +346,7 @@ void exec_release(exec_ctx_t *ctx)
     heap_free(ctx);
 }
 
-static HRESULT disp_get_id(script_ctx_t *ctx, IDispatch *disp, WCHAR *name, BSTR name_bstr, DWORD flags, DISPID *id)
+static HRESULT disp_get_id(script_ctx_t *ctx, IDispatch *disp, const WCHAR *name, BSTR name_bstr, DWORD flags, DISPID *id)
 {
     IDispatchEx *dispex;
     jsdisp_t *jsdisp;
@@ -375,7 +375,7 @@ static HRESULT disp_get_id(script_ctx_t *ctx, IDispatch *disp, WCHAR *name, BSTR
         IDispatchEx_Release(dispex);
     }else {
         TRACE("using IDispatch\n");
-        hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &name, 1, 0, id);
+        hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, id);
     }
 
     if(name_bstr != bstr)
@@ -729,10 +729,12 @@ static HRESULT interp_throw_type(exec_ctx_t *ctx)
 {
     const HRESULT hres = get_op_uint(ctx, 0);
     jsstr_t *str = get_op_str(ctx, 1);
+    const WCHAR *ptr;
 
     TRACE("%08x %s\n", hres, debugstr_jsstr(str));
 
-    return throw_type_error(ctx->script, hres, str->str);
+    ptr = jsstr_flatten(str);
+    return ptr ? throw_type_error(ctx->script, hres, ptr) : E_OUTOFMEMORY;
 }
 
 /* ECMA-262 3rd Edition    12.14 */
@@ -828,9 +830,10 @@ static HRESULT interp_func(exec_ctx_t *ctx)
 /* ECMA-262 3rd Edition    11.2.1 */
 static HRESULT interp_array(exec_ctx_t *ctx)
 {
+    jsstr_t *name_str;
+    const WCHAR *name;
     jsval_t v, namev;
     IDispatch *obj;
-    jsstr_t *name;
     DISPID id;
     HRESULT hres;
 
@@ -844,15 +847,15 @@ static HRESULT interp_array(exec_ctx_t *ctx)
         return hres;
     }
 
-    hres = to_string(ctx->script, namev, &name);
+    hres = to_flat_string(ctx->script, namev, &name_str, &name);
     jsval_release(namev);
     if(FAILED(hres)) {
         IDispatch_Release(obj);
         return hres;
     }
 
-    hres = disp_get_id(ctx->script, obj, name->str, NULL, 0, &id);
-    jsstr_release(name);
+    hres = disp_get_id(ctx->script, obj, name, NULL, 0, &id);
+    jsstr_release(name_str);
     if(SUCCEEDED(hres)) {
         hres = disp_propget(ctx->script, obj, id, &v);
     }else if(hres == DISP_E_UNKNOWNNAME) {
@@ -900,8 +903,9 @@ static HRESULT interp_memberid(exec_ctx_t *ctx)
 {
     const unsigned arg = get_op_uint(ctx, 0);
     jsval_t objv, namev;
+    const WCHAR *name;
+    jsstr_t *name_str;
     IDispatch *obj;
-    jsstr_t *name;
     DISPID id;
     HRESULT hres;
 
@@ -913,7 +917,7 @@ static HRESULT interp_memberid(exec_ctx_t *ctx)
     hres = to_object(ctx->script, objv, &obj);
     jsval_release(objv);
     if(SUCCEEDED(hres)) {
-        hres = to_string(ctx->script, namev, &name);
+        hres = to_flat_string(ctx->script, namev, &name_str, &name);
         if(FAILED(hres))
             IDispatch_Release(obj);
     }
@@ -921,8 +925,8 @@ static HRESULT interp_memberid(exec_ctx_t *ctx)
     if(FAILED(hres))
         return hres;
 
-    hres = disp_get_id(ctx->script, obj, name->str, NULL, arg, &id);
-    jsstr_release(name);
+    hres = disp_get_id(ctx->script, obj, name, NULL, arg, &id);
+    jsstr_release(name_str);
     if(FAILED(hres)) {
         IDispatch_Release(obj);
         if(hres == DISP_E_UNKNOWNNAME && !(arg & fdexNameEnsure)) {
@@ -1392,10 +1396,11 @@ static HRESULT interp_instanceof(exec_ctx_t *ctx)
 /* ECMA-262 3rd Edition    11.8.7 */
 static HRESULT interp_in(exec_ctx_t *ctx)
 {
+    const WCHAR *str;
+    jsstr_t *jsstr;
     jsval_t obj, v;
     DISPID id = 0;
     BOOL ret;
-    jsstr_t *str;
     HRESULT hres;
 
     TRACE("\n");
@@ -1407,16 +1412,16 @@ static HRESULT interp_in(exec_ctx_t *ctx)
     }
 
     v = stack_pop(ctx);
-    hres = to_string(ctx->script, v, &str);
+    hres = to_flat_string(ctx->script, v, &jsstr, &str);
     jsval_release(v);
     if(FAILED(hres)) {
         IDispatch_Release(get_object(obj));
         return hres;
     }
 
-    hres = disp_get_id(ctx->script, get_object(obj), str->str, NULL, 0, &id);
+    hres = disp_get_id(ctx->script, get_object(obj), str, NULL, 0, &id);
     IDispatch_Release(get_object(obj));
-    jsstr_release(str);
+    jsstr_release(jsstr);
     if(SUCCEEDED(hres))
         ret = TRUE;
     else if(hres == DISP_E_UNKNOWNNAME)




More information about the wine-cvs mailing list