Skip to content

Commit 88c5a2a

Browse files
committed
fix problems uncovered by rchk
1 parent 616da1f commit 88c5a2a

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

src/dmeasure.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ static R_INLINE SEXP add_args
1919
// 'log', covariates, parameter, states, observables, then time
2020

2121
// 'log' is a needed argument
22-
PROTECT(args = LCONS(AS_LOGICAL(log),VectorToPairList(args)));
22+
PROTECT(log = AS_LOGICAL(log));
23+
PROTECT(args = VectorToPairList(args));
24+
PROTECT(args = LCONS(log,args));
2325
SET_TAG(args,install("log"));
2426

2527
// Covariates
@@ -65,7 +67,7 @@ static R_INLINE SEXP add_args
6567
PROTECT(args);
6668
SET_TAG(args,install("t"));
6769

68-
UNPROTECT(1);
70+
UNPROTECT(3);
6971
return args;
7072

7173
}

src/dprior.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ static R_INLINE SEXP add_args (SEXP names, SEXP log, SEXP args)
1313
SEXP var;
1414
int v;
1515

16-
PROTECT(args = LCONS(AS_LOGICAL(log),VectorToPairList(args)));
16+
PROTECT(log = AS_LOGICAL(log));
17+
PROTECT(args = VectorToPairList(args));
18+
PROTECT(args = LCONS(log,args));
1719
SET_TAG(args,install("log"));
1820

1921
for (v = LENGTH(names)-1; v >= 0; v--) {
@@ -24,7 +26,7 @@ static R_INLINE SEXP add_args (SEXP names, SEXP log, SEXP args)
2426
SET_TAG(args,installChar(STRING_ELT(names,v)));
2527
}
2628

27-
UNPROTECT(1);
29+
UNPROTECT(3);
2830
return args;
2931

3032
}

src/dprocess.c

+11-4
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@
88
#include "internal.h"
99

1010
static R_INLINE SEXP paste0 (SEXP a, SEXP b) {
11-
return eval(lang3(install("paste0"),a,b),R_BaseEnv);
11+
SEXP p, v;
12+
PROTECT(p = lang3(install("paste0"),a,b));
13+
PROTECT(v = eval(p,R_BaseEnv));
14+
UNPROTECT(2);
15+
return v;
1216
}
1317

1418
static R_INLINE SEXP add_args (SEXP args, SEXP Snames, SEXP Pnames, SEXP Cnames)
1519
{
1620

1721
SEXP S1names, S2names;
22+
SEXP s1, s2;
1823
SEXP var;
1924
int v;
2025

21-
PROTECT(S1names = paste0(Snames,mkString("_1")));
22-
PROTECT(S2names = paste0(Snames,mkString("_2")));
26+
PROTECT(s1 = mkString("_1"));
27+
PROTECT(s2 = mkString("_2"));
28+
PROTECT(S1names = paste0(Snames,s1));
29+
PROTECT(S2names = paste0(Snames,s2));
2330

2431
PROTECT(args = VectorToPairList(args));
2532

@@ -71,7 +78,7 @@ static R_INLINE SEXP add_args (SEXP args, SEXP Snames, SEXP Pnames, SEXP Cnames)
7178
PROTECT(args);
7279
SET_TAG(args,install("t_1"));
7380

74-
UNPROTECT(3);
81+
UNPROTECT(5);
7582
return args;
7683

7784
}

src/rinit.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
#include "internal.h"
99

1010
static R_INLINE SEXP paste0 (SEXP a, SEXP b, SEXP c) {
11-
return eval(lang4(install("paste0"),a,b,c),R_BaseEnv);
11+
SEXP p, v;
12+
PROTECT(p = lang4(install("paste0"),a,b,c));
13+
PROTECT(v = eval(p,R_BaseEnv));
14+
UNPROTECT(2);
15+
return v;
1216
}
1317

1418
static SEXP pomp_default_rinit(SEXP params, SEXP Pnames,
@@ -223,12 +227,13 @@ SEXP do_rinit (SEXP object, SEXP params, SEXP t0, SEXP nsim, SEXP gnsi)
223227

224228
if (nsims > 1) {
225229
int k, *sp;
226-
230+
SEXP us;
231+
PROTECT(us = mkString("_"));
227232
PROTECT(xn = NEW_INTEGER(ns));
228233
for (k = 0, sp = INTEGER(xn); k < ns; k++, sp++) *sp = (k/nrep)+1;
229-
PROTECT(xn = paste0(pcnames,mkString("_"),xn));
234+
PROTECT(xn = paste0(pcnames,us,xn));
230235
PROTECT(dn = GET_DIMNAMES(x));
231-
nprotect += 3;
236+
nprotect += 4;
232237
SET_ELEMENT(dn,1,xn);
233238
SET_DIMNAMES(x,dn);
234239

0 commit comments

Comments
 (0)