[PATCH 7/8] jscript: Implement separate script dispatch objects for each named item.

Jacek Caban jacek at codeweavers.com
Thu Feb 20 14:41:41 CST 2020


Hi Gabriel,

First of all, this patch breaks mshtml script tests. It's likely that 
it's mshtml's fault, but we need to get it working.

On 19.02.2020 17:38, Gabriel Ivăncescu wrote:
> -void enter_script(script_ctx_t *ctx, jsexcept_t *ei)
> +HRESULT enter_script(script_ctx_t *ctx, named_item_t *item, jsexcept_t *ei)
>   {
> +    HRESULT hres;
> +
>       memset(ei, 0, sizeof(*ei));
> +    if(item) {
> +        if(!item->script_obj) {
> +            hres = create_named_item_script_obj(ctx, item);
> +            if(FAILED(hres)) return hres;
> +        }


Can we have it in exec_source instead? If nothing else, it would 
simplify enter_script error handling.


> diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
> index 8297838..9492f3f 100644
> --- a/dlls/jscript/jscript.h
> +++ b/dlls/jscript/jscript.h
> @@ -205,7 +205,9 @@ typedef HRESULT (*builtin_setter_t)(script_ctx_t*,jsdisp_t*,jsval_t);
>   HRESULT builtin_set_const(script_ctx_t*,jsdisp_t*,jsval_t) DECLSPEC_HIDDEN;
>   
>   typedef struct named_item_t {
> +    jsdisp_t *script_obj;
>       IDispatch *disp;
> +    unsigned ref;


Maybe ref counting would make sense in a separated patch?


>       DWORD flags;
>       LPWSTR name;
>   
> @@ -213,6 +215,7 @@ typedef struct named_item_t {
>   } named_item_t;
>   
>   named_item_t*lookup_named_item(script_ctx_t*,const WCHAR*,unsigned) DECLSPEC_HIDDEN;
> +void release_named_item(named_item_t*) DECLSPEC_HIDDEN;
>   
>   typedef struct {
>       const WCHAR *name;
> @@ -243,6 +246,7 @@ struct jsdisp_t {
>       DWORD prop_cnt;
>       dispex_prop_t *props;
>       script_ctx_t *ctx;
> +    named_item_t *named_item;


I'd rather avoid having it here. I think that we should almost always be 
getting it from bytecode. In some corner cases, jsexcept should be 
enough to fill the gap.


>       jsdisp_t *prototype;
>   
> @@ -433,6 +437,7 @@ struct _script_ctx_t {
>       DWORD last_match_length;
>   
>       jsdisp_t *global;
> +    jsdisp_t *item_context;


Same here, do we really need it?


Thanks,

Jacek


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200220/a9eb9f77/attachment-0001.htm>


More information about the wine-devel mailing list