ReactOS 0.4.17-dev-357-ga8f14ff
jscript.h File Reference
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "ole2.h"
#include "dispex.h"
#include "activscp.h"
#include "jsdisp.h"
#include "resource.h"
#include "wine/list.h"
#include "wine/rbtree.h"
#include "jsval.h"
Include dependency graph for jscript.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  heap_pool_t
 
struct  thread_data
 
struct  named_item_t
 
struct  builtin_prop_t
 
struct  builtin_info_t
 
struct  jsdisp_t
 
struct  cc_ctx_t
 
struct  JSCaller
 
struct  _property_desc_t
 
struct  match_result_t
 
struct  weak_refs_entry
 
struct  _script_ctx_t
 
struct  weakmap_entry
 

Macros

#define COBJMACROS
 
#define SCRIPTLANGUAGEVERSION_HTML   0x400
 
#define SCRIPTLANGUAGEVERSION_ES5   0x102
 
#define SCRIPTLANGUAGEVERSION_ES6   0x103
 
#define PROPF_ALL   (PROPF_ENUMERABLE | PROPF_WRITABLE | PROPF_CONFIGURABLE)
 
#define PROPF_ARGMASK   0x000000ff
 
#define PROPF_VERSION_MASK   0x01ff0000
 
#define PROPF_VERSION_SHIFT   16
 
#define PROPF_HTML   (SCRIPTLANGUAGEVERSION_HTML << PROPF_VERSION_SHIFT)
 
#define PROPF_ES5   ((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES5) << PROPF_VERSION_SHIFT)
 
#define PROPF_ES6   ((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES6) << PROPF_VERSION_SHIFT)
 
#define DISPATCH_JSCRIPT_CALLEREXECSSOURCE   0x8000
 
#define DISPATCH_JSCRIPT_INTERNAL_MASK   DISPATCH_JSCRIPT_CALLEREXECSSOURCE
 
#define SP_CALLER_UNINITIALIZED   ((IServiceProvider*)IntToPtr(-1))
 
#define REM_CHECK_GLOBAL   0x0001
 
#define REM_RESET_INDEX   0x0002
 
#define REM_NO_CTX_UPDATE   0x0004
 
#define REM_ALLOC_RESULT   0x0008
 
#define REM_NO_PARENS   0x0010
 
#define MAKE_JSERROR(code)   MAKE_HRESULT(SEVERITY_ERROR, FACILITY_CONTROL, code)
 
#define JS_E_TO_PRIMITIVE   MAKE_JSERROR(IDS_TO_PRIMITIVE)
 
#define JS_E_INVALIDARG   MAKE_JSERROR(IDS_INVALID_CALL_ARG)
 
#define JS_E_SUBSCRIPT_OUT_OF_RANGE   MAKE_JSERROR(IDS_SUBSCRIPT_OUT_OF_RANGE)
 
#define JS_E_STACK_OVERFLOW   MAKE_JSERROR(IDS_STACK_OVERFLOW)
 
#define JS_E_OBJECT_REQUIRED   MAKE_JSERROR(IDS_OBJECT_REQUIRED)
 
#define JS_E_CANNOT_CREATE_OBJ   MAKE_JSERROR(IDS_CREATE_OBJ_ERROR)
 
#define JS_E_INVALID_PROPERTY   MAKE_JSERROR(IDS_NO_PROPERTY)
 
#define JS_E_INVALID_ACTION   MAKE_JSERROR(IDS_UNSUPPORTED_ACTION)
 
#define JS_E_MISSING_ARG   MAKE_JSERROR(IDS_ARG_NOT_OPT)
 
#define JS_E_OBJECT_NOT_COLLECTION   MAKE_JSERROR(IDS_OBJECT_NOT_COLLECTION)
 
#define JS_E_SYNTAX   MAKE_JSERROR(IDS_SYNTAX_ERROR)
 
#define JS_E_MISSING_SEMICOLON   MAKE_JSERROR(IDS_SEMICOLON)
 
#define JS_E_MISSING_LBRACKET   MAKE_JSERROR(IDS_LBRACKET)
 
#define JS_E_MISSING_RBRACKET   MAKE_JSERROR(IDS_RBRACKET)
 
#define JS_E_EXPECTED_IDENTIFIER   MAKE_JSERROR(IDS_EXPECTED_IDENTIFIER)
 
#define JS_E_EXPECTED_ASSIGN   MAKE_JSERROR(IDS_EXPECTED_ASSIGN)
 
#define JS_E_INVALID_CHAR   MAKE_JSERROR(IDS_INVALID_CHAR)
 
#define JS_E_UNTERMINATED_STRING   MAKE_JSERROR(IDS_UNTERMINATED_STR)
 
#define JS_E_MISPLACED_RETURN   MAKE_JSERROR(IDS_MISPLACED_RETURN)
 
#define JS_E_INVALID_BREAK   MAKE_JSERROR(IDS_INVALID_BREAK)
 
#define JS_E_INVALID_CONTINUE   MAKE_JSERROR(IDS_INVALID_CONTINUE)
 
#define JS_E_LABEL_REDEFINED   MAKE_JSERROR(IDS_LABEL_REDEFINED)
 
#define JS_E_LABEL_NOT_FOUND   MAKE_JSERROR(IDS_LABEL_NOT_FOUND)
 
#define JS_E_EXPECTED_CCEND   MAKE_JSERROR(IDS_EXPECTED_CCEND)
 
#define JS_E_DISABLED_CC   MAKE_JSERROR(IDS_DISABLED_CC)
 
#define JS_E_EXPECTED_AT   MAKE_JSERROR(IDS_EXPECTED_AT)
 
#define JS_E_FUNCTION_EXPECTED   MAKE_JSERROR(IDS_NOT_FUNC)
 
#define JS_E_DATE_EXPECTED   MAKE_JSERROR(IDS_NOT_DATE)
 
#define JS_E_NUMBER_EXPECTED   MAKE_JSERROR(IDS_NOT_NUM)
 
#define JS_E_OBJECT_EXPECTED   MAKE_JSERROR(IDS_OBJECT_EXPECTED)
 
#define JS_E_ILLEGAL_ASSIGN   MAKE_JSERROR(IDS_ILLEGAL_ASSIGN)
 
#define JS_E_UNDEFINED_VARIABLE   MAKE_JSERROR(IDS_UNDEFINED)
 
#define JS_E_BOOLEAN_EXPECTED   MAKE_JSERROR(IDS_NOT_BOOL)
 
#define JS_E_VBARRAY_EXPECTED   MAKE_JSERROR(IDS_NOT_VBARRAY)
 
#define JS_E_INVALID_DELETE   MAKE_JSERROR(IDS_INVALID_DELETE)
 
#define JS_E_JSCRIPT_EXPECTED   MAKE_JSERROR(IDS_JSCRIPT_EXPECTED)
 
#define JS_E_ENUMERATOR_EXPECTED   MAKE_JSERROR(IDS_ENUMERATOR_EXPECTED)
 
#define JS_E_REGEXP_EXPECTED   MAKE_JSERROR(IDS_REGEXP_EXPECTED)
 
#define JS_E_REGEXP_SYNTAX   MAKE_JSERROR(IDS_REGEXP_SYNTAX_ERROR)
 
#define JS_E_UNEXPECTED_QUANTIFIER   MAKE_JSERROR(IDS_UNEXPECTED_QUANTIFIER)
 
#define JS_E_EXCEPTION_THROWN   MAKE_JSERROR(IDS_EXCEPTION_THROWN)
 
#define JS_E_INVALID_URI_CODING   MAKE_JSERROR(IDS_URI_INVALID_CODING)
 
#define JS_E_INVALID_URI_CHAR   MAKE_JSERROR(IDS_URI_INVALID_CHAR)
 
#define JS_E_FRACTION_DIGITS_OUT_OF_RANGE   MAKE_JSERROR(IDS_FRACTION_DIGITS_OUT_OF_RANGE)
 
#define JS_E_PRECISION_OUT_OF_RANGE   MAKE_JSERROR(IDS_PRECISION_OUT_OF_RANGE)
 
#define JS_E_INVALID_LENGTH   MAKE_JSERROR(IDS_INVALID_LENGTH)
 
#define JS_E_ARRAY_EXPECTED   MAKE_JSERROR(IDS_ARRAY_EXPECTED)
 
#define JS_E_CYCLIC_PROTO_VALUE   MAKE_JSERROR(IDS_CYCLIC_PROTO_VALUE)
 
#define JS_E_CANNOT_CREATE_FOR_NONEXTENSIBLE   MAKE_JSERROR(IDS_CREATE_FOR_NONEXTENSIBLE)
 
#define JS_E_OBJECT_NONEXTENSIBLE   MAKE_JSERROR(IDS_OBJECT_NONEXTENSIBLE)
 
#define JS_E_NONCONFIGURABLE_REDEFINED   MAKE_JSERROR(IDS_NONCONFIGURABLE_REDEFINED)
 
#define JS_E_NONWRITABLE_MODIFIED   MAKE_JSERROR(IDS_NONWRITABLE_MODIFIED)
 
#define JS_E_NOT_DATAVIEW   MAKE_JSERROR(IDS_NOT_DATAVIEW)
 
#define JS_E_DATAVIEW_NO_ARGUMENT   MAKE_JSERROR(IDS_DATAVIEW_NO_ARGUMENT)
 
#define JS_E_DATAVIEW_INVALID_ACCESS   MAKE_JSERROR(IDS_DATAVIEW_INVALID_ACCESS)
 
#define JS_E_DATAVIEW_INVALID_OFFSET   MAKE_JSERROR(IDS_DATAVIEW_INVALID_OFFSET)
 
#define JS_E_WRONG_THIS   MAKE_JSERROR(IDS_WRONG_THIS)
 
#define JS_E_KEY_NOT_OBJECT   MAKE_JSERROR(IDS_KEY_NOT_OBJECT)
 
#define JS_E_ARRAYBUFFER_EXPECTED   MAKE_JSERROR(IDS_ARRAYBUFFER_EXPECTED)
 
#define JS_E_PROP_DESC_MISMATCH   MAKE_JSERROR(IDS_PROP_DESC_MISMATCH)
 
#define JS_E_INVALID_WRITABLE_PROP_DESC   MAKE_JSERROR(IDS_INVALID_WRITABLE_PROP_DESC)
 

Typedefs

typedef struct _jsval_t jsval_t
 
typedef struct _jsstr_t jsstr_t
 
typedef struct _jsexcept_t jsexcept_t
 
typedef struct _script_ctx_t script_ctx_t
 
typedef struct _dispex_prop_t dispex_prop_t
 
typedef struct _property_desc_t property_desc_t
 
typedef struct jsdisp_t jsdisp_t
 
