Skip to content

Commit 4396334

Browse files
committed
Time::HiRes.xs rmv SvIV()/SvNV() calls from croak("unimplemented") stubs
Macros SvIV()/SvNV()/SvUV() contain getter function calls. Don't execute the getters, if we will croak() no matter what. The end user doesn't need to see an "Uninitialized variable in" STDERR warning right before croak("unimplemented"); executes. Same goes for SvGETMAGIC() methods firing right before croak("unimplemented"); I picked "int die_t" vs "int_die_t" so IDE syntax highlight keeps working on token "int".
1 parent fa6e252 commit 4396334

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

dist/Time-HiRes/HiRes.xs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@
9191

9292
/* special type used by croak("unimplemented") XSUBs to neutralize */
9393
typedef NV NV_DIE; /* unused dXSTARG/sv_newmortal() calls */
94+
typedef I32 I32_DIE;
95+
96+
#define die_t
9497

9598
#ifndef TIME_HIRES_CLOCKID_T
9699
typedef int clockid_t;
@@ -1034,7 +1037,7 @@ nanosleep(nsec)
10341037

10351038
NV_DIE
10361039
nanosleep(nsec)
1037-
NV nsec
1040+
NV_DIE nsec
10381041
CODE:
10391042
PERL_UNUSED_ARG(nsec);
10401043
croak("%s(): unimplemented in this platform", "Time::HiRes::nanosleep");
@@ -1090,7 +1093,7 @@ sleep(...)
10901093

10911094
NV_DIE
10921095
usleep(useconds)
1093-
NV useconds
1096+
NV_DIE useconds
10941097
CODE:
10951098
PERL_UNUSED_ARG(useconds);
10961099
croak("%s(): unimplemented in this platform", "Time::HiRes::usleep");
@@ -1184,10 +1187,10 @@ alarm(seconds,interval=0)
11841187

11851188
#else /* #ifdef HAS_UALARM */
11861189

1187-
int
1190+
int die_t
11881191
ualarm(useconds,interval=0)
1189-
int useconds
1190-
int interval
1192+
int die_t useconds
1193+
int die_t interval
11911194
CODE:
11921195
PERL_UNUSED_ARG(useconds);
11931196
PERL_UNUSED_ARG(interval);
@@ -1198,8 +1201,8 @@ ualarm(useconds,interval=0)
11981201

11991202
NV_DIE
12001203
alarm(seconds,interval=0)
1201-
NV seconds
1202-
NV interval
1204+
NV_DIE seconds
1205+
NV_DIE interval
12031206
CODE:
12041207
PERL_UNUSED_ARG(seconds);
12051208
PERL_UNUSED_ARG(interval);
@@ -1392,7 +1395,7 @@ PROTOTYPE: $$@
13921395

13931396
#else /* #if defined(TIME_HIRES_UTIME) */
13941397

1395-
I32
1398+
I32_DIE
13961399
utime(accessed, modified, ...)
13971400
CODE:
13981401
croak("%s(): unimplemented in this platform", "Time::HiRes::utime");
@@ -1425,7 +1428,7 @@ clock_gettime(clock_id = CLOCK_REALTIME)
14251428

14261429
NV_DIE
14271430
clock_gettime(clock_id = 0)
1428-
clockid_t clock_id
1431+
clockid_t die_t clock_id
14291432
CODE:
14301433
PERL_UNUSED_ARG(clock_id);
14311434
croak("%s(): unimplemented in this platform", "Time::HiRes::clock_gettime");
@@ -1458,7 +1461,7 @@ clock_getres(clock_id = CLOCK_REALTIME)
14581461

14591462
NV_DIE
14601463
clock_getres(clock_id = 0)
1461-
clockid_t clock_id
1464+
clockid_t die_t clock_id
14621465
CODE:
14631466
PERL_UNUSED_ARG(clock_id);
14641467
croak("%s(): unimplemented in this platform", "Time::HiRes::clock_getres");
@@ -1494,9 +1497,9 @@ clock_nanosleep(clock_id, nsec, flags = 0)
14941497

14951498
NV_DIE
14961499
clock_nanosleep(clock_id, nsec, flags = 0)
1497-
clockid_t clock_id
1498-
NV nsec
1499-
int flags
1500+
clockid_t die_t clock_id
1501+
NV_DIE nsec
1502+
int die_t flags
15001503
CODE:
15011504
PERL_UNUSED_ARG(clock_id);
15021505
PERL_UNUSED_ARG(nsec);

dist/Time-HiRes/typemap

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# basic C types
22
int T_IV
3+
int die_t T_IV_DIE
34
unsigned T_UV
45
unsigned int T_UV
56
long T_IV
@@ -29,12 +30,14 @@ HV * T_HVREF
2930
CV * T_CVREF
3031

3132
clockid_t T_IV
33+
clockid_t die_t T_IV_DIE
3234

3335
IV T_IV
3436
UV T_UV
3537
NV T_NV
3638
NV_DIE T_NV_DIE
3739
I32 T_IV
40+
I32_DIE T_IV_DIE
3841
I16 T_IV
3942
I8 T_IV
4043
STRLEN T_UV
@@ -85,6 +88,8 @@ T_UV
8588
$var = ($type)SvUV($arg)
8689
T_IV
8790
$var = ($type)SvIV($arg)
91+
T_IV_DIE
92+
$var = ($type)0
8893
T_INT
8994
$var = (int)SvIV($arg)
9095
T_ENUM
@@ -109,6 +114,8 @@ T_FLOAT
109114
$var = (float)SvNV($arg)
110115
T_NV
111116
$var = ($type)SvNV($arg)
117+
T_NV_DIE
118+
$var = ($type)0
112119
T_DOUBLE
113120
$var = (double)SvNV($arg)
114121
T_PV
@@ -206,6 +213,8 @@ T_CVREF
206213
$arg = newRV((SV*)$var);
207214
T_IV
208215
sv_setiv($arg, (IV)$var);
216+
T_IV_DIE
217+
croak_xs_usage(cv, "T_IV_DIE");
209218
T_UV
210219
sv_setuv($arg, (UV)$var);
211220
T_INT

0 commit comments

Comments
 (0)