diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 03804bbdfca..60925552503 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -49,9 +49,14 @@ static const WCHAR unshiftW[] = {'u','n','s','h','i','f','t',0}; static const WCHAR default_separatorW[] = {',',0}; +static inline ArrayInstance *array_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, ArrayInstance, dispex); +} + static inline ArrayInstance *array_from_vdisp(vdisp_t *vdisp) { - return (ArrayInstance*)vdisp->u.jsdisp; + return array_from_jsdisp(vdisp->u.jsdisp); } static inline ArrayInstance *array_this(vdisp_t *jsthis) @@ -113,13 +118,11 @@ static WCHAR *idx_to_str(DWORD idx, WCHAR *ptr) return ptr+1; } -static HRESULT Array_get_length(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Array_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - ArrayInstance *This = array_from_vdisp(jsthis); + TRACE("%p\n", jsthis); - TRACE("%p %d\n", This, This->length); - - *r = jsval_number(This->length); + *r = jsval_number(array_from_jsdisp(jsthis)->length); return S_OK; } @@ -995,11 +998,13 @@ static HRESULT Array_unshift(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsi return S_OK; } -static HRESULT Array_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Array_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { + ArrayInstance *array = array_from_jsdisp(jsthis); + TRACE("\n"); - return array_join(ctx, jsthis->u.jsdisp, array_from_vdisp(jsthis)->length, default_separatorW, r); + return array_join(ctx, &array->dispex, array->length, default_separatorW, r); } static void Array_destructor(jsdisp_t *dispex) diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c index 6cd5a7521fa..5e5ef1c3c6d 100644 --- a/dlls/jscript/date.c +++ b/dlls/jscript/date.c @@ -94,9 +94,14 @@ static const WCHAR setYearW[] = {'s','e','t','Y','e','a','r',0}; static const WCHAR UTCW[] = {'U','T','C',0}; static const WCHAR parseW[] = {'p','a','r','s','e',0}; +static inline DateInstance *date_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, DateInstance, dispex); +} + static inline DateInstance *date_this(vdisp_t *jsthis) { - return is_vclass(jsthis, JSCLASS_DATE) ? (DateInstance*)jsthis->u.jsdisp : NULL; + return is_vclass(jsthis, JSCLASS_DATE) ? date_from_jsdisp(jsthis->u.jsdisp) : NULL; } /*ECMA-262 3rd Edition 15.9.1.2 */ @@ -1917,11 +1922,11 @@ static HRESULT Date_setYear(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsi return S_OK; } -static HRESULT Date_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Date_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); - return dateobj_to_string((DateInstance*)jsthis->u.jsdisp, r); + return dateobj_to_string(date_from_jsdisp(jsthis), r); } static const builtin_prop_t Date_props[] = { diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index c3de526060b..6f225da3fb1 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -421,11 +421,7 @@ static HRESULT prop_get(jsdisp_t *This, dispex_prop_t *prop, DISPPARAMS *dp, switch(prop->type) { case PROP_BUILTIN: if(prop->u.p->getter) { - vdisp_t vthis; - - set_jsdisp(&vthis, This); - hres = prop->u.p->getter(This->ctx, &vthis, r); - vdisp_release(&vthis); + hres = prop->u.p->getter(This->ctx, This, r); }else { jsdisp_t *obj; diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index 81a4c092c10..ec610cfd6b5 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -43,9 +43,14 @@ typedef struct { jsdisp_t *var_obj; } ArgumentsInstance; +static inline FunctionInstance *function_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, FunctionInstance, dispex); +} + static inline FunctionInstance *function_from_vdisp(vdisp_t *vdisp) { - return (FunctionInstance*)vdisp->u.jsdisp; + return function_from_jsdisp(vdisp->u.jsdisp); } static inline FunctionInstance *function_this(vdisp_t *jsthis) @@ -362,13 +367,11 @@ HRESULT Function_invoke(jsdisp_t *func_this, IDispatch *jsthis, WORD flags, unsi return invoke_source(function->dispex.ctx, function, jsthis, argc, argv, r); } -static HRESULT Function_get_length(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Function_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - FunctionInstance *This = function_from_vdisp(jsthis); + TRACE("%p\n", jsthis); - TRACE("%p %d\n", This, This->length); - - *r = jsval_number(This->length); + *r = jsval_number(function_from_jsdisp(jsthis)->length); return S_OK; } @@ -538,15 +541,14 @@ HRESULT Function_value(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned return invoke_value_proc(ctx, function, NULL, flags, argc, argv, r); } -HRESULT Function_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +HRESULT Function_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - FunctionInstance *function = (FunctionInstance*)jsthis->u.jsdisp; jsstr_t *str; HRESULT hres; TRACE("\n"); - hres = function_to_string(function, &str); + hres = function_to_string(function_from_jsdisp(jsthis), &str); if(FAILED(hres)) return hres; @@ -554,9 +556,9 @@ HRESULT Function_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) return S_OK; } -static HRESULT Function_get_arguments(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Function_get_arguments(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - FunctionInstance *function = (FunctionInstance*)jsthis->u.jsdisp; + FunctionInstance *function = function_from_jsdisp(jsthis); TRACE("\n"); diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 38baa074489..9dd772b1b4b 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -187,7 +187,7 @@ static inline jsdisp_t *get_jsdisp(vdisp_t *vdisp) } typedef HRESULT (*builtin_invoke_t)(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*); -typedef HRESULT (*builtin_getter_t)(script_ctx_t*,vdisp_t*,jsval_t*); +typedef HRESULT (*builtin_getter_t)(script_ctx_t*,jsdisp_t*,jsval_t*); typedef HRESULT (*builtin_setter_t)(script_ctx_t*,vdisp_t*,jsval_t); HRESULT builtin_set_const(script_ctx_t*,vdisp_t*,jsval_t) DECLSPEC_HIDDEN; @@ -296,7 +296,7 @@ HRESULT create_builtin_constructor(script_ctx_t*,builtin_invoke_t,const WCHAR*,c HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN; HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN; -HRESULT Function_get_value(script_ctx_t*,vdisp_t*,jsval_t*) DECLSPEC_HIDDEN; +HRESULT Function_get_value(script_ctx_t*,jsdisp_t*,jsval_t*) DECLSPEC_HIDDEN; #define DEFAULT_FUNCTION_VALUE {NULL, Function_value,0, Function_get_value} HRESULT throw_eval_error(script_ctx_t*,HRESULT,const WCHAR*) DECLSPEC_HIDDEN; diff --git a/dlls/jscript/jsregexp.c b/dlls/jscript/jsregexp.c index 4bec773d00f..ed3d0b1728a 100644 --- a/dlls/jscript/jsregexp.c +++ b/dlls/jscript/jsregexp.c @@ -58,9 +58,14 @@ static const WCHAR idx7W[] = {'$','7',0}; static const WCHAR idx8W[] = {'$','8',0}; static const WCHAR idx9W[] = {'$','9',0}; +static inline RegExpInstance *regexp_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, RegExpInstance, dispex); +} + static inline RegExpInstance *regexp_from_vdisp(vdisp_t *vdisp) { - return (RegExpInstance*)vdisp->u.jsdisp; + return regexp_from_jsdisp(vdisp->u.jsdisp); } static void set_last_index(RegExpInstance *This, DWORD last_index) @@ -243,13 +248,11 @@ static HRESULT regexp_match(script_ctx_t *ctx, jsdisp_t *dispex, jsstr_t *jsstr, return S_OK; } -static HRESULT RegExp_get_source(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExp_get_source(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - RegExpInstance *This = regexp_from_vdisp(jsthis); - TRACE("\n"); - *r = jsval_string(jsstr_addref(This->str)); + *r = jsval_string(jsstr_addref(regexp_from_jsdisp(jsthis)->str)); return S_OK; } @@ -259,7 +262,7 @@ static HRESULT RegExp_set_source(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t val return E_NOTIMPL; } -static HRESULT RegExp_get_global(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExp_get_global(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { FIXME("\n"); return E_NOTIMPL; @@ -271,7 +274,7 @@ static HRESULT RegExp_set_global(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t val return E_NOTIMPL; } -static HRESULT RegExp_get_ignoreCase(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExp_get_ignoreCase(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { FIXME("\n"); return E_NOTIMPL; @@ -283,7 +286,7 @@ static HRESULT RegExp_set_ignoreCase(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t return E_NOTIMPL; } -static HRESULT RegExp_get_multiline(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExp_get_multiline(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { FIXME("\n"); return E_NOTIMPL; @@ -310,9 +313,9 @@ static INT index_from_val(script_ctx_t *ctx, jsval_t v) return is_int32(n) ? n : 0; } -static HRESULT RegExp_get_lastIndex(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExp_get_lastIndex(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - RegExpInstance *regexp = regexp_from_vdisp(jsthis); + RegExpInstance *regexp = regexp_from_jsdisp(jsthis); TRACE("\n"); @@ -854,61 +857,61 @@ static HRESULT global_idx(script_ctx_t *ctx, DWORD idx, jsval_t *r) return S_OK; } -static HRESULT RegExpConstr_get_idx1(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx1(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 0, r); } -static HRESULT RegExpConstr_get_idx2(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx2(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 1, r); } -static HRESULT RegExpConstr_get_idx3(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx3(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 2, r); } -static HRESULT RegExpConstr_get_idx4(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx4(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 3, r); } -static HRESULT RegExpConstr_get_idx5(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx5(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 4, r); } -static HRESULT RegExpConstr_get_idx6(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx6(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 5, r); } -static HRESULT RegExpConstr_get_idx7(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx7(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 6, r); } -static HRESULT RegExpConstr_get_idx8(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx8(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 7, r); } -static HRESULT RegExpConstr_get_idx9(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_idx9(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { TRACE("\n"); return global_idx(ctx, 8, r); } -static HRESULT RegExpConstr_get_leftContext(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_leftContext(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { jsstr_t *ret; @@ -922,7 +925,7 @@ static HRESULT RegExpConstr_get_leftContext(script_ctx_t *ctx, vdisp_t *jsthis, return S_OK; } -static HRESULT RegExpConstr_get_rightContext(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT RegExpConstr_get_rightContext(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { jsstr_t *ret; diff --git a/dlls/jscript/number.c b/dlls/jscript/number.c index 4338addaaea..0a648d05310 100644 --- a/dlls/jscript/number.c +++ b/dlls/jscript/number.c @@ -44,9 +44,14 @@ static const WCHAR valueOfW[] = {'v','a','l','u','e','O','f',0}; #define NUMBER_TOSTRING_BUF_SIZE 64 #define NUMBER_DTOA_SIZE 18 +static inline NumberInstance *number_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, NumberInstance, dispex); +} + static inline NumberInstance *number_from_vdisp(vdisp_t *vdisp) { - return (NumberInstance*)vdisp->u.jsdisp; + return number_from_jsdisp(vdisp->u.jsdisp); } static inline NumberInstance *number_this(vdisp_t *jsthis) @@ -500,9 +505,9 @@ static HRESULT Number_valueOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, un return S_OK; } -static HRESULT Number_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Number_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - NumberInstance *number = number_from_vdisp(jsthis); + NumberInstance *number = number_from_jsdisp(jsthis); TRACE("(%p)\n", number); diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index e19611438cd..ffb7ff8ceb5 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -207,7 +207,7 @@ static HRESULT Object_isPrototypeOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD fla return E_NOTIMPL; } -static HRESULT Object_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT Object_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { jsstr_t *ret; diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c index 4276f92cfaa..3f8367589c5 100644 --- a/dlls/jscript/string.c +++ b/dlls/jscript/string.c @@ -68,9 +68,14 @@ static const WCHAR toLocaleUpperCaseW[] = {'t','o','L','o','c','a','l','e','U',' static const WCHAR localeCompareW[] = {'l','o','c','a','l','e','C','o','m','p','a','r','e',0}; static const WCHAR fromCharCodeW[] = {'f','r','o','m','C','h','a','r','C','o','d','e',0}; +static inline StringInstance *string_from_jsdisp(jsdisp_t *jsdisp) +{ + return CONTAINING_RECORD(jsdisp, StringInstance, dispex); +} + static inline StringInstance *string_from_vdisp(vdisp_t *vdisp) { - return (StringInstance*)vdisp->u.jsdisp; + return string_from_jsdisp(vdisp->u.jsdisp); } static inline StringInstance *string_this(vdisp_t *jsthis) @@ -106,9 +111,9 @@ static HRESULT get_string_flat_val(script_ctx_t *ctx, vdisp_t *jsthis, jsstr_t * return E_OUTOFMEMORY; } -static HRESULT String_get_length(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT String_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - StringInstance *string = string_from_vdisp(jsthis); + StringInstance *string = (StringInstance*)jsthis; TRACE("%p\n", jsthis); @@ -1467,9 +1472,9 @@ static HRESULT String_localeCompare(script_ctx_t *ctx, vdisp_t *jsthis, WORD fla return E_NOTIMPL; } -static HRESULT String_get_value(script_ctx_t *ctx, vdisp_t *jsthis, jsval_t *r) +static HRESULT String_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) { - StringInstance *This = string_from_vdisp(jsthis); + StringInstance *This = (StringInstance*)jsthis; TRACE("\n");