[PATCH 9/9] jscript: Use proper error description for invalid Set 'this'.

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Apr 14 11:24:46 CDT 2022


Map and Set share the same error code, but the description given is different,
so we need to throw it manually.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/jscript/jscript.rc |  2 +-
 dlls/jscript/set.c      | 30 +++++++++++++++---------------
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/dlls/jscript/jscript.rc b/dlls/jscript/jscript.rc
index c931eef..2fd0b33 100644
--- a/dlls/jscript/jscript.rc
+++ b/dlls/jscript/jscript.rc
@@ -75,7 +75,7 @@ STRINGTABLE
     IDS_OBJECT_NONEXTENSIBLE       "Cannot define property '|': object is not extensible"
     IDS_NONCONFIGURABLE_REDEFINED  "Cannot redefine non-configurable property '|'"
     IDS_NONWRITABLE_MODIFIED       "Cannot modify non-writable property '|'"
-    IDS_MAP_EXPECTED               "'this' is not a Map object"
+    IDS_MAP_EXPECTED               "'this' is not a | object"
     IDS_PROP_DESC_MISMATCH         "Property cannot have both accessors and a value"
 
     IDS_COMPILATION_ERROR   "Microsoft JScript compilation error"
diff --git a/dlls/jscript/set.c b/dlls/jscript/set.c
index f3e8fe6..dbb4a5d 100644
--- a/dlls/jscript/set.c
+++ b/dlls/jscript/set.c
@@ -86,7 +86,7 @@ static int jsval_map_compare(const void *k, const struct wine_rb_entry *e)
     }
 }
 
-static HRESULT get_map_this(jsval_t vthis, MapInstance **ret)
+static HRESULT get_map_this(script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
 {
     jsdisp_t *jsdisp;
 
@@ -94,14 +94,14 @@ static HRESULT get_map_this(jsval_t vthis, MapInstance **ret)
         return JS_E_OBJECT_EXPECTED;
     if(!(jsdisp = to_jsdisp(get_object(vthis))) || !is_class(jsdisp, JSCLASS_MAP)) {
         WARN("not a Map object passed as 'this'\n");
-        return JS_E_MAP_EXPECTED;
+        return throw_error(ctx, JS_E_MAP_EXPECTED, L"Map");
     }
 
     *ret = CONTAINING_RECORD(jsdisp, MapInstance, dispex);
     return S_OK;
 }
 
-static HRESULT get_set_this(jsval_t vthis, MapInstance **ret)
+static HRESULT get_set_this(script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
 {
     jsdisp_t *jsdisp;
 
@@ -109,7 +109,7 @@ static HRESULT get_set_this(jsval_t vthis, MapInstance **ret)
         return JS_E_OBJECT_EXPECTED;
     if(!(jsdisp = to_jsdisp(get_object(vthis))) || !is_class(jsdisp, JSCLASS_SET)) {
         WARN("not a Set object passed as 'this'\n");
-        return JS_E_MAP_EXPECTED;
+        return throw_error(ctx, JS_E_MAP_EXPECTED, L"Set");
     }
 
     *ret = CONTAINING_RECORD(jsdisp, MapInstance, dispex);
@@ -226,7 +226,7 @@ static HRESULT Map_clear(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -249,7 +249,7 @@ static HRESULT Map_delete(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -266,7 +266,7 @@ static HRESULT Map_forEach(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigne
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -283,7 +283,7 @@ static HRESULT Map_get(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -305,7 +305,7 @@ static HRESULT Map_set(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -322,7 +322,7 @@ static HRESULT Map_has(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar
     MapInstance *map;
     HRESULT hres;
 
-    hres = get_map_this(vthis, &map);
+    hres = get_map_this(ctx, vthis, &map);
     if(FAILED(hres))
         return hres;
 
@@ -431,7 +431,7 @@ static HRESULT Set_add(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar
     MapInstance *set;
     HRESULT hres;
 
-    hres = get_set_this(vthis, &set);
+    hres = get_set_this(ctx, vthis, &set);
     if(FAILED(hres))
         return hres;
 
@@ -446,7 +446,7 @@ static HRESULT Set_clear(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned
     MapInstance *set;
     HRESULT hres;
 
-    hres = get_set_this(vthis, &set);
+    hres = get_set_this(ctx, vthis, &set);
     if(FAILED(hres))
         return hres;
 
@@ -469,7 +469,7 @@ static HRESULT Set_delete(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned
     MapInstance *set;
     HRESULT hres;
 
-    hres = get_set_this(vthis, &set);
+    hres = get_set_this(ctx, vthis, &set);
     if(FAILED(hres))
         return hres;
 
@@ -486,7 +486,7 @@ static HRESULT Set_forEach(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigne
     MapInstance *set;
     HRESULT hres;
 
-    hres = get_set_this(vthis, &set);
+    hres = get_set_this(ctx, vthis, &set);
     if(FAILED(hres))
         return hres;
 
@@ -503,7 +503,7 @@ static HRESULT Set_has(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar
     MapInstance *set;
     HRESULT hres;
 
-    hres = get_set_this(vthis, &set);
+    hres = get_set_this(ctx, vthis, &set);
     if(FAILED(hres))
         return hres;
 
-- 
2.34.1




More information about the wine-devel mailing list