ReactOS 0.4.17-dev-357-ga8f14ff
jsval.h File Reference
#include "jsstr.h"
Include dependency graph for jsval.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _jsval_t
 

Macros

#define JSV_VAL(x)   x
 
#define __JSVAL_TYPE(x)   ((x).type)
 
#define __JSVAL_BOOL(x)   ((x).u.b)
 
#define __JSVAL_STR(x)   ((x).u.str)
 
#define __JSVAL_OBJ(x)   ((x).u.obj)
 
#define __JSVAL_VAR(x)   ((x).u.v)
 

Enumerations

enum  jsval_type_t {
  JSV_UNDEFINED = JSV_VAL(1) , JSV_NULL = JSV_VAL(2) , JSV_OBJECT = JSV_VAL(3) , JSV_STRING = JSV_VAL(4) ,
  JSV_NUMBER = JSV_VAL(5) , JSV_BOOL = JSV_VAL(6) , JSV_VARIANT = JSV_VAL(7)
}
 

Functions

static jsval_t jsval_bool (BOOL b)
 
static jsval_t jsval_string (jsstr_t *str)
 
static jsval_t jsval_disp (IDispatch *obj)
 
static jsval_t jsval_obj (jsdisp_t *obj)
 
static jsval_t jsval_null (void)
 
static jsval_t jsval_null_disp (void)
 
static jsval_t jsval_undefined (void)
 
static jsval_t jsval_number (double n)
 
static BOOL is_object_instance (jsval_t v)
 
static BOOL is_undefined (jsval_t v)
 
static BOOL is_null (jsval_t v)
 
static BOOL is_null_disp (jsval_t v)
 
static BOOL is_string (jsval_t v)
 
static BOOL is_number (jsval_t v)
 
static BOOL is_variant (jsval_t v)
 
static BOOL is_bool (jsval_t v)
 
static jsval_type_t jsval_type (jsval_t v)
 
static IDispatchget_object (jsval_t v)
 
static double get_number (jsval_t v)
 
static jsstr_tget_string (jsval_t v)
 
static VARIANTget_variant (jsval_t v)
 
static BOOL get_bool (jsval_t v)
 
HRESULT variant_to_jsval (script_ctx_t *, VARIANT *, jsval_t *)
 
HRESULT jsval_to_variant (jsval_t, VARIANT *)
 
void jsval_release (jsval_t)
 
HRESULT jsval_copy (jsval_t, jsval_t *)
 

Macro Definition Documentation

◆ __JSVAL_BOOL

#define __JSVAL_BOOL (   x)    ((x).u.b)

Definition at line 94 of file jsval.h.

◆ __JSVAL_OBJ

#define __JSVAL_OBJ (   x)    ((x).u.obj)

Definition at line 96 of file jsval.h.

◆ __JSVAL_STR

#define __JSVAL_STR (   x)    ((x).u.str)

Definition at line 95 of file jsval.h.

◆ __JSVAL_TYPE

#define __JSVAL_TYPE (   x)    ((x).type)

Definition at line 93 of file jsval.h.

◆ __JSVAL_VAR

#define __JSVAL_VAR (   x)    ((x).u.v)

Definition at line 97 of file jsval.h.

◆ JSV_VAL

#define JSV_VAL (   x)    x

Definition at line 41 of file jsval.h.

Enumeration Type Documentation

◆ jsval_type_t

Enumerator
JSV_UNDEFINED 
JSV_NULL 
JSV_OBJECT 
JSV_STRING 
JSV_NUMBER 
JSV_BOOL 
JSV_VARIANT 

Definition at line 44 of file jsval.h.

