@@ -228,31 +228,24 @@ cppNimbleListClass <- setRefClass('cppNimbleListClass',
228228
229229 conditionalClauseStart <- list (quote(cppLiteral(' if (!RCopiedFlag){' )))
230230 conditionalClauseEnd <- list (quote(cppLiteral(' }' )))
231- environmentCPPName <- Rname2CppName(' S_.xData' ) # # create SEXP for ref class environment
232- listElementTable $ addSymbol(cppSEXP(name = environmentCPPName ))
233- envLine <- substitute({PROTECT(ENVNAME <- Rf_allocVector(STRSXP , 1 ));
234- SET_STRING_ELT(ENVNAME , 0 , PROTECT(Rf_mkChar(" .xData" )));},
235- list (ENVNAME = as.name(environmentCPPName )))
236-
237231 for (i in seq_along(elementNames )){
238232 Snames [i ] <- Rname2CppName(paste0(' S_' , elementNames [i ]))
239233 listElementTable $ addSymbol(cppSEXP(name = Snames [i ]))
240234 elementSymTab <- nimCompProc $ symTab $ getSymbolObject(elementNames [i ])
241235 conditionalLineList <- c(conditionalLineList , generateConditionalLines(nimCompProc $ symTab $ getSymbolObject(elementNames [i ]),
242236 listElementTable $ getSymbolObject(Snames [i ])))
243237
244- copyToListLines [[i ]] <- substitute(Rf_defineVar(Rf_install(ELEMENTNAME ), VALUE , PROTECT(GET_SLOT (ROBJ , XDATA ))),
238+ copyToListLines [[i ]] <- substitute(Rf_defineVar(Rf_install(ELEMENTNAME ), VALUE , PROTECT(R_do_slot (ROBJ , Rf_install( " .xData " ) ))),
245239 list (ELEMENTNAME = elementNames [i ], VALUE = as.name(Snames [i ]),
246- ROBJ = as.name(' RObjectPointer' ),
247- XDATA = as.name(environmentCPPName )))
240+ ROBJ = as.name(' RObjectPointer' )))
248241 }
249242
250243 setFlagLine <- list (substitute(RCopiedFlag <- true ,
251244 list ()))
252245 returnLine <- list (substitute(return (ROBJ ),
253246 list (ROBJ = as.name(' RObjectPointer' ))))
254- unprotectLine <- list (substitute(UNPROTECT(N ), list (N = 2 * numElements + 1 + 1 )))
255- allCode <- embedListInRbracket(c(conditionalClauseStart , list ( envLine ), conditionalLineList ,
247+ unprotectLine <- list (substitute(UNPROTECT(N ), list (N = 2 * numElements )))
248+ allCode <- embedListInRbracket(c(conditionalClauseStart , conditionalLineList ,
256249 copyToListLines , setFlagLine , unprotectLine ,
257250 conditionalClauseEnd , returnLine ))
258251 functionDefs [[paste0(name , " _copyTo" )]] <<- cppFunctionDef(name = " copyToSEXP" ,
@@ -276,26 +269,19 @@ cppNimbleListClass <- setRefClass('cppNimbleListClass',
276269 listElementTable <- symbolTable()
277270 storeSexpLine <- list (quote(cppLiteral(' R_PreserveObject(RObjectPointer = S_nimList_);' )))
278271
279- environmentCPPName <- Rname2CppName(' S_.xData' ) # # create SEXP for ref class environment
280- listElementTable $ addSymbol(cppSEXP(name = environmentCPPName ))
281- envLine <- substitute({PROTECT(ENVNAME <- Rf_allocVector(STRSXP , 1 ));
282- SET_STRING_ELT(ENVNAME , 0 , PROTECT(Rf_mkChar(" .xData" )));},
283- list (ENVNAME = as.name(environmentCPPName )))
284-
285272 for (i in seq_along(argNames )) {
286273 Snames [i ] <- Rname2CppName(paste0(' S_' , argNames [i ]))
287274 listElementTable $ addSymbol(cppSEXP(name = Snames [i ]))
288- copyFromListLines [[i ]] <- substitute(PROTECT(SVAR <- NIM_FINDVARINFRAME(PROTECT(GET_SLOT (S_nimList_ , XDATA )), Rf_install(ARGNAME ))),
275+ copyFromListLines [[i ]] <- substitute(PROTECT(SVAR <- NIM_FINDVARINFRAME(PROTECT(R_do_slot (S_nimList_ , Rf_install( " .xData " ) )), Rf_install(ARGNAME ))),
289276 list (ARGNAME = argNames [i ],
290- SVAR = as.name(Snames [i ]),
291- XDATA = as.name(environmentCPPName )))
277+ SVAR = as.name(Snames [i ])))
292278 copyLine <- buildCopyLineFromSEXP(listElementTable $ getSymbolObject(Snames [i ]),
293279 nimCompProc $ symTab $ getSymbolObject(argNames [i ]))
294280 copyLines <- c(copyLines , copyLine )
295281 }
296282 numArgs <- length(argNames )
297- unprotectLine <- substitute(UNPROTECT(N ), list (N = 2 * numArgs + 1 + 1 ))
298- allCode <- embedListInRbracket(c(storeSexpLine , envLine ,
283+ unprotectLine <- substitute(UNPROTECT(N ), list (N = 2 * numArgs ))
284+ allCode <- embedListInRbracket(c(storeSexpLine ,
299285 copyFromListLines , copyLines ,
300286 list (unprotectLine )))
301287 functionDefs [[paste0(name , " _copyFrom" )]] <<- cppFunctionDef(name = " copyFromSEXP" ,
0 commit comments