typedef HRESULT(* builtin_invoke_t) (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
typedef HRESULT(* builtin_getter_t) (script_ctx_t *, jsdisp_t *, jsval_t *)
 
typedef HRESULT(* builtin_setter_t) (script_ctx_t *, jsdisp_t *, jsval_t)
 
typedef struct named_item_t named_item_t
 
typedef struct _cc_var_t cc_var_t
 

Enumerations

enum  jsclass_t {
  JSCLASS_NONE , JSCLASS_ARRAY , JSCLASS_BOOLEAN , JSCLASS_DATE ,
  JSCLASS_ENUMERATOR , JSCLASS_ERROR , JSCLASS_FUNCTION , JSCLASS_GLOBAL ,
  JSCLASS_MATH , JSCLASS_NUMBER , JSCLASS_OBJECT , JSCLASS_REGEXP ,
  JSCLASS_STRING , JSCLASS_ARGUMENTS , JSCLASS_VBARRAY , JSCLASS_JSON ,
  JSCLASS_ARRAYBUFFER , JSCLASS_DATAVIEW , JSCLASS_MAP , JSCLASS_SET ,
  JSCLASS_WEAKMAP , JSCLASS_HOST
}
 
enum  gc_traverse_op { GC_TRAVERSE_UNLINK , GC_TRAVERSE_SPECULATIVELY , GC_TRAVERSE }
 
enum  jsdisp_enum_type { JSDISP_ENUM_ALL , JSDISP_ENUM_OWN , JSDISP_ENUM_OWN_ENUMERABLE }
 
enum  hint_t { NO_HINT , HINT_STRING , HINT_NUMBER }
 

Functions

void heap_pool_init (heap_pool_t *)
 
voidheap_pool_alloc (heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2)
 
voidheap_pool_grow (heap_pool_t *, void *, DWORD, DWORD)
 
void heap_pool_clear (heap_pool_t *)
 
void heap_pool_free (heap_pool_t *)
 
heap_pool_theap_pool_mark (heap_pool_t *)
 
HRESULT get_dispatch_typeinfo (ITypeInfo **)
 
jsdisp_tiface_to_jsdisp (IDispatch *)
 
HRESULT builtin_set_const (script_ctx_t *, jsdisp_t *, jsval_t)
 
struct thread_dataget_thread_data (void)
 
void release_thread_data (struct thread_data *)
 
HRESULT create_named_item_script_obj (script_ctx_t *, named_item_t *)
 
named_item_tlookup_named_item (script_ctx_t *, const WCHAR *, unsigned)
 
void release_named_item (named_item_t *)
 
HRESULT gc_run (script_ctx_t *)
 
HRESULT gc_process_linked_obj (struct gc_ctx *, enum gc_traverse_op, jsdisp_t *, jsdisp_t *, void **)
 
HRESULT gc_process_linked_val (struct gc_ctx *, enum gc_traverse_op, jsdisp_t *, jsval_t *)
 
static IDispatchto_disp (jsdisp_t *jsdisp)
 
static IDispatchExto_dispex (jsdisp_t *jsdisp)
 
jsdisp_tas_jsdisp (IDispatch *)
 
jsdisp_tto_jsdisp (IDispatch *)
 
IWineJSDispatchHostget_host_dispatch (IDispatch *)
 
jsdisp_tjsdisp_addref (jsdisp_t *)
 
ULONG jsdisp_release (jsdisp_t *)
 
HRESULT create_dispex (script_ctx_t *, const builtin_info_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT init_dispex (jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *)
 
HRESULT init_dispex_from_constr (jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *)
 
HRESULT init_host_object (script_ctx_t *, IWineJSDispatchHost *, IWineJSDispatch *, UINT32, IWineJSDispatch **)
 
HRESULT init_host_constructor (script_ctx_t *, IWineJSDispatchHost *, IWineJSDispatch *, IWineJSDispatch **)
 
HRESULT disp_call (script_ctx_t *, IDispatch *, DISPID, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT disp_call_name (script_ctx_t *, IDispatch *, const WCHAR *, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT disp_call_value_with_caller (script_ctx_t *, IDispatch *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *, IServiceProvider *)
 
HRESULT jsdisp_call_value (jsdisp_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT jsdisp_call (jsdisp_t *, DISPID, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT jsdisp_call_name (jsdisp_t *, const WCHAR *, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT disp_propget (script_ctx_t *, IDispatch *, DISPID, jsval_t *)
 
HRESULT disp_propput (script_ctx_t *, IDispatch *, DISPID, jsval_t)
 
HRESULT disp_propput_name (script_ctx_t *, IDispatch *, const WCHAR *, jsval_t)
 
HRESULT jsdisp_propget (jsdisp_t *, DISPID, jsval_t *)
 
HRESULT jsdisp_propput (jsdisp_t *, const WCHAR *, DWORD, BOOL, jsval_t)
 
HRESULT jsdisp_propput_name (jsdisp_t *, const WCHAR *, jsval_t)
 
HRESULT jsdisp_propput_idx (jsdisp_t *, DWORD, jsval_t)
 
HRESULT jsdisp_propget_name (jsdisp_t *, LPCWSTR, jsval_t *)
 
HRESULT jsdisp_get_idx (jsdisp_t *, DWORD, jsval_t *)
 
HRESULT jsdisp_get_id (jsdisp_t *, const WCHAR *, DWORD, DISPID *)
 
HRESULT jsdisp_get_idx_id (jsdisp_t *, DWORD, DISPID *)
 
HRESULT disp_delete (IDispatch *, DISPID, BOOL *)
 
HRESULT disp_delete_name (script_ctx_t *, IDispatch *, jsstr_t *, BOOL *)
 
HRESULT jsdisp_index_lookup (jsdisp_t *, const WCHAR *, unsigned, struct property_info *)
 
HRESULT jsdisp_next_index (jsdisp_t *, unsigned, unsigned, struct property_info *)
 
HRESULT jsdisp_delete_idx (jsdisp_t *, DWORD)
 
HRESULT jsdisp_get_own_property (jsdisp_t *, const WCHAR *, BOOL, property_desc_t *)
 
HRESULT jsdisp_define_property (jsdisp_t *, const WCHAR *, property_desc_t *)
 
HRESULT jsdisp_define_data_property (jsdisp_t *, const WCHAR *, unsigned, jsval_t)
 
HRESULT jsdisp_next_prop (jsdisp_t *, DISPID, enum jsdisp_enum_type, DISPID *)
 
HRESULT jsdisp_get_prop_name (jsdisp_t *, DISPID, jsstr_t **)
 
HRESULT jsdisp_change_prototype (jsdisp_t *, jsdisp_t *)
 
void jsdisp_freeze (jsdisp_t *, BOOL)
 
BOOL jsdisp_is_frozen (jsdisp_t *, BOOL)
 
HRESULT create_builtin_function (script_ctx_t *, builtin_invoke_t, const WCHAR *, const builtin_info_t *, DWORD, jsdisp_t *, jsdisp_t **)
 
HRESULT create_builtin_constructor (script_ctx_t *, builtin_invoke_t, const WCHAR *, const builtin_info_t *, DWORD, jsdisp_t *, jsdisp_t **)
 
HRESULT create_host_function (script_ctx_t *, const struct property_info *, DWORD, jsdisp_t **)
 
HRESULT Function_invoke (jsdisp_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT Function_value (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT Function_get_value (script_ctx_t *, jsdisp_t *, jsval_t *)
 
struct _function_code_tFunction_get_code (jsdisp_t *)
 
HRESULT throw_error (script_ctx_t *, HRESULT, const WCHAR *)
 
jsdisp_tcreate_builtin_error (script_ctx_t *ctx)
 
void handle_dispatch_exception (script_ctx_t *ctx, EXCEPINFO *ei)
 
HRESULT create_object (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_math (script_ctx_t *, jsdisp_t **)
 
HRESULT create_array (script_ctx_t *, DWORD, jsdisp_t **)
 
HRESULT create_regexp (script_ctx_t *, jsstr_t *, DWORD, jsdisp_t **)
 
HRESULT create_regexp_var (script_ctx_t *, jsval_t, jsval_t *, jsdisp_t **)
 
HRESULT create_string (script_ctx_t *, jsstr_t *, jsdisp_t **)
 
HRESULT create_bool (script_ctx_t *, BOOL, jsdisp_t **)
 
HRESULT create_number (script_ctx_t *, double, jsdisp_t **)
 
HRESULT create_vbarray (script_ctx_t *, SAFEARRAY *, jsdisp_t **)
 
HRESULT create_json (script_ctx_t *, jsdisp_t **)
 
HRESULT to_primitive (script_ctx_t *, jsval_t, jsval_t *, hint_t)
 
HRESULT to_boolean (jsval_t, BOOL *)
 
HRESULT to_number (script_ctx_t *, jsval_t, double *)
 
HRESULT to_integer (script_ctx_t *, jsval_t, double *)
 
HRESULT to_int32 (script_ctx_t *, jsval_t, INT *)
 
HRESULT to_long (script_ctx_t *, jsval_t, LONG *)
 
HRESULT to_uint32 (script_ctx_t *, jsval_t, UINT32 *)
 
HRESULT to_string (script_ctx_t *, jsval_t, jsstr_t **)
 
HRESULT to_flat_string (script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **)
 
HRESULT to_object (script_ctx_t *, jsval_t, IDispatch **)
 
HRESULT jsval_strict_equal (jsval_t, jsval_t, BOOL *)
 
HRESULT variant_change_type (script_ctx_t *, VARIANT *, VARIANT *, VARTYPE)
 
HRESULT variant_date_to_number (double, double *)
 
HRESULT variant_date_to_string (script_ctx_t *, double, jsstr_t **)
 
HRESULT decode_source (WCHAR *)
 
HRESULT double_to_string (double, jsstr_t **)
 
WCHARidx_to_str (DWORD, WCHAR *)
 
static BOOL is_digit (WCHAR c)
 
void release_cc (cc_ctx_t *)
 
 C_ASSERT (RTL_SIZEOF_THROUGH_FIELD(script_ctx_t, weakmap_prototype)==RTL_SIZEOF_THROUGH_FIELD(script_ctx_t, global_objects))
 
void remove_weakmap_entry (struct weakmap_entry *)
 
void script_release (script_ctx_t *)
 
static void script_addref (script_ctx_t *ctx)
 
HRESULT init_global (script_ctx_t *)
 
HRESULT init_function_constr (script_ctx_t *, jsdisp_t *)
 
HRESULT create_object_prototype (script_ctx_t *, jsdisp_t **)
 
HRESULT init_set_constructor (script_ctx_t *)
 
HRESULT init_arraybuf_constructors (script_ctx_t *)
 
HRESULT create_activex_constr (script_ctx_t *, jsdisp_t **)
 
HRESULT create_array_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_bool_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_date_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT init_error_constr (script_ctx_t *, jsdisp_t *)
 
HRESULT create_enumerator_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_number_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_object_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_regexp_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_string_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
HRESULT create_vbarray_constr (script_ctx_t *, jsdisp_t *, jsdisp_t **)
 
IUnknowncreate_ax_site (script_ctx_t *)
 
HRESULT create_jscaller (script_ctx_t *)
 
HRESULT regexp_match_next (script_ctx_t *, jsdisp_t *, DWORD, jsstr_t *, struct match_state_t **)
 
HRESULT parse_regexp_flags (const WCHAR *, DWORD, DWORD *)
 
HRESULT regexp_string_match (script_ctx_t *, jsdisp_t *, jsstr_t *, jsval_t *)
 
BOOL bool_obj_value (jsdisp_t *)
 
unsigned array_get_length (jsdisp_t *)
 
HRESULT localize_number (script_ctx_t *, DOUBLE, BOOL, jsstr_t **)
 
BOOL is_builtin_eval_func (jsdisp_t *)
 
HRESULT builtin_eval (script_ctx_t *, struct _call_frame_t *, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT JSGlobal_eval (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT Object_get_proto_ (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
HRESULT Object_set_proto_ (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
 
static BOOL is_class (jsdisp_t *jsdisp, jsclass_t class)
 
static BOOL is_int32 (double d)
 
static DWORD make_grfdex (script_ctx_t *ctx, DWORD flags)
 
static HRESULT disp_call_value (script_ctx_t *ctx, IDispatch *disp, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static BOOL is_jscript_error (HRESULT hres)
 
const chardebugstr_jsval (const jsval_t)
 
HRESULT create_jscript_object (BOOL, REFIID, void **)
 
static void lock_module (void)
 
static void unlock_module (void)
 

Variables

HINSTANCE jscript_hinstance
 
LONG module_ref
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 25 of file jscript.h.

◆ DISPATCH_JSCRIPT_CALLEREXECSSOURCE

#define DISPATCH_JSCRIPT_CALLEREXECSSOURCE   0x8000

Definition at line 98 of file jscript.h.

◆ DISPATCH_JSCRIPT_INTERNAL_MASK

#define DISPATCH_JSCRIPT_INTERNAL_MASK   DISPATCH_JSCRIPT_CALLEREXECSSOURCE

Definition at line 99 of file jscript.h.

◆ JS_E_ARRAY_EXPECTED

#define JS_E_ARRAY_EXPECTED   MAKE_JSERROR(IDS_ARRAY_EXPECTED)

Definition at line 572 of file jscript.h.

◆ JS_E_ARRAYBUFFER_EXPECTED

#define JS_E_ARRAYBUFFER_EXPECTED   MAKE_JSERROR(IDS_ARRAYBUFFER_EXPECTED)

Definition at line 584 of file jscript.h.

◆ JS_E_BOOLEAN_EXPECTED

#define JS_E_BOOLEAN_EXPECTED   MAKE_JSERROR(IDS_NOT_BOOL)

Definition at line 558 of file jscript.h.

◆ JS_E_CANNOT_CREATE_FOR_NONEXTENSIBLE

#define JS_E_CANNOT_CREATE_FOR_NONEXTENSIBLE   MAKE_JSERROR(IDS_CREATE_FOR_NONEXTENSIBLE)

Definition at line 574 of file jscript.h.

◆ JS_E_CANNOT_CREATE_OBJ

#define JS_E_CANNOT_CREATE_OBJ   MAKE_JSERROR(IDS_CREATE_OBJ_ERROR)

Definition at line 531 of file jscript.h.

◆ JS_E_CYCLIC_PROTO_VALUE

#define JS_E_CYCLIC_PROTO_VALUE   MAKE_JSERROR(IDS_CYCLIC_PROTO_VALUE)

Definition at line 573 of file jscript.h.

◆ JS_E_DATAVIEW_INVALID_ACCESS

#define JS_E_DATAVIEW_INVALID_ACCESS   MAKE_JSERROR(IDS_DATAVIEW_INVALID_ACCESS)

Definition at line 580 of file jscript.h.

◆ JS_E_DATAVIEW_INVALID_OFFSET

#define JS_E_DATAVIEW_INVALID_OFFSET   MAKE_JSERROR(IDS_DATAVIEW_INVALID_OFFSET)

Definition at line 581 of file jscript.h.

◆ JS_E_DATAVIEW_NO_ARGUMENT

#define JS_E_DATAVIEW_NO_ARGUMENT   MAKE_JSERROR(IDS_DATAVIEW_NO_ARGUMENT)

Definition at line 579 of file jscript.h.

◆ JS_E_DATE_EXPECTED

#define JS_E_DATE_EXPECTED   MAKE_JSERROR(IDS_NOT_DATE)

Definition at line 553 of file jscript.h.

◆ JS_E_DISABLED_CC

#define JS_E_DISABLED_CC   MAKE_JSERROR(IDS_DISABLED_CC)

Definition at line 550 of file jscript.h.

◆ JS_E_ENUMERATOR_EXPECTED

#define JS_E_ENUMERATOR_EXPECTED   MAKE_JSERROR(IDS_ENUMERATOR_EXPECTED)

Definition at line 562 of file jscript.h.

◆ JS_E_EXCEPTION_THROWN

#define JS_E_EXCEPTION_THROWN   MAKE_JSERROR(IDS_EXCEPTION_THROWN)

Definition at line 566 of file jscript.h.

◆ JS_E_EXPECTED_ASSIGN

#define JS_E_EXPECTED_ASSIGN   MAKE_JSERROR(IDS_EXPECTED_ASSIGN)

Definition at line 541 of file jscript.h.

◆ JS_E_EXPECTED_AT

#define JS_E_EXPECTED_AT   MAKE_JSERROR(IDS_EXPECTED_AT)

Definition at line 551 of file jscript.h.

◆ JS_E_EXPECTED_CCEND

#define JS_E_EXPECTED_CCEND   MAKE_JSERROR(IDS_EXPECTED_CCEND)

Definition at line 549 of file jscript.h.

◆ JS_E_EXPECTED_IDENTIFIER

#define JS_E_EXPECTED_IDENTIFIER   MAKE_JSERROR(IDS_EXPECTED_IDENTIFIER)

Definition at line 540 of file jscript.h.

◆ JS_E_FRACTION_DIGITS_OUT_OF_RANGE

#define JS_E_FRACTION_DIGITS_OUT_OF_RANGE   MAKE_JSERROR(IDS_FRACTION_DIGITS_OUT_OF_RANGE)

Definition at line 569 of file jscript.h.

◆ JS_E_FUNCTION_EXPECTED

#define JS_E_FUNCTION_EXPECTED   MAKE_JSERROR(IDS_NOT_FUNC)

Definition at line 552 of file jscript.h.

◆ JS_E_ILLEGAL_ASSIGN

#define JS_E_ILLEGAL_ASSIGN   MAKE_JSERROR(IDS_ILLEGAL_ASSIGN)

Definition at line 556 of file jscript.h.

◆ JS_E_INVALID_ACTION

#define JS_E_INVALID_ACTION   MAKE_JSERROR(IDS_UNSUPPORTED_ACTION)

Definition at line 533 of file jscript.h.

◆ JS_E_INVALID_BREAK

#define JS_E_INVALID_BREAK   MAKE_JSERROR(IDS_INVALID_BREAK)

Definition at line 545 of file jscript.h.

◆ JS_E_INVALID_CHAR

#define JS_E_INVALID_CHAR   MAKE_JSERROR(IDS_INVALID_CHAR)

Definition at line 542 of file jscript.h.

◆ JS_E_INVALID_CONTINUE

#define JS_E_INVALID_CONTINUE   MAKE_JSERROR(IDS_INVALID_CONTINUE)

Definition at line 546 of file jscript.h.

◆ JS_E_INVALID_DELETE

#define JS_E_INVALID_DELETE   MAKE_JSERROR(IDS_INVALID_DELETE)

Definition at line 560 of file jscript.h.

◆ JS_E_INVALID_LENGTH

#define JS_E_INVALID_LENGTH   MAKE_JSERROR(IDS_INVALID_LENGTH)

Definition at line 571 of file jscript.h.

◆ JS_E_INVALID_PROPERTY

#define JS_E_INVALID_PROPERTY   MAKE_JSERROR(IDS_NO_PROPERTY)

Definition at line 532 of file jscript.h.

◆ JS_E_INVALID_URI_CHAR

#define JS_E_INVALID_URI_CHAR   MAKE_JSERROR(IDS_URI_INVALID_CHAR)

Definition at line 568 of file jscript.h.

◆ JS_E_INVALID_URI_CODING

#define JS_E_INVALID_URI_CODING   MAKE_JSERROR(IDS_URI_INVALID_CODING)

Definition at line 567 of file jscript.h.

◆ JS_E_INVALID_WRITABLE_PROP_DESC

#define JS_E_INVALID_WRITABLE_PROP_DESC   MAKE_JSERROR(IDS_INVALID_WRITABLE_PROP_DESC)

Definition at line 586 of file jscript.h.

◆ JS_E_INVALIDARG

#define JS_E_INVALIDARG   MAKE_JSERROR(IDS_INVALID_CALL_ARG)

Definition at line 527 of file jscript.h.

◆ JS_E_JSCRIPT_EXPECTED

#define JS_E_JSCRIPT_EXPECTED   MAKE_JSERROR(IDS_JSCRIPT_EXPECTED)

Definition at line 561 of file jscript.h.

◆ JS_E_KEY_NOT_OBJECT

#define JS_E_KEY_NOT_OBJECT   MAKE_JSERROR(IDS_KEY_NOT_OBJECT)

Definition at line 583 of file jscript.h.

◆ JS_E_LABEL_NOT_FOUND

#define JS_E_LABEL_NOT_FOUND   MAKE_JSERROR(IDS_LABEL_NOT_FOUND)

Definition at line 548 of file jscript.h.

◆ JS_E_LABEL_REDEFINED

#define JS_E_LABEL_REDEFINED   MAKE_JSERROR(IDS_LABEL_REDEFINED)

Definition at line 547 of file jscript.h.

◆ JS_E_MISPLACED_RETURN

#define JS_E_MISPLACED_RETURN   MAKE_JSERROR(IDS_MISPLACED_RETURN)

Definition at line 544 of file jscript.h.

◆ JS_E_MISSING_ARG

#define JS_E_MISSING_ARG   MAKE_JSERROR(IDS_ARG_NOT_OPT)

Definition at line 534 of file jscript.h.

◆ JS_E_MISSING_LBRACKET

#define JS_E_MISSING_LBRACKET   MAKE_JSERROR(IDS_LBRACKET)

Definition at line 538 of file jscript.h.

◆ JS_E_MISSING_RBRACKET

#define JS_E_MISSING_RBRACKET   MAKE_JSERROR(IDS_RBRACKET)

Definition at line 539 of file jscript.h.

◆ JS_E_MISSING_SEMICOLON

#define JS_E_MISSING_SEMICOLON   MAKE_JSERROR(IDS_SEMICOLON)

Definition at line 537 of file jscript.h.

◆ JS_E_NONCONFIGURABLE_REDEFINED

#define JS_E_NONCONFIGURABLE_REDEFINED   MAKE_JSERROR(IDS_NONCONFIGURABLE_REDEFINED)

Definition at line 576 of file jscript.h.

◆ JS_E_NONWRITABLE_MODIFIED

#define JS_E_NONWRITABLE_MODIFIED   MAKE_JSERROR(IDS_NONWRITABLE_MODIFIED)

Definition at line 577 of file jscript.h.

◆ JS_E_NOT_DATAVIEW

#define JS_E_NOT_DATAVIEW   MAKE_JSERROR(IDS_NOT_DATAVIEW)

Definition at line 578 of file jscript.h.

◆ JS_E_NUMBER_EXPECTED

#define JS_E_NUMBER_EXPECTED   MAKE_JSERROR(IDS_NOT_NUM)

Definition at line 554 of file jscript.h.

◆ JS_E_OBJECT_EXPECTED

#define JS_E_OBJECT_EXPECTED   MAKE_JSERROR(IDS_OBJECT_EXPECTED)

Definition at line 555 of file jscript.h.

◆ JS_E_OBJECT_NONEXTENSIBLE

#define JS_E_OBJECT_NONEXTENSIBLE   MAKE_JSERROR(IDS_OBJECT_NONEXTENSIBLE)

Definition at line 575 of file jscript.h.

◆ JS_E_OBJECT_NOT_COLLECTION

#define JS_E_OBJECT_NOT_COLLECTION   MAKE_JSERROR(IDS_OBJECT_NOT_COLLECTION)

Definition at line 535 of file jscript.h.

◆ JS_E_OBJECT_REQUIRED

#define JS_E_OBJECT_REQUIRED   MAKE_JSERROR(IDS_OBJECT_REQUIRED)

Definition at line 530 of file jscript.h.

◆ JS_E_PRECISION_OUT_OF_RANGE

#define JS_E_PRECISION_OUT_OF_RANGE   MAKE_JSERROR(IDS_PRECISION_OUT_OF_RANGE)

Definition at line 570 of file jscript.h.

◆ JS_E_PROP_DESC_MISMATCH

#define JS_E_PROP_DESC_MISMATCH   MAKE_JSERROR(IDS_PROP_DESC_MISMATCH)

Definition at line 585 of file jscript.h.

◆ JS_E_REGEXP_EXPECTED

#define JS_E_REGEXP_EXPECTED   MAKE_JSERROR(IDS_REGEXP_EXPECTED)

Definition at line 563 of file jscript.h.

◆ JS_E_REGEXP_SYNTAX

#define JS_E_REGEXP_SYNTAX   MAKE_JSERROR(IDS_REGEXP_SYNTAX_ERROR)

Definition at line 564 of file jscript.h.

◆ JS_E_STACK_OVERFLOW

#define JS_E_STACK_OVERFLOW   MAKE_JSERROR(IDS_STACK_OVERFLOW)

Definition at line 529 of file jscript.h.

◆ JS_E_SUBSCRIPT_OUT_OF_RANGE

#define JS_E_SUBSCRIPT_OUT_OF_RANGE   MAKE_JSERROR(IDS_SUBSCRIPT_OUT_OF_RANGE)

Definition at line 528 of file jscript.h.

◆ JS_E_SYNTAX

#define JS_E_SYNTAX   MAKE_JSERROR(IDS_SYNTAX_ERROR)

Definition at line 536 of file jscript.h.

◆ JS_E_TO_PRIMITIVE

#define JS_E_TO_PRIMITIVE   MAKE_JSERROR(IDS_TO_PRIMITIVE)

Definition at line 526 of file jscript.h.

◆ JS_E_UNDEFINED_VARIABLE

#define JS_E_UNDEFINED_VARIABLE   MAKE_JSERROR(IDS_UNDEFINED)

Definition at line 557 of file jscript.h.

◆ JS_E_UNEXPECTED_QUANTIFIER

#define JS_E_UNEXPECTED_QUANTIFIER   MAKE_JSERROR(IDS_UNEXPECTED_QUANTIFIER)

Definition at line 565 of file jscript.h.

◆ JS_E_UNTERMINATED_STRING

#define JS_E_UNTERMINATED_STRING   MAKE_JSERROR(IDS_UNTERMINATED_STR)

Definition at line 543 of file jscript.h.

◆ JS_E_VBARRAY_EXPECTED

#define JS_E_VBARRAY_EXPECTED   MAKE_JSERROR(IDS_NOT_VBARRAY)

Definition at line 559 of file jscript.h.

◆ JS_E_WRONG_THIS

#define JS_E_WRONG_THIS   MAKE_JSERROR(IDS_WRONG_THIS)

Definition at line 582 of file jscript.h.

◆ MAKE_JSERROR

Definition at line 524 of file jscript.h.

◆ PROPF_ALL

Definition at line 84 of file jscript.h.

◆ PROPF_ARGMASK

#define PROPF_ARGMASK   0x000000ff

Definition at line 86 of file jscript.h.

◆ PROPF_ES5

Definition at line 90 of file jscript.h.

◆ PROPF_ES6

Definition at line 91 of file jscript.h.

◆ PROPF_HTML

Definition at line 89 of file jscript.h.

◆ PROPF_VERSION_MASK

#define PROPF_VERSION_MASK   0x01ff0000

Definition at line 87 of file jscript.h.

◆ PROPF_VERSION_SHIFT

#define PROPF_VERSION_SHIFT   16

Definition at line 88 of file jscript.h.

◆ REM_ALLOC_RESULT

#define REM_ALLOC_RESULT   0x0008

Definition at line 486 of file jscript.h.

◆ REM_CHECK_GLOBAL

#define REM_CHECK_GLOBAL   0x0001

Definition at line 483 of file jscript.h.

◆ REM_NO_CTX_UPDATE

#define REM_NO_CTX_UPDATE   0x0004

Definition at line 485 of file jscript.h.

◆ REM_NO_PARENS

#define REM_NO_PARENS   0x0010

Definition at line 487 of file jscript.h.

◆ REM_RESET_INDEX

#define REM_RESET_INDEX   0x0002

Definition at line 484 of file jscript.h.

◆ SCRIPTLANGUAGEVERSION_ES5

#define SCRIPTLANGUAGEVERSION_ES5   0x102

Definition at line 53 of file jscript.h.

◆ SCRIPTLANGUAGEVERSION_ES6

#define SCRIPTLANGUAGEVERSION_ES6   0x103

Definition at line 54 of file jscript.h.

◆ SCRIPTLANGUAGEVERSION_HTML

#define SCRIPTLANGUAGEVERSION_HTML   0x400

Definition at line 48 of file jscript.h.

◆ SP_CALLER_UNINITIALIZED

#define SP_CALLER_UNINITIALIZED   ((IServiceProvider*)IntToPtr(-1))

Definition at line 349 of file jscript.h.

Typedef Documentation

◆ builtin_getter_t

typedef HRESULT(* builtin_getter_t) (script_ctx_t *, jsdisp_t *, jsval_t *)

Definition at line 130 of file jscript.h.

◆ builtin_invoke_t

typedef HRESULT(* builtin_invoke_t) (script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)

Definition at line 129 of file jscript.h.

◆ builtin_setter_t

typedef HRESULT(* builtin_setter_t) (script_ctx_t *, jsdisp_t *, jsval_t)

Definition at line 131 of file jscript.h.

◆ cc_var_t

Definition at line 341 of file jscript.h.

◆ dispex_prop_t

Definition at line 60 of file jscript.h.

◆ jsdisp_t

Definition at line 79 of file jscript.h.

◆ jsexcept_t

Definition at line 58 of file jscript.h.

◆ jsstr_t

Definition at line 57 of file jscript.h.

◆ jsval_t

Definition at line 56 of file jscript.h.

◆ named_item_t

◆ property_desc_t

Definition at line 61 of file jscript.h.

◆ script_ctx_t

Definition at line 59 of file jscript.h.

Enumeration Type Documentation

◆ gc_traverse_op

Enumerator
GC_TRAVERSE_UNLINK 
GC_TRAVERSE_SPECULATIVELY 
GC_TRAVERSE 

Definition at line 161 of file jscript.h.

161 {
165};
@ GC_TRAVERSE
Definition: jscript.h:164
@ GC_TRAVERSE_SPECULATIVELY
Definition: jscript.h:163
@ GC_TRAVERSE_UNLINK
Definition: jscript.h:162

◆ hint_t

Enumerator
NO_HINT 
HINT_STRING 
HINT_NUMBER 

Definition at line 308 of file jscript.h.

308 {
309 NO_HINT,
312} hint_t;
hint_t
Definition: jscript.h:308
@ NO_HINT
Definition: jscript.h:309
@ HINT_NUMBER
Definition: jscript.h:311
@ HINT_STRING
Definition: jscript.h:310

◆ jsclass_t

Enumerator
JSCLASS_NONE 
JSCLASS_ARRAY 
JSCLASS_BOOLEAN 
JSCLASS_DATE 
JSCLASS_ENUMERATOR 
JSCLASS_ERROR 
JSCLASS_FUNCTION 
JSCLASS_GLOBAL 
JSCLASS_MATH 
JSCLASS_NUMBER 
JSCLASS_OBJECT 
JSCLASS_REGEXP 
JSCLASS_STRING 
JSCLASS_ARGUMENTS 
JSCLASS_VBARRAY 
JSCLASS_JSON 
JSCLASS_ARRAYBUFFER 
JSCLASS_DATAVIEW 
JSCLASS_MAP 
JSCLASS_SET 
JSCLASS_WEAKMAP 
JSCLASS_HOST 

Definition at line 102 of file jscript.h.

102 {
125} jsclass_t;
jsclass_t
Definition: jscript.h:102
@ JSCLASS_ENUMERATOR
Definition: jscript.h:107
@ JSCLASS_MAP
Definition: jscript.h:121
@ JSCLASS_WEAKMAP
Definition: jscript.h:123
@ JSCLASS_DATAVIEW
Definition: jscript.h:120
@ JSCLASS_JSON
Definition: jscript.h:118
@ JSCLASS_ARRAYBUFFER
Definition: jscript.h:119
@ JSCLASS_VBARRAY
Definition: jscript.h:117
@ JSCLASS_ARGUMENTS
Definition: jscript.h:116
@ JSCLASS_SET
Definition: jscript.h:122
@ JSCLASS_FUNCTION
Definition: jscript.h:109
@ JSCLASS_BOOLEAN
Definition: jscript.h:105
@ JSCLASS_HOST
Definition: jscript.h:124
@ JSCLASS_STRING
Definition: jscript.h:115
@ JSCLASS_OBJECT
Definition: jscript.h:113
@ JSCLASS_ARRAY
Definition: jscript.h:104
@ JSCLASS_MATH
Definition: jscript.h:111
@ JSCLASS_NONE
Definition: jscript.h:103
@ JSCLASS_DATE
Definition: jscript.h:106
@ JSCLASS_ERROR
Definition: jscript.h:108
@ JSCLASS_GLOBAL
Definition: jscript.h:110
@ JSCLASS_NUMBER
Definition: jscript.h:112
@ JSCLASS_REGEXP
Definition: jscript.h:114

◆ jsdisp_enum_type

Enumerator
JSDISP_ENUM_ALL 
JSDISP_ENUM_OWN 
JSDISP_ENUM_OWN_ENUMERABLE 

Definition at line 239 of file jscript.h.

239 {
243};
@ JSDISP_ENUM_ALL
Definition: jscript.h:240
@ JSDISP_ENUM_OWN_ENUMERABLE
Definition: jscript.h:242
@ JSDISP_ENUM_OWN
Definition: jscript.h:241

Function Documentation

◆ array_get_length()

unsigned array_get_length ( jsdisp_t array)

Definition at line 50 of file array.c.

51{
54}
static ArrayInstance * array_from_jsdisp(jsdisp_t *jsdisp)
Definition: array.c:39
#define assert(_expr)
Definition: assert.h:32
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:503
DWORD length
Definition: array.c:36
Definition: undname.c:54

Referenced by stringify_array(), and transform_json_object().

◆ as_jsdisp()

jsdisp_t * as_jsdisp ( IDispatch disp)

Definition at line 2441 of file dispex.c.

2442{
2443 assert(disp->lpVtbl == (IDispatchVtbl*)&DispatchExVtbl);
2445}
static IWineJSDispatchVtbl DispatchExVtbl
Definition: dispex.c:2420
static jsdisp_t * impl_from_IWineJSDispatch(IWineJSDispatch *iface)
Definition: dispex.c:1924

Referenced by detach_arguments_object(), detach_scope(), DispatchEx_GetTypeInfo(), interp_obj_prop(), scope_init_locals(), setup_arguments_object(), and to_locale_string().

◆ bool_obj_value()

BOOL bool_obj_value ( jsdisp_t obj)

Definition at line 51 of file bool.c.

52{
54 return bool_from_jsdisp(obj)->val;
55}
static BoolInstance * bool_from_jsdisp(jsdisp_t *jsdisp)
Definition: bool.c:34
BOOL val
Definition: bool.c:31

Referenced by maybe_to_primitive().

◆ builtin_eval()

HRESULT builtin_eval ( script_ctx_t ctx,
struct _call_frame_t frame,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 137 of file global.c.

139{
140 DWORD exec_flags = EXEC_EVAL;
142 const WCHAR *src;
144
145 TRACE("\n");
146
147 if(!argc) {
148 if(r)
149 *r = jsval_undefined();
150 return S_OK;
151 }
152
153 if(!is_string(argv[0])) {
154 if(r)
155 return jsval_copy(argv[0], r);
156 return S_OK;
157 }
158
160 if(!src)
161 return E_OUTOFMEMORY;
162
163 TRACE("parsing %s\n", debugstr_jsval(argv[0]));
164 hres = compile_script(ctx, src, 0, 0, NULL, NULL, TRUE, FALSE, frame ? frame->bytecode->named_item : NULL, &code);
165 if(FAILED(hres)) {
166 WARN("parse (%s) failed: %08lx\n", debugstr_jsval(argv[0]), hres);
167 return hres;
168 }
169
170 if(!frame || (frame->flags & EXEC_GLOBAL))
171 exec_flags |= EXEC_GLOBAL;
173 exec_flags |= EXEC_RETURN_TO_INTERP;
174 hres = exec_source(ctx, exec_flags, code, &code->global_code, frame ? frame->scope : NULL,
175 frame ? frame->this_obj : NULL, NULL, 0, NULL, r);
177 return hres;
178}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
MonoAssembly int argc
Definition: metahost.c:107
HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, function_code_t *function, scope_chain_t *scope, IDispatch *this_obj, jsdisp_t *function_instance, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: engine.c:3425
#define EXEC_GLOBAL
Definition: engine.h:305
#define EXEC_RETURN_TO_INTERP
Definition: engine.h:307
#define EXEC_EVAL
Definition: engine.h:308
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum src
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
void release_bytecode(bytecode_t *code)
Definition: compile.c:2459
HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_context, unsigned start_line, const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, named_item_t *named_item, bytecode_t **ret)
Definition: compile.c:2725
#define DISPATCH_JSCRIPT_CALLEREXECSSOURCE
Definition: jscript.h:98
const char * debugstr_jsval(const jsval_t)
Definition: jsutils.c:35
static const WCHAR * jsstr_flatten(jsstr_t *str)
Definition: jsstr.h:136
HRESULT jsval_copy(jsval_t v, jsval_t *r)
Definition: jsutils.c:225
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
static jsstr_t * get_string(jsval_t v)
Definition: jsval.h:238
HRESULT hres
Definition: protocol.c:465
#define argv
Definition: mplay32.c:18
static BOOL is_string(parse_buffer *buf)
Definition: parsing.c:600
short WCHAR
Definition: pedump.c:58
#define TRACE(s)
Definition: solgame.cpp:4
named_item_t * named_item
Definition: engine.h:199
IDispatch * this_obj
Definition: engine.h:287
bytecode_t * bytecode
Definition: engine.h:299
DWORD flags
Definition: engine.h:291
scope_chain_t * scope
Definition: engine.h:282
Definition: inflate.c:139

Referenced by interp_call_eval(), and JSGlobal_eval().

◆ builtin_set_const()

HRESULT builtin_set_const ( script_ctx_t ctx,
jsdisp_t jsthis,
jsval_t  value 
)

Definition at line 741 of file dispex.c.

742{
743 TRACE("%p %s\n", jsthis, debugstr_jsval(value));
744 return S_OK;
745}
Definition: pdh_main.c:96

◆ C_ASSERT()

C_ASSERT ( RTL_SIZEOF_THROUGH_FIELD(script_ctx_t, weakmap_prototype)  = =RTL_SIZEOF_THROUGH_FIELD(script_ctx_t, global_objects))

◆ create_activex_constr()

HRESULT create_activex_constr ( script_ctx_t ctx,
jsdisp_t **  ret 
)

Definition at line 189 of file activex.c.

190{
191 jsdisp_t *prototype;
193
194 hres = create_object(ctx, NULL, &prototype);
195 if(FAILED(hres))
196 return hres;
197
199 PROPF_CONSTR|1, prototype, ret);
200
201 jsdisp_release(prototype);
202 return hres;
203}
static HRESULT ActiveXObject_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: activex.c:141
HRESULT create_builtin_function(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret)
Definition: function.c:773
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **)
Definition: object.c:1131
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34

Referenced by init_global().

◆ create_array()

HRESULT create_array ( script_ctx_t ctx,
DWORD  length,
jsdisp_t **  ret 
)

Definition at line 1780 of file array.c.

1781{
1783 HRESULT hres;
1784
1786 if(FAILED(hres))
1787 return hres;
1788
1789 array->length = length;
1790
1791 *ret = &array->dispex;
1792 return S_OK;
1793}
static HRESULT alloc_array(script_ctx_t *ctx, jsdisp_t *object_prototype, ArrayInstance **ret)
Definition: array.c:1731
GLuint GLsizei GLsizei * length
Definition: glext.h:6040

Referenced by Array_concat(), Array_filter(), Array_map(), Array_slice(), Array_splice(), ArrayConstr_value(), create_match_array(), interp_carray(), object_keys(), parse_json_value(), regexp_string_match(), String_split(), and VBArray_toArray().

◆ create_array_constr()

HRESULT create_array_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 1765 of file array.c.

1766{
1768 HRESULT hres;
1769
1770 hres = alloc_array(ctx, object_prototype, &array);
1771 if(FAILED(hres))
1772 return hres;
1773
1775
1776 jsdisp_release(&array->dispex);
1777 return hres;
1778}
static const builtin_info_t ArrayConstr_info
Definition: array.c:1758
static HRESULT ArrayConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: array.c:1676
HRESULT create_builtin_constructor(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret)
Definition: function.c:809

Referenced by init_constructors().

◆ create_ax_site()

IUnknown * create_ax_site ( script_ctx_t ctx)

Definition at line 614 of file jscript.c.

615{
617 AXSite *ret;
619
620 hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp);
621 if(FAILED(hres)) {
622 TRACE("Could not get IServiceProvider iface: %08lx\n", hres);
623 }
624
625 ret = malloc(sizeof(AXSite));
626 if(!ret) {
627 IServiceProvider_Release(sp);
628 return NULL;
629 }
630
631 ret->IServiceProvider_iface.lpVtbl = &AXSiteVtbl;
632 ret->ref = 1;
633 ret->sp = sp;
634
635 return (IUnknown*)&ret->IServiceProvider_iface;
636}
#define malloc
Definition: debug_ros.c:4
static IServiceProviderVtbl AXSiteVtbl
Definition: jscript.c:607
static const WCHAR sp[]
Definition: suminfo.c:287

◆ create_bool()

HRESULT create_bool ( script_ctx_t ctx,
BOOL  bval,
jsdisp_t **  ret 
)

Definition at line 212 of file bool.c.

213{
216
217 hres = alloc_bool(ctx, NULL, &b);
218 if(FAILED(hres))
219 return hres;
220
221 b->val = bval;
222
223 *ret = &b->dispex;
224 return S_OK;
225}
static HRESULT alloc_bool(script_ctx_t *ctx, jsdisp_t *object_prototype, BoolInstance **ret)
Definition: bool.c:173
float bval
Definition: cylfrac.c:48
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define b
Definition: ke_i.h:79

Referenced by BoolConstr_value(), and to_object().

◆ create_bool_constr()

HRESULT create_bool_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 196 of file bool.c.

197{
200
201 hres = alloc_bool(ctx, object_prototype, &b);
202 if(FAILED(hres))
203 return hres;
204
206 PROPF_CONSTR|1, &b->dispex, ret);
207
208 jsdisp_release(&b->dispex);
209 return hres;
210}
static HRESULT BoolConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: bool.c:133

Referenced by init_constructors().

◆ create_builtin_constructor()

HRESULT create_builtin_constructor ( script_ctx_t ctx,
builtin_invoke_t  value_proc,
const WCHAR name,
const builtin_info_t builtin_info,
DWORD  flags,
jsdisp_t prototype,
jsdisp_t **  ret 
)

Definition at line 809 of file function.c.

811{
812 jsdisp_t *constr;
814
815 hres = create_builtin_function(ctx, value_proc, name, builtin_info, flags, prototype, &constr);
816 if(FAILED(hres))
817 return hres;
818
819 hres = set_constructor_prop(ctx, constr, prototype);
820 if(FAILED(hres)) {
821 jsdisp_release(constr);
822 return hres;
823 }
824
825 *ret = constr;
826 return S_OK;
827}
static HRESULT set_constructor_prop(script_ctx_t *ctx, jsdisp_t *constr, jsdisp_t *prot)
Definition: function.c:803
Definition: name.c:39

Referenced by create_array_constr(), create_bool_constr(), create_date_constr(), create_enumerator_constr(), create_number_constr(), create_object_constr(), create_regexp_constr(), create_string_constr(), create_vbarray_constr(), init_arraybuf_constructors(), init_error_constr(), and init_set_constructor().

◆ create_builtin_error()

jsdisp_t * create_builtin_error ( script_ctx_t ctx)

Definition at line 448 of file error.c.

449{
450 jsdisp_t *constr = ctx->error_constr, *r;
451 jsexcept_t *ei = ctx->ei;
453
454 assert(FAILED(ei->error) && ei->error != DISP_E_EXCEPTION);
455
456 if(is_jscript_error(ei->error)) {
457 switch(ei->error) {
458 case JS_E_SYNTAX:
472 case JS_E_DISABLED_CC:
473 case JS_E_EXPECTED_AT:
475 constr = ctx->syntax_error_constr;
476 break;
477
479 case JS_E_INVALIDARG:
483 case JS_E_MISSING_ARG:
504 case JS_E_WRONG_THIS:
509 constr = ctx->type_error_constr;
510 break;
511
518 constr = ctx->range_error_constr;
519 break;
520
522 constr = ctx->reference_error_constr;
523 break;
524
526 constr = ctx->regexp_error_constr;
527 break;
528
531 constr = ctx->uri_error_constr;
532 break;
533 }
534 }
535
536 hres = create_error(ctx, constr, ei->error, ei->message ? ei->message : jsstr_empty(), &r);
537 return SUCCEEDED(hres) ? r : NULL;
538}
static HRESULT create_error(script_ctx_t *ctx, jsdisp_t *constr, UINT number, jsstr_t *msg, jsdisp_t **ret)
Definition: error.c:181
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define JS_E_DISABLED_CC
Definition: jscript.h:550
#define JS_E_MISSING_ARG
Definition: jscript.h:534
#define JS_E_INVALID_CHAR
Definition: jscript.h:542
#define JS_E_OBJECT_NOT_COLLECTION
Definition: jscript.h:535
#define JS_E_EXPECTED_CCEND
Definition: jscript.h:549
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
#define JS_E_SYNTAX
Definition: jscript.h:536
#define JS_E_ILLEGAL_ASSIGN
Definition: jscript.h:556
#define JS_E_BOOLEAN_EXPECTED
Definition: jscript.h:558
#define JS_E_JSCRIPT_EXPECTED
Definition: jscript.h:561
#define JS_E_EXPECTED_IDENTIFIER
Definition: jscript.h:540
#define JS_E_PRECISION_OUT_OF_RANGE
Definition: jscript.h:570
#define JS_E_OBJECT_REQUIRED
Definition: jscript.h:530
#define JS_E_OBJECT_EXPECTED
Definition: jscript.h:555
#define JS_E_MISSING_RBRACKET
Definition: jscript.h:539
#define JS_E_CANNOT_CREATE_FOR_NONEXTENSIBLE
Definition: jscript.h:574
#define JS_E_SUBSCRIPT_OUT_OF_RANGE
Definition: jscript.h:528
#define JS_E_INVALID_BREAK
Definition: jscript.h:545
#define JS_E_MISPLACED_RETURN
Definition: jscript.h:544
#define JS_E_LABEL_REDEFINED
Definition: jscript.h:547
#define JS_E_ARRAYBUFFER_EXPECTED
Definition: jscript.h:584
#define JS_E_DATAVIEW_INVALID_OFFSET
Definition: jscript.h:581
#define JS_E_LABEL_NOT_FOUND
Definition: jscript.h:548
#define JS_E_INVALID_CONTINUE
Definition: jscript.h:546
#define JS_E_UNTERMINATED_STRING
Definition: jscript.h:543
#define JS_E_DATAVIEW_NO_ARGUMENT
Definition: jscript.h:579
#define JS_E_CYCLIC_PROTO_VALUE
Definition: jscript.h:573
#define JS_E_EXPECTED_ASSIGN
Definition: jscript.h:541
#define JS_E_FUNCTION_EXPECTED
Definition: jscript.h:552
#define JS_E_NOT_DATAVIEW
Definition: jscript.h:578
#define JS_E_INVALID_URI_CHAR
Definition: jscript.h:568
#define JS_E_INVALID_WRITABLE_PROP_DESC
Definition: jscript.h:586
#define JS_E_INVALID_URI_CODING
Definition: jscript.h:567
#define JS_E_MISSING_SEMICOLON
Definition: jscript.h:537
#define JS_E_KEY_NOT_OBJECT
Definition: jscript.h:583
#define JS_E_DATAVIEW_INVALID_ACCESS
Definition: jscript.h:580
#define JS_E_NONWRITABLE_MODIFIED
Definition: jscript.h:577
#define JS_E_VBARRAY_EXPECTED
Definition: jscript.h:559
#define JS_E_ARRAY_EXPECTED
Definition: jscript.h:572
#define JS_E_UNDEFINED_VARIABLE
Definition: jscript.h:557
#define JS_E_MISSING_LBRACKET
Definition: jscript.h:538
#define JS_E_NUMBER_EXPECTED
Definition: jscript.h:554
static BOOL is_jscript_error(HRESULT hres)
Definition: jscript.h:588
#define JS_E_REGEXP_SYNTAX
Definition: jscript.h:564
#define JS_E_NONCONFIGURABLE_REDEFINED
Definition: jscript.h:576
#define JS_E_INVALID_PROPERTY
Definition: jscript.h:532
#define JS_E_UNEXPECTED_QUANTIFIER
Definition: jscript.h:565
#define JS_E_INVALID_DELETE
Definition: jscript.h:560
#define JS_E_WRONG_THIS
Definition: jscript.h:582
#define JS_E_TO_PRIMITIVE
Definition: jscript.h:526
#define JS_E_DATE_EXPECTED
Definition: jscript.h:553
#define JS_E_INVALIDARG
Definition: jscript.h:527
#define JS_E_REGEXP_EXPECTED
Definition: jscript.h:563
#define JS_E_INVALID_ACTION
Definition: jscript.h:533
#define JS_E_EXPECTED_AT
Definition: jscript.h:551
#define JS_E_PROP_DESC_MISMATCH
Definition: jscript.h:585
#define JS_E_FRACTION_DIGITS_OUT_OF_RANGE
Definition: jscript.h:569
#define JS_E_INVALID_LENGTH
Definition: jscript.h:571
#define JS_E_OBJECT_NONEXTENSIBLE
Definition: jscript.h:575
jsstr_t * jsstr_empty(void)
Definition: jsstr.c:291
jsstr_t * message
Definition: engine.h:260
HRESULT error
Definition: engine.h:254
#define DISP_E_EXCEPTION
Definition: winerror.h:3621

Referenced by unwind_exception().

◆ create_builtin_function()

HRESULT create_builtin_function ( script_ctx_t ctx,
builtin_invoke_t  value_proc,
const WCHAR name,
const builtin_info_t builtin_info,
DWORD  flags,
jsdisp_t prototype,
jsdisp_t **  ret 
)

Definition at line 773 of file function.c.

775{
776 NativeFunction *function;
778
779 if(!ctx->function_constr)
780 return E_UNEXPECTED;
781
782 hres = create_function(ctx, builtin_info, &NativeFunctionVtbl, sizeof(NativeFunction), flags, FALSE, NULL, (void**)&function);
783 if(FAILED(hres))
784 return hres;
785
786 if(builtin_info)
787 hres = jsdisp_define_data_property(&function->function.dispex, L"length", 0,
788 jsval_number(function->function.length));
789 if(SUCCEEDED(hres))
790 hres = jsdisp_define_data_property(&function->function.dispex, L"prototype", 0, prototype ? jsval_obj(prototype) : jsval_null());
791 if(FAILED(hres)) {
792 jsdisp_release(&function->function.dispex);
793 return hres;
794 }
795
796 function->proc = value_proc;
797 function->name = name;
798
799 *ret = &function->function.dispex;
800 return S_OK;
801}
static HRESULT create_function(script_ctx_t *ctx, const builtin_info_t *builtin_info, const function_vtbl_t *vtbl, size_t size, DWORD flags, BOOL funcprot, jsdisp_t *prototype, void **ret)
Definition: function.c:711
static const function_vtbl_t NativeFunctionVtbl
Definition: function.c:765
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
Definition: dispex.c:3349
static jsval_t jsval_null(void)
Definition: jsval.h:130
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
static jsval_t jsval_number(double n)
Definition: jsval.h:153
jsdisp_t dispex
Definition: function.c:31
FunctionInstance function
Definition: function.c:53
const WCHAR * name
Definition: function.c:55
builtin_invoke_t proc
Definition: function.c:54
#define E_UNEXPECTED
Definition: winerror.h:3528

Referenced by create_activex_constr(), create_builtin_constructor(), find_prop_name(), init_arraybuf_constructors(), and init_object_prototype_accessors().

◆ create_date_constr()

HRESULT create_date_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 2442 of file date.c.

2443{
2445 HRESULT hres;
2446
2447 hres = create_date(ctx, object_prototype, 0.0, &date);
2448 if(FAILED(hres))
2449 return hres;
2450
2452 PROPF_CONSTR|7, &date->dispex, ret);
2453
2454 jsdisp_release(&date->dispex);
2455 return hres;
2456}
static const builtin_info_t DateConstr_info
Definition: date.c:2435
static HRESULT DateConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: date.c:2350
static HRESULT create_date(script_ctx_t *ctx, jsdisp_t *object_prototype, DOUBLE time, DateInstance **ret)
Definition: date.c:1916
__u16 date
Definition: mkdosfs.c:8

Referenced by init_constructors().

◆ create_dispex()

HRESULT create_dispex ( script_ctx_t ctx,
const builtin_info_t builtin_info,
jsdisp_t prototype,
jsdisp_t **  dispex 
)

Definition at line 2493 of file dispex.c.

2494{
2495 jsdisp_t *ret;
2496 HRESULT hres;
2497
2498 ret = calloc(1, sizeof(jsdisp_t));
2499 if(!ret)
2500 return E_OUTOFMEMORY;
2501
2502 hres = init_dispex(ret, ctx, builtin_info ? builtin_info : &dispex_info, prototype);
2503 if(FAILED(hres)) {
2504 free(ret);
2505 return hres;
2506 }
2507
2508 *dispex = ret;
2509 return S_OK;
2510}
#define free
Definition: debug_ros.c:5
static const builtin_info_t dispex_info
Definition: dispex.c:2491
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:2454
#define calloc
Definition: rosglue.h:14

Referenced by create_named_item_script_obj(), create_object_prototype(), detach_scope(), exec_source(), init_global(), init_set_constructor(), interp_enter_catch(), Object_create(), and scope_init_locals().

◆ create_enumerator_constr()

HRESULT create_enumerator_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 320 of file enumerator.c.

321{
322 EnumeratorInstance *enumerator;
324
325 hres = alloc_enumerator(ctx, object_prototype, &enumerator);
326 if(FAILED(hres))
327 return hres;
328
330 &EnumeratorConstr_info, PROPF_CONSTR|7, &enumerator->dispex, ret);
331 jsdisp_release(&enumerator->dispex);
332
333 return hres;
334}
static const builtin_info_t EnumeratorConstr_info
Definition: enumerator.c:315
static HRESULT EnumeratorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:286
static HRESULT alloc_enumerator(script_ctx_t *ctx, jsdisp_t *object_prototype, EnumeratorInstance **ret)
Definition: enumerator.c:195

Referenced by init_constructors().

◆ create_host_function()

HRESULT create_host_function ( script_ctx_t ctx,
const struct property_info desc,
DWORD  flags,
jsdisp_t **  ret 
)

Definition at line 1072 of file function.c.

1073{
1074 HostFunction *function;
1075 HRESULT hres;
1076
1077 if(!ctx->function_constr)
1078 return E_UNEXPECTED;
1079
1081 FALSE, NULL, (void**)&function);
1082 if(FAILED(hres))
1083 return hres;
1084
1085 function->name = desc->name;
1086 function->id = desc->id;
1087 function->iid = desc->iid;
1088 function->flags = flags;
1089 *ret = &function->function.dispex;
1090 return S_OK;
1091}
static const function_vtbl_t HostFunctionVtbl
Definition: function.c:1064
static const builtin_info_t HostFunction_info
Definition: function.c:978
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1204
UINT32 iid
Definition: function.c:70
const WCHAR * name
Definition: function.c:68
UINT32 id
Definition: function.c:69
UINT32 flags
Definition: function.c:71
FunctionInstance function
Definition: function.c:67

Referenced by update_external_prop().

◆ create_jscaller()

HRESULT create_jscaller ( script_ctx_t ctx)

Definition at line 1109 of file jsutils.c.

1110{
1111 JSCaller *ret;
1112
1113 ret = malloc(sizeof(*ret));
1114 if(!ret)
1115 return E_OUTOFMEMORY;
1116
1117 ret->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl;
1118 ret->ref = 1;
1119 ret->ctx = ctx;
1120 ret->caller = SP_CALLER_UNINITIALIZED;
1121
1122 ctx->jscaller = ret;
1123 return S_OK;
1124}
#define SP_CALLER_UNINITIALIZED
Definition: jscript.h:349
static const IServiceProviderVtbl ServiceProviderVtbl
Definition: jsutils.c:1102

Referenced by JScript_SetScriptSite().

◆ create_jscript_object()

HRESULT create_jscript_object ( BOOL  is_encode,
REFIID  riid,
void **  ppv 
)

Definition at line 1476 of file jscript.c.

1477{
1478 JScript *ret;
1479 HRESULT hres;
1480
1481 ret = calloc(1, sizeof(*ret));
1482 if(!ret)
1483 return E_OUTOFMEMORY;
1484
1485 lock_module();
1486
1487 ret->IActiveScript_iface.lpVtbl = &JScriptVtbl;
1488 ret->IActiveScriptParse_iface.lpVtbl = &JScriptParseVtbl;
1489 ret->IActiveScriptParseProcedure2_iface.lpVtbl = &JScriptParseProcedureVtbl;
1490 ret->IActiveScriptProperty_iface.lpVtbl = &JScriptPropertyVtbl;
1491 ret->IObjectSafety_iface.lpVtbl = &JScriptSafetyVtbl;
1492 ret->IVariantChangeType_iface.lpVtbl = &VariantChangeTypeVtbl;
1493 ret->IWineJScript_iface.lpVtbl = &WineJScriptVtbl;
1494 ret->ref = 1;
1495 ret->safeopt = INTERFACE_USES_DISPEX;
1496 ret->is_encode = is_encode;
1497 list_init(&ret->persistent_code);
1498 list_init(&ret->queued_code);
1499
1500 hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
1501 IActiveScript_Release(&ret->IActiveScript_iface);
1502 return hres;
1503}
static void list_init(struct list_entry *head)
Definition: list.h:51
static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
Definition: jscript.c:1233
static const IActiveScriptParseVtbl JScriptParseVtbl
Definition: jscript.c:1156
static const IVariantChangeTypeVtbl VariantChangeTypeVtbl
Definition: jscript.c:1424
static const IActiveScriptVtbl JScriptVtbl
Definition: jscript.c:1015
static const IWineJScriptVtbl WineJScriptVtbl
Definition: jscript.c:1468
static const IObjectSafetyVtbl JScriptSafetyVtbl
Definition: jscript.c:1363
static const IActiveScriptPropertyVtbl JScriptPropertyVtbl
Definition: jscript.c:1300
static void lock_module(void)
Definition: ieframe.h:335
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

Referenced by JScriptEncodeFactory_CreateInstance(), and JScriptFactory_CreateInstance().

◆ create_json()

HRESULT create_json ( script_ctx_t ctx,
jsdisp_t **  ret 
)

Definition at line 1032 of file json.c.

1033{
1034 jsdisp_t *json;
1035 HRESULT hres;
1036
1037 json = calloc(1, sizeof(*json));
1038 if(!json)
1039 return E_OUTOFMEMORY;
1040
1041 hres = init_dispex_from_constr(json, ctx, &JSON_info, ctx->object_constr);
1042 if(FAILED(hres)) {
1043 free(json);
1044 return hres;
1045 }
1046
1047 *ret = json;
1048 return S_OK;
1049}
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
Definition: dispex.c:2512
static const builtin_info_t JSON_info
Definition: json.c:1026

Referenced by init_global().

◆ create_math()

HRESULT create_math ( script_ctx_t ctx,
jsdisp_t **  ret 
)

Definition at line 503 of file math.c.

504{
505 jsdisp_t *math;
506 unsigned i;
508
509 struct {
510 const WCHAR *name;
511 DOUBLE val;
512 }constants[] = {
513 {L"E", M_E}, /* ECMA-262 3rd Edition 15.8.1.1 */
514 {L"LN10", M_LN10}, /* ECMA-262 3rd Edition 15.8.1.2 */
515 {L"LN2", M_LN2}, /* ECMA-262 3rd Edition 15.8.1.3 */
516 {L"LOG2E", M_LOG2E}, /* ECMA-262 3rd Edition 15.8.1.4 */
517 {L"LOG10E", M_LOG10E}, /* ECMA-262 3rd Edition 15.8.1.5 */
518 {L"PI", M_PI}, /* ECMA-262 3rd Edition 15.8.1.6 */
519 {L"SQRT1_2", M_SQRT1_2}, /* ECMA-262 3rd Edition 15.8.1.7 */
520 {L"SQRT2", M_SQRT2}, /* ECMA-262 3rd Edition 15.8.1.8 */
521 };
522
523 math = calloc(1, sizeof(jsdisp_t));
524 if(!math)
525 return E_OUTOFMEMORY;
526
527 hres = init_dispex_from_constr(math, ctx, &Math_info, ctx->object_constr);
528 if(FAILED(hres)) {
529 free(math);
530 return hres;
531 }
532
533 for(i=0; i < ARRAY_SIZE(constants); i++) {
536 if(FAILED(hres)) {
537 jsdisp_release(math);
538 return hres;
539 }
540 }
541
542 *ret = math;
543 return S_OK;
544}
#define ARRAY_SIZE(A)
Definition: main.h:20
static const builtin_info_t Math_info
Definition: math.c:498
#define M_LN10
Definition: math.h:408
#define M_SQRT2
Definition: math.h:415
#define M_LN2
Definition: math.h:407
#define M_E
Definition: math.h:404
#define M_LOG10E
Definition: math.h:406
#define M_LOG2E
Definition: math.h:405
#define M_SQRT1_2
Definition: math.h:416
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define M_PI
Definition: macros.h:263
constants
Definition: resource.c:30
double DOUBLE
Definition: typedefs.h:70

Referenced by init_global().

◆ create_named_item_script_obj()

HRESULT create_named_item_script_obj ( script_ctx_t ctx,
named_item_t item 
)

Definition at line 124 of file jscript.c.

125{
126 static const builtin_info_t disp_info = { .class = JSCLASS_GLOBAL };
127 return create_dispex(ctx, &disp_info, NULL, &item->script_obj);
128}
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:2493
jsclass_t class
Definition: jscript.h:183

Referenced by exec_source(), and lookup_named_item().

◆ create_number()

HRESULT create_number ( script_ctx_t ctx,
double  value,
jsdisp_t **  ret 
)

Definition at line 699 of file number.c.

700{
703
705 if(FAILED(hres))
706 return hres;
707
708 number->value = value;
709
710 *ret = &number->dispex;
711 return S_OK;
712}
static unsigned int number
Definition: dsound.c:1479
static HRESULT alloc_number(script_ctx_t *ctx, jsdisp_t *object_prototype, NumberInstance **ret)
Definition: number.c:660

Referenced by NumberConstr_value(), and to_object().

◆ create_number_constr()

HRESULT create_number_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 682 of file number.c.

683{
686
687 hres = alloc_number(ctx, object_prototype, &number);
688 if(FAILED(hres))
689 return hres;
690
691 number->value = 0;
693 PROPF_CONSTR|1, &number->dispex, ret);
694
695 jsdisp_release(&number->dispex);
696 return hres;
697}
static HRESULT NumberConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: number.c:609

Referenced by init_constructors().

◆ create_object()

HRESULT create_object ( script_ctx_t ctx,
jsdisp_t constr,
jsdisp_t **  ret 
)

Definition at line 1131 of file object.c.

1132{
1134 HRESULT hres;
1135
1136 object = calloc(1, sizeof(jsdisp_t));
1137 if(!object)
1138 return E_OUTOFMEMORY;
1139
1140 hres = init_dispex_from_constr(object, ctx, &ObjectInst_info, constr ? constr : ctx->object_constr);
1141 if(FAILED(hres)) {
1142 free(object);
1143 return hres;
1144 }
1145
1146 *ret = object;
1147 return S_OK;
1148}
static const builtin_info_t ObjectInst_info
Definition: object.c:475

Referenced by create_activex_constr(), d3drm3_CreateObject(), interp_new_obj(), InterpretedFunction_call(), InterpretedFunction_get_prototype(), JSON_parse(), JSON_stringify(), Object_getOwnPropertyDescriptor(), ObjectConstr_value(), and parse_json_value().

◆ create_object_constr()

HRESULT create_object_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 1120 of file object.c.

1121{
1123 object_prototype, ret);
1124}
static HRESULT ObjectConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: object.c:1073
static const builtin_info_t ObjectConstr_info
Definition: object.c:1066

Referenced by init_constructors().

◆ create_object_prototype()

HRESULT create_object_prototype ( script_ctx_t ctx,
jsdisp_t **  ret 
)

Definition at line 1126 of file object.c.

1127{
1128 return create_dispex(ctx, &Object_info, NULL, ret);
1129}
static const builtin_info_t Object_info
Definition: object.c:469

Referenced by init_global().

◆ create_regexp()

HRESULT create_regexp ( script_ctx_t ctx,
jsstr_t src,
DWORD  flags,
jsdisp_t **  ret 
)

Definition at line 626 of file jsregexp.c.

627{
628 RegExpInstance *regexp;
629 const WCHAR *str;
631
633 if(!str)
634 return E_OUTOFMEMORY;
635
636 TRACE("%s %lx\n", debugstr_wn(str, jsstr_length(src)), flags);
637
638 hres = alloc_regexp(ctx, src, NULL, &regexp);
639 if(FAILED(hres))
640 return hres;
641
642 regexp->jsregexp = regexp_new(ctx, &ctx->tmp_heap, str, jsstr_length(regexp->str), flags, FALSE);
643 if(!regexp->jsregexp) {
644 WARN("regexp_new failed\n");
645 jsdisp_release(&regexp->dispex);
646 return DISP_E_EXCEPTION;
647 }
648
649 *ret = &regexp->dispex;
650 return S_OK;
651}
regexp_t * regexp_new(void *cx, heap_pool_t *pool, const WCHAR *str, DWORD str_len, WORD flags, BOOL flat)
Definition: regexp.c:3191
static HRESULT alloc_regexp(script_ctx_t *ctx, jsstr_t *str, jsdisp_t *object_prototype, RegExpInstance **ret)
Definition: jsregexp.c:600
static unsigned jsstr_length(jsstr_t *str)
Definition: jsstr.h:55
#define debugstr_wn
Definition: kernel32.h:33
const WCHAR * str
jsstr_t * str
Definition: jsregexp.c:32
jsdisp_t dispex
Definition: jsregexp.c:29
regexp_t * jsregexp
Definition: jsregexp.c:31

Referenced by create_regexp_var(), interp_new(), interp_regexp(), and String_match().

◆ create_regexp_constr()

HRESULT create_regexp_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 964 of file jsregexp.c.

965{
967 RegExpInstance *regexp;
969
970 hres = alloc_regexp(ctx, str, object_prototype, &regexp);
972 if(FAILED(hres))
973 return hres;
974
976 PROPF_CONSTR|2, &regexp->dispex, ret);
977
978 jsdisp_release(&regexp->dispex);
979 return hres;
980}
static HRESULT RegExpConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: jsregexp.c:898
static const builtin_info_t RegExpConstr_info
Definition: jsregexp.c:957
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
Definition: jsstr.h:36

Referenced by init_constructors().

◆ create_regexp_var()

HRESULT create_regexp_var ( script_ctx_t ctx,
jsval_t  src_arg,
jsval_t flags_arg,
jsdisp_t **  ret 
)

Definition at line 653 of file jsregexp.c.

654{
655 DWORD flags = 0;
656 const WCHAR *opt = NULL;
657 jsstr_t *src;
658 HRESULT hres = S_OK;
659
660 if(is_object_instance(src_arg)) {
661 jsdisp_t *obj;
662
663 obj = to_jsdisp(get_object(src_arg));
664 if(obj) {
667
668 hres = create_regexp(ctx, regexp->str, regexp->jsregexp->flags, ret);
669 return hres;
670 }
671 }
672 }
673
674 if(is_undefined(src_arg))
675 src = jsstr_empty();
676 else
677 hres = to_string(ctx, src_arg, &src);
678 if(FAILED(hres))
679 return hres;
680
681 if(flags_arg && !is_undefined(*flags_arg)) {
682 jsstr_t *opt_str;
683
684 hres = to_string(ctx, *flags_arg, &opt_str);
685 if(SUCCEEDED(hres)) {
686 opt = jsstr_flatten(opt_str);
687 if(opt)
688 hres = parse_regexp_flags(opt, jsstr_length(opt_str), &flags);
689 else
691 jsstr_release(opt_str);
692 }
693 }
694
695 if(SUCCEEDED(hres))
698 return hres;
699}
static HRESULT to_string(VARIANT *src, BSTR *dst)
Definition: host.c:46
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
static RegExpInstance * regexp_from_jsdisp(jsdisp_t *jsdisp)
Definition: jsregexp.c:37
HRESULT create_regexp(script_ctx_t *ctx, jsstr_t *src, DWORD flags, jsdisp_t **ret)
Definition: jsregexp.c:626
HRESULT parse_regexp_flags(const WCHAR *str, DWORD str_len, DWORD *ret)
Definition: jsregexp.c:982
static BOOL is_undefined(jsval_t v)
Definition: jsval.h:180
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175
WORD flags
Definition: regexp.h:57

Referenced by RegExpConstr_value(), and String_search().

◆ create_string()

HRESULT create_string ( script_ctx_t ctx,
jsstr_t str,
jsdisp_t **  ret 
)

Definition at line 1736 of file string.c.

1737{
1739 HRESULT hres;
1740
1741 hres = string_alloc(ctx, NULL, str, &string);
1742 if(FAILED(hres))
1743 return hres;
1744
1745 *ret = &string->dispex;
1746 return S_OK;
1747
1748}
static HRESULT string_alloc(script_ctx_t *ctx, jsdisp_t *object_prototype, jsstr_t *str, StringInstance **ret)
Definition: string.c:1686
char string[160]
Definition: util.h:11

Referenced by StringConstr_value(), and to_object().

◆ create_string_constr()

HRESULT create_string_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 1720 of file string.c.

1721{
1723 HRESULT hres;
1724
1725 hres = string_alloc(ctx, object_prototype, jsstr_empty(), &string);
1726 if(FAILED(hres))
1727 return hres;
1728
1730 PROPF_CONSTR|1, &string->dispex, ret);
1731
1732 jsdisp_release(&string->dispex);
1733 return hres;
1734}
static const builtin_info_t StringConstr_info
Definition: string.c:1713
static HRESULT StringConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: string.c:1635

Referenced by init_constructors().

◆ create_vbarray()

HRESULT create_vbarray ( script_ctx_t ctx,
SAFEARRAY sa,
jsdisp_t **  ret 
)

Definition at line 336 of file vbarray.c.

337{
338 VBArrayInstance *vbarray;
340
341 hres = alloc_vbarray(ctx, NULL, &vbarray);
342 if(FAILED(hres))
343 return hres;
344
345 hres = SafeArrayCopy(sa, &vbarray->safearray);
346 if(FAILED(hres)) {
347 jsdisp_release(&vbarray->dispex);
348 return hres;
349 }
350
351 *ret = &vbarray->dispex;
352 return S_OK;
353}
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
Definition: safearray.c:1379
jsdisp_t dispex
Definition: vbarray.c:26
SAFEARRAY * safearray
Definition: vbarray.c:28
static HRESULT alloc_vbarray(script_ctx_t *ctx, jsdisp_t *object_prototype, VBArrayInstance **ret)
Definition: vbarray.c:256

Referenced by to_object().

◆ create_vbarray_constr()

HRESULT create_vbarray_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 321 of file vbarray.c.

322{
323 VBArrayInstance *vbarray;
325
326 hres = alloc_vbarray(ctx, object_prototype, &vbarray);
327 if(FAILED(hres))
328 return hres;
329
331
332 jsdisp_release(&vbarray->dispex);
333 return hres;
334}
static HRESULT VBArrayConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:279

Referenced by init_constructors().

◆ debugstr_jsval()

const char * debugstr_jsval ( const  jsval_t)

Definition at line 35 of file jsutils.c.

36{
37 switch(jsval_type(v)) {
38 case JSV_UNDEFINED:
39 return "undefined";
40 case JSV_NULL:
41 return "null";
42 case JSV_OBJECT:
43 return wine_dbg_sprintf("obj(%p)", get_object(v));
44 case JSV_STRING:
45 return wine_dbg_sprintf("str(%s)", debugstr_jsstr(get_string(v)));
46 case JSV_NUMBER:
47 return wine_dbg_sprintf("%lf", get_number(v));
48 case JSV_BOOL:
49 return get_bool(v) ? "true" : "false";
50 case JSV_VARIANT:
52 }
53
54 assert(0);
55 return NULL;
56}
static BOOL get_bool(D3DXPARAMETER_TYPE type, const void *data)
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
const GLdouble * v
Definition: gl.h:2040
const char * debugstr_jsstr(jsstr_t *str)
Definition: jsstr.c:37
static VARIANT * get_variant(jsval_t v)
Definition: jsval.h:243
@ 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
static jsval_type_t jsval_type(jsval_t v)
Definition: jsval.h:219
static double get_number(jsval_t v)
Definition: jsval.h:233

Referenced by Arguments_prop_put(), Array_every(), Array_filter(), Array_forEach(), Array_map(), Array_reduce(), Array_some(), Array_sort(), bind_event_target(), builtin_eval(), builtin_set_const(), exprval_call(), Function_invoke(), interp_add(), interp_carray_set(), interp_eq(), interp_eq2(), interp_gt(), interp_gteq(), interp_local(), interp_lt(), interp_lteq(), interp_neq(), interp_set_member(), interp_to_string(), invoke_prop_func(), iterate_map(), jsdisp_define_property(), JSGlobal_parseFloat(), Map_delete(), Map_forEach(), Map_get(), Map_has(), Map_set(), Object_create(), Object_freeze(), Object_get_proto_(), Object_getOwnPropertyNames(), Object_getPrototypeOf(), Object_isExtensible(), Object_isFrozen(), Object_isSealed(), Object_keys(), Object_preventExtensions(), Object_seal(), Object_set_proto_(), print_backtrace(), prop_get(), prop_put(), Set_add(), Set_delete(), Set_forEach(), Set_has(), unwind_exception(), and WeakMap_set().

◆ decode_source()

HRESULT decode_source ( WCHAR code)

Definition at line 111 of file decode.c.

112{
113 const WCHAR *src = code;
114 WCHAR *dst = code;
115
116 static const WCHAR decode_beginW[] = L"#@~^";
117 static const WCHAR decode_endW[] = L"^#~@";
118
119 while(*src) {
120 if(!wcsncmp(src, decode_beginW, ARRAY_SIZE(decode_beginW)-1)) {
121 DWORD len, i, j=0, csum, s=0;
122
123 src += ARRAY_SIZE(decode_beginW) - 1;
124
125 if(!decode_dword(src, &len))
126 return JS_E_INVALID_CHAR;
127
128 src += 8;
129
130 for(i=0; i<len; i++) {
131 if (src[i] == '@') {
132 switch(src[++i]) {
133 case '#':
134 s += dst[j++] = '\r';
135 break;
136 case '&':
137 s += dst[j++] = '\n';
138 break;
139 case '!':
140 s += dst[j++] = '<';
141 break;
142 case '*':
143 s += dst[j++] = '>';
144 break;
145 case '$':
146 s += dst[j++] = '@';
147 break;
148 default:
149 FIXME("unescape %c\n", src[i]);
150 return E_FAIL;
151 }
152 }else if (src[i] < 128) {
153 s += dst[j] = dictionary[src[i]][pick_encoding[j%64]];
154 j++;
155 }else {
156 FIXME("Unsupported char %c\n", src[i]);
157 return E_FAIL;
158 }
159 }
160
161 src += len;
162 dst += j;
163
164 if(!decode_dword(src, &csum) || s != csum)
165 return JS_E_INVALID_CHAR;
166 src += 8;
167
168 if(wcsncmp(src, decode_endW, ARRAY_SIZE(decode_endW)-1))
169 return JS_E_INVALID_CHAR;
170 src += ARRAY_SIZE(decode_endW) - 1;
171 }else {
172 *dst++ = *src++;
173 }
174 }
175
176 *dst = 0;
177
178 TRACE("decoded %s\n", debugstr_w(code));
179 return S_OK;
180}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_FAIL
Definition: ddrawi.h:102
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:523
GLdouble s
Definition: gl.h:2039
GLenum GLenum dst
Definition: glext.h:6340
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static BOOL decode_dword(const WCHAR *p, DWORD *ret)
Definition: decode.c:89
static const unsigned char pick_encoding[64]
Definition: decode.c:31
#define debugstr_w
Definition: kernel32.h:32
Definition: ffs.h:52

Referenced by compile_script().

◆ disp_call()

HRESULT disp_call ( script_ctx_t ctx,
IDispatch disp,
DISPID  id,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t ret 
)

Definition at line 2666 of file dispex.c.

2667{
2668 VARIANT buf[6], retv;
2669 jsdisp_t *jsdisp;
2670 DISPPARAMS dp;
2671 unsigned i;
2672 HRESULT hres;
2673
2674 jsdisp = iface_to_jsdisp(disp);
2675 if(jsdisp && jsdisp->ctx == ctx) {
2677 FIXME("disp_call(propput) on builtin object\n");
2678 jsdisp_release(jsdisp);
2679 return E_FAIL;
2680 }
2681
2682 if(ctx != jsdisp->ctx)
2683 flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
2684 hres = jsdisp_call(jsdisp, id, flags, argc, argv, ret);
2685 jsdisp_release(jsdisp);
2686 return hres;
2687 }
2688 if(jsdisp)
2689 jsdisp_release(jsdisp);
2690
2691 flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
2692 if(ret && argc)
2694
2695 dp.cArgs = argc;
2696
2698 static DISPID propput_dispid = DISPID_PROPERTYPUT;
2699
2700 dp.cNamedArgs = 1;
2701 dp.rgdispidNamedArgs = &propput_dispid;
2702 }else {
2703 dp.cNamedArgs = 0;
2704 dp.rgdispidNamedArgs = NULL;
2705 }
2706
2707 if(dp.cArgs > ARRAY_SIZE(buf)) {
2708 dp.rgvarg = malloc(argc * sizeof(VARIANT));
2709 if(!dp.rgvarg)
2710 return E_OUTOFMEMORY;
2711 }else {
2712 dp.rgvarg = buf;
2713 }
2714
2715 for(i=0; i<argc; i++) {
2716 hres = jsval_to_variant(argv[i], dp.rgvarg+argc-i-1);
2717 if(FAILED(hres)) {
2718 while(i--)
2719 VariantClear(dp.rgvarg+argc-i-1);
2720 if(dp.rgvarg != buf)
2721 free(dp.rgvarg);
2722 return hres;
2723 }
2724 }
2725
2726 V_VT(&retv) = VT_EMPTY;
2727 hres = disp_invoke(ctx, disp, id, flags, &dp, ret ? &retv : NULL, &ctx->jscaller->IServiceProvider_iface);
2728
2729 for(i=0; i<argc; i++)
2730 VariantClear(dp.rgvarg+argc-i-1);
2731 if(dp.rgvarg != buf)
2732 free(dp.rgvarg);
2733
2734 if(SUCCEEDED(hres) && ret)
2735 hres = variant_to_jsval(ctx, &retv, ret);
2736 VariantClear(&retv);
2737 return hres;
2738}
@ VT_EMPTY
Definition: compat.h:2295
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static DISPID propput_dispid
Definition: interp.c:27
HRESULT jsdisp_call(jsdisp_t *disp, DISPID id, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: dispex.c:2604
jsdisp_t * iface_to_jsdisp(IDispatch *iface)
Definition: dispex.c:2543
static HRESULT disp_invoke(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, DISPPARAMS *params, VARIANT *r, IServiceProvider *caller)
Definition: dispex.c:2630
HRESULT variant_to_jsval(script_ctx_t *ctx, VARIANT *var, jsval_t *r)
Definition: jsutils.c:251
HRESULT jsval_to_variant(jsval_t val, VARIANT *retv)
Definition: jsutils.c:367
static VARIANTARG static DISPID
Definition: ordinal.c:49
struct stdole::DISPPARAMS DISPPARAMS
#define DISPATCH_PROPERTYPUT
Definition: oleauto.h:1008
#define V_VT(A)
Definition: oleauto.h:211
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
script_ctx_t * ctx
Definition: jscript.h:214
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648

Referenced by disp_call_name(), do_icall(), do_mcall(), exprval_call(), interp_newenum(), and variant_call().

◆ disp_call_name()

HRESULT disp_call_name ( script_ctx_t ctx,
IDispatch disp,
const WCHAR name,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t ret 
)

Definition at line 2740 of file dispex.c.

2741{
2742 IDispatchEx *dispex;
2743 jsdisp_t *jsdisp;
2744 HRESULT hres;
2745 DISPID id;
2746 BSTR bstr;
2747
2748 if((jsdisp = to_jsdisp(disp)) && jsdisp->ctx == ctx)
2749 return jsdisp_call_name(jsdisp, name, flags, argc, argv, ret);
2750
2751 if(!(bstr = SysAllocString(name)))
2752 return E_OUTOFMEMORY;
2753 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
2754 if(SUCCEEDED(hres) && dispex) {
2755 hres = IDispatchEx_GetDispID(dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive), &id);
2756 IDispatchEx_Release(dispex);
2757 }else {
2758 hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, &id);
2759 }
2760 SysFreeString(bstr);
2761 if(FAILED(hres))
2762 return hres;
2763
2764 return disp_call(ctx, disp, id, flags, argc, argv, ret);
2765}
OLECHAR * BSTR
Definition: compat.h:2293
GLuint id
Definition: glext.h:5910
HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, unsigned argc, jsval_t *argv, jsval_t *ret)
Definition: dispex.c:2666
HRESULT jsdisp_call_name(jsdisp_t *disp, const WCHAR *name, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: dispex.c:2615
static DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
Definition: jscript.h:513
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define IID_NULL
Definition: guiddef.h:98

Referenced by to_locale_string().

◆ disp_call_value()

static HRESULT disp_call_value ( script_ctx_t ctx,
IDispatch disp,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
inlinestatic

Definition at line 518 of file jscript.h.

520{
521 return disp_call_value_with_caller(ctx, disp, vthis, flags, argc, argv, r, &ctx->jscaller->IServiceProvider_iface);
522}
HRESULT disp_call_value_with_caller(script_ctx_t *, IDispatch *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *, IServiceProvider *)
Definition: dispex.c:2767

Referenced by Array_every(), Array_filter(), Array_forEach(), Array_map(), Array_reduce(), Array_some(), exprval_call(), Function_apply(), interp_call(), interp_new(), iterate_map(), and transform_json_object().

◆ disp_call_value_with_caller()

HRESULT disp_call_value_with_caller ( script_ctx_t ctx,
IDispatch disp,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r,
IServiceProvider caller 
)

Definition at line 2767 of file dispex.c.

2769{
2770 VARIANT buf[6], retv, *args = buf;
2771 IDispatch *jsthis;
2772 jsdisp_t *jsdisp;
2773 DISPPARAMS dp;
2774 unsigned i;
2775 HRESULT hres = S_OK;
2776
2777 static DISPID this_id = DISPID_THIS;
2778
2779 assert(!(flags & ~(DISPATCH_METHOD|DISPATCH_CONSTRUCT|DISPATCH_JSCRIPT_INTERNAL_MASK)));
2780
2781 jsdisp = iface_to_jsdisp(disp);
2782 if(jsdisp && jsdisp->ctx == ctx) {
2783 hres = jsdisp_call_value(jsdisp, vthis, flags, argc, argv, r);
2784 jsdisp_release(jsdisp);
2785 return hres;
2786 }
2787 if(jsdisp)
2788 jsdisp_release(jsdisp);
2789
2790 if(is_object_instance(vthis) && (ctx->version < SCRIPTLANGUAGEVERSION_ES5 ||
2791 ((jsdisp = to_jsdisp(get_object(vthis))) && is_class(jsdisp, JSCLASS_OBJECT))))
2792 jsthis = get_object(vthis);
2793 else
2794 jsthis = NULL;
2795
2796 flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
2797 if(r && argc && flags == DISPATCH_METHOD)
2799
2800 if(jsthis) {
2801 dp.cArgs = argc + 1;
2802 dp.cNamedArgs = 1;
2803 dp.rgdispidNamedArgs = &this_id;
2804 }else {
2805 dp.cArgs = argc;
2806 dp.cNamedArgs = 0;
2807 dp.rgdispidNamedArgs = NULL;
2808 }
2809
2810 if(dp.cArgs > ARRAY_SIZE(buf) && !(args = malloc(dp.cArgs * sizeof(VARIANT))))
2811 return E_OUTOFMEMORY;
2812 dp.rgvarg = args;
2813
2814 if(jsthis) {
2815 V_VT(dp.rgvarg) = VT_DISPATCH;
2816 V_DISPATCH(dp.rgvarg) = jsthis;
2817 }
2818
2819 for(i=0; SUCCEEDED(hres) && i < argc; i++)
2820 hres = jsval_to_variant(argv[i], dp.rgvarg+dp.cArgs-i-1);
2821
2822 if(SUCCEEDED(hres)) {
2823 V_VT(&retv) = VT_EMPTY;
2824 hres = disp_invoke(ctx, disp, DISPID_VALUE, flags, &dp, r ? &retv : NULL, caller);
2825 }
2826
2827 for(i = 0; i < argc; i++)
2828 VariantClear(dp.rgvarg + dp.cArgs - i - 1);
2829 if(args != buf)
2830 free(args);
2831
2832 if(FAILED(hres))
2833 return hres;
2834 if(!r)
2835 return S_OK;
2836
2837 hres = variant_to_jsval(ctx, &retv, r);
2838 VariantClear(&retv);
2839 return hres;
2840}
@ VT_DISPATCH
Definition: compat.h:2304
HRESULT jsdisp_call_value(jsdisp_t *jsfunc, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: dispex.c:2581
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:53
#define DISPATCH_JSCRIPT_INTERNAL_MASK
Definition: jscript.h:99
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_DISPATCH(A)
Definition: oleauto.h:239
#define DISPID_THIS
Definition: olectl.h:395
#define args
Definition: format.c:66
Definition: match.c:390

Referenced by disp_call_value(), and invoke_prop_func().

◆ disp_delete()

HRESULT disp_delete ( IDispatch disp,
DISPID  id,
BOOL ret 
)

Definition at line 3038 of file dispex.c.

3039{
3040 IDispatchEx *dispex;
3041 jsdisp_t *jsdisp;
3042 HRESULT hres;
3043
3044 jsdisp = iface_to_jsdisp(disp);
3045 if(jsdisp) {
3046 dispex_prop_t *prop;
3047
3048 prop = get_prop(jsdisp, id);
3049 if(prop)
3050 hres = delete_prop(jsdisp, prop, ret);
3051 else
3053
3054 jsdisp_release(jsdisp);
3055 return hres;
3056 }
3057
3058 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
3059 if(FAILED(hres)) {
3060 *ret = FALSE;
3061 return S_OK;
3062 }
3063
3064 hres = IDispatchEx_DeleteMemberByDispID(dispex, id);
3065 IDispatchEx_Release(dispex);
3066 if(FAILED(hres))
3067 return hres;
3068
3069 *ret = hres == S_OK;
3070 return S_OK;
3071}
static dispex_prop_t * get_prop(jsdisp_t *This, DISPID id)
Definition: dispex.c:87
static HRESULT delete_prop(jsdisp_t *obj, dispex_prop_t *prop, BOOL *ret)
Definition: dispex.c:2249
#define DISP_E_MEMBERNOTFOUND
Definition: winerror.h:3615

Referenced by interp_delete_ident(), and transform_json_object().

◆ disp_delete_name()

HRESULT disp_delete_name ( script_ctx_t ctx,
IDispatch disp,
jsstr_t name,
BOOL ret 
)

Definition at line 3112 of file dispex.c.

3113{
3114 IDispatchEx *dispex;
3115 jsdisp_t *jsdisp;
3116 BSTR bstr;
3117 HRESULT hres;
3118
3119 jsdisp = iface_to_jsdisp(disp);
3120 if(jsdisp) {
3121 dispex_prop_t *prop;
3122 const WCHAR *ptr;
3123
3125 if(!ptr) {
3126 jsdisp_release(jsdisp);
3127 return E_OUTOFMEMORY;
3128 }
3129
3130 hres = find_prop_name(jsdisp, string_hash(ptr), ptr, FALSE, NULL, &prop);
3131 if(prop) {
3132 hres = delete_prop(jsdisp, prop, ret);
3133 }else {
3134 *ret = TRUE;
3135 hres = S_OK;
3136 }
3137
3138 jsdisp_release(jsdisp);
3139 return hres;
3140 }
3141
3143 if(!bstr)
3144 return E_OUTOFMEMORY;
3145 jsstr_flush(name, bstr);
3146
3147 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
3148 if(SUCCEEDED(hres)) {
3149 hres = IDispatchEx_DeleteMemberByName(dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive));
3150 if(SUCCEEDED(hres))
3151 *ret = hres == S_OK;
3152 IDispatchEx_Release(dispex);
3153 }else {
3154 DISPID id;
3155
3156 hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &bstr, 1, 0, &id);
3157 if(SUCCEEDED(hres)) {
3158 /* Property exists and we can't delete it from pure IDispatch interface, so return false. */
3159 *ret = FALSE;
3160 }else if(hres == DISP_E_UNKNOWNNAME) {
3161 /* Property doesn't exist, so nothing to delete */
3162 *ret = TRUE;
3163 hres = S_OK;
3164 }
3165 }
3166
3167 SysFreeString(bstr);
3168 return hres;
3169}
static HRESULT find_prop_name(jsdisp_t *This, unsigned hash, const WCHAR *name, BOOL case_insens, dispex_prop_t *prop, dispex_prop_t **ret)
Definition: dispex.c:353
static unsigned string_hash(const WCHAR *name)
Definition: dispex.c:170
static unsigned jsstr_flush(jsstr_t *str, WCHAR *buf)
Definition: jsstr.h:145
static PVOID ptr
Definition: dispmode.c:27
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:3618

Referenced by interp_delete().

◆ disp_propget()

HRESULT disp_propget ( script_ctx_t ctx,
IDispatch disp,
DISPID  id,
jsval_t val 
)

Definition at line 2994 of file dispex.c.

2995{
2996 DISPPARAMS dp = {NULL,NULL,0,0};
2997 jsdisp_t *jsdisp;
2998 VARIANT var;
2999 HRESULT hres;
3000
3001 jsdisp = iface_to_jsdisp(disp);
3002 if(jsdisp && jsdisp->ctx == ctx) {
3003 hres = jsdisp_propget(jsdisp, id, val);
3004 jsdisp_release(jsdisp);
3005 return hres;
3006 }
3007 if(jsdisp)
3008 jsdisp_release(jsdisp);
3009
3010 V_VT(&var) = VT_EMPTY;
3011 hres = disp_invoke(ctx, disp, id, INVOKE_PROPERTYGET, &dp, &var, &ctx->jscaller->IServiceProvider_iface);
3012 if(SUCCEEDED(hres)) {
3014 VariantClear(&var);
3015 }
3016 return hres;
3017}
HRESULT jsdisp_propget(jsdisp_t *jsdisp, DISPID id, jsval_t *val)
Definition: dispex.c:2983
const char * var
Definition: shader.c:5666

Referenced by exprval_call(), exprval_propget(), interp_array(), interp_member(), and to_primitive().

◆ disp_propput()

HRESULT disp_propput ( script_ctx_t ctx,
IDispatch disp,
DISPID  id,
jsval_t  val 
)

Definition at line 2872 of file dispex.c.

2873{
2874 jsdisp_t *jsdisp;
2875 HRESULT hres;
2876
2877 jsdisp = iface_to_jsdisp(disp);
2878 if(jsdisp && jsdisp->ctx == ctx) {
2879 dispex_prop_t *prop;
2880
2881 prop = get_prop(jsdisp, id);
2882 if(prop)
2883 hres = prop_put(jsdisp, prop, val);
2884 else
2886
2887 jsdisp_release(jsdisp);
2888 }else {
2889 DISPID dispid = DISPID_PROPERTYPUT;
2891 VARIANT var;
2892 DISPPARAMS dp = {&var, &dispid, 1, 1};
2893
2894 if(jsdisp)
2895 jsdisp_release(jsdisp);
2897 if(FAILED(hres))
2898 return hres;
2899
2900 if(V_VT(&var) == VT_DISPATCH)
2902
2903 hres = disp_invoke(ctx, disp, id, flags, &dp, NULL, &ctx->jscaller->IServiceProvider_iface);
2904 VariantClear(&var);
2905 }
2906
2907 return hres;
2908}
static HRESULT prop_put(jsdisp_t *This, dispex_prop_t *prop, jsval_t val)
Definition: dispex.c:613
#define DISPATCH_PROPERTYPUTREF
Definition: oleauto.h:1009

Referenced by assign_ident(), disp_propput_name(), exprval_propput(), interp_assign_member(), and interp_set_member().

◆ disp_propput_name()

HRESULT disp_propput_name ( script_ctx_t ctx,
IDispatch disp,
const WCHAR name,
jsval_t  val 
)

Definition at line 2910 of file dispex.c.

2911{
2912 jsdisp_t *jsdisp;
2913 HRESULT hres;
2914
2915 jsdisp = iface_to_jsdisp(disp);
2916 if(!jsdisp || jsdisp->ctx != ctx) {
2917 IDispatchEx *dispex;
2918 BSTR str;
2919 DISPID id;
2920
2921 if(jsdisp)
2922 jsdisp_release(jsdisp);
2923 if(!(str = SysAllocString(name)))
2924 return E_OUTOFMEMORY;
2925
2926 hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
2927 if(SUCCEEDED(hres)) {
2928 hres = IDispatchEx_GetDispID(dispex, str, make_grfdex(ctx, fdexNameEnsure|fdexNameCaseSensitive), &id);
2929 IDispatchEx_Release(dispex);
2930 }else {
2931 TRACE("using IDispatch\n");
2932 hres = IDispatch_GetIDsOfNames(disp, &IID_NULL, &str, 1, 0, &id);
2933 }
2935 if(FAILED(hres))
2936 return hres;
2937
2938 return disp_propput(ctx, disp, id, val);
2939 }
2940
2941 hres = jsdisp_propput_name(jsdisp, name, val);
2942 jsdisp_release(jsdisp);
2943 return hres;
2944}
HRESULT jsdisp_propput_name(jsdisp_t *obj, const WCHAR *name, jsval_t val)
Definition: dispex.c:2859
HRESULT disp_propput(script_ctx_t *ctx, IDispatch *disp, DISPID id, jsval_t val)
Definition: dispex.c:2872

Referenced by interp_set_member().

◆ double_to_string()

HRESULT double_to_string ( double  n,
jsstr_t **  str 
)

Definition at line 767 of file jsutils.c.

768{
769 if(isnan(n)) {
770 *str = jsstr_nan();
771 }else if(isinf(n)) {
772 *str = jsstr_alloc(n<0 ? L"-Infinity" : L"Infinity");
773 }else if(is_int32(n)) {
774 WCHAR buf[12];
775#ifdef __REACTOS__ /* FIXME: Inspect */
776 swprintf(buf, ARRAY_SIZE(buf), L"%d", (int)n);
777#else
778 _ltow_s(n, buf, ARRAY_SIZE(buf), 10);
779#endif
780 *str = jsstr_alloc(buf);
781 }else {
782 VARIANT strv, v;
784
785 /* FIXME: Don't use VariantChangeTypeEx */
786 V_VT(&v) = VT_R8;
787 V_R8(&v) = n;
788 V_VT(&strv) = VT_EMPTY;
790 if(FAILED(hres))
791 return hres;
792
793 *str = jsstr_alloc(V_BSTR(&strv));
794 SysFreeString(V_BSTR(&strv));
795 }
796
797 return *str ? S_OK : E_OUTOFMEMORY;
798}
@ VT_BSTR
Definition: compat.h:2303
@ VT_R8
Definition: compat.h:2300
_ACRTIMP errno_t __cdecl _ltow_s(__msvcrt_long, wchar_t *, size_t, int)
Definition: string.c:2092
#define isinf(x)
Definition: math.h:359
#define isnan(x)
Definition: math.h:360
#define swprintf
Definition: precomp.h:40
GLdouble n
Definition: glext.h:7729
static BOOL is_int32(double d)
Definition: jscript.h:508
jsstr_t * jsstr_nan(void)
Definition: jsstr.c:286
static jsstr_t * jsstr_alloc(const WCHAR *str)
Definition: jsstr.h:100
#define SORT_DEFAULT
#define MAKELCID(lgid, srtid)
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_R8(A)
Definition: oleauto.h:262
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
HRESULT WINAPI VariantChangeTypeEx(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)
Definition: variant.c:988

Referenced by literal_as_string(), stringify(), and to_string().

◆ Function_get_code()

struct _function_code_t * Function_get_code ( jsdisp_t jsthis)

Definition at line 655 of file function.c.

656{
657 FunctionInstance *function;
658
660 function = function_from_jsdisp(jsthis);
661
662 return function->vtbl->get_code(function);
663}
static FunctionInstance * function_from_jsdisp(jsdisp_t *jsdisp)
Definition: function.c:93
const function_vtbl_t * vtbl
Definition: function.c:32
function_code_t *(* get_code)(FunctionInstance *)
Definition: function.c:40

Referenced by DispatchEx_GetTypeInfo().

◆ Function_get_value()

HRESULT Function_get_value ( script_ctx_t ctx,
jsdisp_t jsthis,
jsval_t r 
)

Definition at line 615 of file function.c.

616{
617 FunctionInstance *function = function_from_jsdisp(jsthis);
618 jsstr_t *str;
620
621 TRACE("\n");
622
623 hres = function->vtbl->toString(function, &str);
624 if(FAILED(hres))
625 return hres;
626
627 *r = jsval_string(str);
628 return S_OK;
629}
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
HRESULT(* toString)(FunctionInstance *, jsstr_t **)
Definition: function.c:39

◆ Function_invoke()

HRESULT Function_invoke ( jsdisp_t func_this,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 327 of file function.c.

328{
329 FunctionInstance *function;
330
331 TRACE("func %p this %s\n", func_this, debugstr_jsval(vthis));
332
333 assert(is_class(func_this, JSCLASS_FUNCTION));
334 function = function_from_jsdisp(func_this);
335
336 if(function->dispex.ctx->state == SCRIPTSTATE_UNINITIALIZED || function->dispex.ctx->state == SCRIPTSTATE_CLOSED) {
337 WARN("Script engine state does not allow running code.\n");
338 return E_UNEXPECTED;
339 }
340
341 return function->vtbl->call(function->dispex.ctx, function, vthis, flags, argc, argv, r);
342}
@ SCRIPTSTATE_UNINITIALIZED
Definition: activscp.idl:57
@ SCRIPTSTATE_CLOSED
Definition: activscp.idl:61
HRESULT(* call)(script_ctx_t *, FunctionInstance *, jsval_t, unsigned, unsigned, jsval_t *, jsval_t *)
Definition: function.c:38
SCRIPTSTATE state
Definition: jscript.h:386

Referenced by jsdisp_call_value().

◆ Function_value()

HRESULT Function_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 600 of file function.c.

602{
603 FunctionInstance *function;
604
605 TRACE("\n");
606
607 if(!(function = function_this(vthis))) {
608 ERR("dispex is not a function\n");
609 return E_FAIL;
610 }
611
612 return function->vtbl->call(ctx, function, vthis, flags, argc, argv, r);
613}
#define ERR(fmt,...)
Definition: precomp.h:57
static FunctionInstance * function_this(jsval_t vthis)
Definition: function.c:98

◆ gc_process_linked_obj()

HRESULT gc_process_linked_obj ( struct gc_ctx gc_ctx,
enum  gc_traverse_op,
jsdisp_t obj,
jsdisp_t link,
void **  unlink_ref 
)

Definition at line 1124 of file dispex.c.

1125{
1126 if(op == GC_TRAVERSE_UNLINK) {
1127 *unlink_ref = NULL;
1129 return S_OK;
1130 }
1131
1133 link->ref--;
1134 else if(link->gc_marked)
1135 return gc_stack_push(gc_ctx, link);
1136 return S_OK;
1137}
const WCHAR * link
Definition: db.cpp:998
UINT op
Definition: effect.c:236
static HRESULT gc_stack_push(struct gc_ctx *gc_ctx, jsdisp_t *obj)
Definition: dispex.c:895
Definition: dispex.c:889

Referenced by Arguments_gc_traverse(), BindFunction_gc_traverse(), DataView_gc_traverse(), InterpretedFunction_gc_traverse(), and scope_gc_traverse().

◆ gc_process_linked_val()

HRESULT gc_process_linked_val ( struct gc_ctx gc_ctx,
enum  gc_traverse_op,
jsdisp_t obj,
jsval_t link 
)

Definition at line 1139 of file dispex.c.

1140{
1141 jsdisp_t *jsdisp;
1142
1143 if(op == GC_TRAVERSE_UNLINK) {
1144 jsval_t val = *link;
1145 *link = jsval_undefined();
1147 return S_OK;
1148 }
1149
1150 if(!is_object_instance(*link) || !(jsdisp = to_jsdisp(get_object(*link))))
1151 return S_OK;
1153 jsdisp->ref--;
1154 else if(jsdisp->gc_marked)
1155 return gc_stack_push(gc_ctx, jsdisp);
1156 return S_OK;
1157}
void jsval_release(jsval_t val)
Definition: jsutils.c:186
Definition: jsval.h:54
LONG ref
Definition: jscript.h:204
BOOLEAN gc_marked
Definition: jscript.h:208

Referenced by Arguments_gc_traverse(), BindFunction_gc_traverse(), Enumerator_gc_traverse(), Map_gc_traverse(), RegExp_gc_traverse(), scope_gc_traverse(), and WeakMap_gc_traverse().

◆ gc_run()

HRESULT gc_run ( script_ctx_t ctx)

Definition at line 928 of file dispex.c.

929{
930 /* Save original refcounts in a linked list of chunks */
931 struct chunk
932 {
933 struct chunk *next;
934 LONG ref[1020];
935 } *head, *chunk;
936 struct thread_data *thread_data = ctx->thread_data;
937 jsdisp_t *obj, *obj2, *link, *link2;
938 dispex_prop_t *prop, *props_end;
939 struct gc_ctx gc_ctx = { 0 };
940 unsigned chunk_idx = 0;
941 HRESULT hres = S_OK;
942 struct list *iter;
943
944 /* Prevent recursive calls from side-effects during unlinking (e.g. CollectGarbage from host object's Release) */
946 return S_OK;
947
948 if(!(head = malloc(sizeof(*head))))
949 return E_OUTOFMEMORY;
950 head->next = NULL;
951 chunk = head;
952
953 /* 1. Save actual refcounts and decrease them speculatively as-if we unlinked the objects */
955 if(chunk_idx == ARRAY_SIZE(chunk->ref)) {
956 if(!(chunk->next = malloc(sizeof(*chunk)))) {
957 do {
958 chunk = head->next;
959 free(head);
960 head = chunk;
961 } while(head);
962 return E_OUTOFMEMORY;
963 }
964 chunk = chunk->next; chunk_idx = 0;
965 chunk->next = NULL;
966 }
967 chunk->ref[chunk_idx++] = obj->ref;
968 }
970 /* Skip objects with external reference counter */
971 if(obj->builtin_info->addref) {
972 obj->gc_marked = FALSE;
973 continue;
974 }
975 for(prop = obj->props, props_end = prop + obj->prop_cnt; prop < props_end; prop++) {
976 switch(prop->type) {
977 case PROP_JSVAL:
978 if(is_object_instance(prop->u.val) && (link = to_jsdisp(get_object(prop->u.val))))
979 link->ref--;
980 break;
981 case PROP_ACCESSOR:
982 if(prop->u.accessor.getter)
983 prop->u.accessor.getter->ref--;
984 if(prop->u.accessor.setter)
985 prop->u.accessor.setter->ref--;
986 break;
987 default:
988 break;
989 }
990 }
991
992 if(obj->prototype)
993 obj->prototype->ref--;
994 if(obj->builtin_info->gc_traverse)
995 obj->builtin_info->gc_traverse(&gc_ctx, GC_TRAVERSE_SPECULATIVELY, obj);
996 obj->gc_marked = TRUE;
997 }
998
999 /* 2. Clear mark on objects with non-zero "external refcount" and all objects accessible from them */
1001 if(!obj->ref || !obj->gc_marked)
1002 continue;
1003
1005 if(FAILED(hres))
1006 break;
1007
1008 obj2 = obj;
1009 do
1010 {
1011 obj2->gc_marked = FALSE;
1012
1013 for(prop = obj2->props, props_end = prop + obj2->prop_cnt; prop < props_end; prop++) {
1014 switch(prop->type) {
1015 case PROP_JSVAL:
1016 if(!is_object_instance(prop->u.val))
1017 continue;
1018 link = to_jsdisp(get_object(prop->u.val));
1019 link2 = NULL;
1020 break;
1021 case PROP_ACCESSOR:
1022 link = prop->u.accessor.getter;
1023 link2 = prop->u.accessor.setter;
1024 break;
1025 default:
1026 continue;
1027 }
1028 if(link && link->gc_marked) {
1030 if(FAILED(hres))
1031 break;
1032 }
1033 if(link2 && link2->gc_marked) {
1034 hres = gc_stack_push(&gc_ctx, link2);
1035 if(FAILED(hres))
1036 break;
1037 }
1038 }
1039
1040 if(FAILED(hres))
1041 break;
1042
1043 if(obj2->prototype && obj2->prototype->gc_marked) {
1045 if(FAILED(hres))
1046 break;
1047 }
1048
1049 if(obj2->builtin_info->gc_traverse) {
1051 if(FAILED(hres))
1052 break;
1053 }
1054
1055 /* For weak refs, traverse paths accessible from it via the WeakMaps, if the WeakMaps are alive at this point.
1056 We need both the key and the WeakMap for the entry to actually be accessible (and thus traversed). */
1057 if(obj2->has_weak_refs) {
1058 struct list *list = &RB_ENTRY_VALUE(rb_get(&thread_data->weak_refs, obj2), struct weak_refs_entry, entry)->list;
1059 struct weakmap_entry *entry;
1060
1062 if(!entry->weakmap->gc_marked && is_object_instance(entry->value) && (link = to_jsdisp(get_object(entry->value)))) {
1064 if(FAILED(hres))
1065 break;
1066 }
1067 }
1068
1069 if(FAILED(hres))
1070 break;
1071 }
1072
1073 do obj2 = gc_stack_pop(&gc_ctx); while(obj2 && !obj2->gc_marked);
1074 } while(obj2);
1075
1076 if(FAILED(hres)) {
1077 do obj2 = gc_stack_pop(&gc_ctx); while(obj2);
1078 break;
1079 }
1080 }
1081 free(gc_ctx.next);
1082
1083 /* Restore */
1084 chunk = head; chunk_idx = 0;
1086 obj->ref = chunk->ref[chunk_idx++];
1087 if(chunk_idx == ARRAY_SIZE(chunk->ref)) {
1088 struct chunk *next = chunk->next;
1089 free(chunk);
1090 chunk = next; chunk_idx = 0;
1091 }
1092 }
1093 free(chunk);
1094
1095 if(FAILED(hres))
1096 return hres;
1097
1098 /* 3. Remove all the links from the marked objects, since they are dangling */
1100
1101 iter = list_head(&thread_data->objects);
1102 while(iter) {
1103 obj = LIST_ENTRY(iter, jsdisp_t, entry);
1104 if(!obj->gc_marked) {
1105 iter = list_next(&thread_data->objects, iter);
1106 continue;
1107 }
1108
1109 /* Grab it since it gets removed when unlinked */
1112
1113 /* Releasing unlinked object should not delete any other object,
1114 so we can safely obtain the next pointer now */
1115 iter = list_next(&thread_data->objects, iter);
1117 }
1118
1121 return S_OK;
1122}
struct outqueuenode * head
Definition: adnsresfilter.c:66
Definition: list.h:37
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
Definition: sync.c:182
uint32_t entry
Definition: isohybrid.c:63
static void unlink_jsdisp(jsdisp_t *jsdisp)
Definition: dispex.c:818
@ PROP_ACCESSOR
Definition: dispex.c:37
@ PROP_JSVAL
Definition: dispex.c:34
static jsdisp_t * gc_stack_pop(struct gc_ctx *gc_ctx)
Definition: dispex.c:915
jsdisp_t * jsdisp_addref(jsdisp_t *obj)
Definition: dispex.c:1902
long LONG
Definition: pedump.c:60
static unsigned __int64 next
Definition: rand_nt.c:6
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
Definition: list.h:115
#define RB_ENTRY_VALUE(element, type, field)
Definition: rbtree.h:26
static struct rb_entry * rb_get(const struct rb_tree *tree, const void *key)
Definition: rbtree.h:192
prop_type_t type
Definition: dispex.c:45
union _dispex_prop_t::@430 u
jsval_t val
Definition: dispex.c:49
struct _dispex_prop_t::@430::@431 accessor
HRESULT(* gc_traverse)(struct gc_ctx *, enum gc_traverse_op, jsdisp_t *)
Definition: jscript.h:198
struct gc_stack_chunk * next
Definition: dispex.c:891
const builtin_info_t * builtin_info
Definition: jscript.h:218
jsdisp_t * prototype
Definition: jscript.h:216
DWORD prop_cnt
Definition: jscript.h:212
BOOLEAN has_weak_refs
Definition: jscript.h:206
dispex_prop_t * props
Definition: jscript.h:213
Definition: list.h:15
Definition: send.c:48
struct list objects
Definition: jscript.h:142
DWORD gc_last_tick
Definition: jscript.h:140
BOOL gc_is_unlinking
Definition: jscript.h:139
struct rb_tree weak_refs
Definition: jscript.h:143
Definition: jscript.h:378
Definition: jscript.h:446
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by decrease_state(), init_dispex(), and JSGlobal_CollectGarbage().

