ReactOS 0.4.17-dev-281-g9de2895
set.c File Reference
#include <assert.h>
#include <math.h>
#include "jscript.h"
#include "wine/rbtree.h"
#include "wine/debug.h"
Include dependency graph for set.c:

Go to the source code of this file.

Classes

struct  MapInstance
 
struct  jsval_map_entry
 
struct  WeakMapInstance
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static int jsval_map_compare (const void *k, const struct wine_rb_entry *e)
 
static HRESULT get_map_this (script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
 
static HRESULT get_set_this (script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
 
static struct jsval_map_entryget_map_entry (MapInstance *map, jsval_t key)
 
static void grab_map_entry (struct jsval_map_entry *entry)
 
static void release_map_entry (struct jsval_map_entry *entry)
 
static void delete_map_entry (MapInstance *map, struct jsval_map_entry *entry)
 
static HRESULT set_map_entry (MapInstance *map, jsval_t key, jsval_t value, jsval_t *r)
 
static HRESULT iterate_map (MapInstance *map, script_ctx_t *ctx, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_clear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_delete (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_forEach (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_get (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_set (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_has (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Map_get_size (script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r)
 
static HRESULT Map_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static void Map_destructor (jsdisp_t *dispex)
 
static HRESULT Map_gc_traverse (struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex)
 
static HRESULT Map_constructor (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_add (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_clear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_delete (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_forEach (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_has (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Set_constructor (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static int weakmap_compare (const void *k, const struct rb_entry *e)
 
static HRESULT get_weakmap_this (script_ctx_t *ctx, jsval_t vthis, WeakMapInstance **ret)
 
static struct weakmap_entryget_weakmap_entry (WeakMapInstance *weakmap, jsdisp_t *key)
 
void remove_weakmap_entry (struct weakmap_entry *entry)
 
static HRESULT WeakMap_clear (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT WeakMap_delete (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT WeakMap_get (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT WeakMap_set (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT WeakMap_has (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT WeakMap_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static void WeakMap_destructor (jsdisp_t *dispex)
 
static HRESULT WeakMap_gc_traverse (struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex)
 
static HRESULT WeakMap_constructor (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
HRESULT init_set_constructor (script_ctx_t *ctx)
 

Variables

static const builtin_prop_t Map_prototype_props []
 
static const builtin_prop_t Map_props []
 
static const builtin_info_t Map_prototype_info
 
static const builtin_info_t Map_info
 
static const builtin_prop_t Set_prototype_props []
 
static const builtin_info_t Set_prototype_info
 
static const builtin_info_t Set_info
 
static const builtin_prop_t WeakMap_prototype_props []
 
static const builtin_info_t WeakMap_prototype_info
 
static const builtin_info_t WeakMap_info
 

Function Documentation

◆ delete_map_entry()

static void delete_map_entry ( MapInstance map,
struct jsval_map_entry entry 
)
static

Definition at line 145 of file set.c.

146{
147 map->size--;
148 wine_rb_remove(&map->map, &entry->entry);
149 entry->deleted = TRUE;
151}
Definition: _map.h:48
map()
Definition: _map.h:99
size_type size() const
Definition: _map.h:172
#define TRUE
Definition: types.h:120
static void release_map_entry(struct jsval_map_entry *entry)
Definition: set.c:136
uint32_t entry
Definition: isohybrid.c:63
#define wine_rb_remove
Definition: rbtree.h:411

Referenced by Map_clear(), Map_delete(), Set_clear(), and Set_delete().

◆ get_map_entry()

static struct jsval_map_entry * get_map_entry ( MapInstance map,
jsval_t  key 
)
static

Definition at line 124 of file set.c.

125{
126 struct wine_rb_entry *entry;
127 if(!(entry = wine_rb_get(&map->map, &key))) return NULL;
129}
#define NULL
Definition: types.h:112
#define wine_rb_entry
Definition: rbtree.h:404
#define wine_rb_get
Definition: rbtree.h:409
Definition: set.c:41
Definition: copy.c:22
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by Map_delete(), Map_get(), Map_has(), Set_delete(), Set_has(), and set_map_entry().

◆ get_map_this()

static HRESULT get_map_this ( script_ctx_t ctx,
jsval_t  vthis,
MapInstance **  ret 
)
static

Definition at line 94 of file set.c.

95{
96 jsdisp_t *jsdisp;
97
98 if(!is_object_instance(vthis))
100 if(!(jsdisp = to_jsdisp(get_object(vthis))) || !is_class(jsdisp, JSCLASS_MAP)) {
101 WARN("not a Map object passed as 'this'\n");
102 return throw_error(ctx, JS_E_WRONG_THIS, L"Map");
103 }
104
105 *ret = CONTAINING_RECORD(jsdisp, MapInstance, dispex);
106 return S_OK;
107}
#define WARN(fmt,...)
Definition: precomp.h:61
HRESULT throw_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:398
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
#define S_OK
Definition: intsafe.h:52
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
#define JS_E_OBJECT_EXPECTED
Definition: jscript.h:555
@ JSCLASS_MAP
Definition: jscript.h:121
#define JS_E_WRONG_THIS
Definition: jscript.h:582
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:503
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175

Referenced by Map_clear(), Map_delete(), Map_forEach(), Map_get(), Map_has(), and Map_set().

◆ get_set_this()

static HRESULT get_set_this ( script_ctx_t ctx,
jsval_t  vthis,
MapInstance **  ret 
)
static

Definition at line 109 of file set.c.

110{
111 jsdisp_t *jsdisp;
112
113 if(!is_object_instance(vthis))
115 if(!(jsdisp = to_jsdisp(get_object(vthis))) || !is_class(jsdisp, JSCLASS_SET)) {
116 WARN("not a Set object passed as 'this'\n");
117 return throw_error(ctx, JS_E_WRONG_THIS, L"Set");
118 }
119
120 *ret = CONTAINING_RECORD(jsdisp, MapInstance, dispex);
121 return S_OK;
122}
@ JSCLASS_SET
Definition: jscript.h:122

Referenced by Set_add(), Set_clear(), Set_delete(), Set_forEach(), and Set_has().

◆ get_weakmap_entry()

static struct weakmap_entry * get_weakmap_entry ( WeakMapInstance weakmap,
jsdisp_t key 
)
static

Definition at line 635 of file set.c.

636{
637 struct rb_entry *entry;
638 if(!(entry = rb_get(&weakmap->map, key))) return NULL;
640}
static struct rb_entry * rb_get(const struct rb_tree *tree, const void *key)
Definition: rbtree.h:192
struct rb_tree map
Definition: set.c:610
Definition: rbtree.h:30
Definition: jscript.h:446

Referenced by WeakMap_delete(), WeakMap_get(), WeakMap_has(), and WeakMap_set().

◆ get_weakmap_this()

static HRESULT get_weakmap_this ( script_ctx_t ctx,
jsval_t  vthis,
WeakMapInstance **  ret 
)
static

Definition at line 619 of file set.c.

620{
621 jsdisp_t *jsdisp;
622
623 if(!is_object_instance(vthis))
625 if(!(jsdisp = to_jsdisp(get_object(vthis))) || !is_class(jsdisp, JSCLASS_WEAKMAP)) {
626 WARN("not a WeakMap object passed as 'this'\n");
627 throw_error(ctx, JS_E_WRONG_THIS, L"WeakMap");
628 return DISP_E_EXCEPTION;
629 }
630
631 *ret = CONTAINING_RECORD(jsdisp, WeakMapInstance, dispex);
632 return S_OK;
633}
@ JSCLASS_WEAKMAP
Definition: jscript.h:123
#define DISP_E_EXCEPTION
Definition: winerror.h:3621

Referenced by WeakMap_clear(), WeakMap_delete(), WeakMap_get(), WeakMap_has(), and WeakMap_set().

◆ grab_map_entry()

static void grab_map_entry ( struct jsval_map_entry entry)
static

Definition at line 131 of file set.c.

132{
133 entry->ref++;
134}

Referenced by iterate_map(), and set_map_entry().

◆ 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}
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
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 FAILED(hr)
Definition: intsafe.h:51
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
Definition: dispex.c:3349
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:2493
#define SCRIPTLANGUAGEVERSION_ES6
Definition: jscript.h:54
const unsigned int PROPF_WRITABLE
Definition: jsdisp.idl:37
const unsigned int PROPF_CONFIGURABLE
Definition: jsdisp.idl:38
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
HRESULT hres
Definition: protocol.c:465

Referenced by init_global().

◆ iterate_map()

static HRESULT iterate_map ( MapInstance map,
script_ctx_t ctx,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 189 of file set.c.

190{
191 struct list *iter = list_head(&map->entries);
192 jsval_t context_this = jsval_undefined();
194
195 if(!argc || !is_object_instance(argv[0])) {
196 FIXME("invalid callback %s\n", debugstr_jsval(argc ? argv[0] : jsval_undefined()));
197 return E_FAIL;
198 }
199
200 if(argc > 1)
201 context_this = argv[1];
202
203 while(iter) {
205 jsval_t args[3], v;
206
207 if(entry->deleted) {
208 iter = list_next(&map->entries, iter);
209 continue;
210 }
211
212 args[0] = entry->value;
213 args[1] = entry->key;
214 args[2] = jsval_obj(&map->dispex);
217 iter = list_next(&map->entries, iter);
219 if(FAILED(hres))
220 return hres;
222 }
223
224 if(r) *r = jsval_undefined();
225 return S_OK;
226}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
Definition: list.h:37
#define E_FAIL
Definition: ddrawi.h:102
static void grab_map_entry(struct jsval_map_entry *entry)
Definition: set.c:131
MonoAssembly int argc
Definition: metahost.c:107
const GLdouble * v
Definition: gl.h:2040
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static HRESULT disp_call_value(script_ctx_t *ctx, IDispatch *disp, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: jscript.h:518
const char * debugstr_jsval(const jsval_t)
Definition: jsutils.c:35
void jsval_release(jsval_t val)
Definition: jsutils.c:186
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
#define argv
Definition: mplay32.c:18
#define DISPATCH_METHOD
Definition: oleauto.h:1006
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
Definition: list.h:115
Definition: jsval.h:54
Definition: match.c:390
Definition: list.h:27
Definition: list.h:15
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by Map_forEach(), and Set_forEach().

◆ jsval_map_compare()

static int jsval_map_compare ( const void k,
const struct wine_rb_entry e 
)
static

Definition at line 56 of file set.c.

57{
58 const struct jsval_map_entry *entry = WINE_RB_ENTRY_VALUE(e, const struct jsval_map_entry, entry);
59 const jsval_t *key = k;
60 union {
61 double d;
62 INT64 n;
63 } bits1, bits2;
64
65 if(jsval_type(entry->key) != jsval_type(*key))
66 return (int)jsval_type(entry->key) - (int)jsval_type(*key);
67
68 switch(jsval_type(*key)) {
69 case JSV_UNDEFINED:
70 case JSV_NULL:
71 return 0;
72 case JSV_OBJECT:
73 if(get_object(*key) == get_object(entry->key)) return 0;
74 return get_object(*key) < get_object(entry->key) ? -1 : 1;
75 case JSV_STRING:
76 return jsstr_cmp(get_string(*key), get_string(entry->key));
77 case JSV_NUMBER:
78 if(isnan(get_number(*key))) return isnan(get_number(entry->key)) ? 0 : -1;
79 if(isnan(get_number(entry->key))) return 1;
80
81 /* native treats -0 differently than 0, so need to compare bitwise */
82 bits1.d = get_number(*key);
83 bits2.d = get_number(entry->key);
84 return (bits1.n == bits2.n) ? 0 : (bits1.n < bits2.n ? -1 : 1);
85 case JSV_BOOL:
86 if(get_bool(*key) == get_bool(entry->key)) return 0;
87 return get_bool(*key) ? 1 : -1;
88 default:
89 assert(0);
90 return 0;
91 }
92}
COMPILER_DEPENDENT_INT64 INT64
Definition: actypes.h:132
static BOOL get_bool(D3DXPARAMETER_TYPE type, const void *data)
#define assert(_expr)
Definition: assert.h:32
#define isnan(x)
Definition: math.h:360
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GLdouble n
Definition: glext.h:7729
int jsstr_cmp(jsstr_t *str1, jsstr_t *str2)
Definition: jsstr.c:192
@ JSV_STRING
Definition: jsval.h:48
@ JSV_NUMBER
Definition: jsval.h:49
@ 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 jsstr_t * get_string(jsval_t v)
Definition: jsval.h:238
static double get_number(jsval_t v)
Definition: jsval.h:233
#define d
Definition: ke_i.h:81
#define e
Definition: ke_i.h:82
int k
Definition: mpi.c:3369
#define WINE_RB_ENTRY_VALUE
Definition: rbtree.h:414

Referenced by Map_constructor(), and Set_constructor().

◆ Map_clear()

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

Definition at line 228 of file set.c.

230{
231 struct jsval_map_entry *entry, *entry2;
234
235 hres = get_map_this(ctx, vthis, &map);
236 if(FAILED(hres))
237 return hres;
238
239 TRACE("%p\n", map);
240
241 LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &map->entries, struct jsval_map_entry, list_entry)
243
244 if(r) *r = jsval_undefined();
245 return S_OK;
246}
static void delete_map_entry(MapInstance *map, struct jsval_map_entry *entry)
Definition: set.c:145
static HRESULT get_map_this(script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
Definition: set.c:94
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define TRACE(s)
Definition: solgame.cpp:4

◆ Map_constructor()

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

Definition at line 422 of file set.c.

424{
427
428 switch(flags) {
429 case DISPATCH_CONSTRUCT:
430 TRACE("\n");
431
432 if(!r)
433 return S_OK;
434 if(!(map = calloc(1, sizeof(*map))))
435 return E_OUTOFMEMORY;
436
437 hres = init_dispex(&map->dispex, ctx, &Map_info, ctx->map_prototype);
438 if(FAILED(hres))
439 return hres;
440
442 list_init(&map->entries);
443 *r = jsval_obj(&map->dispex);
444 return S_OK;
445
446 case DISPATCH_METHOD:
447 return throw_error(ctx, JS_E_WRONG_THIS, L"Map");
448
449 default:
450 FIXME("unimplemented flags %x\n", flags);
451 return E_NOTIMPL;
452 }
453}
static void list_init(struct list_entry *head)
Definition: list.h:51
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
static const builtin_info_t Map_info
Definition: set.c:413
static int jsval_map_compare(const void *k, const struct wine_rb_entry *e)
Definition: set.c:56
GLbitfield flags
Definition: glext.h:7161
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
#define wine_rb_init
Definition: rbtree.h:406

Referenced by init_set_constructor().

◆ Map_delete()

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

Definition at line 248 of file set.c.

250{
251 jsval_t key = argc >= 1 ? argv[0] : jsval_undefined();
252 struct jsval_map_entry *entry;
255
256 hres = get_map_this(ctx, vthis, &map);
257 if(FAILED(hres))
258 return hres;
259
260 TRACE("%p (%s)\n", map, debugstr_jsval(key));
261
263 if(r) *r = jsval_bool(!!entry);
264 return S_OK;
265}
static struct jsval_map_entry * get_map_entry(MapInstance *map, jsval_t key)
Definition: set.c:124
static jsval_t jsval_bool(BOOL b)
Definition: jsval.h:101

◆ Map_destructor()

static void Map_destructor ( jsdisp_t dispex)
static

Definition at line 357 of file set.c.

358{
359 MapInstance *map = (MapInstance*)dispex;
360
361 while(!list_empty(&map->entries)) {
362 struct jsval_map_entry *entry = LIST_ENTRY(list_head(&map->entries),
364 assert(!entry->deleted);
366 }
367}
static int list_empty(struct list_entry *head)
Definition: list.h:58

◆ Map_forEach()

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

Definition at line 267 of file set.c.

269{
272
273 hres = get_map_this(ctx, vthis, &map);
274 if(FAILED(hres))
275 return hres;
276
277 TRACE("%p (%s)\n", map, debugstr_jsval(argc >= 1 ? argv[0] : jsval_undefined()));
278
279 return iterate_map(map, ctx, argc, argv, r);
280}
static HRESULT iterate_map(MapInstance *map, script_ctx_t *ctx, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:189

◆ Map_gc_traverse()

static HRESULT Map_gc_traverse ( struct gc_ctx gc_ctx,
enum gc_traverse_op  op,
jsdisp_t dispex 
)
static

Definition at line 369 of file set.c.

370{
371 MapInstance *map = (MapInstance*)dispex;
372 struct jsval_map_entry *entry, *entry2;
374
375 if(op == GC_TRAVERSE_UNLINK) {
376 LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &map->entries, struct jsval_map_entry, list_entry)
379 return S_OK;
380 }
381
383 hres = gc_process_linked_val(gc_ctx, op, dispex, &entry->key);
384 if(FAILED(hres))
385 return hres;
386 hres = gc_process_linked_val(gc_ctx, op, dispex, &entry->value);
387 if(FAILED(hres))
388 return hres;
389 }
390 return S_OK;
391}
UINT op
Definition: effect.c:236
HRESULT gc_process_linked_val(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *obj, jsval_t *link)
Definition: dispex.c:1139
@ GC_TRAVERSE_UNLINK
Definition: jscript.h:162
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define wine_rb_destroy
Definition: rbtree.h:408
Definition: dispex.c:889

◆ Map_get()

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

Definition at line 282 of file set.c.

284{
285 jsval_t key = argc >= 1 ? argv[0] : jsval_undefined();
286 struct jsval_map_entry *entry;
289
290 hres = get_map_this(ctx, vthis, &map);
291 if(FAILED(hres))
292 return hres;
293
294 TRACE("%p (%s)\n", map, debugstr_jsval(key));
295
296 if(!(entry = get_map_entry(map, key))) {
297 if(r) *r = jsval_undefined();
298 return S_OK;
299 }
300
301 return r ? jsval_copy(entry->value, r) : S_OK;
302}
HRESULT jsval_copy(jsval_t v, jsval_t *r)
Definition: jsutils.c:225

◆ Map_get_size()

static HRESULT Map_get_size ( script_ctx_t ctx,
jsdisp_t jsthis,
jsval_t r 
)
static

Definition at line 340 of file set.c.

341{
342 MapInstance *map = (MapInstance*)jsthis;
343
344 TRACE("%p\n", map);
345
346 *r = jsval_number(map->size);
347 return S_OK;
348}
static jsval_t jsval_number(double n)
Definition: jsval.h:153

◆ Map_has()

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

Definition at line 321 of file set.c.

323{
324 jsval_t key = argc >= 1 ? argv[0] : jsval_undefined();
325 struct jsval_map_entry *entry;
328
329 hres = get_map_this(ctx, vthis, &map);
330 if(FAILED(hres))
331 return hres;
332
333 TRACE("%p (%s)\n", map, debugstr_jsval(key));
334
336 if(r) *r = jsval_bool(!!entry);
337 return S_OK;
338}

◆ Map_set()

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

Definition at line 304 of file set.c.

306{
307 jsval_t key = argc >= 1 ? argv[0] : jsval_undefined();
308 jsval_t value = argc >= 2 ? argv[1] : jsval_undefined();
311
312 hres = get_map_this(ctx, vthis, &map);
313 if(FAILED(hres))
314 return hres;
315
316 TRACE("%p (%s %s)\n", map, debugstr_jsval(key), debugstr_jsval(value));
317
318 return set_map_entry(map, key, value, r);
319}
static HRESULT set_map_entry(MapInstance *map, jsval_t key, jsval_t value, jsval_t *r)
Definition: set.c:153
Definition: pdh_main.c:96

◆ Map_value()

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

Definition at line 350 of file set.c.

352{
353 FIXME("\n");
354 return E_NOTIMPL;
355}

◆ release_map_entry()

static void release_map_entry ( struct jsval_map_entry entry)
static

Definition at line 136 of file set.c.

137{
138 if(--entry->ref) return;
139 jsval_release(entry->key);
140 jsval_release(entry->value);
141 list_remove(&entry->list_entry);
142 free(entry);
143}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define free
Definition: debug_ros.c:5

Referenced by delete_map_entry(), iterate_map(), Map_destructor(), and Map_gc_traverse().

◆ 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}
#define FALSE
Definition: types.h:117
static unsigned __int64 next
Definition: rand_nt.c:6
static void rb_remove(struct rb_tree *tree, struct rb_entry *entry)
Definition: rbtree.h:272
Definition: jscript.h:378
struct rb_entry entry
Definition: jscript.h:379

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

◆ Set_add()

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

Definition at line 455 of file set.c.

457{
461
462 hres = get_set_this(ctx, vthis, &set);
463 if(FAILED(hres))
464 return hres;
465
466 TRACE("%p (%s)\n", set, debugstr_jsval(key));
467
468 return set_map_entry(set, key, key, r);
469}
Definition: _set.h:50
static HRESULT get_set_this(script_ctx_t *ctx, jsval_t vthis, MapInstance **ret)
Definition: set.c:109

◆ Set_clear()

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

Definition at line 471 of file set.c.

473{
474 struct jsval_map_entry *entry, *entry2;
477
478 hres = get_set_this(ctx, vthis, &set);
479 if(FAILED(hres))
480 return hres;
481
482 TRACE("%p\n", set);
483
484 LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &set->entries, struct jsval_map_entry, list_entry)
486
487 if(r) *r = jsval_undefined();
488 return S_OK;
489}

◆ Set_constructor()

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

Definition at line 575 of file set.c.

577{
580
581 switch(flags) {
582 case DISPATCH_CONSTRUCT:
583 TRACE("\n");
584
585 if(!r)
586 return S_OK;
587 if(!(set = calloc(1, sizeof(*set))))
588 return E_OUTOFMEMORY;
589
590 hres = init_dispex(&set->dispex, ctx, &Set_info, ctx->set_prototype);
591 if(FAILED(hres))
592 return hres;
593
595 list_init(&set->entries);
596 *r = jsval_obj(&set->dispex);
597 return S_OK;
598
599 case DISPATCH_METHOD:
600 return throw_error(ctx, JS_E_WRONG_THIS, L"Set");
601
602 default:
603 FIXME("unimplemented flags %x\n", flags);
604 return E_NOTIMPL;
605 }
606}
static const builtin_info_t Set_info
Definition: set.c:566

Referenced by init_set_constructor().

◆ Set_delete()

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

Definition at line 491 of file set.c.

493{
495 struct jsval_map_entry *entry;
498
499 hres = get_set_this(ctx, vthis, &set);
500 if(FAILED(hres))
501 return hres;
502
503 TRACE("%p (%s)\n", set, debugstr_jsval(key));
504
506 if(r) *r = jsval_bool(!!entry);
507 return S_OK;
508}

◆ Set_forEach()

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

Definition at line 510 of file set.c.

512{
515
516 hres = get_set_this(ctx, vthis, &set);
517 if(FAILED(hres))
518 return hres;
519
520 TRACE("%p (%s)\n", set, debugstr_jsval(argc ? argv[0] : jsval_undefined()));
521
522 return iterate_map(set, ctx, argc, argv, r);
523}

◆ Set_has()

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

Definition at line 525 of file set.c.

527{
529 struct jsval_map_entry *entry;
532
533 hres = get_set_this(ctx, vthis, &set);
534 if(FAILED(hres))
535 return hres;
536
537 TRACE("%p (%s)\n", set, debugstr_jsval(key));
538
540 if(r) *r = jsval_bool(!!entry);
541 return S_OK;
542}

◆ set_map_entry()

static HRESULT set_map_entry ( MapInstance map,
jsval_t  key,
jsval_t  value,
jsval_t r 
)
static

Definition at line 153 of file set.c.

154{
155 struct jsval_map_entry *entry;
157
158 if((entry = get_map_entry(map, key))) {
159 jsval_t val;
161 if(FAILED(hres))
162 return hres;
163
164 jsval_release(entry->value);
165 entry->value = val;
166 }else {
167 if(!(entry = calloc(1, sizeof(*entry)))) return E_OUTOFMEMORY;
168
169 hres = jsval_copy(key, &entry->key);
170 if(SUCCEEDED(hres)) {
171 hres = jsval_copy(value, &entry->value);
172 if(FAILED(hres))
173 jsval_release(entry->key);
174 }
175 if(FAILED(hres)) {
176 free(entry);
177 return hres;
178 }
180 wine_rb_put(&map->map, &entry->key, &entry->entry);
181 list_add_tail(&map->entries, &entry->list_entry);
182 map->size++;
183 }
184
185 if(r) *r = jsval_undefined();
186 return S_OK;
187}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
GLuint GLfloat * val
Definition: glext.h:7180
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define wine_rb_put
Definition: rbtree.h:410

Referenced by Map_set(), and Set_add().

◆ Set_value()

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

Definition at line 544 of file set.c.

546{
547 FIXME("\n");
548 return E_NOTIMPL;
549}

◆ WeakMap_clear()

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

Definition at line 660 of file set.c.

662{
663 WeakMapInstance *weakmap;
665
666 hres = get_weakmap_this(ctx, vthis, &weakmap);
667 if(FAILED(hres))
668 return hres;
669
670 TRACE("%p\n", weakmap);
671
672 while(weakmap->map.root)
674
675 if(r) *r = jsval_undefined();
676 return S_OK;
677}
void remove_weakmap_entry(struct weakmap_entry *entry)
Definition: set.c:642
static HRESULT get_weakmap_this(script_ctx_t *ctx, jsval_t vthis, WeakMapInstance **ret)
Definition: set.c:619
#define RB_ENTRY_VALUE(element, type, field)
Definition: rbtree.h:26

◆ weakmap_compare()

static int weakmap_compare ( const void k,
const struct rb_entry e 
)
static

Definition at line 613 of file set.c.

614{
615 ULONG_PTR a = (ULONG_PTR)k, b = (ULONG_PTR)RB_ENTRY_VALUE(e, const struct weakmap_entry, entry)->key;
616 return (a > b) - (a < b);
617}
#define ULONG_PTR
Definition: config.h:101
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define b
Definition: ke_i.h:79
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by WeakMap_constructor().

◆ WeakMap_constructor()

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

Definition at line 862 of file set.c.

864{
865 WeakMapInstance *weakmap;
867
868 switch(flags) {
869 case DISPATCH_CONSTRUCT:
870 TRACE("\n");
871
872 if(!r)
873 return S_OK;
874 if(!(weakmap = calloc(1, sizeof(*weakmap))))
875 return E_OUTOFMEMORY;
876
877 hres = init_dispex(&weakmap->dispex, ctx, &WeakMap_info, ctx->weakmap_prototype);
878 if(FAILED(hres))
879 return hres;
880
881 rb_init(&weakmap->map, weakmap_compare);
882 *r = jsval_obj(&weakmap->dispex);
883 return S_OK;
884
885 case DISPATCH_METHOD:
886 return throw_error(ctx, JS_E_WRONG_THIS, L"WeakMap");
887
888 default:
889 FIXME("unimplemented flags %x\n", flags);
890 return E_NOTIMPL;
891 }
892}
static const builtin_info_t WeakMap_info
Definition: set.c:855
static int weakmap_compare(const void *k, const struct rb_entry *e)
Definition: set.c:613
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
Definition: rbtree.h:173
jsdisp_t dispex
Definition: set.c:609

Referenced by init_set_constructor().

◆ WeakMap_delete()

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

Definition at line 679 of file set.c.

681{
683 struct weakmap_entry *entry;
686
687 hres = get_weakmap_this(ctx, vthis, &weakmap);
688 if(FAILED(hres))
689 return hres;
690
691 TRACE("%p (%p)\n", weakmap, key);
692
695 if(r) *r = jsval_bool(!!entry);
696 return S_OK;
697}
static struct weakmap_entry * get_weakmap_entry(WeakMapInstance *weakmap, jsdisp_t *key)
Definition: set.c:635
jsdisp_t * weakmap
Definition: jscript.h:450

◆ WeakMap_destructor()

static void WeakMap_destructor ( jsdisp_t dispex)
static

Definition at line 806 of file set.c.

807{
808 WeakMapInstance *weakmap = (WeakMapInstance*)dispex;
809
810 while(weakmap->map.root)
812}

◆ WeakMap_gc_traverse()

static HRESULT WeakMap_gc_traverse ( struct gc_ctx gc_ctx,
enum gc_traverse_op  op,
jsdisp_t dispex 
)
static

Definition at line 814 of file set.c.

815{
816 WeakMapInstance *weakmap = (WeakMapInstance*)dispex;
817 struct weakmap_entry *entry;
819
820 if(op == GC_TRAVERSE_UNLINK) {
821 while(weakmap->map.root)
823 return S_OK;
824 }
825
827 /* Only traverse the values if the key turned out to be alive, which means it might not have traversed
828 the associated values with it from this WeakMap yet (because it wasn't considered alive back then).
829 We need both the key and the WeakMap for the entry to actually be accessible (and thus traversed). */
830 if(op == GC_TRAVERSE && entry->key->gc_marked)
831 continue;
832
833 hres = gc_process_linked_val(gc_ctx, op, dispex, &entry->value);
834 if(FAILED(hres))
835 return hres;
836 }
837 return S_OK;
838}
@ GC_TRAVERSE
Definition: jscript.h:164
#define RB_FOR_EACH_ENTRY(elem, tree, type, field)
Definition: rbtree.h:148

◆ WeakMap_get()

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

Definition at line 699 of file set.c.

701{
703 struct weakmap_entry *entry;
706
707 hres = get_weakmap_this(ctx, vthis, &weakmap);
708 if(FAILED(hres))
709 return hres;
710
711 TRACE("%p (%p)\n", weakmap, key);
712
714 if(r) *r = jsval_undefined();
715 return S_OK;
716 }
717
718 return r ? jsval_copy(entry->value, r) : S_OK;
719}

◆ WeakMap_has()

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

Definition at line 782 of file set.c.

784{
786 WeakMapInstance *weakmap;
788
789 hres = get_weakmap_this(ctx, vthis, &weakmap);
790 if(FAILED(hres))
791 return hres;
792
793 TRACE("%p (%p)\n", weakmap, key);
794
795 if(r) *r = jsval_bool(!!get_weakmap_entry(weakmap, key));
796 return S_OK;
797}

◆ WeakMap_set()

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

Definition at line 721 of file set.c.

723{
725 jsval_t value = argc >= 2 ? argv[1] : jsval_undefined();
726 struct weakmap_entry *entry;
729
730 hres = get_weakmap_this(ctx, vthis, &weakmap);
731 if(FAILED(hres))
732 return hres;
733
734 TRACE("%p (%p %s)\n", weakmap, key, debugstr_jsval(value));
735
736 if(!key)
737 return JS_E_KEY_NOT_OBJECT;
738
740 jsval_t val;
742 if(FAILED(hres))
743 return hres;
744
745 jsval_release(entry->value);
746 entry->value = val;
747 }else {
749
750 if(!(entry = malloc(sizeof(*entry))))
751 return E_OUTOFMEMORY;
752
753 hres = jsval_copy(value, &entry->value);
754 if(FAILED(hres)) {
755 free(entry);
756 return hres;
757 }
758
759 if(key->has_weak_refs)
760 weak_refs_entry = RB_ENTRY_VALUE(rb_get(&ctx->thread_data->weak_refs, key), struct weak_refs_entry, entry);
761 else {
762 if(!(weak_refs_entry = malloc(sizeof(*weak_refs_entry)))) {
763 jsval_release(entry->value);
764 free(entry);
765 return E_OUTOFMEMORY;
766 }
767 rb_put(&ctx->thread_data->weak_refs, key, &weak_refs_entry->entry);
769 key->has_weak_refs = TRUE;
770 }
771 list_add_tail(&weak_refs_entry->list, &entry->weak_refs_entry);
772
773 entry->key = key;
774 entry->weakmap = &weakmap->dispex;
775 rb_put(&weakmap->map, key, &entry->entry);
776 }
777
778 if(r) *r = jsval_undefined();
779 return S_OK;
780}
#define malloc
Definition: debug_ros.c:4
#define JS_E_KEY_NOT_OBJECT
Definition: jscript.h:583
static int rb_put(struct rb_tree *tree, const void *key, struct rb_entry *entry)
Definition: rbtree.h:204
struct list list
Definition: jscript.h:380

◆ WeakMap_value()

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

Definition at line 799 of file set.c.

801{
802 FIXME("\n");
803 return E_NOTIMPL;
804}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ Map_info

const builtin_info_t Map_info
static
Initial value:
= {
.class = JSCLASS_MAP,
.call = Map_value,
.props_cnt = ARRAY_SIZE(Map_props),
.props = Map_props,
.destructor = Map_destructor,
.gc_traverse = Map_gc_traverse,
}
static HRESULT Map_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex)
Definition: set.c:369
static void Map_destructor(jsdisp_t *dispex)
Definition: set.c:357
static HRESULT Map_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:350
static const builtin_prop_t Map_props[]
Definition: set.c:402

Definition at line 413 of file set.c.

Referenced by Map_constructor().

◆ Map_props

const builtin_prop_t Map_props[]
static
Initial value:
= {
}
static HRESULT Map_get_size(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r)
Definition: set.c:340
HRESULT builtin_set_const(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t value)
Definition: dispex.c:741

Definition at line 402 of file set.c.

◆ Map_prototype_info

const builtin_info_t Map_prototype_info
static
Initial value:
= {
.class = JSCLASS_OBJECT,
.call = Map_value,
}
static const builtin_prop_t Map_prototype_props[]
Definition: set.c:393
@ JSCLASS_OBJECT
Definition: jscript.h:113

Definition at line 406 of file set.c.

Referenced by init_set_constructor().

◆ Map_prototype_props

const builtin_prop_t Map_prototype_props[]
static
Initial value:
= {
{L"clear", Map_clear, PROPF_METHOD},
{L"delete" , Map_delete, PROPF_METHOD|1},
{L"forEach", Map_forEach, PROPF_METHOD|1},
{L"get", Map_get, PROPF_METHOD|1},
{L"has", Map_has, PROPF_METHOD|1},
{L"set", Map_set, PROPF_METHOD|2},
}
static HRESULT Map_clear(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:228
static HRESULT Map_has(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:321
static HRESULT Map_get(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:282
static HRESULT Map_set(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:304
static HRESULT Map_forEach(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:267
static HRESULT Map_delete(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:248
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33

Definition at line 393 of file set.c.

◆ Set_info

const builtin_info_t Set_info
static
Initial value:
= {
.class = JSCLASS_SET,
.call = Set_value,
.props_cnt = ARRAY_SIZE(Map_props),
.props = Map_props,
.destructor = Map_destructor,
.gc_traverse = Map_gc_traverse,
}
static HRESULT Set_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:544

Definition at line 566 of file set.c.

Referenced by Set_constructor().

◆ Set_prototype_info

const builtin_info_t Set_prototype_info
static
Initial value:
= {
.class = JSCLASS_OBJECT,
.call = Set_value,
}
static const builtin_prop_t Set_prototype_props[]
Definition: set.c:551

Definition at line 559 of file set.c.

Referenced by init_set_constructor().

◆ Set_prototype_props

const builtin_prop_t Set_prototype_props[]
static
Initial value:
= {
{L"add", Set_add, PROPF_METHOD|1},
{L"clear", Set_clear, PROPF_METHOD},
{L"delete" , Set_delete, PROPF_METHOD|1},
{L"forEach", Set_forEach, PROPF_METHOD|1},
{L"has", Set_has, PROPF_METHOD|1},
}
static HRESULT Set_delete(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:491
static HRESULT Set_has(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:525
static HRESULT Set_add(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:455
static HRESULT Set_forEach(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:510
static HRESULT Set_clear(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:471

Definition at line 551 of file set.c.

◆ WeakMap_info

const builtin_info_t WeakMap_info
static
Initial value:
= {
.class = JSCLASS_WEAKMAP,
.call = WeakMap_value,
.destructor = WeakMap_destructor,
.gc_traverse = WeakMap_gc_traverse,
}
static HRESULT WeakMap_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:799
static void WeakMap_destructor(jsdisp_t *dispex)
Definition: set.c:806
static HRESULT WeakMap_gc_traverse(struct gc_ctx *gc_ctx, enum gc_traverse_op op, jsdisp_t *dispex)
Definition: set.c:814

Definition at line 855 of file set.c.

Referenced by WeakMap_constructor().

◆ WeakMap_prototype_info

const builtin_info_t WeakMap_prototype_info
static
Initial value:
= {
.class = JSCLASS_OBJECT,
.call = WeakMap_value,
}
static const builtin_prop_t WeakMap_prototype_props[]
Definition: set.c:840

Definition at line 848 of file set.c.

Referenced by init_set_constructor().

◆ WeakMap_prototype_props

const builtin_prop_t WeakMap_prototype_props[]
static
Initial value:
= {
{L"delete", WeakMap_delete, PROPF_METHOD|1},
}
static HRESULT WeakMap_set(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:721
static HRESULT WeakMap_get(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:699
static HRESULT WeakMap_delete(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:679
static HRESULT WeakMap_clear(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:660
static HRESULT WeakMap_has(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: set.c:782

Definition at line 840 of file set.c.