Skip to content

Commit bac7097

Browse files
committed
threads::shared: make the magic vtbls static
This is a minor improvement to binary size. Fixes #15004
1 parent ec70236 commit bac7097

File tree

1 file changed

+85
-45
lines changed

1 file changed

+85
-45
lines changed

dist/threads-shared/shared.xs

Lines changed: 85 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -378,15 +378,94 @@ static const MGVTBL sharedsv_userlock_vtbl = {
378378
the shared thing.
379379
*/
380380

381-
extern const MGVTBL sharedsv_scalar_vtbl; /* Scalars have this vtable */
382-
extern const MGVTBL sharedsv_array_vtbl; /* Hashes and arrays have this
383-
- like 'tie' */
384-
extern const MGVTBL sharedsv_elem_vtbl; /* Elements of hashes and arrays have
385-
this _AS WELL AS_ the scalar magic:
381+
static int
382+
sharedsv_scalar_mg_get(pTHX_ SV *sv, MAGIC *mg);
383+
static int
384+
sharedsv_scalar_mg_set(pTHX_ SV *sv, MAGIC *mg);
385+
static int
386+
sharedsv_scalar_mg_free(pTHX_ SV *sv, MAGIC *mg);
387+
static int
388+
sharedsv_scalar_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param);
389+
#ifdef MGf_LOCAL
390+
static int
391+
sharedsv_scalar_mg_local(pTHX_ SV* nsv, MAGIC *mg);
392+
#endif
393+
394+
static U32
395+
sharedsv_array_mg_FETCHSIZE(pTHX_ SV *sv, MAGIC *mg);
396+
static int
397+
sharedsv_array_mg_CLEAR(pTHX_ SV *sv, MAGIC *mg);
398+
static int
399+
sharedsv_array_mg_free(pTHX_ SV *sv, MAGIC *mg);
400+
#if PERL_VERSION_GE(5,11,0)
401+
static int
402+
sharedsv_array_mg_copy(pTHX_ SV *sv, MAGIC* mg,
403+
SV *nsv, const char *name, I32 namlen);
404+
#else
405+
static int
406+
sharedsv_array_mg_copy(pTHX_ SV *sv, MAGIC* mg,
407+
SV *nsv, const char *name, int namlen);
408+
#endif
409+
static int
410+
sharedsv_array_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param);
411+
412+
static int
413+
sharedsv_elem_mg_FETCH(pTHX_ SV *sv, MAGIC *mg);
414+
static int
415+
sharedsv_elem_mg_STORE(pTHX_ SV *sv, MAGIC *mg);
416+
static int
417+
sharedsv_elem_mg_DELETE(pTHX_ SV *sv, MAGIC *mg);
418+
static int
419+
sharedsv_elem_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param);
420+
421+
/* Scalars have this vtable */
422+
static const MGVTBL
423+
sharedsv_scalar_vtbl = {
424+
sharedsv_scalar_mg_get, /* get */
425+
sharedsv_scalar_mg_set, /* set */
426+
0, /* len */
427+
0, /* clear */
428+
sharedsv_scalar_mg_free, /* free */
429+
0, /* copy */
430+
sharedsv_scalar_mg_dup, /* dup */
431+
#ifdef MGf_LOCAL
432+
sharedsv_scalar_mg_local, /* local */
433+
#endif
434+
};
435+
436+
/* Hashes and arrays have this - like 'tie' */
437+
static const MGVTBL
438+
sharedsv_array_vtbl = {
439+
0, /* get */
440+
0, /* set */
441+
sharedsv_array_mg_FETCHSIZE,/* len */
442+
sharedsv_array_mg_CLEAR, /* clear */
443+
sharedsv_array_mg_free, /* free */
444+
sharedsv_array_mg_copy, /* copy */
445+
sharedsv_array_mg_dup, /* dup */
446+
#ifdef MGf_LOCAL
447+
0, /* local */
448+
#endif
449+
};
450+
451+
/* Elements of hashes and arrays have
452+
this _AS WELL AS_ the scalar magic:
386453
The sharedsv_elem_vtbl associates the element with the array/hash and
387454
the sharedsv_scalar_vtbl associates it with the value
388455
*/
389-
456+
static const MGVTBL
457+
sharedsv_elem_vtbl = {
458+
sharedsv_elem_mg_FETCH, /* get */
459+
sharedsv_elem_mg_STORE, /* set */
460+
0, /* len */
461+
sharedsv_elem_mg_DELETE, /* clear */
462+
0, /* free */
463+
0, /* copy */
464+
sharedsv_elem_mg_dup, /* dup */
465+
#ifdef MGf_LOCAL
466+
0, /* local */
467+
#endif
468+
};
390469

391470
/* Get shared aggregate SV pointed to by threads::shared::tie magic object */
392471

@@ -932,19 +1011,6 @@ sharedsv_scalar_mg_local(pTHX_ SV* nsv, MAGIC *mg)
9321011
}
9331012
#endif
9341013

935-
const MGVTBL sharedsv_scalar_vtbl = {
936-
sharedsv_scalar_mg_get, /* get */
937-
sharedsv_scalar_mg_set, /* set */
938-
0, /* len */
939-
0, /* clear */
940-
sharedsv_scalar_mg_free, /* free */
941-
0, /* copy */
942-
sharedsv_scalar_mg_dup, /* dup */
943-
#ifdef MGf_LOCAL
944-
sharedsv_scalar_mg_local, /* local */
945-
#endif
946-
};
947-
9481014
/* ------------ PERL_MAGIC_tiedelem(p) functions -------------- */
9491015

9501016
/* Get magic for PERL_MAGIC_tiedelem(p) */
@@ -1093,19 +1159,6 @@ sharedsv_elem_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param)
10931159
return (0);
10941160
}
10951161

1096-
const MGVTBL sharedsv_elem_vtbl = {
1097-
sharedsv_elem_mg_FETCH, /* get */
1098-
sharedsv_elem_mg_STORE, /* set */
1099-
0, /* len */
1100-
sharedsv_elem_mg_DELETE, /* clear */
1101-
0, /* free */
1102-
0, /* copy */
1103-
sharedsv_elem_mg_dup, /* dup */
1104-
#ifdef MGf_LOCAL
1105-
0, /* local */
1106-
#endif
1107-
};
1108-
11091162
/* ------------ PERL_MAGIC_tied(P) functions -------------- */
11101163

11111164
/* Len magic for PERL_MAGIC_tied(P) */
@@ -1207,19 +1260,6 @@ sharedsv_array_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param)
12071260
return (0);
12081261
}
12091262

1210-
const MGVTBL sharedsv_array_vtbl = {
1211-
0, /* get */
1212-
0, /* set */
1213-
sharedsv_array_mg_FETCHSIZE,/* len */
1214-
sharedsv_array_mg_CLEAR, /* clear */
1215-
sharedsv_array_mg_free, /* free */
1216-
sharedsv_array_mg_copy, /* copy */
1217-
sharedsv_array_mg_dup, /* dup */
1218-
#ifdef MGf_LOCAL
1219-
0, /* local */
1220-
#endif
1221-
};
1222-
12231263

12241264
/* Recursive locks on a sharedsv.
12251265
* Locks are dynamically scoped at the level of the first lock.

0 commit comments

Comments
 (0)