◆ get_dispatch_typeinfo()

HRESULT get_dispatch_typeinfo ( ITypeInfo **  out)

Definition at line 78 of file jscript_main.c.

79{
82 HRESULT hr;
83
85 {
87 if (FAILED(hr)) return hr;
88
89 hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
90 ITypeLib_Release(typelib);
91 if (FAILED(hr)) return hr;
92
94 ITypeInfo_Release(typeinfo);
95 }
96
98 return S_OK;
99}
HRESULT hr
Definition: delayimp.cpp:582
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
static ITypeInfo * dispatch_typeinfo
Definition: jscript_main.c:42
#define STDOLE_MINORVERNUM
Definition: oleauto.h:31
#define STDOLE_LCID
Definition: oleauto.h:32
#define STDOLE_MAJORVERNUM
Definition: oleauto.h:30
const GUID IID_IDispatch
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by ScriptTypeComp_Bind(), ScriptTypeComp_BindType(), ScriptTypeInfo_AddressOfMember(), ScriptTypeInfo_GetDllEntry(), ScriptTypeInfo_GetDocumentation(), ScriptTypeInfo_GetIDsOfNames(), ScriptTypeInfo_GetMops(), ScriptTypeInfo_GetNames(), ScriptTypeInfo_GetRefTypeInfo(), and ScriptTypeInfo_Invoke().

◆ get_host_dispatch()

IWineJSDispatchHost * get_host_dispatch ( IDispatch disp)

Definition at line 3584 of file dispex.c.

3585{
3588 jsdisp_t *jsdisp;
3589
3590 if(!(jsdisp = to_jsdisp(disp)))
3591 return NULL;
3592 if(jsdisp->builtin_info != &HostObject_info)
3593 return NULL;
3594
3596 IWineJSDispatchHost_GetOuterDispatch(host_obj->host_iface, &ret);
3597 return ret;
3598}
IHost host_obj
Definition: host.c:474
static const builtin_info_t HostObject_info
Definition: dispex.c:3544
static HostObject * HostObject_from_jsdisp(jsdisp_t *jsdisp)
Definition: dispex.c:3445

Referenced by disp_cmp(), HostFunction_call(), jsval_to_variant(), and WineJSDispatch_GetScriptGlobal().

◆ get_thread_data()

struct thread_data * get_thread_data ( void  )

Definition at line 51 of file jscript_main.c.

52{
54
55 if(!thread_data) {
56 thread_data = calloc(1, sizeof(struct thread_data));
57 if(!thread_data)
58 return NULL;
63 }
64
66 return thread_data;
67}
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
static int weak_refs_compare(const void *key, const struct rb_entry *entry)
Definition: jscript_main.c:44
static DWORD jscript_tls
Definition: jscript_main.c:41
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
Definition: rbtree.h:173
LONG thread_id
Definition: jscript.h:137
LONG ref
Definition: jscript.h:136
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459

