Deprecated lifecycle

ctxt_stack() can be tricky to use in real code because all intervening frames are returned with the stack, including those at ctxt_stack() own call site. stack_trim() makes it easy to remove layers of intervening calls.

stack_trim(stack, n = 1)

Arguments

stack

An evaluation stack.

n

The number of call frames (not eval frames) to trim off the top of the stack. In other words, the number of layers of intervening frames to trim.

Life cycle

These functions are deprecated and replaced by trace_back().

Examples

# Intervening frames appear on the evaluation stack: identity(identity(ctxt_stack()))
#> [[1]] #> <frame 37> (35) #> expr: identity(ctxt_stack()) #> env: [local 0x555823e36788] #> #> [[2]] #> <frame 36> (35) #> expr: identity(identity(ctxt_stack())) #> env: [local 0x555823e36328] #> #> [[3]] #> <frame 35> (34) #> expr: eval(expr, envir, enclos) #> env: [local 0x555823e89228] #> #> [[4]] #> <frame 34> (24) #> expr: eval(expr, envir, enclos) #> env: [local 0x555823e360c0] #> #> [[5]] #> <frame 33> (24) #> expr: withVisible(eval(expr, envir, enclos)) #> env: [local 0x555823e35db0] #> #> [[6]] #> <frame 32> (24) #> expr: withCallingHandlers(withVisible(eval(expr, envir, enclos)), warning = wHandler, <...> #> env: [local 0x555823e39278] #> #> [[7]] #> <frame 31> (30) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [local 0x555823e38830] #> #> [[8]] #> <frame 30> (29) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [local 0x555823e38408] #> #> [[9]] #> <frame 29> (28) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [local 0x555823e37f00] #> #> [[10]] #> <frame 28> (27) #> expr: tryCatch(expr, error = function(e) { <...> #> env: [local 0x555823e376b0] #> #> [[11]] #> <frame 27> (26) #> expr: try(f, silent = TRUE) #> env: [local 0x555823e3ad00] #> #> [[12]] #> <frame 26> (24) #> expr: handle(ev <- withCallingHandlers(withVisible(eval(expr, envir, <...> #> env: [local 0x555823e3ab78] #> #> [[13]] #> <frame 25> (24) #> expr: timing_fn(handle(ev <- withCallingHandlers(withVisible(eval(expr, <...> #> env: [local 0x555823e3aa98] #> #> [[14]] #> <frame 24> (23) #> expr: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, <...> #> env: [frame 0x555823e55800] #> #> [[15]] #> <frame 23> (22) #> expr: evaluate::evaluate(code, child_env(env), new_device = TRUE) #> env: [frame 0x55582416d468] #> #> [[16]] #> <frame 22> (21) #> expr: downlit::evaluate_and_highlight(code, fig_save = fig_save_topic, <...> #> env: [frame 0x5558241703c8] #> #> [[17]] #> <frame 21> (20) #> expr: highlight_examples(code, topic, env = env) #> env: [frame 0x5558241819e0] #> #> [[18]] #> <frame 20> (19) #> expr: run_examples(tags$tag_examples[[1]], env = new.env(parent = globalenv()), <...> #> env: [frame 0x5558241e46c0] #> #> [[19]] #> <frame 19> (17) #> expr: data_reference_topic(topic, pkg, examples = examples, run_dont_run = run_dont_run) #> env: [frame 0x555826d58fd8] #> #> [[20]] #> <frame 18> (17) #> expr: withCallingHandlers(data_reference_topic(topic, pkg, examples = examples, <...> #> env: [frame 0x555826d58868] #> #> [[21]] #> <frame 17> (16) #> expr: .f(.x[[i]], ...) #> env: [frame 0x555828126e70] #> #> [[22]] #> <frame 16> (15) #> expr: purrr::map(topics, build_reference_topic, pkg = pkg, lazy = lazy, <...> #> env: [frame 0x555823d9bdb8] #> #> [[23]] #> <frame 15> (14) #> expr: build_reference(pkg, lazy = lazy, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558237b07b8] #> #> [[24]] #> <frame 14> (13) #> expr: build_site_local(pkg = pkg, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558202388f8] #> #> [[25]] #> <frame 13> (12) #> expr: pkgdown::build_site(...) #> env: [frame 0x55582108b050] #> #> [[26]] #> <frame 12> (0) #> expr: (function (..., crayon_enabled, crayon_colors, pkgdown_internet) <...> #> env: [frame 0x55582028b4a0] #> #> [[27]] #> <frame 11> (0) #> expr: (function (what, args, quote = FALSE, envir = parent.frame()) <...> #> env: [frame 0x55582029fbb0] #> #> [[28]] #> <frame 10> (0) #> expr: do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e984d0] #> #> [[29]] #> <frame 9> (0) #> expr: saveRDS(do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e988c0] #> #> [[30]] #> <frame 8> (0) #> expr: withCallingHandlers({ <...> #> env: [frame 0x555820e99110] #> #> [[31]] #> <frame 7> (6) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e997a0] #> #> [[32]] #> <frame 6> (5) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [frame 0x555820e99ae8] #> #> [[33]] #> <frame 5> (2) #> expr: tryCatchList(expr, names[-nh], parentenv, handlers[-nh]) #> env: [frame 0x555820e99ea0] #> #> [[34]] #> <frame 4> (3) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e91b40] #> #> [[35]] #> <frame 3> (2) #> expr: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), <...> #> env: [frame 0x555820e91e88] #> #> [[36]] #> <frame 2> (1) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [frame 0x555820e921d0] #> #> [[37]] #> <frame 1> (0) #> expr: tryCatch(withCallingHandlers({ <...> #> env: [frame 0x555820e8d918] #> #> [[38]] #> <frame 0> [global] #> expr: NULL #> env: [global] #> #> attr(,"class") #> [1] "ctxt_stack" "stack"
# stack_trim() will trim the first n layers of calls: stack_trim(identity(identity(ctxt_stack())))
#> [[1]] #> <frame 35> (34) #> expr: eval(expr, envir, enclos) #> env: [local 0x555823e89228] #> #> [[2]] #> <frame 34> (24) #> expr: eval(expr, envir, enclos) #> env: [local 0x5558236c8220] #> #> [[3]] #> <frame 33> (24) #> expr: withVisible(eval(expr, envir, enclos)) #> env: [local 0x5558236c7998] #> #> [[4]] #> <frame 32> (24) #> expr: withCallingHandlers(withVisible(eval(expr, envir, enclos)), warning = wHandler, <...> #> env: [local 0x5558236c7148] #> #> [[5]] #> <frame 31> (30) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [local 0x5558236ca028] #> #> [[6]] #> <frame 30> (29) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [local 0x5558236c9bc8] #> #> [[7]] #> <frame 29> (28) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [local 0x5558236c9618] #> #> [[8]] #> <frame 28> (27) #> expr: tryCatch(expr, error = function(e) { <...> #> env: [local 0x5558236c8a10] #> #> [[9]] #> <frame 27> (26) #> expr: try(f, silent = TRUE) #> env: [local 0x5558236cc4c0] #> #> [[10]] #> <frame 26> (24) #> expr: handle(ev <- withCallingHandlers(withVisible(eval(expr, envir, <...> #> env: [local 0x5558236cc258] #> #> [[11]] #> <frame 25> (24) #> expr: timing_fn(handle(ev <- withCallingHandlers(withVisible(eval(expr, <...> #> env: [local 0x5558236cc098] #> #> [[12]] #> <frame 24> (23) #> expr: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, <...> #> env: [frame 0x555823725778] #> #> [[13]] #> <frame 23> (22) #> expr: evaluate::evaluate(code, child_env(env), new_device = TRUE) #> env: [frame 0x55582416d468] #> #> [[14]] #> <frame 22> (21) #> expr: downlit::evaluate_and_highlight(code, fig_save = fig_save_topic, <...> #> env: [frame 0x5558241703c8] #> #> [[15]] #> <frame 21> (20) #> expr: highlight_examples(code, topic, env = env) #> env: [frame 0x5558241819e0] #> #> [[16]] #> <frame 20> (19) #> expr: run_examples(tags$tag_examples[[1]], env = new.env(parent = globalenv()), <...> #> env: [frame 0x5558241e46c0] #> #> [[17]] #> <frame 19> (17) #> expr: data_reference_topic(topic, pkg, examples = examples, run_dont_run = run_dont_run) #> env: [frame 0x555826d58fd8] #> #> [[18]] #> <frame 18> (17) #> expr: withCallingHandlers(data_reference_topic(topic, pkg, examples = examples, <...> #> env: [frame 0x555826d58868] #> #> [[19]] #> <frame 17> (16) #> expr: .f(.x[[i]], ...) #> env: [frame 0x555828126e70] #> #> [[20]] #> <frame 16> (15) #> expr: purrr::map(topics, build_reference_topic, pkg = pkg, lazy = lazy, <...> #> env: [frame 0x555823d9bdb8] #> #> [[21]] #> <frame 15> (14) #> expr: build_reference(pkg, lazy = lazy, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558237b07b8] #> #> [[22]] #> <frame 14> (13) #> expr: build_site_local(pkg = pkg, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558202388f8] #> #> [[23]] #> <frame 13> (12) #> expr: pkgdown::build_site(...) #> env: [frame 0x55582108b050] #> #> [[24]] #> <frame 12> (0) #> expr: (function (..., crayon_enabled, crayon_colors, pkgdown_internet) <...> #> env: [frame 0x55582028b4a0] #> #> [[25]] #> <frame 11> (0) #> expr: (function (what, args, quote = FALSE, envir = parent.frame()) <...> #> env: [frame 0x55582029fbb0] #> #> [[26]] #> <frame 10> (0) #> expr: do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e984d0] #> #> [[27]] #> <frame 9> (0) #> expr: saveRDS(do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e988c0] #> #> [[28]] #> <frame 8> (0) #> expr: withCallingHandlers({ <...> #> env: [frame 0x555820e99110] #> #> [[29]] #> <frame 7> (6) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e997a0] #> #> [[30]] #> <frame 6> (5) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [frame 0x555820e99ae8] #> #> [[31]] #> <frame 5> (2) #> expr: tryCatchList(expr, names[-nh], parentenv, handlers[-nh]) #> env: [frame 0x555820e99ea0] #> #> [[32]] #> <frame 4> (3) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e91b40] #> #> [[33]] #> <frame 3> (2) #> expr: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), <...> #> env: [frame 0x555820e91e88] #> #> [[34]] #> <frame 2> (1) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [frame 0x555820e921d0] #> #> [[35]] #> <frame 1> (0) #> expr: tryCatch(withCallingHandlers({ <...> #> env: [frame 0x555820e8d918] #> #> [[36]] #> <frame 0> [global] #> expr: NULL #> env: [global] #> #> attr(,"class") #> [1] "ctxt_stack" "stack"
# Note that it also takes care of calls intervening at its own call # site: identity(identity( stack_trim(identity(identity(ctxt_stack()))) ))
#> [[1]] #> <frame 35> (34) #> expr: eval(expr, envir, enclos) #> env: [local 0x555823e89228] #> #> [[2]] #> <frame 34> (24) #> expr: eval(expr, envir, enclos) #> env: [local 0x55582295f170] #> #> [[3]] #> <frame 33> (24) #> expr: withVisible(eval(expr, envir, enclos)) #> env: [local 0x55582295ee60] #> #> [[4]] #> <frame 32> (24) #> expr: withCallingHandlers(withVisible(eval(expr, envir, enclos)), warning = wHandler, <...> #> env: [local 0x55582295e798] #> #> [[5]] #> <frame 31> (30) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [local 0x555822960bf8] #> #> [[6]] #> <frame 30> (29) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [local 0x5558229608b0] #> #> [[7]] #> <frame 29> (28) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [local 0x5558229603e0] #> #> [[8]] #> <frame 28> (27) #> expr: tryCatch(expr, error = function(e) { <...> #> env: [local 0x5558229733a0] #> #> [[9]] #> <frame 27> (26) #> expr: try(f, silent = TRUE) #> env: [local 0x555822973170] #> #> [[10]] #> <frame 26> (24) #> expr: handle(ev <- withCallingHandlers(withVisible(eval(expr, envir, <...> #> env: [local 0x555822972f78] #> #> [[11]] #> <frame 25> (24) #> expr: timing_fn(handle(ev <- withCallingHandlers(withVisible(eval(expr, <...> #> env: [local 0x555822972db8] #> #> [[12]] #> <frame 24> (23) #> expr: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, <...> #> env: [frame 0x5558229aca80] #> #> [[13]] #> <frame 23> (22) #> expr: evaluate::evaluate(code, child_env(env), new_device = TRUE) #> env: [frame 0x55582416d468] #> #> [[14]] #> <frame 22> (21) #> expr: downlit::evaluate_and_highlight(code, fig_save = fig_save_topic, <...> #> env: [frame 0x5558241703c8] #> #> [[15]] #> <frame 21> (20) #> expr: highlight_examples(code, topic, env = env) #> env: [frame 0x5558241819e0] #> #> [[16]] #> <frame 20> (19) #> expr: run_examples(tags$tag_examples[[1]], env = new.env(parent = globalenv()), <...> #> env: [frame 0x5558241e46c0] #> #> [[17]] #> <frame 19> (17) #> expr: data_reference_topic(topic, pkg, examples = examples, run_dont_run = run_dont_run) #> env: [frame 0x555826d58fd8] #> #> [[18]] #> <frame 18> (17) #> expr: withCallingHandlers(data_reference_topic(topic, pkg, examples = examples, <...> #> env: [frame 0x555826d58868] #> #> [[19]] #> <frame 17> (16) #> expr: .f(.x[[i]], ...) #> env: [frame 0x555828126e70] #> #> [[20]] #> <frame 16> (15) #> expr: purrr::map(topics, build_reference_topic, pkg = pkg, lazy = lazy, <...> #> env: [frame 0x555823d9bdb8] #> #> [[21]] #> <frame 15> (14) #> expr: build_reference(pkg, lazy = lazy, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558237b07b8] #> #> [[22]] #> <frame 14> (13) #> expr: build_site_local(pkg = pkg, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558202388f8] #> #> [[23]] #> <frame 13> (12) #> expr: pkgdown::build_site(...) #> env: [frame 0x55582108b050] #> #> [[24]] #> <frame 12> (0) #> expr: (function (..., crayon_enabled, crayon_colors, pkgdown_internet) <...> #> env: [frame 0x55582028b4a0] #> #> [[25]] #> <frame 11> (0) #> expr: (function (what, args, quote = FALSE, envir = parent.frame()) <...> #> env: [frame 0x55582029fbb0] #> #> [[26]] #> <frame 10> (0) #> expr: do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e984d0] #> #> [[27]] #> <frame 9> (0) #> expr: saveRDS(do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e988c0] #> #> [[28]] #> <frame 8> (0) #> expr: withCallingHandlers({ <...> #> env: [frame 0x555820e99110] #> #> [[29]] #> <frame 7> (6) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e997a0] #> #> [[30]] #> <frame 6> (5) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [frame 0x555820e99ae8] #> #> [[31]] #> <frame 5> (2) #> expr: tryCatchList(expr, names[-nh], parentenv, handlers[-nh]) #> env: [frame 0x555820e99ea0] #> #> [[32]] #> <frame 4> (3) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e91b40] #> #> [[33]] #> <frame 3> (2) #> expr: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), <...> #> env: [frame 0x555820e91e88] #> #> [[34]] #> <frame 2> (1) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [frame 0x555820e921d0] #> #> [[35]] #> <frame 1> (0) #> expr: tryCatch(withCallingHandlers({ <...> #> env: [frame 0x555820e8d918] #> #> [[36]] #> <frame 0> [global] #> expr: NULL #> env: [global] #> #> attr(,"class") #> [1] "ctxt_stack" "stack"
# It is especially useful when used within a function that needs to # inspect the evaluation stack but should nonetheless be callable # within nested calls without side effects: stack_util <- function() { # n = 2 means that two layers of intervening calls should be # removed: The layer at ctxt_stack()'s call site (including the # stack_trim() call), and the layer at stack_util()'s call. stack <- stack_trim(ctxt_stack(), n = 2) stack } user_fn <- function() { # A user calls your stack utility with intervening frames: identity(identity(stack_util())) } # These intervening frames won't appear in the evaluation stack identity(user_fn())
#> [[1]] #> <frame 37> (35) #> expr: user_fn() #> env: [local 0x55582193adb8] #> #> [[2]] #> <frame 36> (35) #> expr: identity(user_fn()) #> env: [local 0x55582193ad48] #> #> [[3]] #> <frame 35> (34) #> expr: eval(expr, envir, enclos) #> env: [local 0x555823e89228] #> #> [[4]] #> <frame 34> (24) #> expr: eval(expr, envir, enclos) #> env: [local 0x55582193ab88] #> #> [[5]] #> <frame 33> (24) #> expr: withVisible(eval(expr, envir, enclos)) #> env: [local 0x55582193a488] #> #> [[6]] #> <frame 32> (24) #> expr: withCallingHandlers(withVisible(eval(expr, envir, enclos)), warning = wHandler, <...> #> env: [local 0x555821939e30] #> #> [[7]] #> <frame 31> (30) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [local 0x555821939810] #> #> [[8]] #> <frame 30> (29) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [local 0x555821939458] #> #> [[9]] #> <frame 29> (28) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [local 0x555821944540] #> #> [[10]] #> <frame 28> (27) #> expr: tryCatch(expr, error = function(e) { <...> #> env: [local 0x555821943e08] #> #> [[11]] #> <frame 27> (26) #> expr: try(f, silent = TRUE) #> env: [local 0x555821943b68] #> #> [[12]] #> <frame 26> (24) #> expr: handle(ev <- withCallingHandlers(withVisible(eval(expr, envir, <...> #> env: [local 0x5558219480b0] #> #> [[13]] #> <frame 25> (24) #> expr: timing_fn(handle(ev <- withCallingHandlers(withVisible(eval(expr, <...> #> env: [local 0x555821947fd0] #> #> [[14]] #> <frame 24> (23) #> expr: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos, <...> #> env: [frame 0x55582197b588] #> #> [[15]] #> <frame 23> (22) #> expr: evaluate::evaluate(code, child_env(env), new_device = TRUE) #> env: [frame 0x55582416d468] #> #> [[16]] #> <frame 22> (21) #> expr: downlit::evaluate_and_highlight(code, fig_save = fig_save_topic, <...> #> env: [frame 0x5558241703c8] #> #> [[17]] #> <frame 21> (20) #> expr: highlight_examples(code, topic, env = env) #> env: [frame 0x5558241819e0] #> #> [[18]] #> <frame 20> (19) #> expr: run_examples(tags$tag_examples[[1]], env = new.env(parent = globalenv()), <...> #> env: [frame 0x5558241e46c0] #> #> [[19]] #> <frame 19> (17) #> expr: data_reference_topic(topic, pkg, examples = examples, run_dont_run = run_dont_run) #> env: [frame 0x555826d58fd8] #> #> [[20]] #> <frame 18> (17) #> expr: withCallingHandlers(data_reference_topic(topic, pkg, examples = examples, <...> #> env: [frame 0x555826d58868] #> #> [[21]] #> <frame 17> (16) #> expr: .f(.x[[i]], ...) #> env: [frame 0x555828126e70] #> #> [[22]] #> <frame 16> (15) #> expr: purrr::map(topics, build_reference_topic, pkg = pkg, lazy = lazy, <...> #> env: [frame 0x555823d9bdb8] #> #> [[23]] #> <frame 15> (14) #> expr: build_reference(pkg, lazy = lazy, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558237b07b8] #> #> [[24]] #> <frame 14> (13) #> expr: build_site_local(pkg = pkg, examples = examples, run_dont_run = run_dont_run, <...> #> env: [frame 0x5558202388f8] #> #> [[25]] #> <frame 13> (12) #> expr: pkgdown::build_site(...) #> env: [frame 0x55582108b050] #> #> [[26]] #> <frame 12> (0) #> expr: (function (..., crayon_enabled, crayon_colors, pkgdown_internet) <...> #> env: [frame 0x55582028b4a0] #> #> [[27]] #> <frame 11> (0) #> expr: (function (what, args, quote = FALSE, envir = parent.frame()) <...> #> env: [frame 0x55582029fbb0] #> #> [[28]] #> <frame 10> (0) #> expr: do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e984d0] #> #> [[29]] #> <frame 9> (0) #> expr: saveRDS(do.call(do.call, c(readRDS("/tmp/Rtmp1mG078/callr-fun-1f7d76d7f70d"), <...> #> env: [frame 0x555820e988c0] #> #> [[30]] #> <frame 8> (0) #> expr: withCallingHandlers({ <...> #> env: [frame 0x555820e99110] #> #> [[31]] #> <frame 7> (6) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e997a0] #> #> [[32]] #> <frame 6> (5) #> expr: tryCatchOne(expr, names, parentenv, handlers[[1L]]) #> env: [frame 0x555820e99ae8] #> #> [[33]] #> <frame 5> (2) #> expr: tryCatchList(expr, names[-nh], parentenv, handlers[-nh]) #> env: [frame 0x555820e99ea0] #> #> [[34]] #> <frame 4> (3) #> expr: doTryCatch(return(expr), name, parentenv, handler) #> env: [frame 0x555820e91b40] #> #> [[35]] #> <frame 3> (2) #> expr: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]), <...> #> env: [frame 0x555820e91e88] #> #> [[36]] #> <frame 2> (1) #> expr: tryCatchList(expr, classes, parentenv, handlers) #> env: [frame 0x555820e921d0] #> #> [[37]] #> <frame 1> (0) #> expr: tryCatch(withCallingHandlers({ <...> #> env: [frame 0x555820e8d918] #> #> [[38]] #> <frame 0> [global] #> expr: NULL #> env: [global] #> #> attr(,"class") #> [1] "ctxt_stack" "stack"