@@ -135,18 +135,6 @@ static void haio_finalizer(SEXP xptr) {
135135
136136}
137137
138- static void create_activebinding (SEXP sym , SEXP env , SEXP clo , const int x ) {
139-
140- SEXP fun ;
141- PROTECT (fun = Rf_allocSExp (CLOSXP ));
142- SET_FORMALS (fun , nano_aioFormals );
143- SET_BODY (fun , Rf_lang5 (nano_DotcallSymbol , nano_RnngHttpSymbol , nano_ContextSymbol , nano_ResponseSymbol , Rf_ScalarInteger (x )));
144- SET_CLOENV (fun , clo );
145- R_MakeActiveBinding (sym , fun , env );
146- UNPROTECT (1 );
147-
148- }
149-
150138static SEXP mk_error_saio (const int xc , SEXP env ) {
151139
152140 SEXP err ;
@@ -529,7 +517,7 @@ SEXP rnng_send_aio(SEXP con, SEXP data, SEXP mode, SEXP timeout, SEXP clo) {
529517 Rf_defineVar (nano_AioSymbol , aio , env );
530518 PROTECT (fun = Rf_allocSExp (CLOSXP ));
531519 SET_FORMALS (fun , nano_aioFormals );
532- SET_BODY (fun , CAR (nano_aioFunctions ));
520+ SET_BODY (fun , CAR (nano_aioFuncs ));
533521 SET_CLOENV (fun , clo );
534522 R_MakeActiveBinding (nano_ResultSymbol , fun , env );
535523 Rf_classgets (env , nano_sendAio );
@@ -638,21 +626,21 @@ SEXP rnng_recv_aio(SEXP con, SEXP mode, SEXP timeout, SEXP keep, SEXP bytes, SEX
638626 REPROTECT (env = Rf_eval (env , clo ), pxi );
639627#endif
640628 Rf_defineVar (nano_AioSymbol , aio , env );
641- Rf_defineVar (nano_StateSymbol , Rf_ScalarLogical ( kpr ) , env );
629+ Rf_defineVar (nano_StateSymbol , keep , env );
642630
643- PROTECT (datafun = Rf_allocSExp (CLOSXP ));
644- SET_FORMALS (datafun , nano_aioFormals );
645- SET_BODY (datafun , CADR (nano_aioFunctions ));
646- SET_CLOENV (datafun , clo );
647631 if (kpr ) {
648632 SEXP rawfun ;
649633 PROTECT (rawfun = Rf_allocSExp (CLOSXP ));
650634 SET_FORMALS (rawfun , nano_aioFormals );
651- SET_BODY (rawfun , CADDR (nano_aioFunctions ));
635+ SET_BODY (rawfun , CADDR (nano_aioFuncs ));
652636 SET_CLOENV (rawfun , clo );
653637 R_MakeActiveBinding (nano_RawSymbol , rawfun , env );
654638 UNPROTECT (1 );
655639 }
640+ PROTECT (datafun = Rf_allocSExp (CLOSXP ));
641+ SET_FORMALS (datafun , nano_aioFormals );
642+ SET_BODY (datafun , CADR (nano_aioFuncs ));
643+ SET_CLOENV (datafun , clo );
656644 R_MakeActiveBinding (nano_DataSymbol , datafun , env );
657645 Rf_classgets (env , nano_recvAio );
658646
@@ -761,14 +749,32 @@ SEXP rnng_ncurl_aio(SEXP http, SEXP convert, SEXP method, SEXP headers, SEXP dat
761749 REPROTECT (env = Rf_eval (env , clo ), pxi );
762750#endif
763751 Rf_defineVar (nano_AioSymbol , aio , env );
764- create_activebinding (nano_StatusSymbol , env , clo , 0 );
765- create_activebinding (nano_HeadersSymbol , env , clo , 1 );
766- create_activebinding (nano_RawSymbol , env , clo , 2 );
767- create_activebinding (nano_DataSymbol , env , clo , 3 );
752+
753+ SEXP sfun , hfun , rfun , dfun ;
754+ PROTECT (sfun = Rf_allocSExp (CLOSXP ));
755+ SET_FORMALS (sfun , nano_aioFormals );
756+ SET_BODY (sfun , CAR (nano_aioNFuncs ));
757+ SET_CLOENV (sfun , clo );
758+ R_MakeActiveBinding (nano_StatusSymbol , sfun , env );
759+ PROTECT (hfun = Rf_allocSExp (CLOSXP ));
760+ SET_FORMALS (hfun , nano_aioFormals );
761+ SET_BODY (hfun , CADR (nano_aioNFuncs ));
762+ SET_CLOENV (hfun , clo );
763+ R_MakeActiveBinding (nano_HeadersSymbol , hfun , env );
764+ PROTECT (rfun = Rf_allocSExp (CLOSXP ));
765+ SET_FORMALS (rfun , nano_aioFormals );
766+ SET_BODY (rfun , CADDR (nano_aioNFuncs ));
767+ SET_CLOENV (rfun , clo );
768+ R_MakeActiveBinding (nano_RawSymbol , rfun , env );
769+ PROTECT (dfun = Rf_allocSExp (CLOSXP ));
770+ SET_FORMALS (dfun , nano_aioFormals );
771+ SET_BODY (dfun , CADDDR (nano_aioNFuncs ));
772+ SET_CLOENV (dfun , clo );
773+ R_MakeActiveBinding (nano_DataSymbol , dfun , env );
768774
769775 Rf_classgets (env , nano_ncurlAio );
770776
771- UNPROTECT (2 );
777+ UNPROTECT (6 );
772778 return env ;
773779
774780 exitlevel7 :
@@ -950,22 +956,21 @@ SEXP rnng_request(SEXP con, SEXP data, SEXP sendmode, SEXP recvmode, SEXP timeou
950956 PROTECT (sendaio = R_MakeExternalPtr (saio , R_NilValue , R_NilValue ));
951957 R_RegisterCFinalizerEx (sendaio , saio_finalizer , TRUE);
952958 R_MakeWeakRef (aio , sendaio , R_NilValue , TRUE);
959+ Rf_defineVar (nano_StateSymbol , keep , env );
953960
954- Rf_defineVar (nano_StateSymbol , Rf_ScalarLogical (kpr ), env );
955-
956- PROTECT (datafun = Rf_allocSExp (CLOSXP ));
957- SET_FORMALS (datafun , nano_aioFormals );
958- SET_BODY (datafun , CADR (nano_aioFunctions ));
959- SET_CLOENV (datafun , clo );
960961 if (kpr ) {
961962 SEXP rawfun ;
962963 PROTECT (rawfun = Rf_allocSExp (CLOSXP ));
963964 SET_FORMALS (rawfun , nano_aioFormals );
964- SET_BODY (rawfun , CADDR (nano_aioFunctions ));
965+ SET_BODY (rawfun , CADDR (nano_aioFuncs ));
965966 SET_CLOENV (rawfun , clo );
966967 R_MakeActiveBinding (nano_RawSymbol , rawfun , env );
967968 UNPROTECT (1 );
968969 }
970+ PROTECT (datafun = Rf_allocSExp (CLOSXP ));
971+ SET_FORMALS (datafun , nano_aioFormals );
972+ SET_BODY (datafun , CADR (nano_aioFuncs ));
973+ SET_CLOENV (datafun , clo );
969974 R_MakeActiveBinding (nano_DataSymbol , datafun , env );
970975 Rf_classgets (env , nano_recvAio );
971976
0 commit comments