Referenced by clear_task_timer(), flush_pending_tasks(), get_thread_hwnd(), JScript_SetScriptSite(), pop_task(), process_timer(), push_task(), remove_target_tasks(), set_task_timer(), and thread_detach().

◆ handle_dispatch_exception()

void handle_dispatch_exception ( script_ctx_t ctx,
EXCEPINFO *  ei 
)

Definition at line 409 of file error.c.

410{
411 TRACE("%08lx %s %s\n", ei->scode, debugstr_w(ei->bstrSource), debugstr_w(ei->bstrDescription));
412
413 reset_ei(ctx->ei);
414 if(ei->pfnDeferredFillIn)
415 ei->pfnDeferredFillIn(ei);
416 ctx->ei->error = (SUCCEEDED(ei->scode) || ei->scode == DISP_E_EXCEPTION) ? E_FAIL : ei->scode;
417 if(ei->bstrSource)
418 ctx->ei->source = jsstr_alloc_len(ei->bstrSource, SysStringLen(ei->bstrSource));
419 if(ei->bstrDescription)
420 ctx->ei->message = jsstr_alloc_len(ei->bstrDescription, SysStringLen(ei->bstrDescription));
421 SysFreeString(ei->bstrSource);
422 SysFreeString(ei->bstrDescription);
423 SysFreeString(ei->bstrHelpFile);
424}
void reset_ei(jsexcept_t *)
Definition: jscript.c:314
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
Definition: jsstr.c:86
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196

Referenced by disp_invoke(), HostConstructor_call(), HostFunction_call(), HostObject_prop_get(), and HostObject_prop_put().

◆ heap_pool_alloc()

void * heap_pool_alloc ( heap_pool_t heap,
DWORD  size 
)

Definition at line 72 of file jsutils.c.

73{
74 struct list *list;
75 void *tmp;
76
77 if(!heap->block_cnt) {
78 if(!heap->blocks) {
79 heap->blocks = malloc(sizeof(void*));
80 if(!heap->blocks)
81 return NULL;
82 }
83
84 tmp = malloc(block_size(0));
85 if(!tmp)
86 return NULL;
87
88 heap->blocks[0] = tmp;
89 heap->block_cnt = 1;
90 }
91
92 if(heap->offset + size <= block_size(heap->last_block)) {
93 tmp = ((BYTE*)heap->blocks[heap->last_block])+heap->offset;
94 heap->offset += size;
95 return tmp;
96 }
97
98 if(size <= block_size(heap->last_block+1)) {
99 if(heap->last_block+1 == heap->block_cnt) {
100 tmp = realloc(heap->blocks, (heap->block_cnt+1)*sizeof(void*));
101 if(!tmp)
102 return NULL;
103
104 heap->blocks = tmp;
105 heap->blocks[heap->block_cnt] = malloc(block_size(heap->block_cnt));
106 if(!heap->blocks[heap->block_cnt])
107 return NULL;
108
109 heap->block_cnt++;
110 }
111
112 heap->last_block++;
113 heap->offset = size;
114 return heap->blocks[heap->last_block];
115 }
116
117 list = malloc(size + sizeof(struct list));
118 if(!list)
119 return NULL;
120
121 list_add_head(&heap->custom_blocks, list);
122 return list+1;
123}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
#define realloc
Definition: debug_ros.c:6
GLsizeiptr size
Definition: glext.h:5919
static DWORD block_size(DWORD block)
Definition: jsutils.c:61
#define list
Definition: rosglue.h:35
Definition: heap.c:86
unsigned char BYTE
Definition: xxhash.c:193

Referenced by add_dynamic_var(), alloc_local(), alloc_match_state(), compiler_alloc(), compiler_alloc_zero(), exec_global_code(), heap_pool_grow(), heap_pool_strdup(), InitMatch(), NewRENode(), parser_alloc(), and parser_alloc_tmp().

◆ heap_pool_clear()

void heap_pool_clear ( heap_pool_t heap)

Definition at line 141 of file jsutils.c.

142{
143 struct list *tmp;
144
145 if(!heap)
146 return;
147
148 while((tmp = list_head(&heap->custom_blocks))) {
149 list_remove(tmp);
150 free(tmp);
151 }
152
153 if(WARN_ON(heap)) {
154 DWORD i;
155
156 for(i=0; i < heap->block_cnt; i++)
158 }
159
160 heap->last_block = heap->offset = 0;
161 heap->mark = FALSE;
162}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define ARENA_FREE_FILLER
Definition: jsutils.c:59
#define WARN_ON(c)
Definition: module.h:257
#define memset(x, y, z)
Definition: compat.h:39

Referenced by RegExp2_Replace(), RegExp2_Test(), RegExp_exec(), regexp_execute(), regexp_match(), regexp_match_next(), regexp_new(), regexp_string_match(), and RegExp_test().

◆ heap_pool_free()

void heap_pool_free ( heap_pool_t heap)

Definition at line 164 of file jsutils.c.

165{
166 DWORD i;
167
169
170 for(i=0; i < heap->block_cnt; i++)
171 free(heap->blocks[i]);
172 free(heap->blocks);
173
175}
void heap_pool_init(heap_pool_t *heap)
Definition: jsutils.c:66
void heap_pool_clear(heap_pool_t *heap)
Definition: jsutils.c:141

Referenced by compile_script(), RegExp2_Release(), release_bytecode(), release_exec(), release_vbscode(), script_release(), and ScriptDisp_Release().

◆ heap_pool_grow()

void * heap_pool_grow ( heap_pool_t heap,
void mem,
DWORD  size,
DWORD  inc 
)

Definition at line 125 of file jsutils.c.

126{
127 void *ret;
128
129 if(mem == (BYTE*)heap->blocks[heap->last_block] + heap->offset-size
130 && heap->offset+inc < block_size(heap->last_block)) {
131 heap->offset += inc;
132 return mem;
133 }
134
136 if(ret) /* FIXME: avoid copying for custom blocks */
137 memcpy(ret, mem, size);
138 return ret;
139}
void * heap_pool_alloc(heap_pool_t *heap, DWORD size)
Definition: jsutils.c:72
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: mem.c:349

Referenced by PushBackTrackState(), and ReallocStateStack().

◆ heap_pool_init()

void heap_pool_init ( heap_pool_t heap)

Definition at line 66 of file jsutils.c.

67{
68 memset(heap, 0, sizeof(*heap));
69 list_init(&heap->custom_blocks);
70}

Referenced by alloc_vbscode(), compile_script(), create_regexp(), create_script_disp(), exec_script(), init_code(), and JScript_SetScriptSite().

◆ heap_pool_mark()

heap_pool_t * heap_pool_mark ( heap_pool_t heap)

Definition at line 177 of file jsutils.c.

178{
179 if(heap->mark)
180 return NULL;
181
182 heap->mark = TRUE;
183 return heap;
184}

Referenced by RegExp2_Replace(), RegExp2_Test(), RegExp_exec(), regexp_execute(), regexp_match(), regexp_match_next(), regexp_new(), regexp_string_match(), and RegExp_test().

◆ idx_to_str()

WCHAR * idx_to_str ( DWORD  idx,
WCHAR ptr 
)

Definition at line 100 of file array.c.

101{
102 if(!idx) {
103 *ptr = '0';
104 return ptr;
105 }
106
107 while(idx) {
108 *ptr-- = '0' + (idx%10);
109 idx /= 10;
110 }
111
112 return ptr+1;
113}
unsigned int idx
Definition: utils.c:41

Referenced by Array_unshift(), and transform_json_object().

◆ iface_to_jsdisp()

◆ init_arraybuf_constructors()

HRESULT init_arraybuf_constructors ( script_ctx_t ctx)

Definition at line 692 of file arraybuf.c.

693{
694 static const struct {
695 const WCHAR *name;
697 } DataView_getters[] = {
698 { L"buffer", DataView_get_buffer },
699 { L"byteLength", DataView_get_byteLength },
700 { L"byteOffset", DataView_get_byteOffset },
701 };
702 ArrayBufferInstance *arraybuf;
706 unsigned i;
707
708 if(ctx->version < SCRIPTLANGUAGEVERSION_ES5)
709 return S_OK;
710
711 if(!(arraybuf = calloc(1, FIELD_OFFSET(ArrayBufferInstance, buf[0]))))
712 return E_OUTOFMEMORY;
713
714 hres = init_dispex(&arraybuf->dispex, ctx, &ArrayBuffer_info, ctx->object_prototype);
715 if(FAILED(hres)) {
716 free(arraybuf);
717 return hres;
718 }
719
721 PROPF_CONSTR|1, &arraybuf->dispex, &ctx->arraybuf_constr);
722 jsdisp_release(&arraybuf->dispex);
723 if(FAILED(hres))
724 return hres;
725
727 jsval_obj(ctx->arraybuf_constr));
728 if(FAILED(hres))
729 return hres;
730
731 if(!(view = calloc(1, sizeof(DataViewInstance))))
732 return E_OUTOFMEMORY;
733
734 hres = create_arraybuf(ctx, 0, &view->buffer);
735 if(FAILED(hres)) {
736 free(view);
737 return hres;
738 }
739
740 hres = init_dispex(&view->dispex, ctx, &DataView_info, ctx->object_prototype);
741 if(FAILED(hres)) {
742 jsdisp_release(&view->buffer->dispex);
743 free(view);
744 return hres;
745 }
746
747 desc.flags = PROPF_CONFIGURABLE;
749 desc.explicit_getter = desc.explicit_setter = TRUE;
750 desc.explicit_value = FALSE;
751 desc.setter = NULL;
752
753 /* FIXME: If we find we need builtin accessors in other places, we should consider a more generic solution */
754 for(i = 0; i < ARRAY_SIZE(DataView_getters); i++) {
755 hres = create_builtin_function(ctx, DataView_getters[i].get, NULL, NULL, PROPF_METHOD, NULL, &desc.getter);
756 if(SUCCEEDED(hres)) {
757 hres = jsdisp_define_property(&view->dispex, DataView_getters[i].name, &desc);
758 jsdisp_release(desc.getter);
759 }
760 if(FAILED(hres)) {
761 jsdisp_release(&view->dispex);
762 return hres;
763 }
764 }
765
767 PROPF_CONSTR|1, &view->dispex, &ctx->dataview_constr);
768 jsdisp_release(&view->dispex);
769 if(FAILED(hres))
770 return hres;
771
773 jsval_obj(ctx->dataview_constr));
774
775 return hres;
776}
static HRESULT ArrayBufferConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: arraybuf.c:171
static const builtin_info_t DataView_info
Definition: arraybuf.c:608
static const builtin_info_t ArrayBufferConstr_info
Definition: arraybuf.c:215
static HRESULT DataView_get_byteLength(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: arraybuf.c:241
static const builtin_info_t DataViewConstr_info
Definition: arraybuf.c:687
static HRESULT DataViewConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: arraybuf.c:622
static const builtin_info_t ArrayBuffer_info
Definition: arraybuf.c:128
static HRESULT create_arraybuf(script_ctx_t *, DWORD, ArrayBufferInstance **)
Definition: arraybuf.c:144
static HRESULT DataView_get_byteOffset(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: arraybuf.c:254
static HRESULT DataView_get_buffer(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: arraybuf.c:228
void get(int argc, const char *argv[])
Definition: cmds.c:480
HRESULT jsdisp_define_property(jsdisp_t *obj, const WCHAR *name, property_desc_t *desc)
Definition: dispex.c:3216
HRESULT(* builtin_invoke_t)(script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
Definition: jscript.h:129
const unsigned int PROPF_WRITABLE
Definition: jsdisp.idl:37
const unsigned int PROPF_ENUMERABLE
Definition: jsdisp.idl:36
const unsigned int PROPF_CONFIGURABLE
Definition: jsdisp.idl:38
jsdisp_t dispex
Definition: arraybuf.c:29
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

Referenced by init_global().

◆ init_dispex()

HRESULT init_dispex ( jsdisp_t dispex,
script_ctx_t ctx,
const builtin_info_t builtin_info,
jsdisp_t prototype 
)

Definition at line 2454 of file dispex.c.

2455{
2456 unsigned i;
2457
2458 /* FIXME: Use better heuristics to decide when to run the GC */
2459 if(GetTickCount() - ctx->thread_data->gc_last_tick > 30000)
2460 gc_run(ctx);
2461
2462 TRACE("%p (%p)\n", dispex, prototype);
2463
2464 dispex->IWineJSDispatch_iface.lpVtbl = &DispatchExVtbl;
2465 dispex->ref = 1;
2466 dispex->builtin_info = builtin_info;
2467 dispex->extensible = TRUE;
2468 dispex->is_constructor = builtin_info->class == JSCLASS_FUNCTION;
2469 dispex->prop_cnt = 0;
2470
2471 dispex->props = calloc(1, sizeof(dispex_prop_t)*(dispex->buf_size=4));
2472 if(!dispex->props)
2473 return E_OUTOFMEMORY;
2474
2475 for(i = 0; i < dispex->buf_size; i++) {
2476 dispex->props[i].bucket_head = ~0;
2477 dispex->props[i].bucket_next = ~0;
2478 }
2479
2480 dispex->prototype = prototype;
2481 if(prototype)
2482 jsdisp_addref(prototype);
2483
2485 dispex->ctx = ctx;
2486
2487 list_add_tail(&ctx->thread_data->objects, &dispex->entry);
2488 return S_OK;
2489}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
HRESULT gc_run(script_ctx_t *ctx)
Definition: dispex.c:928
static void script_addref(script_ctx_t *ctx)
Definition: jscript.h:457
int bucket_head
Definition: dispex.c:59
int bucket_next
Definition: dispex.c:60
BOOLEAN is_constructor
Definition: jscript.h:209
DWORD buf_size
Definition: jscript.h:211
struct list entry
Definition: jscript.h:219
IWineJSDispatch IWineJSDispatch_iface
Definition: jscript.h:202
BOOLEAN extensible
Definition: jscript.h:207

Referenced by alloc_array(), alloc_bool(), alloc_doc_node(), alloc_enumerator(), alloc_error(), alloc_number(), alloc_regexp(), alloc_vbarray(), create_child_collection(), create_children_nodelist(), create_date(), create_dispex(), create_dom_implementation(), create_event(), create_func_disp(), create_function(), create_history(), create_html_rect(), create_inner_window(), create_mime_types_collection(), create_nodemap(), create_parseError(), create_plugins_collection(), create_selection(), create_storage(), HTMLCurrentStyle_Create(), HTMLDocument_Create(), HTMLDOMAttribute_Create(), HTMLDOMTextNode_Create(), HTMLElement_get_attr_col(), HTMLElement_Init(), HTMLElementCollection_Create(), HTMLFiltersCollection_Create(), HTMLImageElementFactory_Create(), HTMLLocation_Create(), HTMLOptionElementFactory_Create(), HTMLScreen_Create(), HTMLSelectionObject_Create(), HTMLStyle_Create(), HTMLStyleSheet_Create(), HTMLStyleSheetRulesCollection_Create(), HTMLStyleSheetsCollection_Create(), HTMLTxtRange_Create(), HTMLXMLHttpRequestFactory_Create(), HTMLXMLHttpRequestFactory_create(), init_arraybuf_constructors(), init_dispex_from_constr(), init_host_object(), init_xmlnode(), Map_constructor(), MXNamespaceManager_create(), MXWriter_create(), OmNavigator_Create(), SAXAttributes_create(), SAXXMLReader_create(), SchemaCache_create(), scope_push(), Set_constructor(), string_alloc(), WeakMap_constructor(), XSLProcessor_create(), and XSLTemplate_create().

◆ init_dispex_from_constr()

HRESULT init_dispex_from_constr ( jsdisp_t dispex,
script_ctx_t ctx,
const builtin_info_t builtin_info,
jsdisp_t constr 
)

Definition at line 2512 of file dispex.c.

2513{
2514 jsdisp_t *prot = NULL;
2515 dispex_prop_t *prop;
2516 HRESULT hres;
2517
2518 hres = find_prop_name_prot(constr, string_hash(L"prototype"), L"prototype", FALSE, NULL, &prop);
2519 if(SUCCEEDED(hres) && prop && prop->type!=PROP_DELETED) {
2520 jsval_t val;
2521
2522 hres = prop_get(constr, to_disp(constr), prop, &val);
2523 if(FAILED(hres)) {
2524 ERR("Could not get prototype\n");
2525 return hres;
2526 }
2527
2530 else
2531 prot = jsdisp_addref(ctx->object_prototype);
2532
2534 }
2535
2536 hres = init_dispex(dispex, ctx, builtin_info, prot);
2537
2538 if(prot)
2539 jsdisp_release(prot);
2540 return hres;
2541}
static HRESULT find_prop_name_prot(jsdisp_t *This, unsigned hash, const WCHAR *name, BOOL case_insens, dispex_prop_t *own_prop, dispex_prop_t **ret)
Definition: dispex.c:400
static HRESULT prop_get(jsdisp_t *This, IDispatch *jsthis, dispex_prop_t *prop, jsval_t *r)
Definition: dispex.c:570
@ PROP_DELETED
Definition: dispex.c:38
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:222

Referenced by alloc_array(), alloc_bool(), alloc_enumerator(), alloc_error(), alloc_number(), alloc_regexp(), alloc_vbarray(), create_arraybuf(), create_date(), create_function(), create_json(), create_math(), create_object(), DataViewConstr_value(), setup_arguments_object(), and string_alloc().

◆ init_error_constr()

HRESULT init_error_constr ( script_ctx_t ctx,
jsdisp_t object_prototype 
)

Definition at line 321 of file error.c.

322{
323 static const WCHAR *names[] = {L"Error", L"EvalError", L"RangeError",
324 L"ReferenceError", L"RegExpError", L"SyntaxError", L"TypeError", L"URIError"};
325 jsdisp_t **constr_addr[] = {&ctx->error_constr, &ctx->eval_error_constr,
326 &ctx->range_error_constr, &ctx->reference_error_constr, &ctx->regexp_error_constr,
327 &ctx->syntax_error_constr, &ctx->type_error_constr,
328 &ctx->uri_error_constr};
332
333 jsdisp_t *err;
334 unsigned int i;
335 jsstr_t *str;
337
338 for(i=0; i < ARRAY_SIZE(names); i++) {
339 hres = alloc_error(ctx, i==0 ? object_prototype : NULL, NULL, &err);
340 if(FAILED(hres))
341 return hres;
342
344 if(!str) {
346 return E_OUTOFMEMORY;
347 }
348
352 if(SUCCEEDED(hres))
353 hres = create_builtin_constructor(ctx, constr_val[i], names[i], NULL,
354 PROPF_CONSTR|1, err, constr_addr[i]);
355
357 if(FAILED(hres))
358 return hres;
359 }
360
361 return S_OK;
362}
static HRESULT RangeErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:279
static HRESULT TypeErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:307
static HRESULT alloc_error(script_ctx_t *ctx, jsdisp_t *prototype, jsdisp_t *constr, jsdisp_t **ret)
Definition: error.c:157
static HRESULT EvalErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:272
static HRESULT SyntaxErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:300
static HRESULT ReferenceErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:286
static HRESULT RegExpErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:293
static HRESULT URIErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:314
static HRESULT ErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:265
GLuint GLuint * names
Definition: glext.h:11545
#define err(...)

Referenced by init_constructors().

◆ init_function_constr()

HRESULT init_function_constr ( script_ctx_t ctx,
jsdisp_t object_prototype 
)

Definition at line 1476 of file function.c.

1477{
1478 NativeFunction *prot, *constr;
1479 HRESULT hres;
1480
1482 TRUE, object_prototype, (void**)&prot);
1483 if(FAILED(hres))
1484 return hres;
1485
1486 prot->proc = FunctionProt_value;
1487 prot->name = L"prototype";
1488
1490 TRUE, &prot->function.dispex, (void**)&constr);
1491 if(SUCCEEDED(hres)) {
1492 constr->proc = FunctionConstr_value;
1493 constr->name = L"Function";
1494 hres = jsdisp_define_data_property(&constr->function.dispex, L"prototype", 0, jsval_obj(&prot->function.dispex));
1495 if(SUCCEEDED(hres))
1497 if(FAILED(hres))
1498 jsdisp_release(&constr->function.dispex);
1499 }
1501 if(FAILED(hres))
1502 return hres;
1503
1504 ctx->function_constr = &constr->function.dispex;
1505 return S_OK;
1506}
static const builtin_info_t FunctionInst_info
Definition: function.c:702
static const builtin_info_t Function_info
Definition: function.c:687
static HRESULT FunctionConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: function.c:1435
static HRESULT FunctionProt_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: function.c:1463

Referenced by init_constructors().

◆ init_global()

HRESULT init_global ( script_ctx_t ctx)

Definition at line 1091 of file global.c.

1092{
1093 unsigned const_flags = ctx->version >= SCRIPTLANGUAGEVERSION_ES5 ? 0 : PROPF_WRITABLE;
1094 jsdisp_t *math, *constr;
1095 HRESULT hres;
1096
1097 if(ctx->global)
1098 return S_OK;
1099
1100 hres = create_dispex(ctx, &JSGlobal_info, NULL, &ctx->global);
1101 if(FAILED(hres))
1102 return hres;
1103
1104 hres = create_object_prototype(ctx, &ctx->object_prototype);
1105 if(FAILED(hres))
1106 return hres;
1107
1108 hres = init_constructors(ctx, ctx->object_prototype);
1109 if(FAILED(hres))
1110 return hres;
1111
1112 hres = init_object_prototype_accessors(ctx, ctx->object_prototype);
1113 if(FAILED(hres))
1114 return hres;
1115
1116 hres = create_math(ctx, &math);
1117 if(FAILED(hres))
1118 return hres;
1119
1121 jsdisp_release(math);
1122 if(FAILED(hres))
1123 return hres;
1124
1125 if(ctx->version >= 2) {
1126 jsdisp_t *json;
1127
1128 hres = create_json(ctx, &json);
1129 if(FAILED(hres))
1130 return hres;
1131
1133 jsdisp_release(json);
1134 if(FAILED(hres))
1135 return hres;
1136 }
1137
1138 hres = create_activex_constr(ctx, &constr);
1139 if(FAILED(hres))
1140 return hres;
1141
1143 jsval_obj(constr));
1144 jsdisp_release(constr);
1145 if(FAILED(hres))
1146 return hres;
1147
1148 hres = jsdisp_define_data_property(ctx->global, L"undefined", const_flags, jsval_undefined());
1149 if(FAILED(hres))
1150 return hres;
1151
1152 hres = jsdisp_define_data_property(ctx->global, L"NaN", const_flags, jsval_number(NAN));
1153 if(FAILED(hres))
1154 return hres;
1155
1156 hres = jsdisp_define_data_property(ctx->global, L"Infinity", const_flags, jsval_number(INFINITY));
1157 if(FAILED(hres))
1158 return hres;
1159
1161 if(FAILED(hres))
1162 return hres;
1163
1164 return init_set_constructor(ctx);
1165}
HRESULT init_arraybuf_constructors(script_ctx_t *ctx)
Definition: arraybuf.c:692
HRESULT create_activex_constr(script_ctx_t *ctx, jsdisp_t **ret)
Definition: activex.c:189
#define NAN
Definition: math.h:273
#define INFINITY
Definition: math.h:272
static const builtin_info_t JSGlobal_info
Definition: global.c:919
static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: global.c:950
static HRESULT init_object_prototype_accessors(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: global.c:925
HRESULT create_math(script_ctx_t *, jsdisp_t **)
Definition: math.c:503
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **)
Definition: object.c:1126
HRESULT init_set_constructor(script_ctx_t *)
Definition: set.c:894
HRESULT create_json(script_ctx_t *, jsdisp_t **)
Definition: json.c:1032

◆ init_host_constructor()

HRESULT init_host_constructor ( script_ctx_t ctx,
IWineJSDispatchHost host_constr,
IWineJSDispatch prototype,
IWineJSDispatch **  ret 
)

Definition at line 1190 of file function.c.

1192{
1193 HostConstructor *function;
1194 HRESULT hres;
1195
1197 FALSE, NULL, (void**)&function);
1198 if(FAILED(hres))
1199 return hres;
1200 function->host_iface = host_constr;
1201
1203 jsval_disp((IDispatch *)prototype));
1204 if(FAILED(hres)) {
1205 IWineJSDispatch_Free(&function->function.dispex.IWineJSDispatch_iface);
1206 return hres;
1207 }
1208
1210 return S_OK;
1211}
static const function_vtbl_t HostConstructorVtbl
Definition: function.c:1182
static const builtin_info_t HostConstructor_info
Definition: function.c:1113
static jsval_t jsval_disp(IDispatch *obj)
Definition: jsval.h:117
FunctionInstance function
Definition: function.c:75
IWineJSDispatchHost * host_iface
Definition: function.c:76