44 {
46 JSV_NULL = JSV_VAL(2),
50 JSV_BOOL = JSV_VAL(6),
jsval_type_t
Definition: jsval.h:44
@ JSV_STRING
Definition: jsval.h:48
@ JSV_NUMBER
Definition: jsval.h:49
@ JSV_VARIANT
Definition: jsval.h:51
@ JSV_OBJECT
Definition: jsval.h:47
@ JSV_NULL
Definition: jsval.h:46
@ JSV_UNDEFINED
Definition: jsval.h:45
@ JSV_BOOL
Definition: jsval.h:50
#define JSV_VAL(x)
Definition: jsval.h:41

Function Documentation

◆ get_bool()

static BOOL get_bool ( jsval_t  v)
inlinestatic

Definition at line 248 of file jsval.h.

249{
250 return __JSVAL_BOOL(v);
251}
const GLdouble * v
Definition: gl.h:2040
#define __JSVAL_BOOL(x)
Definition: jsval.h:94

◆ get_number()

◆ get_object()

static IDispatch * get_object ( jsval_t  v)
inlinestatic

Definition at line 228 of file jsval.h.

229{
230 return __JSVAL_OBJ(v);
231}
#define __JSVAL_OBJ(x)
Definition: jsval.h:96

Referenced by Array_concat(), Array_every(), Array_filter(), Array_forEach(), Array_map(), Array_reduce(), Array_some(), Array_sort(), array_this(), arraybuf_this(), ArrayConstr_isArray(), bind_event_target(), boolval_this(), create_enumerator(), create_regexp_var(), create_signature(), dataview_this(), date_this(), debugstr_jsval(), disp_call_value_with_caller(), DispatchEx_GetTypeInfo(), enumerator_this(), Error_toString(), exprval_call(), Function_apply(), function_this(), gc_process_linked_val(), gc_run(), get_map_this(), get_set_this(), get_weakmap_this(), HostFunction_call(), init_dispex_from_constr(), interp_call(), interp_call_eval(), interp_carray_set(), interp_forin(), interp_in(), interp_instanceof(), interp_new(), interp_obj_prop(), InterpretedFunction_call(), invoke_prop_func(), is_function_prop(), iterate_map(), jsdisp_define_properties(), JSON_parse(), JSON_stringify(), jsval_copy(), jsval_map_compare(), jsval_release(), jsval_strict_equal(), jsval_to_variant(), maybe_to_primitive(), numberval_this(), Object_create(), Object_defineGetter(), Object_defineProperties(), Object_defineProperty(), Object_defineSetter(), Object_freeze(), Object_getOwnPropertyDescriptor(), Object_getPrototypeOf(), Object_isExtensible(), Object_isFrozen(), Object_isPrototypeOf(), Object_isSealed(), object_keys(), Object_preventExtensions(), Object_seal(), Object_set_proto_(), regexp_this(), RegExpConstr_value(), set_error_value(), stack_pop_object(), stack_topn_exprval(), String_match(), String_replace(), String_search(), String_split(), string_this(), stringify(), to_locale_string(), to_object(), to_primitive(), to_property_descriptor(), transform_json_object(), typeof_string(), unwind_exception(), vbarray_this(), WeakMap_delete(), WeakMap_get(), WeakMap_has(), and WeakMap_set().

◆ get_string()

◆ get_variant()

static VARIANT * get_variant ( jsval_t  v)
inlinestatic

Definition at line 243 of file jsval.h.

244{
245 return __JSVAL_VAR(v);
246}
#define __JSVAL_VAR(x)
Definition: jsval.h:97

Referenced by debugstr_jsval(), jsval_copy(), jsval_release(), jsval_to_variant(), to_boolean(), to_number(), to_object(), to_string(), typeof_string(), and VBArrayConstr_value().

◆ is_bool()

static BOOL is_bool ( jsval_t  v)
inlinestatic

Definition at line 214 of file jsval.h.

215{
216 return __JSVAL_TYPE(v) == JSV_BOOL;
217}
#define __JSVAL_TYPE(x)
Definition: jsval.h:93

Referenced by boolval_this(), equal_values(), and interp_end_finally().

◆ is_null()

◆ is_null_disp()

static BOOL is_null_disp ( jsval_t  v)
inlinestatic

Definition at line 190 of file jsval.h.

191{
192 return is_null(v) && __JSVAL_BOOL(v);
193}
static BOOL is_null(jsval_t v)
Definition: jsval.h:185

Referenced by Array_sort(), Function_apply(), Function_call(), interp_instanceof(), interp_new(), Object_valueOf(), stringify(), and to_object().

◆ is_number()

static BOOL is_number ( jsval_t  v)
inlinestatic

Definition at line 200 of file jsval.h.

201{
202#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
203 return (v.u.s.tag & 0x7ff10000) != 0x7ff10000;
204#else
205 return v.type == JSV_NUMBER;
206#endif
207}

Referenced by ArrayConstr_value(), equal_values(), interp_end_finally(), interp_forin(), JSON_stringify(), jsval_type(), numberval_this(), sort_cmp(), and stack_topn_exprval().

◆ is_object_instance()

static BOOL is_object_instance ( jsval_t  v)
inlinestatic

Definition at line 175 of file jsval.h.

176{
177 return __JSVAL_TYPE(v) == JSV_OBJECT;
178}

Referenced by Array_concat(), Array_every(), Array_filter(), Array_forEach(), Array_map(), Array_reduce(), Array_some(), Array_sort(), array_this(), arraybuf_this(), ArrayConstr_isArray(), bind_event_target(), boolval_this(), create_enumerator(), create_regexp_var(), dataview_this(), date_this(), disp_call_value_with_caller(), enumerator_this(), equal_values(), Error_toString(), exprval_call(), Function_apply(), function_this(), gc_process_linked_val(), gc_run(), get_map_this(), get_set_this(), get_weakmap_this(), HostFunction_call(), init_dispex_from_constr(), interp_call(), interp_call_eval(), interp_carray_set(), interp_forin(), interp_in(), interp_instanceof(), interp_new(), interp_obj_prop(), interp_ret(), InterpretedFunction_call(), invoke_prop_func(), is_function_prop(), iterate_map(), jsdisp_define_properties(), JSON_parse(), JSON_stringify(), maybe_to_primitive(), numberval_this(), Object_create(), Object_defineGetter(), Object_defineProperties(), Object_defineProperty(), Object_defineSetter(), Object_freeze(), Object_getOwnPropertyDescriptor(), Object_getPrototypeOf(), Object_isExtensible(), Object_isFrozen(), Object_isPrototypeOf(), Object_isSealed(), object_keys(), Object_preventExtensions(), Object_seal(), Object_set_proto_(), regexp_this(), RegExpConstr_value(), set_error_value(), stack_pop_object(), String_match(), String_replace(), String_search(), String_split(), string_this(), stringify(), to_primitive(), to_property_descriptor(), transform_json_object(), vbarray_this(), WeakMap_delete(), WeakMap_get(), WeakMap_has(), and WeakMap_set().

◆ is_string()

static BOOL is_string ( jsval_t  v)
inlinestatic

Definition at line 195 of file jsval.h.

196{
197 return __JSVAL_TYPE(v) == JSV_STRING;
198}

◆ is_undefined()

◆ is_variant()

static BOOL is_variant ( jsval_t  v)
inlinestatic

Definition at line 209 of file jsval.h.

210{
211 return __JSVAL_TYPE(v) == JSV_VARIANT;
212}

Referenced by VBArrayConstr_value().

◆ jsval_bool()

◆ jsval_copy()

HRESULT jsval_copy ( jsval_t  v,
jsval_t r 
)

Definition at line 225 of file jsutils.c.

226{
227 switch(jsval_type(v)) {
228 case JSV_UNDEFINED:
229 case JSV_NULL:
230 case JSV_NUMBER:
231 case JSV_BOOL:
232 *r = v;
233 return S_OK;
234 case JSV_OBJECT:
235 IDispatch_AddRef(get_object(v));
236 *r = v;
237 return S_OK;
238 case JSV_STRING: {
240 *r = v;
241 return S_OK;
242 }
243 case JSV_VARIANT:
244 return jsval_variant(r, get_variant(v));
245 }
246
247 assert(0);
248 return E_FAIL;
249}
#define E_FAIL
Definition: ddrawi.h:102
#define assert(_expr)
Definition: assert.h:32
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define S_OK
Definition: intsafe.h:52
static jsstr_t * jsstr_addref(jsstr_t *str)
Definition: jsstr.h:113
static HRESULT jsval_variant(jsval_t *val, VARIANT *var)
Definition: jsutils.c:204
static VARIANT * get_variant(jsval_t v)
Definition: jsval.h:243
static jsval_type_t jsval_type(jsval_t v)
Definition: jsval.h:219
static jsstr_t * get_string(jsval_t v)
Definition: jsval.h:238
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228

Referenced by Arguments_prop_get(), Arguments_prop_put(), Array_reduce(), builtin_eval(), create_bind_function(), detach_arguments_object(), Enumerator_item(), exprval_propget(), exprval_propput(), Function_apply(), Function_call(), interp_local(), jsdisp_define_property(), Map_get(), maybe_to_primitive(), Object_set_proto_(), prop_get(), prop_put(), RegExp_get_lastIndex(), RegExp_set_lastIndex(), scope_prop_get(), scope_prop_put(), set_map_entry(), setup_scope(), to_primitive(), VBArrayConstr_value(), WeakMap_get(), and WeakMap_set().

◆ jsval_disp()

◆ jsval_null()

◆ jsval_null_disp()

static jsval_t jsval_null_disp ( void  )
inlinestatic

Definition at line 138 of file jsval.h.

139{
140 jsval_t ret;
143 return ret;
144}
#define TRUE
Definition: types.h:120

Referenced by Object_valueOf(), and variant_to_jsval().

◆ jsval_number()

static jsval_t jsval_number ( double  n)
inlinestatic

Definition at line 153 of file jsval.h.

154{
155 jsval_t ret;
156#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
157 ret.u.n = n;
158 /* normalize NaN value */
159 if((ret.u.s.tag & 0x7ff00000) == 0x7ff00000) {
160 /* isinf */
161 if(ret.u.s.tag & 0xfffff) {
162 ret.u.s.tag = 0x7ff80000;
163 ret.u.s.u.as_uintptr = ~0;
164 }else if(ret.u.s.u.as_uintptr) {
165 ret.u.s.tag = 0x7ff80000;
166 }
167 }
168#else
169 ret.type = JSV_NUMBER;
170 ret.u.n = n;
171#endif
172 return ret;
173}
GLdouble n
Definition: glext.h:7729

Referenced by alloc_regexp(), Array_every(), Array_filter(), Array_forEach(), Array_get_length(), Array_indexOf(), Array_lastIndexOf(), Array_map(), Array_push(), Array_reduce(), Array_some(), Array_splice(), Array_unshift(), ArrayBuffer_get_byteLength(), create_builtin_function(), create_error(), create_match_array(), create_math(), DataView_get_byteLength(), DataView_get_byteOffset(), DataView_getFloat32(), DataView_getFloat64(), DataView_getInt16(), DataView_getInt32(), DataView_getInt8(), DataView_getUint16(), DataView_getUint32(), DataView_getUint8(), Date_getDate(), Date_getDay(), Date_getFullYear(), Date_getHours(), Date_getMilliseconds(), Date_getMinutes(), Date_getMonth(), Date_getSeconds(), Date_getTime(), Date_getTimezoneOffset(), Date_getUTCDate(), Date_getUTCDay(), Date_getUTCFullYear(), Date_getUTCHours(), Date_getUTCMilliseconds(), Date_getUTCMinutes(), Date_getUTCMonth(), Date_getUTCSeconds(), Date_getYear(), Date_setDate(), Date_setFullYear(), Date_setHours(), Date_setMilliseconds(), Date_setMinutes(), Date_setMonth(), Date_setSeconds(), Date_setTime(), Date_setUTCDate(), Date_setUTCFullYear(), Date_setUTCHours(), Date_setUTCMilliseconds(), Date_setUTCMinutes(), Date_setUTCMonth(), Date_setUTCSeconds(), Date_setYear(), Date_valueOf(), DateConstr_now(), DateConstr_parse(), DateConstr_UTC(), equal_values(), Function_get_length(), init_global(), interp_add(), interp_and(), interp_bneg(), interp_div(), interp_double(), interp_forin(), interp_int(), interp_lshift(), interp_minus(), interp_mod(), interp_mul(), interp_or(), interp_pop_except(), interp_postinc(), interp_preinc(), interp_rshift(), interp_rshift2(), interp_sub(), interp_tonum(), interp_xor(), JSGlobal_parseFloat(), JSGlobal_parseInt(), JSGlobal_ScriptEngineBuildVersion(), JSGlobal_ScriptEngineMajorVersion(), JSGlobal_ScriptEngineMinorVersion(), localize_number(), Map_get_size(), Math_abs(), Math_acos(), Math_asin(), Math_atan(), Math_atan2(), Math_ceil(), Math_cos(), Math_exp(), Math_floor(), Math_log(), Math_max(), Math_min(), Math_pow(), Math_random(), Math_round(), Math_sin(), Math_sqrt(), Math_tan(), maybe_to_primitive(), Number_toExponential(), Number_toFixed(), Number_toPrecision(), Number_toString(), Number_valueOf(), NumberConstr_value(), parse_json_value(), regexp_string_match(), rep_call(), set_last_index(), set_length(), setup_arguments_object(), stack_push_exprval(), stack_topn_exprval(), String_charCodeAt(), String_get_length(), String_indexOf(), String_lastIndexOf(), String_search(), variant_to_jsval(), VBArray_dimensions(), VBArray_lbound(), and VBArray_ubound().

◆ jsval_obj()

static jsval_t jsval_obj ( jsdisp_t obj)
inlinestatic

Definition at line 125 of file jsval.h.

126{
127 return jsval_disp(to_disp(obj));
128}
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:222
static jsval_t jsval_disp(IDispatch *obj)
Definition: jsval.h:117

Referenced by Arguments_get_caller(), Array_concat(), Array_every(), Array_filter(), Array_forEach(), Array_map(), Array_reduce(), Array_reverse(), Array_slice(), Array_some(), Array_sort(), Array_splice(), ArrayBuffer_slice(), ArrayBufferConstr_value(), ArrayConstr_value(), BoolConstr_value(), create_builtin_function(), DataView_get_buffer(), DataViewConstr_value(), DateConstr_value(), detach_scope(), DispatchEx_InvokeEx(), EnumeratorConstr_value(), error_constr(), exec_source(), find_prop_name(), Function_bind(), Function_get_arguments(), Function_get_caller(), identifier_eval(), init_arraybuf_constructors(), init_constructors(), init_function_constr(), init_global(), init_set_constructor(), interp_carray(), interp_func(), interp_new_obj(), interp_regexp(), InterpretedFunction_get_prototype(), iterate_map(), Map_constructor(), maybe_to_primitive(), NumberConstr_value(), Object_create(), Object_defineProperties(), Object_defineProperty(), Object_freeze(), Object_get_proto_(), Object_getOwnPropertyDescriptor(), Object_getPrototypeOf(), object_keys(), Object_preventExtensions(), Object_seal(), ObjectConstr_value(), parse_json_value(), prop_put(), regexp_string_match(), RegExpConstr_value(), scope_init_locals(), Set_constructor(), set_constructor_prop(), setup_arguments_object(), setup_scope(), stack_topn_exprval(), String_split(), StringConstr_value(), stringify(), transform_json_object(), unwind_exception(), update_external_prop(), variant_to_jsval(), VBArray_toArray(), VBArrayConstr_value(), and WeakMap_constructor().

◆ jsval_release()

void jsval_release ( jsval_t  val)

Definition at line 186 of file jsutils.c.

187{
188 switch(jsval_type(val)) {
189 case JSV_OBJECT:
190 IDispatch_Release(get_object(val));
191 break;
192 case JSV_STRING:
194 break;
195 case JSV_VARIANT:
198 break;
199 default:
200 break;
201 }
202}
#define free
Definition: debug_ros.c:5
GLuint GLfloat * val
Definition: glext.h:7180
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by Arguments_destructor(), Arguments_prop_put(), Array_every(), Array_filter(), Array_forEach(), Array_indexOf(), array_join(), Array_lastIndexOf(), Array_map(), Array_pop(), Array_reduce(), Array_reverse(), Array_shift(), Array_slice(), Array_some(), Array_sort(), Array_splice(), array_to_args(), Array_unshift(), bind_event_target(), BindFunction_destructor(), clear_acc(), concat_array(), convert_params(), create_match_array(), DateConstr_value(), delete_prop(), DispatchEx_InvokeEx(), enter_bytecode(), Enumerator_destructor(), enumvar_get_next_item(), equal_values(), Error_toString(), exprval_call(), exprval_propput(), exprval_release(), Function_apply(), Function_bind(), Function_call(), gc_process_linked_val(), get_length(), init_dispex_from_constr(), interp_add(), interp_array(), interp_assign(), interp_bneg(), interp_call_eval(), interp_carray_set(), interp_case(), interp_delete(), interp_enter_catch(), interp_eq(), interp_eq2(), interp_gt(), interp_gteq(), interp_in(), interp_instanceof(), interp_jmp_z(), interp_lt(), interp_lteq(), interp_memberid(), interp_neg(), interp_neq(), interp_neq2(), interp_obj_prop(), interp_postinc(), interp_preinc(), interp_push_with_scope(), interp_ret(), interp_set_member(), interp_setret(), interp_to_string(), interp_tonum(), interp_typeof(), interp_typeofid(), interp_typeofident(), invoke_prop_func(), iterate_map(), JScriptParse_ParseScriptText(), jsdisp_define_properties(), jsdisp_define_property(), jsdisp_free(), JSON_parse(), JSON_stringify(), less_eval(), parse_json_value(), pop_call_frame(), prop_put(), RegExp_destructor(), RegExp_set_lastIndex(), release_map_entry(), release_property_descriptor(), remove_weakmap_entry(), rep_call(), reset_ei(), scope_destructor(), scope_init_locals(), scope_prop_put(), script_release(), set_error_value(), set_last_index(), set_map_entry(), setup_scope(), sort_cmp(), stack_pop_number(), stack_pop_object(), stack_popn(), stringify(), to_number(), to_property_descriptor(), to_string(), transform_json_object(), unlink_jsdisp(), unwind_exception(), variant_change_type(), VBArray_toArray(), and WeakMap_set().

◆ jsval_string()

static jsval_t jsval_string ( jsstr_t str)
inlinestatic

Definition at line 109 of file jsval.h.

110{
111 jsval_t ret;
114 return ret;
115}
const WCHAR * str

Referenced by array_join(), Bool_toString(), create_error(), create_match_array(), create_utc_string(), date_to_string(), Date_toISOString(), Date_toLocaleDateString(), Date_toLocaleString(), Date_toLocaleTimeString(), Date_toTimeString(), dateobj_to_date_string(), do_attribute_tag_format(), do_attributeless_tag_format(), Error_toString(), Function_get_value(), Function_toString(), global_idx(), init_error_constr(), interp_add(), interp_forin(), interp_str(), interp_to_string(), interp_typeofid(), interp_typeofident(), JSGlobal_decodeURI(), JSGlobal_decodeURIComponent(), JSGlobal_encodeURI(), JSGlobal_encodeURIComponent(), JSGlobal_escape(), JSGlobal_ScriptEngine(), JSGlobal_unescape(), JSON_stringify(), maybe_to_primitive(), Number_toExponential(), Number_toFixed(), Number_toLocaleString(), Number_toPrecision(), Number_toString(), object_keys(), Object_toString(), parse_json_value(), RegExp_exec(), RegExp_get_source(), regexp_string_match(), RegExp_test(), RegExp_toString(), RegExpConstr_get_leftContext(), RegExpConstr_get_rightContext(), rep_call(), stack_push_string(), String_charAt(), String_concat(), String_prop_get(), String_replace(), String_slice(), String_split(), String_substr(), String_substring(), String_trim(), StringConstr_fromCharCode(), StringConstr_value(), stringify(), stringobj_to_string(), to_lower_case(), to_upper_case(), transform_json_object(), and variant_to_jsval().

◆ jsval_to_variant()

HRESULT jsval_to_variant ( jsval_t  val,
VARIANT retv 
)

Definition at line 367 of file jsutils.c.

368{
369 switch(jsval_type(val)) {
370 case JSV_UNDEFINED:
371 V_VT(retv) = VT_EMPTY;
372 return S_OK;
373 case JSV_NULL:
374 if(get_bool(val)) {
375 V_VT(retv) = VT_DISPATCH;
376 V_DISPATCH(retv) = NULL;
377 return S_OK;
378 }
379 V_VT(retv) = VT_NULL;
380 return S_OK;
381 case JSV_OBJECT: {
383 V_VT(retv) = VT_DISPATCH;
384 if(host_disp) {
385 V_DISPATCH(retv) = (IDispatch *)host_disp;
386 return S_OK;
387 }
388
389 V_DISPATCH(retv) = get_object(val);
390 IDispatch_AddRef(get_object(val));
391 return S_OK;
392 }
393 case JSV_STRING:
394 V_VT(retv) = VT_BSTR;
395 return jsstr_to_bstr(get_string(val), &V_BSTR(retv));
396 case JSV_NUMBER: {
397 double n = get_number(val);
398
399 if(is_int32(n)) {
400 V_VT(retv) = VT_I4;
401 V_I4(retv) = n;
402 }else {
403 V_VT(retv) = VT_R8;
404 V_R8(retv) = n;
405 }
406
407 return S_OK;
408 }
409 case JSV_BOOL:
410 V_VT(retv) = VT_BOOL;
411 V_BOOL(retv) = get_bool(val) ? VARIANT_TRUE : VARIANT_FALSE;
412 return S_OK;
413 case JSV_VARIANT:
414 V_VT(retv) = VT_EMPTY;
415 return VariantCopy(retv, get_variant(val));
416 }
417
418 assert(0);
419 return E_FAIL;
420}
static BOOL get_bool(D3DXPARAMETER_TYPE type, const void *data)
#define NULL
Definition: types.h:112
@ VT_BSTR
Definition: compat.h:2303
@ VT_NULL
Definition: compat.h:2296
@ VT_R8
Definition: compat.h:2300
@ VT_I4
Definition: compat.h:2298
@ VT_BOOL
Definition: compat.h:2306
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
IWineJSDispatchHost * get_host_dispatch(IDispatch *disp)
Definition: dispex.c:3584
static BOOL is_int32(double d)
Definition: jscript.h:508
HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r)
Definition: jsstr.c:306
static double get_number(jsval_t v)
Definition: jsval.h:233
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define V_R8(A)
Definition: oleauto.h:262
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
Definition: variant.c:748

