Jacek Caban : jscript: Move handling PROPF_WRITABLE to property type specific code.

Alexandre Julliard julliard at winehq.org
Tue May 15 16:25:22 CDT 2018


Module: wine
Branch: master
Commit: 887840a888d26f1d4cfc554d3e408f81d3858ea2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=887840a888d26f1d4cfc554d3e408f81d3858ea2

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue May 15 13:26:38 2018 +0200

jscript: Move handling PROPF_WRITABLE to property type specific code.

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

---

 dlls/jscript/dispex.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 2557471..e6835db 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -495,28 +495,34 @@ static HRESULT prop_put(jsdisp_t *This, dispex_prop_t *prop, jsval_t val)
 {
     HRESULT hres;
 
-    if(!(prop->flags & PROPF_WRITABLE) && prop->type != PROP_PROTREF)
-        return S_OK;
 
     switch(prop->type) {
     case PROP_BUILTIN:
-        if(prop->u.p->setter)
-            return prop->u.p->setter(This->ctx, This, val);
-
-        if(prop->u.p->setter) {
-            FIXME("getter with no setter\n");
-            return E_FAIL;
+        if(!prop->u.p->setter) {
+            TRACE("getter with no setter\n");
+            return S_OK;
         }
-        /* fall through */
+        return prop->u.p->setter(This->ctx, This, val);
     case PROP_PROTREF:
+    case PROP_DELETED:
         prop->type = PROP_JSVAL;
         prop->flags = PROPF_ENUMERABLE | PROPF_CONFIGURABLE | PROPF_WRITABLE;
         prop->u.val = jsval_undefined();
         break;
     case PROP_JSVAL:
+        if(!(prop->flags & PROPF_WRITABLE))
+            return S_OK;
+
         jsval_release(prop->u.val);
         break;
+    case PROP_ACCESSOR:
+        FIXME("not supported for accessor properties\n");
+        return E_NOTIMPL;
     case PROP_IDX:
+        if(!This->builtin_info->idx_put) {
+            TRACE("no put_idx\n");
+            return S_OK;
+        }
         return This->builtin_info->idx_put(This, prop->u.idx, val);
     default:
         ERR("type %d\n", prop->type);




More information about the wine-cvs mailing list