Referenced by WineJScript_InitHostConstructor().

◆ init_host_object()

HRESULT init_host_object ( script_ctx_t ctx,
IWineJSDispatchHost host_iface,
IWineJSDispatch prototype_iface,
UINT32  flags,
IWineJSDispatch **  ret 
)

Definition at line 3557 of file dispex.c.

3559{
3561 jsdisp_t *prototype;
3562 HRESULT hres;
3563
3564 if(!(host_obj = calloc(1, sizeof(*host_obj))))
3565 return E_OUTOFMEMORY;
3566
3567 if(prototype_iface)
3568 prototype = impl_from_IWineJSDispatch(prototype_iface);
3569 else
3570 prototype = ctx->object_prototype;
3571 hres = init_dispex(&host_obj->jsdisp, ctx, &HostObject_info, prototype);
3572 if(FAILED(hres)) {
3573 free(host_obj);
3574 return hres;
3575 }
3576
3577 host_obj->host_iface = host_iface;
3579 host_obj->jsdisp.is_constructor = TRUE;
3580 *ret = &host_obj->jsdisp.IWineJSDispatch_iface;
3581 return S_OK;
3582}
const unsigned int HOSTOBJ_CONSTRUCTOR
Definition: jsdisp.idl:42

Referenced by WineJScript_InitHostObject().

◆ init_set_constructor()

HRESULT init_set_constructor ( script_ctx_t ctx)

Definition at line 894 of file set.c.