Referenced by disp_call(), disp_call_value_with_caller(), disp_propput(), DispatchEx_InvokeEx(), HostConstructor_call(), HostFunction_call(), HostObject_prop_put(), and JScriptParse_ParseScriptText().

◆ jsval_type()

static jsval_type_t jsval_type ( jsval_t  v)
inlinestatic

Definition at line 219 of file jsval.h.

220{
221#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
222 return is_number(v) ? JSV_NUMBER : v.u.s.tag;
223#else
224 return v.type;
225#endif
226}
static BOOL is_number(jsval_t v)
Definition: jsval.h:200

Referenced by debugstr_jsval(), equal_values(), jsval_copy(), jsval_map_compare(), jsval_release(), jsval_strict_equal(), jsval_to_variant(), stack_topn_exprval(), stringify(), to_boolean(), to_locale_string(), to_number(), to_object(), to_string(), typeof_string(), and unwind_exception().

◆ jsval_undefined()

static jsval_t jsval_undefined ( void  )
inlinestatic

Definition at line 146 of file jsval.h.

147{
148 jsval_t ret;
150 return ret;
151}

Referenced by alloc_detached_vars(), Array_every(), Array_filter(), Array_forEach(), Array_indexOf(), Array_lastIndexOf(), Array_map(), Array_pop(), Array_reduce(), Array_shift(), Array_some(), Array_sort(), array_to_args(), Array_unshift(), builtin_eval(), clear_acc(), create_match_array(), DataView_setFloat32(), DataView_setFloat64(), DataView_setInt16(), DataView_setInt32(), DataView_setInt8(), detach_arguments_object(), DispatchEx_InvokeEx(), ensure_prop_name(), Enumerator_moveFirst(), Enumerator_moveNext(), enumvar_get_next_item(), exec_source(), exprval_call(), Function_apply(), Function_bind(), Function_call(), gc_process_linked_val(), init_global(), interp_array(), interp_call(), interp_member(), interp_new(), interp_push_acc(), interp_undefined(), interp_void(), iterate_map(), JScript_SetScriptSite(), jsdisp_define_property(), jsdisp_get_idx(), jsdisp_propget_name(), JSON_stringify(), jsval_variant(), Map_clear(), Map_delete(), Map_forEach(), Map_get(), Map_has(), Map_set(), Object_create(), Object_defineGetter(), Object_defineProperties(), Object_defineProperty(), Object_defineSetter(), Object_getOwnPropertyDescriptor(), Object_getOwnPropertyNames(), Object_keys(), Object_set_proto_(), prop_get(), prop_put(), RegExpConstr_value(), rep_call(), scope_init_locals(), Set_add(), Set_clear(), Set_delete(), Set_forEach(), Set_has(), set_map_entry(), setup_scope(), sort_cmp(), stack_push_exprval(), steal_ret(), to_property_descriptor(), transform_json_object(), unwind_exception(), variant_to_jsval(), WeakMap_clear(), WeakMap_get(), and WeakMap_set().

