Skip to content

Commit 7e3284c

Browse files
committed
simplifications
1 parent ce12e73 commit 7e3284c

File tree

4 files changed

+24
-33
lines changed

4 files changed

+24
-33
lines changed

DESCRIPTION

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ LinkingTo:
3636
later
3737
Suggests:
3838
knitr,
39-
markdown
39+
markdown,
40+
promises
4041
VignetteBuilder: knitr
4142
RoxygenNote: 7.3.1

R/aio.R

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ recv_aio <- function(con,
120120
n = 65536L)
121121
data <- .Call(rnng_recv_aio, con, mode, timeout, n, environment(),
122122
function() {
123-
cb <- data$callback
124-
if (!is.null(cb)) {
123+
cb <- .subset2(data, "callback")
124+
if (is.function(cb)) {
125125
cb(data)
126126
}
127127
}
@@ -166,8 +166,8 @@ recv_aio_signal <- function(con,
166166
n = 65536L)
167167
data <- .Call(rnng_recv_aio_signal, con, cv, mode, timeout, n, environment(),
168168
function() {
169-
cb <- data$callback
170-
if (!is.null(cb)) {
169+
cb <- .subset2(data, "callback")
170+
if (is.function(cb)) {
171171
cb(data)
172172
}
173173
}
@@ -180,14 +180,15 @@ is.promising.recvAio <- function(x) {
180180

181181
#' @exportS3Method promises::as.promise
182182
as.promise.recvAio <- function(x) {
183-
prom <- x$promise
184183

185-
if (is.null(prom)) {
186-
prom <- promises::promise(function(resolve, reject) {
184+
promise <- .subset2(x, "promise")
185+
186+
if (is.null(promise)) {
187+
promise <- promises::promise(function(resolve, reject) {
187188
assign("callback", function(...) {
188189

189190
# WARNING: x$data is heavily side-effecty!
190-
value <- x$data
191+
value <- .subset2(x, "data")
191192

192193
if (is_error_value(value)) {
193194
reject(simpleError(nng_error(value)))
@@ -202,19 +203,20 @@ as.promise.recvAio <- function(x) {
202203

203204
if (!inherits(value, "unresolvedValue")) {
204205
if (is_error_value(value)) {
205-
prom <- promises::promise_reject(simpleError(nng_error(value)))
206+
promise <- promises::promise_reject(simpleError(nng_error(value)))
206207
} else {
207-
prom <- promises::promise_resolve(value)
208+
promise <- promises::promise_resolve(value)
208209
}
209210
}
210211

211212
# Save for next time. This is not just an optimization but essential for
212213
# correct behavior if as.promise is called multiple times, because only one
213214
# `callback` can exist on the recvAio object at a time.
214-
assign("promise", prom, x)
215+
assign("promise", promise, x)
215216
}
216217

217-
prom
218+
promise
219+
218220
}
219221

220222
# Core aio functions -----------------------------------------------------------

src/aio.c

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -196,19 +196,12 @@ static void isaio_complete(void *arg) {
196196

197197
}
198198

199-
200-
static void raio_invoke_cb(void* arg) {
199+
static void raio_invoke_cb(void *arg) {
201200
nano_aio *raio = (nano_aio *) arg;
202-
if (raio->cb == NULL || Rf_isNull(raio->cb)) return;
203-
SEXP func = (SEXP)raio->cb;
204-
SEXP callExpr, result;
205-
if (!Rf_isNull(func)) {
206-
PROTECT(callExpr = Rf_lcons(func, R_NilValue)); // Prepare call
207-
PROTECT(result = Rf_eval(callExpr, R_GlobalEnv)); // Execute call
208-
209-
UNPROTECT(2);
210-
R_ReleaseObject(func);
211-
}
201+
SEXP callExpr;
202+
PROTECT(callExpr = Rf_lcons((SEXP) raio->cb, R_NilValue));
203+
(void) Rf_eval(callExpr, R_GlobalEnv);
204+
UNPROTECT(1);
212205
}
213206

214207
static void raio_complete(void *arg) {
@@ -743,12 +736,7 @@ SEXP rnng_recv_aio_impl(const SEXP con, const SEXP mode, const SEXP timeout,
743736
raio->next = ncv;
744737
raio->type = RECVAIO;
745738
raio->mode = mod;
746-
if (Rf_isNull(cb)) {
747-
raio->cb = NULL;
748-
} else {
749-
R_PreserveObject(cb);
750-
raio->cb = (void*)cb;
751-
}
739+
raio->cb = cb;
752740

753741
if ((xc = nng_aio_alloc(&raio->aio, signal ? raio_complete_signal : raio_complete, raio)))
754742
goto exitlevel1;

src/init.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ static const R_CallMethodDef callMethods[] = {
155155
{"rnng_random", (DL_FUNC) &rnng_random, 2},
156156
{"rnng_reap", (DL_FUNC) &rnng_reap, 1},
157157
{"rnng_recv", (DL_FUNC) &rnng_recv, 4},
158-
{"rnng_recv_aio", (DL_FUNC) &rnng_recv_aio, 5},
159-
{"rnng_recv_aio_signal", (DL_FUNC) &rnng_recv_aio_signal, 6},
158+
{"rnng_recv_aio", (DL_FUNC) &rnng_recv_aio, 6},
159+
{"rnng_recv_aio_signal", (DL_FUNC) &rnng_recv_aio_signal, 7},
160160
{"rnng_request", (DL_FUNC) &rnng_request, 6},
161161
{"rnng_request_signal", (DL_FUNC) &rnng_request_signal, 7},
162162
{"rnng_send", (DL_FUNC) &rnng_send, 4},

0 commit comments

Comments
 (0)