895{
896 jsdisp_t *constructor;
898
899 if(ctx->version < SCRIPTLANGUAGEVERSION_ES6)
900 return S_OK;
901
902 hres = create_dispex(ctx, &Set_prototype_info, ctx->object_prototype, &ctx->set_prototype);
903 if(FAILED(hres))
904 return hres;
905
907 PROPF_CONSTR, ctx->set_prototype, &constructor);
908 if(FAILED(hres))
909 return hres;
910
912 jsval_obj(constructor));
913 jsdisp_release(constructor);
914 if(FAILED(hres))
915 return hres;
916
917 hres = create_dispex(ctx, &Map_prototype_info, ctx->object_prototype, &ctx->map_prototype);
918 if(FAILED(hres))
919 return hres;
920
922 PROPF_CONSTR, ctx->map_prototype, &constructor);
923 if(FAILED(hres))
924 return hres;
925
927 jsval_obj(constructor));
928 jsdisp_release(constructor);
929 if(FAILED(hres))
930 return hres;
931
932 hres = create_dispex(ctx, &WeakMap_prototype_info, ctx->object_prototype, &ctx->weakmap_prototype);
933 if(FAILED(hres))
934 return hres;
935
937 PROPF_CONSTR, ctx->weakmap_prototype, &constructor);
938 if(FAILED(hres))
939 return hres;
940
942 jsval_obj(constructor));
943 jsdisp_release(constructor);
944 return hres;
945}
static HRESULT Set_constructor(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:575
static HRESULT WeakMap_constructor(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:862
static const builtin_info_t Set_prototype_info
Definition: set.c:559
static const builtin_info_t Map_prototype_info
Definition: set.c:406
static HRESULT Map_constructor(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:422
static const builtin_info_t WeakMap_prototype_info
Definition: set.c:848
#define SCRIPTLANGUAGEVERSION_ES6
Definition: jscript.h:54

Referenced by init_global().

◆ is_builtin_eval_func()

BOOL is_builtin_eval_func ( jsdisp_t jsdisp)

Definition at line 1470 of file function.c.

1471{
1472 return is_class(jsdisp, JSCLASS_FUNCTION) && function_from_jsdisp(jsdisp)->vtbl == &NativeFunctionVtbl &&
1474}
HRESULT JSGlobal_eval(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:180
static HANDLE proc()
Definition: pdb.c:32

Referenced by interp_call_eval().

◆ is_class()

◆ is_digit()

static BOOL is_digit ( WCHAR  c)
inlinestatic

Definition at line 336 of file jscript.h.

337{
338 return '0' <= c && c <= '9';
339}
const GLubyte * c
Definition: glext.h:8905

◆ is_int32()

static BOOL is_int32 ( double  d)
inlinestatic

Definition at line 508 of file jscript.h.

509{
510 return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d;
511}
#define INT32_MAX
Definition: stdint.h:80
#define INT32_MIN
Definition: stdint.h:75
#define d
Definition: ke_i.h:81
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91

Referenced by Array_splice(), ArrayConstr_value(), double_to_string(), index_from_val(), jsval_to_variant(), String_charAt(), String_charCodeAt(), String_indexOf(), String_lastIndexOf(), String_slice(), String_substr(), and String_substring().

◆ is_jscript_error()

static BOOL is_jscript_error ( HRESULT  hres)
inlinestatic

Definition at line 588 of file jscript.h.

589{
591}
#define FACILITY_CONTROL
Definition: olectl.h:264
#define HRESULT_FACILITY(hr)
Definition: winerror.h:191

Referenced by create_builtin_error(), format_error_message(), and set_error_location().

◆ jsdisp_addref()

◆ jsdisp_call()

HRESULT jsdisp_call ( jsdisp_t disp,
DISPID  id,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 2604 of file dispex.c.

2605{
2606 dispex_prop_t *prop;
2607
2608 prop = get_prop(disp, id);
2609 if(!prop)
2610 return DISP_E_MEMBERNOTFOUND;
2611
2612 return invoke_prop_func(disp, to_disp(disp), prop, flags, argc, argv, r, &disp->ctx->jscaller->IServiceProvider_iface);
2613}
static HRESULT invoke_prop_func(jsdisp_t *This, IDispatch *jsthis, dispex_prop_t *prop, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r, IServiceProvider *caller)
Definition: dispex.c:686
IServiceProvider IServiceProvider_iface
Definition: jscript.h:352
JSCaller * jscaller
Definition: jscript.h:399

Referenced by disp_call(), and to_primitive().

◆ jsdisp_call_name()

HRESULT jsdisp_call_name ( jsdisp_t disp,
const WCHAR name,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 2615 of file dispex.c.

2616{
2617 dispex_prop_t *prop;
2618 HRESULT hres;
2619
2621 if(FAILED(hres))
2622 return hres;
2623
2624 if(!prop || prop->type == PROP_DELETED)
2625 return JS_E_INVALID_PROPERTY;
2626
2627 return invoke_prop_func(disp, to_disp(disp), prop, flags, argc, argv, r, &disp->ctx->jscaller->IServiceProvider_iface);
2628}

Referenced by disp_call_name(), Object_toLocaleString(), and to_locale_string().

◆ jsdisp_call_value()

HRESULT jsdisp_call_value ( jsdisp_t jsfunc,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 2581 of file dispex.c.

2582{
2583 HRESULT hres;
2584
2585 assert(!(flags & ~(DISPATCH_METHOD|DISPATCH_CONSTRUCT|DISPATCH_JSCRIPT_INTERNAL_MASK)));
2586
2587 if(is_class(jsfunc, JSCLASS_FUNCTION)) {
2588 hres = Function_invoke(jsfunc, vthis, flags, argc, argv, r);
2589 }else {
2590 if(!jsfunc->builtin_info->call) {
2591 WARN("Not a function\n");
2593 }
2594
2595 if(jsfunc->ctx->state == SCRIPTSTATE_UNINITIALIZED || jsfunc->ctx->state == SCRIPTSTATE_CLOSED)
2596 return E_UNEXPECTED;
2597
2598 flags &= ~DISPATCH_JSCRIPT_INTERNAL_MASK;
2599 hres = jsfunc->builtin_info->call(jsfunc->ctx, vthis, flags, argc, argv, r);
2600 }
2601 return hres;
2602}
HRESULT Function_invoke(jsdisp_t *func_this, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: function.c:327
builtin_invoke_t call
Definition: jscript.h:184

Referenced by disp_call_value_with_caller(), DispatchEx_InvokeEx(), prop_get(), prop_put(), rep_call(), sort_cmp(), and stringify().

◆ jsdisp_change_prototype()

HRESULT jsdisp_change_prototype ( jsdisp_t obj,
jsdisp_t proto 
)

Definition at line 3356 of file dispex.c.

3357{
3358 jsdisp_t *iter;
3359 DWORD i;
3360
3361 if(obj->prototype == proto)
3362 return S_OK;
3363 if(!obj->extensible)
3365
3366 for(iter = proto; iter; iter = iter->prototype)
3367 if(iter == obj)
3369
3370 if(obj->prototype) {
3371 for(i = 0; i < obj->prop_cnt; i++)
3372 if(obj->props[i].type == PROP_PROTREF)
3373 obj->props[i].type = PROP_DELETED;
3374 jsdisp_release(obj->prototype);
3375 }
3376
3377 obj->prototype = proto;
3378 if(proto)
3380 return S_OK;
3381}
@ PROP_PROTREF
Definition: dispex.c:36

Referenced by Object_set_proto_().

◆ jsdisp_define_data_property()

◆ jsdisp_define_property()

HRESULT jsdisp_define_property ( jsdisp_t obj,
const WCHAR name,
property_desc_t desc 
)

Definition at line 3216 of file dispex.c.

3217{
3218 dispex_prop_t *prop;
3219 HRESULT hres;
3220
3222 if(FAILED(hres))
3223 return hres;
3224
3225 if((!prop || prop->type == PROP_DELETED || prop->type == PROP_PROTREF) && !obj->extensible)
3227
3228 if(!prop && !(prop = alloc_prop(obj, name, PROP_DELETED, 0)))
3229 return E_OUTOFMEMORY;
3230
3231 if(prop->type == PROP_DELETED || prop->type == PROP_PROTREF) {
3232 prop->flags = desc->flags;
3233 if(desc->explicit_getter || desc->explicit_setter) {
3234 prop->type = PROP_ACCESSOR;
3235 prop->u.accessor.getter = desc->getter ? jsdisp_addref(desc->getter) : NULL;
3236 prop->u.accessor.setter = desc->setter ? jsdisp_addref(desc->setter) : NULL;
3237 TRACE("%s = accessor { get: %p set: %p }\n", debugstr_w(name),
3238 prop->u.accessor.getter, prop->u.accessor.setter);
3239 }else {
3240 prop->type = PROP_JSVAL;
3241 if(desc->explicit_value) {
3242 hres = jsval_copy(desc->value, &prop->u.val);
3243 if(FAILED(hres))
3244 return hres;
3245 }else {
3246 prop->u.val = jsval_undefined();
3247 }
3248 TRACE("%s = %s\n", debugstr_w(name), debugstr_jsval(prop->u.val));
3249 }
3250 return S_OK;
3251 }
3252
3253 TRACE("existing prop %s prop flags %lx desc flags %x desc mask %x\n", debugstr_w(name),
3254 prop->flags, desc->flags, desc->mask);
3255
3256 if(!(prop->flags & PROPF_CONFIGURABLE)) {
3257 if(((desc->mask & PROPF_CONFIGURABLE) && (desc->flags & PROPF_CONFIGURABLE))
3258 || ((desc->mask & PROPF_ENUMERABLE)
3259 && ((desc->flags & PROPF_ENUMERABLE) != (prop->flags & PROPF_ENUMERABLE))))
3261 }
3262
3263 if(desc->explicit_value || (desc->mask & PROPF_WRITABLE)) {
3264 if(prop->type == PROP_ACCESSOR) {
3265 if(!(prop->flags & PROPF_CONFIGURABLE))
3267 if(prop->u.accessor.getter)
3268 jsdisp_release(prop->u.accessor.getter);
3269 if(prop->u.accessor.setter)
3270 jsdisp_release(prop->u.accessor.setter);
3271
3272 prop->type = PROP_JSVAL;
3273 hres = jsval_copy(desc->value, &prop->u.val);
3274 if(FAILED(hres)) {
3275 prop->u.val = jsval_undefined();
3276 return hres;
3277 }
3278 }else {
3279 if(!(prop->flags & PROPF_CONFIGURABLE) && !(prop->flags & PROPF_WRITABLE)) {
3280 if((desc->mask & PROPF_WRITABLE) && (desc->flags & PROPF_WRITABLE))
3282 if(desc->explicit_value) {
3283 if(prop->type == PROP_JSVAL) {
3284 BOOL eq;
3285 hres = jsval_strict_equal(desc->value, prop->u.val, &eq);
3286 if(FAILED(hres))
3287 return hres;
3288 if(!eq)
3290 }else {
3291 FIXME("redefinition of property type %d\n", prop->type);
3292 }
3293 }
3294 }
3295 if(desc->explicit_value) {
3296 if(prop->type == PROP_JSVAL)
3297 jsval_release(prop->u.val);
3298 else {
3299 if(prop->type == PROP_EXTERN && obj->builtin_info->prop_delete) {
3300 hres = obj->builtin_info->prop_delete(obj, prop->u.id);
3301 if(FAILED(hres))
3302 return hres;
3303 }
3304 prop->type = PROP_JSVAL;
3305 }
3306 hres = jsval_copy(desc->value, &prop->u.val);
3307 if(FAILED(hres)) {
3308 prop->u.val = jsval_undefined();
3309 return hres;
3310 }
3311 }
3312 }
3313 }else if(desc->explicit_getter || desc->explicit_setter) {
3314 if(prop->type != PROP_ACCESSOR) {
3315 if(!(prop->flags & PROPF_CONFIGURABLE))
3317 if(prop->type == PROP_JSVAL)
3318 jsval_release(prop->u.val);
3319 prop->type = PROP_ACCESSOR;
3320 prop->u.accessor.getter = prop->u.accessor.setter = NULL;
3321 }else if(!(prop->flags & PROPF_CONFIGURABLE)) {
3322 if((desc->explicit_getter && desc->getter != prop->u.accessor.getter)
3323 || (desc->explicit_setter && desc->setter != prop->u.accessor.setter))
3325 }
3326
3327 if(desc->explicit_getter) {
3328 if(prop->u.accessor.getter) {
3329 jsdisp_release(prop->u.accessor.getter);
3330 prop->u.accessor.getter = NULL;
3331 }
3332 if(desc->getter)
3333 prop->u.accessor.getter = jsdisp_addref(desc->getter);
3334 }
3335 if(desc->explicit_setter) {
3336 if(prop->u.accessor.setter) {
3337 jsdisp_release(prop->u.accessor.setter);
3338 prop->u.accessor.setter = NULL;
3339 }
3340 if(desc->setter)
3341 prop->u.accessor.setter = jsdisp_addref(desc->setter);
3342 }
3343 }
3344
3345 prop->flags = (prop->flags & ~desc->mask) | (desc->flags & desc->mask);
3346 return S_OK;
3347}
HRESULT throw_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:398
HRESULT jsval_strict_equal(jsval_t lval, jsval_t rval, BOOL *ret)
Definition: engine.c:684
unsigned int BOOL
Definition: ntddk_ex.h:94
static dispex_prop_t * alloc_prop(jsdisp_t *This, const WCHAR *name, prop_type_t type, DWORD flags)
Definition: dispex.c:213
@ PROP_EXTERN
Definition: dispex.c:39
#define eq(received, expected, label, type)
Definition: locale.c:179
DWORD flags
Definition: dispex.c:46
unsigned id
Definition: dispex.c:52

Referenced by init_arraybuf_constructors(), init_object_prototype_accessors(), interp_obj_prop(), jsdisp_define_data_property(), jsdisp_define_properties(), Object_defineGetter(), Object_defineProperty(), and Object_defineSetter().

◆ jsdisp_delete_idx()

HRESULT jsdisp_delete_idx ( jsdisp_t obj,
DWORD  idx 
)

Definition at line 3019 of file dispex.c.

3020{
3021 WCHAR buf[12];
3022 dispex_prop_t *prop;
3023 BOOL b;
3024 HRESULT hres;
3025
3026 swprintf(buf, ARRAY_SIZE(buf), L"%d", idx);
3027
3029 if(FAILED(hres) || !prop)
3030 return hres;
3031
3032 hres = delete_prop(obj, prop, &b);
3033 if(FAILED(hres))
3034 return hres;
3035 return b ? S_OK : JS_E_INVALID_ACTION;
3036}

Referenced by Array_pop(), Array_reverse(), Array_set_length(), Array_shift(), and Array_splice().

◆ jsdisp_freeze()

void jsdisp_freeze ( jsdisp_t obj,
BOOL  seal 
)

Definition at line 3393 of file dispex.c.

3394{
3395 unsigned int i;
3396
3397 fill_props(obj);
3398 for(i = 0; i < obj->prop_cnt; i++) {
3399 unsigned int mask = PROPF_CONFIGURABLE;
3400 if(!seal && obj->props[i].type == PROP_JSVAL)
3402 set_prop_flags(obj, &obj->props[i], obj->props[i].flags & PROPF_PUBLIC_MASK & ~mask);
3403 }
3404
3405 obj->extensible = FALSE;
3406}
GLenum GLint GLuint mask
Definition: glext.h:6028
static void set_prop_flags(jsdisp_t *obj, dispex_prop_t *prop, UINT32 flags)
Definition: dispex.c:3383
static HRESULT fill_props(jsdisp_t *obj)
Definition: dispex.c:747
const unsigned int PROPF_PUBLIC_MASK
Definition: jsdisp.idl:40

Referenced by Object_freeze(), and Object_seal().

◆ jsdisp_get_id()

HRESULT jsdisp_get_id ( jsdisp_t jsdisp,
const WCHAR name,
DWORD  flags,
DISPID id 
)

Definition at line 2550 of file dispex.c.

2551{
2552 dispex_prop_t *prop;
2553 HRESULT hres;
2554
2555 if(jsdisp->extensible && (flags & fdexNameEnsure))
2557 flags & fdexNameCaseInsensitive, &prop);
2558 else
2559 hres = find_prop_name_prot(jsdisp, string_hash(name), name, flags & fdexNameCaseInsensitive, NULL, &prop);
2560 if(FAILED(hres))
2561 return hres;
2562
2563 if(prop && prop->type!=PROP_DELETED) {
2564 *id = prop_to_id(jsdisp, prop);
2565 return S_OK;
2566 }
2567
2568 TRACE("not found %s\n", debugstr_w(name));
2569 *id = DISPID_UNKNOWN;
2570 return DISP_E_UNKNOWNNAME;
2571}
static HRESULT ensure_prop_name(jsdisp_t *This, const WCHAR *name, DWORD create_flags, BOOL case_insens, dispex_prop_t **ret)
Definition: dispex.c:449
static DISPID prop_to_id(jsdisp_t *This, dispex_prop_t *prop)
Definition: dispex.c:81

Referenced by Array_unshift(), disp_get_id(), DispatchEx_GetDispID(), DispatchEx_GetIDsOfNames(), exec_source(), identifier_eval(), interp_identifier_ref(), jsdisp_get_idx_id(), stack_topn_exprval(), stringify(), to_primitive(), to_property_descriptor(), and transform_json_object().

◆ jsdisp_get_idx()

HRESULT jsdisp_get_idx ( jsdisp_t obj,
DWORD  idx,
jsval_t r 
)

Definition at line 2963 of file dispex.c.

2964{
2965 WCHAR name[12];
2966 dispex_prop_t *prop;
2967 HRESULT hres;
2968
2969 swprintf(name, ARRAY_SIZE(name), L"%d", idx);
2970
2972 if(FAILED(hres))
2973 return hres;
2974
2975 if(!prop || prop->type==PROP_DELETED) {
2976 *r = jsval_undefined();
2977 return DISP_E_UNKNOWNNAME;
2978 }
2979
2980 return prop_get(obj, to_disp(obj), prop, r);
2981}

Referenced by 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(), and concat_array().

◆ jsdisp_get_idx_id()

HRESULT jsdisp_get_idx_id ( jsdisp_t jsdisp,
DWORD  idx,
DISPID id 
)

Definition at line 2573 of file dispex.c.

2574{
2575 WCHAR name[11];
2576
2577 swprintf(name, ARRAY_SIZE(name), L"%u", idx);
2578 return jsdisp_get_id(jsdisp, name, 0, id);
2579}
HRESULT jsdisp_get_id(jsdisp_t *jsdisp, const WCHAR *name, DWORD flags, DISPID *id)
Definition: dispex.c:2550

Referenced by get_detached_var_dispid().

◆ jsdisp_get_own_property()

HRESULT jsdisp_get_own_property ( jsdisp_t obj,
const WCHAR name,
BOOL  flags_only,
property_desc_t desc 
)

Definition at line 3171 of file dispex.c.

3173{
3174 dispex_prop_t *prop;
3175 HRESULT hres;
3176
3178 if(FAILED(hres))
3179 return hres;
3180
3181 if(!prop)
3182 return DISP_E_UNKNOWNNAME;
3183
3184 memset(desc, 0, sizeof(*desc));
3185
3186 switch(prop->type) {
3187 case PROP_BUILTIN:
3188 case PROP_JSVAL:
3189 case PROP_EXTERN:
3190 desc->mask |= PROPF_WRITABLE;
3191 desc->explicit_value = TRUE;
3192 if(!flags_only) {
3193 hres = prop_get(obj, to_disp(obj), prop, &desc->value);
3194 if(FAILED(hres))
3195 return hres;
3196 }
3197 break;
3198 case PROP_ACCESSOR:
3199 desc->explicit_getter = desc->explicit_setter = TRUE;
3200 if(!flags_only) {
3201 desc->getter = prop->u.accessor.getter
3202 ? jsdisp_addref(prop->u.accessor.getter) : NULL;
3203 desc->setter = prop->u.accessor.setter
3204 ? jsdisp_addref(prop->u.accessor.setter) : NULL;
3205 }
3206 break;
3207 default:
3208 return DISP_E_UNKNOWNNAME;
3209 }
3210
3213 return S_OK;
3214}
@ PROP_BUILTIN
Definition: dispex.c:35

Referenced by Object_getOwnPropertyDescriptor(), Object_hasOwnProperty(), and Object_propertyIsEnumerable().

◆ jsdisp_get_prop_name()

HRESULT jsdisp_get_prop_name ( jsdisp_t obj,
DISPID  id,
jsstr_t **  r 
)

Definition at line 3429 of file dispex.c.

3430{
3431 dispex_prop_t *prop = get_prop(obj, id);
3432
3433 if(!prop)
3434 return DISP_E_MEMBERNOTFOUND;
3435
3436 *r = jsstr_alloc(prop->name);
3437 return *r ? S_OK : E_OUTOFMEMORY;
3438}
WCHAR * name
Definition: dispex.c:43

Referenced by object_keys(), and transform_json_object().

◆ jsdisp_index_lookup()

HRESULT jsdisp_index_lookup ( jsdisp_t obj,
const WCHAR name,
unsigned  length,
struct property_info desc 
)

Definition at line 481 of file dispex.c.

482{
483 const WCHAR *ptr;
484 unsigned idx = 0;
485
486 for(ptr = name; is_digit(*ptr); ptr++) {
487 idx = idx * 10 + (*ptr - '0');
488 if (idx >= length)
489 return DISP_E_UNKNOWNNAME;
490 }
491 if(*ptr)
492 return DISP_E_UNKNOWNNAME;
493
494 desc->id = idx;
495 desc->flags = PROPF_ENUMERABLE;
496 if(obj->builtin_info->prop_put)
497 desc->flags |= PROPF_WRITABLE;
498 desc->name = NULL;
499 desc->index = idx;
500 desc->iid = 0;
501 return S_OK;
502}
#define is_digit(c)
Definition: astoll.c:39

Referenced by Arguments_lookup_prop(), scope_lookup_prop(), and String_lookup_prop().

◆ jsdisp_is_frozen()

BOOL jsdisp_is_frozen ( jsdisp_t obj,
BOOL  sealed 
)

Definition at line 3408 of file dispex.c.

3409{
3410 unsigned int i;
3411
3412 if(obj->extensible)
3413 return FALSE;
3414 fill_props(obj);
3415
3416 for(i = 0; i < obj->prop_cnt; i++) {
3417 if(obj->props[i].type == PROP_JSVAL || obj->props[i].type == PROP_EXTERN) {
3418 if(!sealed && (obj->props[i].flags & PROPF_WRITABLE))
3419 return FALSE;
3420 }else if(obj->props[i].type != PROP_ACCESSOR)
3421 continue;
3422 if(obj->props[i].flags & PROPF_CONFIGURABLE)
3423 return FALSE;
3424 }
3425
3426 return TRUE;
3427}

Referenced by Object_isFrozen(), and Object_isSealed().

◆ jsdisp_next_index()

HRESULT jsdisp_next_index ( jsdisp_t obj,
unsigned  length,
unsigned  id,
struct property_info desc 
)

Definition at line 504 of file dispex.c.

505{
506 if(id + 1 == length)
507 return S_FALSE;
508
509 desc->id = id + 1;
510 desc->flags = PROPF_ENUMERABLE;
511 if(obj->builtin_info->prop_put)
512 desc->flags |= PROPF_WRITABLE;
513 desc->name = NULL;
514 desc->index = desc->id;
515 desc->iid = 0;
516 return S_OK;
517}
#define S_FALSE
Definition: winerror.h:3451

Referenced by Arguments_next_prop(), and String_next_prop().

◆ jsdisp_next_prop()

HRESULT jsdisp_next_prop ( jsdisp_t obj,
DISPID  id,
enum  jsdisp_enum_type,
DISPID ret 
)

Definition at line 3073 of file dispex.c.

3074{
3075 dispex_prop_t *iter;
3076 DWORD idx = id;
3077 HRESULT hres;
3078
3079 if(id == DISPID_STARTENUM || idx >= obj->prop_cnt) {
3080 hres = (enum_type == JSDISP_ENUM_ALL) ? fill_protrefs(obj) : fill_props(obj);
3081 if(FAILED(hres))
3082 return hres;
3083 if(id == DISPID_STARTENUM)
3084 idx = 0;
3085 if(idx >= obj->prop_cnt)
3086 return S_FALSE;
3087 }
3088
3089 for(iter = &obj->props[idx]; iter < obj->props + obj->prop_cnt; iter++) {
3090 if(iter->type == PROP_EXTERN) {
3091 dispex_prop_t *prop;
3092 hres = find_external_prop(obj, iter->name, FALSE, iter, &prop);
3093 if(FAILED(hres) || prop != iter)
3094 iter->type = PROP_DELETED;
3095 }
3096 if(iter->type == PROP_DELETED)
3097 continue;
3098 if(enum_type != JSDISP_ENUM_ALL && iter->type == PROP_PROTREF)
3099 continue;
3100 if(enum_type != JSDISP_ENUM_OWN && !(get_flags(obj, iter) & PROPF_ENUMERABLE))
3101 continue;
3102 *ret = prop_to_id(obj, iter);
3103 return S_OK;
3104 }
3105
3106 if(obj->ctx->html_mode)
3107 return jsdisp_next_prop(obj, prop_to_id(obj, iter - 1), enum_type, ret);
3108
3109 return S_FALSE;
3110}
static HRESULT find_external_prop(jsdisp_t *This, const WCHAR *name, BOOL case_insens, dispex_prop_t *prop, dispex_prop_t **ret)
Definition: dispex.c:323
static HRESULT fill_protrefs(jsdisp_t *This)
Definition: dispex.c:782
HRESULT jsdisp_next_prop(jsdisp_t *obj, DISPID id, enum jsdisp_enum_type enum_type, DISPID *ret)
Definition: dispex.c:3073
DWORD get_flags
Definition: misc.c:1720
static const WCHAR props[]
Definition: wbemdisp.c:288

Referenced by DispatchEx_GetNextDispID(), jsdisp_define_properties(), jsdisp_next_prop(), object_keys(), and transform_json_object().

◆ jsdisp_propget()

HRESULT jsdisp_propget ( jsdisp_t jsdisp,
DISPID  id,
jsval_t val 
)

Definition at line 2983 of file dispex.c.

2984{
2985 dispex_prop_t *prop;
2986
2987 prop = get_prop(jsdisp, id);
2988 if(!prop)
2989 return DISP_E_MEMBERNOTFOUND;
2990
2991 return prop_get(jsdisp, to_disp(jsdisp), prop, val);
2992}

Referenced by Array_unshift(), disp_propget(), jsdisp_define_properties(), and to_property_descriptor().

◆ jsdisp_propget_name()

HRESULT jsdisp_propget_name ( jsdisp_t ,
LPCWSTR  ,
jsval_t  
)

◆ jsdisp_propput()

HRESULT jsdisp_propput ( jsdisp_t obj,
const WCHAR name,
DWORD  flags,
BOOL  throw,
jsval_t  val 
)

Definition at line 2842 of file dispex.c.

2843{
2844 dispex_prop_t *prop;
2845 HRESULT hres;
2846
2847 if(obj->extensible)
2848 hres = ensure_prop_name(obj, name, flags, FALSE, &prop);
2849 else
2851 if(FAILED(hres))
2852 return hres;
2853 if(!prop || (prop->type == PROP_DELETED && !obj->extensible))
2854 return throw ? JS_E_INVALID_ACTION : S_OK;
2855
2856 return prop_put(obj, prop, val);
2857}

Referenced by jsdisp_propput_idx(), jsdisp_propput_name(), and setup_arguments_object().

◆ jsdisp_propput_idx()

HRESULT jsdisp_propput_idx ( jsdisp_t obj,
DWORD  idx,
jsval_t  val 
)

◆ jsdisp_propput_name()

◆ jsdisp_release()

ULONG jsdisp_release ( jsdisp_t obj)

Definition at line 1911 of file dispex.c.

1912{
1913 ULONG ref;
1914
1915 if(obj->builtin_info->release)
1916 return obj->builtin_info->release(obj);
1917
1918 ref = --obj->ref;
1919 if(!ref)
1921 return ref;
1922}
static void jsdisp_free(jsdisp_t *obj)
Definition: dispex.c:1861
uint32_t ULONG
Definition: typedefs.h:59

Referenced by Array_concat(), Array_every(), Array_filter(), Array_forEach(), Array_indexOf(), Array_join(), Array_lastIndexOf(), Array_map(), Array_pop(), Array_push(), Array_reduce(), Array_reverse(), Array_shift(), Array_slice(), Array_some(), Array_sort(), Array_splice(), Array_toLocaleString(), Array_unshift(), ArrayConstr_value(), BindFunction_destructor(), concat_obj(), create_activex_constr(), create_array_constr(), create_bind_function(), create_bool_constr(), create_builtin_constructor(), create_builtin_function(), create_date_constr(), create_enumerator(), create_enumerator_constr(), create_error(), create_match_array(), create_math(), create_number_constr(), create_regexp(), create_regexp_constr(), create_string_constr(), create_vbarray(), create_vbarray_constr(), DataView_destructor(), DateConstr_value(), delete_prop(), detach_arguments_object(), disp_call(), disp_call_value_with_caller(), disp_delete(), disp_delete_name(), disp_propget(), disp_propput(), disp_propput_name(), DispatchEx_Release(), EnumeratorConstr_value(), error_constr(), exec_source(), find_prop_name(), Function_apply(), Function_bind(), gc_process_linked_obj(), gc_run(), get_length(), init_arraybuf_constructors(), init_dispex_from_constr(), init_error_constr(), init_function_constr(), init_global(), init_object_prototype_accessors(), init_set_constructor(), interp_enter_catch(), interp_instanceof(), InterpretedFunction_get_prototype(), jsdisp_change_prototype(), jsdisp_define_properties(), jsdisp_define_property(), jsdisp_free(), JSON_parse(), JSON_stringify(), maybe_to_primitive(), Object_create(), Object_getOwnPropertyDescriptor(), object_keys(), ObjectConstr_value(), parse_json_value(), pop_call_frame(), regexp_string_match(), RegExpConstr_value(), release_named_item_script_obj(), release_property_descriptor(), scope_init_locals(), scope_release(), script_globals_release(), ScriptTypeInfo_Release(), setup_arguments_object(), String_match(), String_replace(), String_search(), String_split(), stringify(), to_locale_string(), to_primitive(), unlink_jsdisp(), update_external_prop(), variant_date_to_string(), variant_to_jsval(), VBArray_toArray(), and VBArrayConstr_value().

◆ JSGlobal_eval()

HRESULT JSGlobal_eval ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 180 of file global.c.

182{
183 return builtin_eval(ctx, ctx->version < SCRIPTLANGUAGEVERSION_ES5 ? ctx->call_ctx : NULL, flags, argc, argv, r);
184}
HRESULT builtin_eval(script_ctx_t *ctx, call_frame_t *frame, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:137

Referenced by is_builtin_eval_func().

◆ jsval_strict_equal()

HRESULT jsval_strict_equal ( jsval_t  lval,
jsval_t  rval,
BOOL ret 
)

Definition at line 684 of file engine.c.

685{
687
688 TRACE("\n");
689
690 if(type != jsval_type(rval)) {
691 *ret = FALSE;
692 return S_OK;
693 }
694
695 switch(type) {
696 case JSV_UNDEFINED:
697 case JSV_NULL:
698 *ret = TRUE;
699 break;
700 case JSV_OBJECT:
701 return disp_cmp(get_object(lval), get_object(rval), ret);
702 case JSV_STRING:
704 break;
705 case JSV_NUMBER:
706 *ret = get_number(lval) == get_number(rval);
707 break;
708 case JSV_BOOL:
709 *ret = !get_bool(lval) == !get_bool(rval);
710 break;
711 case JSV_VARIANT:
712 WARN("VARIANT type, returning false\n");
713 *ret = FALSE;
714 return S_OK;
715 }
716
717 return S_OK;
718}
float rval
Definition: cylfrac.c:48
static HRESULT disp_cmp(IDispatch *disp1, IDispatch *disp2, BOOL *ret)
Definition: engine.c:633
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static BOOL jsstr_eq(jsstr_t *left, jsstr_t *right)
Definition: jsstr.h:173
jsval_type_t
Definition: jsval.h:44

Referenced by Array_indexOf(), Array_lastIndexOf(), equal_values(), interp_case(), interp_eq2(), interp_neq2(), and jsdisp_define_property().

◆ localize_number()

HRESULT localize_number ( script_ctx_t ctx,
DOUBLE  val,
BOOL  new_format,
jsstr_t **  ret 
)

Definition at line 350 of file number.c.

351{
352 WCHAR buf[316], decimal[8], thousands[8], *numstr;
353 NUMBERFMTW *format = NULL, format_buf;
354 LCID lcid = ctx->lcid;
355#ifndef __REACTOS__
357#endif
358 unsigned convlen;
359 jsstr_t *str;
360 int len;
361
362 /* FIXME: Localize this */
363 if(!isfinite(val))
364 return to_string(ctx, jsval_number(val), ret);
365
366 /* Native never uses an exponent, even if the number is very large, it will in fact
367 return all the digits (with thousands separators). jscript.dll uses two digits for
368 fraction even if they are zero (likely default numDigits) and always returns them,
369 while mshtml's jscript uses 3 digits and trims trailing zeros (on same locale).
370 This is even for very small numbers, such as 0.0000999, which will simply be 0. */
371#ifdef __REACTOS__ /* FIXME: Inspect */
372 len = swprintf(buf, ARRAY_SIZE(buf), L"%.3f", val);
373#else
374 if(!(locale = _create_locale(LC_ALL, "C")))
375 return E_OUTOFMEMORY;
376 len = _swprintf_l(buf, ARRAY_SIZE(buf), L"%.3f", locale, val);
378#endif
379
380 if(new_format) {
381 WCHAR grouping[10];
382
383 format = &format_buf;
384 format->NumDigits = 3;
385 while(buf[--len] == '0')
386 format->NumDigits--;
387
388 /* same logic as VarFormatNumber */
389 grouping[2] = '\0';
390 if(!GetLocaleInfoW(lcid, LOCALE_SGROUPING, grouping, ARRAY_SIZE(grouping)))
391 format->Grouping = 3;
392 else
393 format->Grouping = (grouping[2] == '2' ? 32 : grouping[0] - '0');
394
395 if(!GetLocaleInfoW(lcid, LOCALE_ILZERO | LOCALE_RETURN_NUMBER, (WCHAR*)&format->LeadingZero, 2))
396 format->LeadingZero = 0;
397 if(!GetLocaleInfoW(lcid, LOCALE_INEGNUMBER | LOCALE_RETURN_NUMBER, (WCHAR*)&format->NegativeOrder, 2))
398 format->NegativeOrder = 1;
399 format->lpDecimalSep = decimal;
400 if(!GetLocaleInfoW(lcid, LOCALE_SDECIMAL, decimal, ARRAY_SIZE(decimal)))
401 wcscpy(decimal, L".");
402 format->lpThousandSep = thousands;
403 if(!GetLocaleInfoW(lcid, LOCALE_STHOUSAND, thousands, ARRAY_SIZE(thousands)))
404 wcscpy(thousands, L",");
405 }
406
407 if(!(convlen = GetNumberFormatW(lcid, 0, buf, format, NULL, 0)) ||
408 !(str = jsstr_alloc_buf(convlen - 1, &numstr)))
409 return E_OUTOFMEMORY;
410
411 if(!GetNumberFormatW(lcid, 0, buf, format, numstr, convlen)) {
413 return E_OUTOFMEMORY;
414 }
415
416 *ret = str;
417 return S_OK;
418}
Definition: _locale.h:75
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
LCID lcid
Definition: locale.c:5660
_ACRTIMP void __cdecl _free_locale(_locale_t)
Definition: locale.c:1183
_ACRTIMP _locale_t __cdecl _create_locale(int, const char *)
Definition: locale.c:1981
#define LC_ALL
Definition: locale.h:25
#define isfinite(x)
Definition: math.h:363
jsstr_t * jsstr_alloc_buf(unsigned len, WCHAR **buf)
Definition: jsstr.c:69
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1130
DWORD LCID
Definition: nls.h:13
wcscpy
Definition: format.c:58
#define LOCALE_SGROUPING
Definition: winnls.h:54
#define LOCALE_SDECIMAL
Definition: winnls.h:52
#define LOCALE_STHOUSAND
Definition: winnls.h:53
#define LOCALE_INEGNUMBER
Definition: winnls.h:57
#define LOCALE_ILZERO
Definition: winnls.h:56

Referenced by Number_toLocaleString(), and to_locale_string().

◆ lock_module()

static void lock_module ( void  )
inlinestatic

Definition at line 599 of file jscript.h.

600{
602}
#define InterlockedIncrement
Definition: armddk.h:53
LONG module_ref
Definition: ieframe_main.c:31

◆ lookup_named_item()

named_item_t * lookup_named_item ( script_ctx_t ctx,
const WCHAR item_name,
unsigned  flags 
)

Definition at line 162 of file jscript.c.

163{
165 HRESULT hr;
166
167 LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) {
168 if((item->flags & flags) == flags && !wcscmp(item->name, item_name)) {
169 if(!item->script_obj && !(item->flags & SCRIPTITEM_GLOBALMEMBERS)) {
171 if(FAILED(hr)) return NULL;
172 }
173
174 if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
176 if(FAILED(hr)) continue;
177 }
178
179 return item;
180 }
181 }
182
183 return NULL;
184}
HRESULT create_named_item_script_obj(script_ctx_t *ctx, named_item_t *item)
Definition: jscript.c:124
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
Definition: jscript.c:138
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977

◆ make_grfdex()

static DWORD make_grfdex ( script_ctx_t ctx,
DWORD  flags 
)
inlinestatic

Definition at line 513 of file jscript.h.

514{
515 return ((ctx->version & 0xff) << 28) | flags;
516}

Referenced by disp_call_name(), disp_delete_name(), disp_get_id(), disp_propput_name(), and Object_hasOwnProperty().

◆ Object_get_proto_()

HRESULT Object_get_proto_ ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 393 of file object.c.

394{
395 jsdisp_t *jsthis;
396 IDispatch *disp;
398
399 TRACE("%s\n", debugstr_jsval(vthis));
400
401 hres = to_object(ctx, vthis, &disp);
402 if(FAILED(hres))
403 return hres;
404
405 if(!r)
406 goto done;
407
408 if(!(jsthis = to_jsdisp(disp))) {
409 FIXME("Host object this\n");
410 hres = E_FAIL;
411 goto done;
412 }
413
414 *r = jsthis->prototype
416 : jsval_null();
417done:
418 IDispatch_Release(disp);
419 return hres;
420}
HRESULT to_object(script_ctx_t *, jsval_t, IDispatch **)
Definition: jsutils.c:864

Referenced by init_object_prototype_accessors().

◆ Object_set_proto_()

HRESULT Object_set_proto_ ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)

Definition at line 422 of file object.c.

423{
424 jsdisp_t *jsthis, *proto;
426
427 TRACE("%s\n", debugstr_jsval(vthis));
428
429 if(is_undefined(vthis) || is_null(vthis))
431 if(!argc) {
432 if(r)
433 *r = jsval_undefined();
434 return S_OK;
435 }
436 if(!is_object_instance(vthis) || !(jsthis = to_jsdisp(get_object(vthis))))
437 goto done;
438
439 if(is_null(argv[0])) {
440 proto = NULL;
441 }else if(is_object_instance(argv[0])) {
443 if(!proto) {
444 FIXME("Host object value\n");
445 return E_FAIL;
446 }
447 }else
448 goto done;
449
451 if(FAILED(hres))
452 return hres;
453
454done:
455 return r ? jsval_copy(argv[0], r) : S_OK;
456}
HRESULT jsdisp_change_prototype(jsdisp_t *obj, jsdisp_t *proto)
Definition: dispex.c:3356
static BOOL is_null(jsval_t v)
Definition: jsval.h:185

Referenced by init_object_prototype_accessors().

◆ parse_regexp_flags()

HRESULT parse_regexp_flags ( const WCHAR str,
DWORD  str_len,
DWORD ret 
)

Definition at line 982 of file jsregexp.c.

983{
984 const WCHAR *p;
985 DWORD flags = 0;
986
987 for (p = str; p < str+str_len; p++) {
988 switch (*p) {
989 case 'g':
990 flags |= REG_GLOB;
991 break;
992 case 'i':
993 flags |= REG_FOLD;
994 break;
995 case 'm':
997 break;
998 case 'y':
999 flags |= REG_STICKY;
1000 break;
1001 default:
1002 WARN("wrong flag %c\n", *p);
1003 return E_FAIL;
1004 }
1005 }
1006
1007 *ret = flags;
1008 return S_OK;
1009}
#define REG_FOLD
Definition: regexp.h:36
#define REG_MULTILINE
Definition: regexp.h:38
#define REG_STICKY
Definition: regexp.h:39
#define REG_GLOB
Definition: regexp.h:37
GLfloat GLfloat p
Definition: glext.h:8902
#define str_len
Definition: treelist.c:89

Referenced by create_regexp_var(), and parse_regexp().

◆ regexp_match_next()

HRESULT regexp_match_next ( script_ctx_t ctx,
jsdisp_t dispex,
DWORD  rem_flags,
jsstr_t jsstr,
struct match_state_t **  ret 
)

Definition at line 102 of file jsregexp.c.

104{
105 RegExpInstance *regexp = regexp_from_jsdisp(dispex);
107 heap_pool_t *mark;
108 const WCHAR *str;
110
111 if((rem_flags & REM_CHECK_GLOBAL) && !(regexp->jsregexp->flags & REG_GLOB)) {
112 if(rem_flags & REM_ALLOC_RESULT)
113 *ret = NULL;
114 return S_FALSE;
115 }
116
117 str = jsstr_flatten(jsstr);
118 if(!str)
119 return E_OUTOFMEMORY;
120
121 if(rem_flags & REM_ALLOC_RESULT) {
123 if(!match)
124 return E_OUTOFMEMORY;
125 *ret = match;
126 }
127
128 mark = heap_pool_mark(&ctx->tmp_heap);
129
130 if(rem_flags & REM_NO_PARENS) {
131 match = alloc_match_state(regexp->jsregexp, &ctx->tmp_heap, NULL);
132 if(!match) {
133 heap_pool_clear(mark);
134 return E_OUTOFMEMORY;
135 }
136 match->cp = (*ret)->cp;
137 match->match_len = (*ret)->match_len;
138 }else {
139 match = *ret;
140 }
141
142 hres = do_regexp_match_next(ctx, regexp, rem_flags, jsstr, str, match);
143
144 if(rem_flags & REM_NO_PARENS) {
145 (*ret)->cp = match->cp;
146 (*ret)->match_len = match->match_len;
147 }
148
149 heap_pool_clear(mark);
150
151 if(hres != S_OK && (rem_flags & REM_ALLOC_RESULT)) {
152 free(match);
153 *ret = NULL;
154 }
155
156 return hres;
157}
static match_state_t * alloc_match_state(regexp_t *regexp, heap_pool_t *pool, const WCHAR *pos)
Definition: regexp.h:71
#define REM_CHECK_GLOBAL
Definition: jscript.h:483
void heap_pool_clear(heap_pool_t *)
Definition: jsutils.c:141
heap_pool_t * heap_pool_mark(heap_pool_t *)
Definition: jsutils.c:177
#define REM_NO_PARENS
Definition: jscript.h:487
#define REM_ALLOC_RESULT
Definition: jscript.h:486
static HRESULT do_regexp_match_next(script_ctx_t *ctx, RegExpInstance *regexp, DWORD rem_flags, jsstr_t *jsstr, const WCHAR *str, match_state_t *ret)
Definition: jsregexp.c:55
Definition: match.c:28

Referenced by regexp_string_match(), run_exec(), String_replace(), String_search(), and String_split().

◆ regexp_string_match()

HRESULT regexp_string_match ( script_ctx_t ctx,
jsdisp_t re,
jsstr_t jsstr,
jsval_t r 
)

Definition at line 701 of file jsregexp.c.

702{
704 match_result_t *match_result;
705 DWORD match_cnt, i;
706 const WCHAR *str;
709
710 str = jsstr_flatten(jsstr);
711 if(!str)
712 return E_OUTOFMEMORY;
713
714 if(!(regexp->jsregexp->flags & REG_GLOB)) {
716 heap_pool_t *mark;
717
718 mark = heap_pool_mark(&ctx->tmp_heap);
719 match = alloc_match_state(regexp->jsregexp, &ctx->tmp_heap, str);
720 if(!match) {
721 heap_pool_clear(mark);
722 return E_OUTOFMEMORY;
723 }
724
725 hres = regexp_match_next(ctx, &regexp->dispex, 0, jsstr, &match);
726 if(FAILED(hres)) {
727 heap_pool_clear(mark);
728 return hres;
729 }
730
731 if(r) {
732 if(hres == S_OK) {
733 IDispatch *ret;
734
735 hres = create_match_array(ctx, jsstr, match, &ret);
736 if(SUCCEEDED(hres))
737 *r = jsval_disp(ret);
738 }else {
739 *r = jsval_null();
740 }
741 }
742
743 heap_pool_clear(mark);
744 return S_OK;
745 }
746
747 hres = regexp_match(ctx, &regexp->dispex, jsstr, FALSE, &match_result, &match_cnt);
748 if(FAILED(hres))
749 return hres;
750
751 if(!match_cnt) {
752 TRACE("no match\n");
753
754 if(r)
755 *r = jsval_null();
756 return S_OK;
757 }
758
759 hres = create_array(ctx, match_cnt, &array);
760 if(FAILED(hres)) {
761 free(match_result);
762 return hres;
763 }
764
765 for(i=0; i < match_cnt; i++) {
766 jsstr_t *tmp_str;
767
768 tmp_str = jsstr_substr(jsstr, match_result[i].index, match_result[i].length);
769 if(!tmp_str) {
771 break;
772 }
773
775 jsstr_release(tmp_str);
776 if(FAILED(hres))
777 break;
778 }
779
780 while(SUCCEEDED(hres)) {
781 hres = jsdisp_propput_name(array, L"index", jsval_number(match_result[match_cnt-1].index));
782 if(FAILED(hres))
783 break;
784
785 hres = jsdisp_propput_name(array, L"lastIndex",
786 jsval_number(match_result[match_cnt-1].index + match_result[match_cnt-1].length));
787 if(FAILED(hres))
788 break;
789
790 hres = jsdisp_propput_name(array, L"input", jsval_string(jsstr));
791 break;
792 }
793
794 free(match_result);
795
796 if(SUCCEEDED(hres) && r)
797 *r = jsval_obj(array);
798 else
800 return hres;
801}
HRESULT create_array(script_ctx_t *ctx, DWORD length, jsdisp_t **ret)
Definition: array.c:1780
GLuint index
Definition: glext.h:6031
HRESULT jsdisp_propput_idx(jsdisp_t *obj, DWORD idx, jsval_t val)
Definition: dispex.c:2864
static HRESULT regexp_match(script_ctx_t *ctx, jsdisp_t *dispex, jsstr_t *jsstr, BOOL gflag, match_result_t **match_result, DWORD *result_cnt)
Definition: jsregexp.c:159
static HRESULT create_match_array(script_ctx_t *ctx, jsstr_t *input_str, const match_state_t *result, IDispatch **ret)
Definition: jsregexp.c:349
HRESULT regexp_match_next(script_ctx_t *ctx, jsdisp_t *dispex, DWORD rem_flags, jsstr_t *jsstr, match_state_t **ret)
Definition: jsregexp.c:102
static jsstr_t * jsstr_substr(jsstr_t *str, unsigned off, unsigned len)
Definition: jsstr.h:160

Referenced by String_match().

◆ release_cc()

void release_cc ( cc_ctx_t cc)

Definition at line 817 of file lex.c.

818{
819 cc_var_t *iter, *next;
820
821 for(iter = cc->vars; iter; iter = next) {
822 next = iter->next;
823 free(iter);
824 }
825
826 free(cc);
827}
uint32_t cc
Definition: isohybrid.c:75
Definition: lex.c:810
struct _cc_var_t * next
Definition: lex.c:812

Referenced by init_cc(), and script_release().

◆ release_named_item()

void release_named_item ( named_item_t item)

Definition at line 186 of file jscript.c.

187{
188 if(--item->ref) return;
189
190 free(item->name);
191 free(item);
192}

◆ release_thread_data()

void release_thread_data ( struct thread_data thread_data)

Definition at line 69 of file jscript_main.c.

70{
71 if(--thread_data->ref)
72 return;
73
76}

Referenced by decrease_state(), JScript_Release(), JScript_SetScriptSite(), and script_release().

◆ remove_weakmap_entry()

void remove_weakmap_entry ( struct weakmap_entry entry)

Definition at line 642 of file set.c.

643{
644 WeakMapInstance *weakmap = (WeakMapInstance*)entry->weakmap;
645 struct list *next = entry->weak_refs_entry.next;
646
647 if(next->next != &entry->weak_refs_entry)
648 list_remove(&entry->weak_refs_entry);
649 else {
651 entry->key->has_weak_refs = FALSE;
652 rb_remove(&entry->key->ctx->thread_data->weak_refs, &weak_refs_entry->entry);
654 }
655 rb_remove(&weakmap->map, &entry->entry);
656 jsval_release(entry->value);
657 free(entry);
658}
static void rb_remove(struct rb_tree *tree, struct rb_entry *entry)
Definition: rbtree.h:272
struct rb_tree map
Definition: set.c:610
struct rb_entry entry
Definition: jscript.h:379

Referenced by jsdisp_free(), WeakMap_clear(), WeakMap_delete(), WeakMap_destructor(), and WeakMap_gc_traverse().

◆ script_addref()

static void script_addref ( script_ctx_t ctx)
inlinestatic

Definition at line 457 of file jscript.h.

458{
459 ctx->ref++;
460}

Referenced by init_dispex().

◆ script_release()

void script_release ( script_ctx_t ctx)

Definition at line 75 of file jscript.c.

76{
77 if(--ctx->ref)
78 return;
79
80 jsval_release(ctx->acc);
81 if(ctx->cc)
82 release_cc(ctx->cc);
83 heap_pool_free(&ctx->tmp_heap);
84 if(ctx->last_match)
85 jsstr_release(ctx->last_match);
86 assert(!ctx->stack_top);
87 free(ctx->stack);
88
89 ctx->jscaller->ctx = NULL;
90 IServiceProvider_Release(&ctx->jscaller->IServiceProvider_iface);
91
92 release_thread_data(ctx->thread_data);
93 free(ctx);
94}
void release_cc(cc_ctx_t *)
Definition: lex.c:817
void release_thread_data(struct thread_data *)
Definition: jscript_main.c:69
void heap_pool_free(heap_pool_t *)
Definition: jsutils.c:164
CONTEXT ctx

Referenced by JScript_Release(), and jsdisp_free().

◆ throw_error()

HRESULT throw_error ( script_ctx_t ctx,
HRESULT  error,
const WCHAR str 
)

Definition at line 398 of file error.c.

399{
400 jsexcept_t *ei = ctx->ei;
401 TRACE("%08lx\n", error);
402 reset_ei(ei);
403 ei->error = error;
404 if(str)
406 return DISP_E_EXCEPTION;
407}
static jsstr_t * format_error_message(HRESULT error, const WCHAR *arg)
Definition: error.c:364
#define error(str)
Definition: mkdosfs.c:1605

Referenced by compile_script(), get_map_this(), get_set_this(), get_weakmap_this(), identifier_value(), interp_throw_type(), jsdisp_define_property(), Map_constructor(), NewRENode(), Number_toLocaleString(), ParseTerm(), ProcessCharSet(), PushBackTrackState(), ReallocStateStack(), Set_constructor(), unwind_exception(), and WeakMap_constructor().

◆ to_boolean()

HRESULT to_boolean ( jsval_t  val,
BOOL ret 
)

Definition at line 489 of file jsutils.c.

490{
491 switch(jsval_type(val)) {
492 case JSV_UNDEFINED:
493 case JSV_NULL:
494 *ret = FALSE;
495 return S_OK;
496 case JSV_OBJECT:
497 *ret = TRUE;
498 return S_OK;
499 case JSV_STRING:
500 *ret = jsstr_length(get_string(val)) != 0;
501 return S_OK;
502 case JSV_NUMBER:
504 return S_OK;
505 case JSV_BOOL:
506 *ret = get_bool(val);
507 return S_OK;
508 case JSV_VARIANT:
509 FIXME("unimplemented for variant %s\n", debugstr_variant(get_variant(val)));
510 return E_NOTIMPL;
511 }
512
513 assert(0);
514 return E_FAIL;
515}
#define E_NOTIMPL
Definition: ddrawi.h:99

Referenced by Array_every(), Array_filter(), Array_some(), BoolConstr_value(), get_data(), interp_cnd_nz(), interp_cnd_z(), interp_jmp_z(), interp_neg(), set_data(), to_property_descriptor(), and variant_change_type().

◆ to_disp()

◆ to_dispex()

static IDispatchEx * to_dispex ( jsdisp_t jsdisp)
inlinestatic

Definition at line 227 of file jscript.h.

228{
229 return (IDispatchEx *)&jsdisp->IWineJSDispatch_iface;
230}

Referenced by Array_unshift(), DispatchEx_Invoke(), jsdisp_define_properties(), and stringify_object().

◆ to_flat_string()

◆ to_int32()

HRESULT to_int32 ( script_ctx_t ctx,
jsval_t  v,
INT ret 
)

Definition at line 735 of file jsutils.c.

736{
737 double n;
739
740 hres = to_number(ctx, v, &n);
741 if(FAILED(hres))
742 return hres;
743
745 return S_OK;
746}
static INT32 double_to_int32(double number)
Definition: jsutils.c:692
HRESULT to_number(script_ctx_t *ctx, jsval_t val, double *ret)
Definition: jsutils.c:630

Referenced by DataView_setInt16(), DataView_setInt32(), DataView_setInt8(), interp_bneg(), JSGlobal_parseInt(), Number_toExponential(), Number_toFixed(), Number_toPrecision(), Number_toString(), stack_pop_int(), to_long(), and variant_change_type().

◆ to_integer()

HRESULT to_integer ( script_ctx_t ctx,
jsval_t  v,
double ret 
)

Definition at line 676 of file jsutils.c.

677{
678 double n;
680
681 hres = to_number(ctx, v, &n);
682 if(FAILED(hres))
683 return hres;
684
685 if(isnan(n))
686 *ret = 0;
687 else
688 *ret = n >= 0.0 ? floor(n) : -floor(-n);
689 return S_OK;
690}
_ACRTIMP double __cdecl floor(double)
Definition: floor.c:18

Referenced by Array_indexOf(), Array_lastIndexOf(), Array_splice(), ArrayBuffer_slice(), ArrayBufferConstr_value(), DataViewConstr_value(), get_data(), set_data(), String_charAt(), String_charCodeAt(), String_indexOf(), String_lastIndexOf(), String_slice(), String_substr(), and String_substring().

◆ to_jsdisp()

jsdisp_t * to_jsdisp ( IDispatch disp)

Definition at line 2447 of file dispex.c.

2448{
2449 if(disp->lpVtbl != (IDispatchVtbl*)&DispatchExVtbl)
2450 return NULL;
2452}

Referenced by array_this(), arraybuf_this(), ArrayConstr_isArray(), boolval_this(), create_regexp_var(), dataview_this(), date_this(), disp_call_name(), disp_call_value_with_caller(), disp_get_id(), enumerator_this(), Error_toString(), exec_source(), exprval_call(), Function_apply(), function_this(), gc_process_linked_val(), gc_run(), get_host_dispatch(), get_map_this(), get_set_this(), get_weakmap_this(), interp_call_eval(), interp_carray_set(), interp_instanceof(), interp_obj_prop(), invoke_prop_func(), is_function_prop(), jsdisp_define_properties(), JSON_stringify(), numberval_this(), Object_create(), Object_defineGetter(), Object_defineProperties(), Object_defineProperty(), Object_defineSetter(), Object_freeze(), Object_get_proto_(), Object_getOwnPropertyDescriptor(), Object_getPrototypeOf(), Object_hasOwnProperty(), Object_isExtensible(), Object_isFrozen(), Object_isPrototypeOf(), Object_isSealed(), object_keys(), Object_preventExtensions(), Object_propertyIsEnumerable(), Object_seal(), Object_set_proto_(), Object_toLocaleString(), Object_toString(), regexp_this(), RegExpConstr_value(), scope_gc_traverse(), set_error_value(), stack_topn_exprval(), string_this(), stringify(), to_property_descriptor(), transform_json_object(), typeof_string(), unwind_exception(), variant_to_jsval(), vbarray_this(), WeakMap_delete(), WeakMap_get(), WeakMap_has(), and WeakMap_set().

◆ to_long()

HRESULT to_long ( script_ctx_t ctx,
jsval_t  v,
LONG ret 
)

Definition at line 748 of file jsutils.c.

749{
750 return to_int32(ctx, v, (INT*)ret);
751}
HRESULT to_int32(script_ctx_t *ctx, jsval_t v, INT *ret)
Definition: jsutils.c:735
int32_t INT
Definition: typedefs.h:58

Referenced by VBArray_getItem(), VBArray_lbound(), and VBArray_ubound().

◆ to_number()

HRESULT to_number ( script_ctx_t ctx,
jsval_t  val,
double ret 
)

Definition at line 630 of file jsutils.c.

631{
632 switch(jsval_type(val)) {
633 case JSV_UNDEFINED:
634 *ret = NAN;
635 return S_OK;
636 case JSV_NULL:
637 *ret = 0;
638 return S_OK;
639 case JSV_NUMBER:
640 *ret = get_number(val);
641 return S_OK;
642 case JSV_STRING:
644 case JSV_OBJECT: {
647
649 if(FAILED(hres))
650 return hres;
651
654 return hres;
655 }
656 case JSV_BOOL:
657 *ret = get_bool(val) ? 1 : 0;
658 return S_OK;
659 case JSV_VARIANT: {
660 const VARIANT *v = get_variant(val);
661 switch(V_VT(v)) {
662 case VT_DATE:
664 default:
665 FIXME("unimplemented for variant %s\n", debugstr_variant(v));
666 return E_NOTIMPL;
667 }
668 }
669 };
670
671 assert(0);
672 return E_FAIL;
673}
@ VT_DATE
Definition: compat.h:2302
HRESULT variant_date_to_number(double date, double *ret)
Definition: date.c:2458
static HRESULT str_to_number(jsstr_t *str, double *ret)
Definition: jsutils.c:536
HRESULT to_primitive(script_ctx_t *ctx, jsval_t val, jsval_t *ret, hint_t hint)
Definition: jsutils.c:423
LOCAL int prim(arg_t *ap)
Definition: match.c:440
#define V_DATE(A)
Definition: oleauto.h:231

Referenced by Array_set_length(), Array_slice(), DataView_setFloat32(), DataView_setFloat64(), 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_utc(), DateConstr_value(), equal_values(), error_constr(), index_from_val(), interp_add(), interp_postinc(), interp_preinc(), interp_tonum(), JSGlobal_isFinite(), JSGlobal_isNaN(), less_eval(), 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_round(), Math_sin(), Math_sqrt(), Math_tan(), maybe_to_primitive(), NumberConstr_value(), sort_cmp(), stack_pop_number(), to_int32(), to_integer(), to_number(), to_uint32(), and variant_change_type().

◆ to_object()

HRESULT to_object ( script_ctx_t ctx,
jsval_t  val,
IDispatch **  disp 
)

Definition at line 864 of file jsutils.c.

865{
866 jsdisp_t *dispex;
868
869 switch(jsval_type(val)) {
870 case JSV_STRING:
871 hres = create_string(ctx, get_string(val), &dispex);
872 if(FAILED(hres))
873 return hres;
874
875 *disp = to_disp(dispex);
876 break;
877 case JSV_NUMBER:
878 hres = create_number(ctx, get_number(val), &dispex);
879 if(FAILED(hres))
880 return hres;
881
882 *disp = to_disp(dispex);
883 break;
884 case JSV_OBJECT:
885 *disp = get_object(val);
886 IDispatch_AddRef(*disp);
887 break;
888 case JSV_BOOL:
889 hres = create_bool(ctx, get_bool(val), &dispex);
890 if(FAILED(hres))
891 return hres;
892
893 *disp = to_disp(dispex);
894 break;
895 case JSV_NULL:
896 if(is_null_disp(val))
898 /* fall through */
899 case JSV_UNDEFINED:
900 WARN("object expected\n");
902 case JSV_VARIANT:
903 switch(V_VT(get_variant(val))) {
904 case VT_ARRAY|VT_VARIANT:
906 if(FAILED(hres))
907 return hres;
908
909 *disp = to_disp(dispex);
910 break;
911
912 default:
913 FIXME("Unsupported %s\n", debugstr_variant(get_variant(val)));
914 return E_NOTIMPL;
915 }
916 break;
917 }
918
919 return S_OK;
920}
HRESULT create_bool(script_ctx_t *ctx, BOOL bval, jsdisp_t **ret)
Definition: bool.c:212
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
HRESULT create_string(script_ctx_t *, jsstr_t *, jsdisp_t **)
Definition: string.c:1736
HRESULT create_vbarray(script_ctx_t *, SAFEARRAY *, jsdisp_t **)
Definition: vbarray.c:336
HRESULT create_number(script_ctx_t *, double, jsdisp_t **)
Definition: number.c:699
static BOOL is_null_disp(jsval_t v)
Definition: jsval.h:190
#define V_ARRAY(A)
Definition: oleauto.h:222

Referenced by Array_concat(), exprval_call(), Function_apply(), Function_bind(), Function_call(), get_length(), interp_delete(), interp_memberid(), interp_push_with_scope(), interp_set_member(), InterpretedFunction_call(), jsdisp_define_properties(), Object_get_proto_(), Object_hasOwnProperty(), Object_isPrototypeOf(), Object_propertyIsEnumerable(), Object_toLocaleString(), Object_toString(), Object_valueOf(), ObjectConstr_value(), stack_pop_object(), and to_locale_string().

◆ to_primitive()

HRESULT to_primitive ( script_ctx_t ctx,
jsval_t  val,
jsval_t ret,
hint_t  hint 
)

Definition at line 423 of file jsutils.c.

424{
426 jsdisp_t *jsdisp;
428 DISPID id;
430
431 jsdisp = iface_to_jsdisp(get_object(val));
432 if(!jsdisp)
433 return disp_propget(ctx, get_object(val), DISPID_VALUE, ret);
434
435 if(hint == NO_HINT)
437
438 /* Native implementation doesn't throw TypeErrors, returns strange values */
439
440 hres = jsdisp_get_id(jsdisp, hint == HINT_STRING ? L"toString" : L"valueOf", 0, &id);
441 if(SUCCEEDED(hres)) {
442 hres = jsdisp_call(jsdisp, id, DISPATCH_METHOD, 0, NULL, &prim);
443 if(FAILED(hres)) {
444 WARN("call error - forwarding exception\n");
445 jsdisp_release(jsdisp);
446 return hres;
447 }else if(!is_object_instance(prim)) {
448 jsdisp_release(jsdisp);
449 *ret = prim;
450 return S_OK;
451 }else {
452 IDispatch_Release(get_object(prim));
453 }
454 }else if(hres != DISP_E_UNKNOWNNAME) {
455 jsdisp_release(jsdisp);
456 return hres;
457 }
458
459 hres = jsdisp_get_id(jsdisp, hint == HINT_STRING ? L"valueOf" : L"toString", 0, &id);
460 if(SUCCEEDED(hres)) {
461 hres = jsdisp_call(jsdisp, id, DISPATCH_METHOD, 0, NULL, &prim);
462 if(FAILED(hres)) {
463 WARN("call error - forwarding exception\n");
464 jsdisp_release(jsdisp);
465 return hres;
466 }else if(!is_object_instance(prim)) {
467 jsdisp_release(jsdisp);
468 *ret = prim;
469 return S_OK;
470 }else {
471 IDispatch_Release(get_object(prim));
472 }
473 }else if(hres != DISP_E_UNKNOWNNAME) {
474 jsdisp_release(jsdisp);
475 return hres;
476 }
477
478 jsdisp_release(jsdisp);
479
480 WARN("failed\n");
481 return JS_E_TO_PRIMITIVE;
482 }
483
484 return jsval_copy(val, ret);
485
486}
HRESULT disp_propget(script_ctx_t *ctx, IDispatch *disp, DISPID id, jsval_t *val)
Definition: dispex.c:2994
DWORD hint
Definition: vfdcmd.c:88

Referenced by DateConstr_value(), DispatchEx_InvokeEx(), equal_values(), interp_add(), less_eval(), to_number(), and to_string().

◆ to_string()

HRESULT to_string ( script_ctx_t ctx,
jsval_t  val,
jsstr_t **  str 
)

Definition at line 801 of file jsutils.c.

802{
803 switch(jsval_type(val)) {
804 case JSV_UNDEFINED:
805 *str = jsstr_undefined();
806 return S_OK;
807 case JSV_NULL:
808 *str = jsstr_alloc(L"null");
809 break;
810 case JSV_NUMBER:
812 case JSV_STRING:
814 break;
815 case JSV_OBJECT: {
818
820 if(FAILED(hres))
821 return hres;
822
825 return hres;
826 }
827 case JSV_BOOL:
828 *str = jsstr_alloc(get_bool(val) ? L"true" : L"false");
829 break;
830 default: {
831 const VARIANT *v = get_variant(val);
832 switch(V_VT(v))
833 {
834 case VT_DATE:
836 default:
837 FIXME("unsupported %s\n", debugstr_variant(v));
838 return E_NOTIMPL;
839 }
840 }
841 }
842
843 return *str ? S_OK : E_OUTOFMEMORY;
844}
HRESULT variant_date_to_string(script_ctx_t *ctx, double date, jsstr_t **r)
Definition: date.c:2479
jsstr_t * jsstr_undefined(void)
Definition: jsstr.c:296
static jsstr_t * jsstr_addref(jsstr_t *str)
Definition: jsstr.h:113
HRESULT double_to_string(double n, jsstr_t **str)
Definition: jsutils.c:767

Referenced by to_flat_string(), to_string(), and variant_change_type().

◆ to_uint32()

HRESULT to_uint32 ( script_ctx_t ctx,
jsval_t  val,
UINT32 ret 
)

Definition at line 754 of file jsutils.c.

755{
756 double n;
758
759 hres = to_number(ctx, val, &n);
760 if(FAILED(hres))
761 return hres;
762
764 return S_OK;
765}

Referenced by array_to_args(), get_length(), set_error_value(), stack_pop_uint(), String_split(), StringConstr_fromCharCode(), and variant_change_type().

◆ unlock_module()

static void unlock_module ( void  )
inlinestatic

Definition at line 604 of file jscript.h.

605{
607}
#define InterlockedDecrement
Definition: armddk.h:52

◆ variant_change_type()

HRESULT variant_change_type ( script_ctx_t ctx,
VARIANT dst,
VARIANT src,
VARTYPE  vt 
)

Definition at line 922 of file jsutils.c.

923{
924 jsexcept_t ei;
925 jsval_t val;
927
929 if(FAILED(hres))
930 return hres;
931
932 enter_script(ctx, &ei);
933
934 switch(vt) {
935 case VT_I2:
936 case VT_I4: {
937 INT i;
938
939 hres = to_int32(ctx, val, &i);
940 if(SUCCEEDED(hres)) {
941 if(vt == VT_I4)
942 V_I4(dst) = i;
943 else
944 V_I2(dst) = i;
945 }
946 break;
947 }
948 case VT_UI2: {
949 UINT32 i;
950
951 hres = to_uint32(ctx, val, &i);
952 if(SUCCEEDED(hres))
953 V_UI2(dst) = i;
954 break;
955 }
956 case VT_R8: {
957 double n;
958 hres = to_number(ctx, val, &n);
959 if(SUCCEEDED(hres))
960 V_R8(dst) = n;
961 break;
962 }
963 case VT_R4: {
964 double n;
965
966 hres = to_number(ctx, val, &n);
967 if(SUCCEEDED(hres))
968 V_R4(dst) = n;
969 break;
970 }
971 case VT_BOOL: {
972 BOOL b;
973
974 hres = to_boolean(val, &b);
975 if(SUCCEEDED(hres))
976 V_BOOL(dst) = b ? VARIANT_TRUE : VARIANT_FALSE;
977 break;
978 }
979 case VT_BSTR: {
980 jsstr_t *str;
981
982 hres = to_string(ctx, val, &str);
983 if(FAILED(hres))
984 break;
985
988 break;
989 }
990 case VT_EMPTY:
992 break;
993 case VT_NULL:
994 hres = V_VT(src) == VT_NULL ? S_OK : E_NOTIMPL;
995 break;
996 case VT_UNKNOWN:
997 case VT_DISPATCH:
998 if(V_VT(src) != vt)
999 hres = E_NOTIMPL;
1000 else {
1001 IUnknown_AddRef(V_UNKNOWN(src));
1003 hres = S_OK;
1004 }
1005 break;
1006 default:
1007 FIXME("vt %d not implemented\n", vt);
1008 hres = E_NOTIMPL;
1009 }
1010
1013 if(FAILED(hres))
1014 return hres;
1015
1016 V_VT(dst) = vt;
1017 return S_OK;
1018}
@ VT_R4
Definition: compat.h:2299
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_UI2
Definition: compat.h:2312
@ VT_I4
Definition: compat.h:2298
@ VT_BOOL
Definition: compat.h:2306
@ VT_I2
Definition: compat.h:2297
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
HRESULT leave_script(script_ctx_t *, HRESULT)
Definition: jscript.c:348
void enter_script(script_ctx_t *, jsexcept_t *)
Definition: jscript.c:340
HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r)
Definition: jsstr.c:306
HRESULT to_boolean(jsval_t val, BOOL *ret)
Definition: jsutils.c:489
HRESULT to_uint32(script_ctx_t *ctx, jsval_t val, UINT32 *ret)
Definition: jsutils.c:754
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_UI2(A)
Definition: oleauto.h:268
#define V_I4(A)
Definition: oleauto.h:247
#define V_R4(A)
Definition: oleauto.h:260
#define V_I2(A)
Definition: oleauto.h:245
uint32_t UINT32
Definition: typedefs.h:59

Referenced by VariantChangeType_ChangeType().

◆ variant_date_to_number()

HRESULT variant_date_to_number ( double  date,
double ret 
)

Definition at line 2458 of file date.c.

2459{
2460 SYSTEMTIME st;
2461 UDATE udate;
2462 HRESULT hres;
2463
2464 hres = VarUdateFromDate(date, 0, &udate);
2465 if(FAILED(hres))
2466 return hres;
2467
2468 if(!TzSpecificLocalTimeToSystemTime(NULL, &udate.st, &st))
2469 return E_FAIL;
2470
2471 TRACE("%uy %um %u %ud %uh %um %u.%us\n", st.wYear, st.wMonth, st.wDayOfWeek, st.wDay, st.wHour, st.wMinute,
2472 st.wSecond, st.wMilliseconds);
2473
2474 *ret = make_date(make_day(st.wYear, st.wMonth - 1, st.wDay),
2475 make_time(st.wHour, st.wMinute, st.wSecond, st.wMilliseconds));
2476 return S_OK;
2477}
static DOUBLE make_date(DOUBLE day, DOUBLE time)
Definition: date.c:402
static DOUBLE make_day(DOUBLE year, DOUBLE month, DOUBLE day)
Definition: date.c:384
static DOUBLE make_time(DOUBLE hour, DOUBLE min, DOUBLE sec, DOUBLE ms)
Definition: date.c:378
BOOL WINAPI TzSpecificLocalTimeToSystemTime(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation, CONST SYSTEMTIME *lpLocalTime, LPSYSTEMTIME lpUniversalTime)
Definition: timezone.c:421
Definition: oleauto.h:720
SYSTEMTIME st
Definition: oleauto.h:721
WORD wMilliseconds
Definition: minwinbase.h:263
WORD wSecond
Definition: minwinbase.h:262
WORD wMinute
Definition: minwinbase.h:261
WORD wDayOfWeek
Definition: minwinbase.h:258
HRESULT WINAPI VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
Definition: variant.c:1427

Referenced by to_number(), and variant_date_to_string().

◆ variant_date_to_string()

HRESULT variant_date_to_string ( script_ctx_t ctx,
double  date,
jsstr_t **  r 
)

Definition at line 2479 of file date.c.

2480{
2481 DateInstance *date_obj;
2482 jsval_t val;
2483 double time;
2484 HRESULT hres;
2485
2487 if(FAILED(hres))
2488 return hres;
2489
2490 hres = create_date(ctx, NULL, time, &date_obj);
2491 if(FAILED(hres))
2492 return hres;
2493
2494 hres = dateobj_to_string(date_obj, &val);
2495 jsdisp_release(&date_obj->dispex);
2496 if(FAILED(hres))
2497 return hres;
2498
2500 *r = get_string(val);
2501 return hres;
2502}
static HRESULT dateobj_to_string(DateInstance *date, jsval_t *r)
Definition: date.c:513
__u16 time
Definition: mkdosfs.c:8
jsdisp_t dispex
Definition: date.c:36

Referenced by to_string().

Variable Documentation

◆ jscript_hinstance

HINSTANCE jscript_hinstance
extern

Definition at line 40 of file jscript_main.c.

Referenced by DllMain(), format_error_message(), and set_error_location().

◆ module_ref

LONG module_ref
extern

Definition at line 31 of file ieframe_main.c.

Referenced by DllCanUnloadNow(), lock_module(), and unlock_module().