◆ variant_to_jsval()

HRESULT variant_to_jsval ( script_ctx_t ctx,
VARIANT var,
jsval_t r 
)

Definition at line 251 of file jsutils.c.

252{
253 if(V_VT(var) == (VT_VARIANT|VT_BYREF))
255
256 switch(V_VT(var)) {
257 case VT_EMPTY:
258 *r = jsval_undefined();
259 return S_OK;
260 case VT_NULL:
261 *r = jsval_null();
262 return S_OK;
263 case VT_BOOL:
264 *r = jsval_bool(V_BOOL(var));
265 return S_OK;
266 case VT_I4:
267 *r = jsval_number(V_I4(var));
268 return S_OK;
269 case VT_R8:
270 *r = jsval_number(V_R8(var));
271 return S_OK;
272 case VT_BSTR: {
273 jsstr_t *str;
274
275 if(V_BSTR(var)) {
277 if(!str)
278 return E_OUTOFMEMORY;
279 }else {
281 }
282
283 *r = jsval_string(str);
284 return S_OK;
285 }
286 case VT_DISPATCH:
287 if(!V_DISPATCH(var)) {
288 *r = ctx->html_mode ? jsval_null() : jsval_null_disp();
289 return S_OK;
290 }
291 if(ctx->version >= SCRIPTLANGUAGEVERSION_ES5) {
292 IWineJSDispatchHost *disp_host;
294 hres = IDispatch_QueryInterface(V_DISPATCH(var), &IID_IWineJSDispatchHost, (void **)&disp_host);
295 if(SUCCEEDED(hres)) {
296 IWineJSDispatch *jsdisp_iface;
297 hres = IWineJSDispatchHost_GetJSDispatch(disp_host, &jsdisp_iface);
298 IWineJSDispatchHost_Release(disp_host);
299 if(SUCCEEDED(hres)) {
300 jsdisp_t *jsdisp = to_jsdisp((IDispatch *)jsdisp_iface);
301 if(jsdisp->ctx == ctx) {
302 *r = jsval_obj(jsdisp);
303 return S_OK;
304 }else {
305 jsdisp_release(jsdisp);
306 }
307 }
308 }
309 }
310 IDispatch_AddRef(V_DISPATCH(var));
312 return S_OK;
313 case VT_I1:
314 *r = jsval_number(V_I1(var));
315 return S_OK;
316 case VT_UI1:
317 *r = jsval_number(V_UI1(var));
318 return S_OK;
319 case VT_I2:
320 *r = jsval_number(V_I2(var));
321 return S_OK;
322 case VT_UI2:
323 *r = jsval_number(V_UI2(var));
324 return S_OK;
325 case VT_INT:
326 *r = jsval_number(V_INT(var));
327 return S_OK;
328 case VT_UI4:
329 *r = jsval_number(V_UI4(var));
330 return S_OK;
331 case VT_UI8:
332 /*
333 * Native doesn't support VT_UI8 here, but it's needed for IE9+ APIs
334 * (native IE9 doesn't use jscript.dll for JavaScript).
335 */
336 *r = jsval_number(V_UI8(var));
337 return S_OK;
338 case VT_R4:
339 *r = jsval_number(V_R4(var));
340 return S_OK;
341 case VT_CY:
342 /* FIXME: Native converts VT_CY to a special kind number type, which is
343 * never converted to VT_I4 when it's converted back to VARIANT. */
344 *r = jsval_number((double)V_CY(var).int64 / 10000.0);
345 WARN("VT_CY: %lf\n", get_number(*r));
346 return S_OK;
347 case VT_UNKNOWN:
348 if(V_UNKNOWN(var)) {
349 IDispatch *disp;
351
352 hres = IUnknown_QueryInterface(V_UNKNOWN(var), &IID_IDispatch, (void**)&disp);
353 if(SUCCEEDED(hres)) {
354 *r = jsval_disp(disp);
355 return S_OK;
356 }
357 }else {
358 *r = ctx->html_mode ? jsval_null() : jsval_null_disp();
359 return S_OK;
360 }
361 /* fall through */
362 default:
363 return jsval_variant(r, var);
364 }
365}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
@ VT_UI8
Definition: compat.h:2315
@ VT_INT
Definition: compat.h:2316
@ VT_R4
Definition: compat.h:2299
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_BYREF
Definition: compat.h:2342
@ VT_UI2
Definition: compat.h:2312
@ VT_CY
Definition: compat.h:2301
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I1
Definition: compat.h:2310
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UI1
Definition: compat.h:2311
long long int64
Definition: platform.h:13
#define SUCCEEDED(hr)
Definition: intsafe.h:50
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:53
jsstr_t * jsstr_null_bstr(void)
Definition: jsstr.c:301
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
Definition: jsstr.c:86
static jsval_t jsval_null(void)
Definition: jsval.h:130
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
static jsval_t jsval_bool(BOOL b)
Definition: jsval.h:101
static jsval_t jsval_null_disp(void)
Definition: jsval.h:138
static jsval_t jsval_number(double n)
Definition: jsval.h:153
const char * var
Definition: shader.c:5666
HRESULT hres
Definition: protocol.c:465
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
#define V_UI1(A)
Definition: oleauto.h:266
#define V_INT(A)
Definition: oleauto.h:251
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_UI2(A)
Definition: oleauto.h:268
#define V_I1(A)
Definition: oleauto.h:243
#define V_VARIANTREF(A)
Definition: oleauto.h:283
#define V_R4(A)
Definition: oleauto.h:260
#define V_CY(A)
Definition: oleauto.h:229
#define V_UI4(A)
Definition: oleauto.h:270
#define V_UI8(A)
Definition: oleauto.h:272
#define V_I2(A)
Definition: oleauto.h:245
const GUID IID_IDispatch
Definition: jsstr.h:36
script_ctx_t * ctx
Definition: jscript.h:214

Referenced by convert_params(), disp_call(), disp_call_value_with_caller(), disp_propget(), DispatchEx_InvokeEx(), enumvar_get_next_item(), HostConstructor_call(), HostFunction_call(), HostObject_prop_get(), variant_change_type(), VBArray_getItem(), and VBArray_toArray().