Thanks, I will fix this. On Mon, Jan 29, 2018 at 8:06 AM, Demetrio Rodriguez T. < demetrio.rodrigue...@gmail.com> wrote:
> Hello everyone, > > > I hope this reaches someone at all. It's my first bug report to the R-core, > and, apparently, bugzilla is locked from new reports for now. > > I was using `methods::insertSource` to debug and successfully fix another > package, until it suddenly stopped working. I figured out, that it is > because I am using it on the same function multiple times within one > session. It also produces warnings even during the first call, but somehow > still works. Below I provide a reproducible example: > > SETUP: > ```bash > demetrio@laptop:[folder_structure]/Bugreports/methods_insertSource$ ls -a > . .. gmapsdistance_fix.R methods_insertSource.R > ``` > > file `gmapsdistance_fix.R` > ```R > gmapsdistance = function(param) { > print('I am a bug report, my params are:') > print(param) > } > ``` > > > file `methods_insertSource.R` > ```R > library(gmapsdistance) # works with any package > > methods::insertSource('gmapsdistance_fix.R', > package = 'gmapsdistance', > functions = 'gmapsdistance', > force = T > ) > buggy = gmapsdistance('Works?') > ``` > > > TO REPRODUCE: > in that directory `R --vanilla` then > ```R > > source('methods_insertSource.R') > Modified functions inserted through trace(): gmapsdistance > [1] "I am a bug report, my params are:" > [1] "Works?" > Warning message: > In methods::insertSource("gmapsdistance_fix.R", package = "gmapsdistance", > : > cannot insert these (not found in source): "gmapsdistance" > # Works, but gives the warning that it does not > > # repeat: > > source('methods_insertSource.R') > Error in assign(this, thisObj, envir = envwhere) : > cannot change value of locked binding for 'gmapsdistance' > In addition: Warning message: > In methods::insertSource("gmapsdistance_fix.R", package = "gmapsdistance", > : > cannot insert these (not found in source): "gmapsdistance" > > # does not work, and gets even more confusing: so is it that the object is > not find, or is it about a locked object? > ``` > > I think it's a bug. > > --------------------- BUG REPORT END ------------------------ > > > I looked into it a bit myself, in case you are interested: > > ```R > # lines 20-22 > if (is(source, "environment")) > env <- source > else env <- evalSource(source, package, FALSE) > # We're in the second case I guess > > # Browse[2]> env > # Object of class "sourceEnvironment" > # Source environment created 2017-12-01 05:19:51 > # For package "gmapsdistance" > # From source file "gmapsdistancefix.R" > > > # later, before line 52: > x = env > Browse[2]> package > [1] "gmapsdistance" > > # evaluate 52 > packageSlot(env) <- package > > # objects x and env are still identical > # Browse[2]> class(env) > # [1] "sourceEnvironment" > # attr(,"package") > # [1] "methods" > # Browse[2]> class(x) > # [1] "sourceEnvironment" > # attr(,"package") > # [1] "methods" > > # Browse[2]> env > # Object of class "sourceEnvironment" > # Source environment created 2017-12-01 05:19:51 > # For package "gmapsdistance" > # From source file "gmapsdistancefix.R" > # Browse[2]> x > # Object of class "sourceEnvironment" > # Source environment created 2017-12-01 05:19:51 > # For package "gmapsdistance" > # From source file "gmapsdistancefix.R" > > # so: > Browse[2]> names(env) > NULL > > # which is why 53-60 do not work: > allObjects <- names(env) > if (!missing(functions)) { > notThere <- is.na(match(functions, allObjects)) > if (any(notThere)) { > warning(gettextf("cannot insert these (not found in source): %s", > paste("\"", functions[notThere], "\"", sep = "", > collapse = ", ")), domain = NA) > } > } > ``` > > Looking forward to your feedback! > > Cheers, > Demetrio > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel