diff --git a/R/addins.R b/R/addins.R index 8cfb7981b..61dcb24e3 100644 --- a/R/addins.R +++ b/R/addins.R @@ -157,7 +157,7 @@ set_style_transformers <- function() { current_style ) if (!is.null(new_style)) { - parsed_new_style <- rlang::with_handlers( + parsed_new_style <- rlang::try_fetch( { transformers <- eval(parse(text = new_style)) style_text( @@ -208,7 +208,7 @@ communicate_addins_style_transformers <- function() { #' [make_transformer()]. #' @keywords internal try_transform_as_r_file <- function(context, transformer) { - rlang::with_handlers( + rlang::try_fetch( transformer(context$contents), error = function(e) { preamble_for_unsaved <- paste( diff --git a/R/io.R b/R/io.R index 2598a0b00..565afb400 100644 --- a/R/io.R +++ b/R/io.R @@ -20,7 +20,7 @@ transform_utf8 <- function(path, fun, dry) { #' @keywords internal transform_utf8_one <- function(path, fun, dry) { rlang::arg_match(dry, c("on", "off", "fail")) - rlang::with_handlers( + rlang::try_fetch( { file_with_info <- read_utf8(path) # only write back when changed OR when there was a missing newline @@ -70,7 +70,7 @@ transform_utf8_one <- function(path, fun, dry) { #' @param path A path to a file to read. #' @keywords internal read_utf8 <- function(path) { - out <- rlang::with_handlers( + out <- rlang::try_fetch( read_utf8_bare(path), warning = function(w) w, error = function(e) e diff --git a/R/parse.R b/R/parse.R index 5ac004047..44164fc4c 100644 --- a/R/parse.R +++ b/R/parse.R @@ -15,7 +15,7 @@ #' #' styler:::parse_safely("a + 3 -4 -> \n glück + 1") parse_safely <- function(text, ...) { - tried_parsing <- rlang::with_handlers( + tried_parsing <- rlang::try_fetch( parse(text = text, ...), error = function(e) e, warning = function(w) w diff --git a/R/roxygen-examples-parse.R b/R/roxygen-examples-parse.R index a177c3444..587641fef 100644 --- a/R/roxygen-examples-parse.R +++ b/R/roxygen-examples-parse.R @@ -66,7 +66,7 @@ parse_roxygen <- function(roxygen) { #' ) #' @keywords internal roxygen_remove_extra_brace <- function(parsed) { - parsed <- rlang::with_handlers( + parsed <- rlang::try_fetch( { parse(text = paste0(gsub("^\\\\[[:alpha:]]*", "", parsed), collapse = "")) parsed @@ -92,7 +92,7 @@ roxygen_remove_extra_brace <- function(parsed) { parsed <- parsed[-last(linebreak)] } # try if can be parsed (need remve dontrun) - worth_trying_to_remove_brace <- rlang::with_handlers( + worth_trying_to_remove_brace <- rlang::try_fetch( { # this will error informatively parse(text = gsub("^\\\\[[:alpha:]]+", "", parsed)) diff --git a/R/roxygen-examples.R b/R/roxygen-examples.R index a911043b1..2d80514fc 100644 --- a/R/roxygen-examples.R +++ b/R/roxygen-examples.R @@ -35,7 +35,7 @@ style_roxygen_code_example_one <- function(example_one, ) %>% flatten_chr() if (bare$example_type == "examplesIf") { - rlang::with_handlers( + rlang::try_fetch( parse_text(unmasked[1L]), error = function(e) { abort(paste0( diff --git a/R/transform-files.R b/R/transform-files.R index e13bd14b1..2647f5d4b 100644 --- a/R/transform-files.R +++ b/R/transform-files.R @@ -413,7 +413,7 @@ parse_tree_must_be_identical <- function(transformers) { #' @keywords internal verify_roundtrip <- function(old_text, new_text, parsable_only = FALSE) { if (parsable_only) { - rlang::with_handlers( + rlang::try_fetch( parse_safely(new_text), error = function(e) { rlang::abort(paste0( diff --git a/tests/testthat/curly-curly/mixed-in_tree b/tests/testthat/curly-curly/mixed-in_tree index eb0ffc2e6..b7ab6ef5a 100644 --- a/tests/testthat/curly-curly/mixed-in_tree +++ b/tests/testthat/curly-curly/mixed-in_tree @@ -430,37 +430,76 @@ ROOT (token: short_text [lag_newlines/spaces] {pos_id}) ¦ ¦ ¦ °--'}': } [0/0] {414} ¦ ¦ °--'}': } [0/0] {415} ¦ °--')': ) [0/0] {416} - °--expr: call( [2/0] {417} - ¦--expr: call [0/0] {419} - ¦ °--SYMBOL_FUNCTION_CALL: call [0/0] {418} - ¦--'(': ( [0/2] {420} - ¦--expr: {{ x [1/0] {421} - ¦ ¦--'{': { [0/0] {422} - ¦ ¦--expr: { x } [0/0] {423} - ¦ ¦ ¦--'{': { [0/1] {424} - ¦ ¦ ¦--expr: x [0/1] {426} - ¦ ¦ ¦ °--SYMBOL: x [0/0] {425} - ¦ ¦ °--'}': } [0/0] {427} - ¦ °--'}': } [0/0] {428} - ¦--',': , [0/2] {429} - ¦--expr: {{ y} [1/0] {430} - ¦ ¦--expr: {{ y} [0/1] {431} - ¦ ¦ ¦--'{': { [0/0] {432} - ¦ ¦ ¦--expr: { y} [0/0] {433} - ¦ ¦ ¦ ¦--'{': { [0/1] {434} - ¦ ¦ ¦ ¦--expr: y [0/0] {436} - ¦ ¦ ¦ ¦ °--SYMBOL: y [0/0] {435} - ¦ ¦ ¦ °--'}': } [0/0] {437} - ¦ ¦ °--'}': } [0/0] {438} - ¦ ¦--LEFT_ASSIGN: := [0/1] {439} - ¦ °--expr: 3 [0/0] {441} - ¦ °--NUM_CONST: 3 [0/0] {440} - ¦--',': , [0/1] {442} - ¦--expr: f(bk) [0/0] {443} - ¦ ¦--expr: f [0/0] {445} - ¦ ¦ °--SYMBOL_FUNCTION_CALL: f [0/0] {444} - ¦ ¦--'(': ( [0/0] {446} - ¦ ¦--expr: bk [0/0] {448} - ¦ ¦ °--SYMBOL: bk [0/0] {447} - ¦ °--')': ) [0/0] {449} - °--')': ) [1/0] {450} + ¦--expr: call( [2/0] {417} + ¦ ¦--expr: call [0/0] {419} + ¦ ¦ °--SYMBOL_FUNCTION_CALL: call [0/0] {418} + ¦ ¦--'(': ( [0/2] {420} + ¦ ¦--expr: {{ x [1/0] {421} + ¦ ¦ ¦--'{': { [0/0] {422} + ¦ ¦ ¦--expr: { x } [0/0] {423} + ¦ ¦ ¦ ¦--'{': { [0/1] {424} + ¦ ¦ ¦ ¦--expr: x [0/1] {426} + ¦ ¦ ¦ ¦ °--SYMBOL: x [0/0] {425} + ¦ ¦ ¦ °--'}': } [0/0] {427} + ¦ ¦ °--'}': } [0/0] {428} + ¦ ¦--',': , [0/2] {429} + ¦ ¦--expr: {{ y} [1/0] {430} + ¦ ¦ ¦--expr: {{ y} [0/1] {431} + ¦ ¦ ¦ ¦--'{': { [0/0] {432} + ¦ ¦ ¦ ¦--expr: { y} [0/0] {433} + ¦ ¦ ¦ ¦ ¦--'{': { [0/1] {434} + ¦ ¦ ¦ ¦ ¦--expr: y [0/0] {436} + ¦ ¦ ¦ ¦ ¦ °--SYMBOL: y [0/0] {435} + ¦ ¦ ¦ ¦ °--'}': } [0/0] {437} + ¦ ¦ ¦ °--'}': } [0/0] {438} + ¦ ¦ ¦--LEFT_ASSIGN: := [0/1] {439} + ¦ ¦ °--expr: 3 [0/0] {441} + ¦ ¦ °--NUM_CONST: 3 [0/0] {440} + ¦ ¦--',': , [0/1] {442} + ¦ ¦--expr: f(bk) [0/0] {443} + ¦ ¦ ¦--expr: f [0/0] {445} + ¦ ¦ ¦ °--SYMBOL_FUNCTION_CALL: f [0/0] {444} + ¦ ¦ ¦--'(': ( [0/0] {446} + ¦ ¦ ¦--expr: bk [0/0] {448} + ¦ ¦ ¦ °--SYMBOL: bk [0/0] {447} + ¦ ¦ °--')': ) [0/0] {449} + ¦ °--')': ) [1/0] {450} + ¦--expr: call( [2/0] {451} + ¦ ¦--expr: call [0/0] {453} + ¦ ¦ °--SYMBOL_FUNCTION_CALL: call [0/0] {452} + ¦ ¦--'(': ( [0/0] {454} + ¦ ¦--expr: {{ + [0/0] {455} + ¦ ¦ ¦--'{': { [0/0] {456} + ¦ ¦ ¦--expr: { + # [0/0] {457} + ¦ ¦ ¦ ¦--'{': { [0/2] {458} + ¦ ¦ ¦ ¦--COMMENT: # [1/2] {459} + ¦ ¦ ¦ ¦--expr: 1 [1/0] {461} + ¦ ¦ ¦ ¦ °--NUM_CONST: 1 [0/0] {460} + ¦ ¦ ¦ °--'}': } [1/0] {462} + ¦ ¦ °--'}': } [0/0] {463} + ¦ °--')': ) [0/0] {464} + ¦--expr: call( [2/0] {465} + ¦ ¦--expr: call [0/0] {467} + ¦ ¦ °--SYMBOL_FUNCTION_CALL: call [0/0] {466} + ¦ ¦--'(': ( [0/0] {468} + ¦ ¦--expr: {{ + [0/0] {469} + ¦ ¦ ¦--'{': { [0/0] {470} + ¦ ¦ ¦--expr: { + # [0/0] {471} + ¦ ¦ ¦ ¦--'{': { [0/2] {472} + ¦ ¦ ¦ ¦--COMMENT: # [1/0] {473} + ¦ ¦ ¦ °--'}': } [1/0] {474} + ¦ ¦ °--'}': } [0/0] {475} + ¦ °--')': ) [0/0] {476} + °--expr: {{ + [3/0] {477} + ¦--'{': { [0/0] {478} + ¦--expr: { + # [0/0] {479} + ¦ ¦--'{': { [0/2] {480} + ¦ ¦--COMMENT: # [1/0] {481} + ¦ °--'}': } [1/0] {482} + °--'}': } [0/0] {483} diff --git a/tests/testthat/indention_operators/eq_formals_complex_indention-in_tree b/tests/testthat/indention_operators/eq_formals_complex_indention-in_tree index dde5f33df..210e47a12 100644 --- a/tests/testthat/indention_operators/eq_formals_complex_indention-in_tree +++ b/tests/testthat/indention_operators/eq_formals_complex_indention-in_tree @@ -67,31 +67,100 @@ ROOT (token: short_text [lag_newlines/spaces] {pos_id}) ¦ °--expr: {} [0/0] {66} ¦ ¦--'{': { [0/0] {67} ¦ °--'}': } [0/0] {68} - °--expr: funct [2/0] {69} - ¦--FUNCTION: funct [0/0] {70} - ¦--'(': ( [0/0] {71} - ¦--SYMBOL_FORMALS: a [0/1] {72} - ¦--EQ_FORMALS: = [0/11] {73} - ¦--expr: b [1/0] {75} - ¦ °--SYMBOL: b [0/0] {74} - ¦--',': , [0/9] {76} - ¦--SYMBOL_FORMALS: f [1/1] {77} - ¦--EQ_FORMALS: = [0/11] {78} - ¦--expr: d [1/0] {80} - ¦ °--SYMBOL: d [0/0] {79} - ¦--',': , [0/1] {81} - ¦--SYMBOL_FORMALS: c [0/1] {82} - ¦--EQ_FORMALS: = [0/11] {83} - ¦--expr: 3 [1/0] {85} - ¦ °--NUM_CONST: 3 [0/0] {84} - ¦--',': , [0/1] {86} - ¦--SYMBOL_FORMALS: d [0/1] {87} - ¦--EQ_FORMALS: = [0/11] {88} - ¦--expr: 4 [1/0] {90} - ¦ °--NUM_CONST: 4 [0/0] {89} - ¦--')': ) [0/1] {91} - °--expr: { + ¦--expr: funct [2/0] {69} + ¦ ¦--FUNCTION: funct [0/0] {70} + ¦ ¦--'(': ( [0/0] {71} + ¦ ¦--SYMBOL_FORMALS: a [0/1] {72} + ¦ ¦--EQ_FORMALS: = [0/11] {73} + ¦ ¦--expr: b [1/0] {75} + ¦ ¦ °--SYMBOL: b [0/0] {74} + ¦ ¦--',': , [0/9] {76} + ¦ ¦--SYMBOL_FORMALS: f [1/1] {77} + ¦ ¦--EQ_FORMALS: = [0/11] {78} + ¦ ¦--expr: d [1/0] {80} + ¦ ¦ °--SYMBOL: d [0/0] {79} + ¦ ¦--',': , [0/1] {81} + ¦ ¦--SYMBOL_FORMALS: c [0/1] {82} + ¦ ¦--EQ_FORMALS: = [0/11] {83} + ¦ ¦--expr: 3 [1/0] {85} + ¦ ¦ °--NUM_CONST: 3 [0/0] {84} + ¦ ¦--',': , [0/1] {86} + ¦ ¦--SYMBOL_FORMALS: d [0/1] {87} + ¦ ¦--EQ_FORMALS: = [0/11] {88} + ¦ ¦--expr: 4 [1/0] {90} + ¦ ¦ °--NUM_CONST: 4 [0/0] {89} + ¦ ¦--')': ) [0/1] {91} + ¦ °--expr: { } [0/0] {92} - ¦--'{': { [0/0] {93} - °--'}': } [2/0] {94} + ¦ ¦--'{': { [0/0] {93} + ¦ °--'}': } [2/0] {94} + ¦--COMMENT: # cla [3/0] {95} + ¦--expr: funct [1/0] {96} + ¦ ¦--FUNCTION: funct [0/0] {97} + ¦ ¦--'(': ( [0/0] {98} + ¦ ¦--SYMBOL_FORMALS: a [0/1] {99} + ¦ ¦--EQ_FORMALS: = [0/13] {100} + ¦ ¦--expr: 33 [1/0] {102} + ¦ ¦ °--NUM_CONST: 33 [0/0] {101} + ¦ ¦--',': , [0/9] {103} + ¦ ¦--SYMBOL_FORMALS: b [1/0] {104} + ¦ ¦--')': ) [1/1] {105} + ¦ °--expr: {} [0/0] {106} + ¦ ¦--'{': { [0/0] {107} + ¦ °--'}': } [0/0] {108} + ¦--expr: funct [2/0] {109} + ¦ ¦--FUNCTION: funct [0/0] {110} + ¦ ¦--'(': ( [0/0] {111} + ¦ ¦--SYMBOL_FORMALS: a [0/1] {112} + ¦ ¦--EQ_FORMALS: = [0/11] {113} + ¦ ¦--expr: 33 [1/0] {115} + ¦ ¦ °--NUM_CONST: 33 [0/0] {114} + ¦ ¦--',': , [0/12] {116} + ¦ ¦--SYMBOL_FORMALS: b [1/2] {117} + ¦ ¦--')': ) [0/1] {118} + ¦ °--expr: {} [0/0] {119} + ¦ ¦--'{': { [0/0] {120} + ¦ °--'}': } [0/0] {121} + ¦--expr: funct [2/0] {122} + ¦ ¦--FUNCTION: funct [0/0] {123} + ¦ ¦--'(': ( [0/0] {124} + ¦ ¦--SYMBOL_FORMALS: a [0/1] {125} + ¦ ¦--',': , [0/9] {126} + ¦ ¦--SYMBOL_FORMALS: b [1/0] {127} + ¦ ¦--',': , [0/0] {128} + ¦ ¦--SYMBOL_FORMALS: c [1/0] {129} + ¦ ¦--')': ) [1/1] {130} + ¦ °--expr: {} [0/0] {131} + ¦ ¦--'{': { [0/0] {132} + ¦ °--'}': } [0/0] {133} + ¦--expr: funct [2/0] {134} + ¦ ¦--FUNCTION: funct [0/0] {135} + ¦ ¦--'(': ( [0/0] {136} + ¦ ¦--SYMBOL_FORMALS: a [0/0] {137} + ¦ ¦--',': , [0/12] {138} + ¦ ¦--SYMBOL_FORMALS: b [1/0] {139} + ¦ ¦--',': , [0/9] {140} + ¦ ¦--SYMBOL_FORMALS: c [1/0] {141} + ¦ ¦--')': ) [0/1] {142} + ¦ °--expr: {} [0/0] {143} + ¦ ¦--'{': { [0/0] {144} + ¦ °--'}': } [0/0] {145} + °--expr: funct [2/0] {146} + ¦--FUNCTION: funct [0/0] {147} + ¦--'(': ( [0/0] {148} + ¦--SYMBOL_FORMALS: ss [0/0] {149} + ¦--',': , [0/11] {150} + ¦--SYMBOL_FORMALS: a [1/1] {151} + ¦--EQ_FORMALS: = [0/13] {152} + ¦--expr: 3 [1/0] {154} + ¦ °--NUM_CONST: 3 [0/0] {153} + ¦--',': , [0/9] {155} + ¦--SYMBOL_FORMALS: er [1/1] {156} + ¦--EQ_FORMALS: = [0/11] {157} + ¦--expr: 4 [1/0] {159} + ¦ °--NUM_CONST: 4 [0/0] {158} + ¦--')': ) [1/1] {160} + °--expr: {} [0/0] {161} + ¦--'{': { [0/0] {162} + °--'}': } [0/0] {163} diff --git a/tests/testthat/roxygen-examples-complete/27-no-code-block-after-example-in_tree b/tests/testthat/roxygen-examples-complete/27-no-code-block-after-example-in_tree index 3c5e44121..3eac5d60e 100644 --- a/tests/testthat/roxygen-examples-complete/27-no-code-block-after-example-in_tree +++ b/tests/testthat/roxygen-examples-complete/27-no-code-block-after-example-in_tree @@ -6,7 +6,7 @@ ROOT (token: short_text [lag_newlines/spaces] {pos_id}) ¦--COMMENT: #' [1/0] {5} ¦--COMMENT: #' @e [1/0] {6} ¦--COMMENT: #' 1+ [1/0] {7} - ¦--COMMENT: #' no [3/0] {8} + ¦--COMMENT: # nol [3/0] {8} ¦--COMMENT: #' @e [1/0] {9} ¦--COMMENT: #' 32 [1/0] {10} - °--COMMENT: #' no [1/0] {11} + °--COMMENT: # nol [1/0] {11} diff --git a/tests/testthat/roxygen-examples-complete/28-end-not-blank-in_tree b/tests/testthat/roxygen-examples-complete/28-end-not-blank-in_tree new file mode 100644 index 000000000..9cd091e60 --- /dev/null +++ b/tests/testthat/roxygen-examples-complete/28-end-not-blank-in_tree @@ -0,0 +1,4 @@ +ROOT (token: short_text [lag_newlines/spaces] {pos_id}) + ¦--COMMENT: #' @e [0/0] {1} + ¦--COMMENT: #' @e [1/0] {2} + °--COMMENT: #' x= [1/0] {3} diff --git a/tests/testthat/roxygen-examples-complete/29-multiple-empty-lines-in-example-in_tree b/tests/testthat/roxygen-examples-complete/29-multiple-empty-lines-in-example-in_tree new file mode 100644 index 000000000..37a30f03f --- /dev/null +++ b/tests/testthat/roxygen-examples-complete/29-multiple-empty-lines-in-example-in_tree @@ -0,0 +1,13 @@ +ROOT (token: short_text [lag_newlines/spaces] {pos_id}) + ¦--COMMENT: #' Em [0/0] {1} + ¦--COMMENT: #' [1/0] {2} + ¦--COMMENT: #' @e [1/0] {3} + ¦--expr: 1 [1/0] {5} + ¦ °--NUM_CONST: 1 [0/0] {4} + ¦--COMMENT: #' Em [2/0] {6} + ¦--COMMENT: #' [1/0] {7} + ¦--COMMENT: #' @e [1/0] {8} + ¦--COMMENT: #' \d [1/0] {9} + ¦--COMMENT: #' } [1/0] {10} + °--expr: 2 [1/0] {12} + °--NUM_CONST: 2 [0/0] {11} diff --git a/tests/testthat/unindention/mixed-double-in_tree b/tests/testthat/unindention/mixed-double-in_tree new file mode 100644 index 000000000..48a5a8d9b --- /dev/null +++ b/tests/testthat/unindention/mixed-double-in_tree @@ -0,0 +1,189 @@ +ROOT (token: short_text [lag_newlines/spaces] {pos_id}) + ¦--COMMENT: # cla [0/0] {1} + ¦--expr: funct [2/0] {2} + ¦ ¦--FUNCTION: funct [0/0] {3} + ¦ ¦--'(': ( [0/0] {4} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {5} + ¦ ¦--',': , [0/9] {6} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {7} + ¦ ¦--')': ) [0/1] {8} + ¦ °--expr: { + 1 [0/0] {9} + ¦ ¦--'{': { [0/2] {10} + ¦ ¦--expr: 1 [1/0] {12} + ¦ ¦ °--NUM_CONST: 1 [0/0] {11} + ¦ °--'}': } [1/0] {13} + ¦--expr: funct [3/0] {14} + ¦ ¦--FUNCTION: funct [0/0] {15} + ¦ ¦--'(': ( [0/0] {16} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {17} + ¦ ¦--',': , [0/9] {18} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {19} + ¦ ¦--',': , [0/9] {20} + ¦ ¦--SYMBOL_FORMALS: k [1/0] {21} + ¦ ¦--')': ) [0/1] {22} + ¦ °--expr: { + 1 [0/0] {23} + ¦ ¦--'{': { [0/2] {24} + ¦ ¦--expr: 1 [1/0] {26} + ¦ ¦ °--NUM_CONST: 1 [0/0] {25} + ¦ °--'}': } [1/0] {27} + ¦--expr: funct [3/0] {28} + ¦ ¦--FUNCTION: funct [0/0] {29} + ¦ ¦--'(': ( [0/0] {30} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {31} + ¦ ¦--',': , [0/9] {32} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {33} + ¦ ¦--')': ) [0/1] {34} + ¦ °--expr: { + 1 [0/0] {35} + ¦ ¦--'{': { [0/2] {36} + ¦ ¦--expr: 1 [1/0] {38} + ¦ ¦ °--NUM_CONST: 1 [0/0] {37} + ¦ °--'}': } [1/0] {39} + ¦--expr: funct [2/0] {40} + ¦ ¦--FUNCTION: funct [0/0] {41} + ¦ ¦--'(': ( [0/9] {42} + ¦ ¦--SYMBOL_FORMALS: x [1/0] {43} + ¦ ¦--',': , [0/9] {44} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {45} + ¦ ¦--')': ) [0/1] {46} + ¦ °--expr: { + 1 [0/0] {47} + ¦ ¦--'{': { [0/2] {48} + ¦ ¦--expr: 1 [1/0] {50} + ¦ ¦ °--NUM_CONST: 1 [0/0] {49} + ¦ °--'}': } [1/0] {51} + ¦--expr: funct [3/0] {52} + ¦ ¦--FUNCTION: funct [0/0] {53} + ¦ ¦--'(': ( [0/0] {54} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {55} + ¦ ¦--',': , [0/1] {56} + ¦ ¦--SYMBOL_FORMALS: y [0/0] {57} + ¦ ¦--')': ) [0/1] {58} + ¦ °--expr: { + 1 [0/0] {59} + ¦ ¦--'{': { [0/2] {60} + ¦ ¦--expr: 1 [1/0] {62} + ¦ ¦ °--NUM_CONST: 1 [0/0] {61} + ¦ °--'}': } [1/0] {63} + ¦--expr: funct [2/0] {64} + ¦ ¦--FUNCTION: funct [0/0] {65} + ¦ ¦--'(': ( [0/0] {66} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {67} + ¦ ¦--',': , [0/9] {68} + ¦ ¦--COMMENT: # [1/9] {69} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {70} + ¦ ¦--')': ) [0/1] {71} + ¦ °--expr: { + 1 [0/0] {72} + ¦ ¦--'{': { [0/2] {73} + ¦ ¦--expr: 1 [1/0] {75} + ¦ ¦ °--NUM_CONST: 1 [0/0] {74} + ¦ °--'}': } [1/0] {76} + ¦--COMMENT: # dou [3/0] {77} + ¦--expr: funct [1/0] {78} + ¦ ¦--FUNCTION: funct [0/0] {79} + ¦ ¦--'(': ( [0/0] {80} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {81} + ¦ ¦--',': , [0/0] {82} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {83} + ¦ ¦--')': ) [0/1] {84} + ¦ °--expr: { + 1 [0/0] {85} + ¦ ¦--'{': { [0/2] {86} + ¦ ¦--expr: 1 [1/0] {88} + ¦ ¦ °--NUM_CONST: 1 [0/0] {87} + ¦ °--'}': } [1/0] {89} + ¦--expr: funct [3/0] {90} + ¦ ¦--FUNCTION: funct [0/0] {91} + ¦ ¦--'(': ( [0/0] {92} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {93} + ¦ ¦--',': , [0/0] {94} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {95} + ¦ ¦--',': , [0/9] {96} + ¦ ¦--SYMBOL_FORMALS: k [1/0] {97} + ¦ ¦--')': ) [0/1] {98} + ¦ °--expr: { + 1 [0/0] {99} + ¦ ¦--'{': { [0/2] {100} + ¦ ¦--expr: 1 [1/0] {102} + ¦ ¦ °--NUM_CONST: 1 [0/0] {101} + ¦ °--'}': } [1/0] {103} + ¦--expr: funct [3/0] {104} + ¦ ¦--FUNCTION: funct [0/0] {105} + ¦ ¦--'(': ( [0/4] {106} + ¦ ¦--SYMBOL_FORMALS: x [2/0] {107} + ¦ ¦--',': , [0/4] {108} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {109} + ¦ ¦--')': ) [0/1] {110} + ¦ °--expr: { + 1 [0/0] {111} + ¦ ¦--'{': { [0/2] {112} + ¦ ¦--expr: 1 [1/0] {114} + ¦ ¦ °--NUM_CONST: 1 [0/0] {113} + ¦ °--'}': } [1/0] {115} + ¦--expr: funct [3/0] {116} + ¦ ¦--FUNCTION: funct [0/0] {117} + ¦ ¦--'(': ( [0/2] {118} + ¦ ¦--SYMBOL_FORMALS: x [1/0] {119} + ¦ ¦--',': , [0/1] {120} + ¦ ¦--SYMBOL_FORMALS: y [0/0] {121} + ¦ ¦--')': ) [0/1] {122} + ¦ °--expr: { + 1 [0/0] {123} + ¦ ¦--'{': { [0/2] {124} + ¦ ¦--expr: 1 [1/0] {126} + ¦ ¦ °--NUM_CONST: 1 [0/0] {125} + ¦ °--'}': } [1/0] {127} + ¦--expr: funct [2/0] {128} + ¦ ¦--FUNCTION: funct [0/0] {129} + ¦ ¦--'(': ( [0/0] {130} + ¦ ¦--SYMBOL_FORMALS: x [0/0] {131} + ¦ ¦--',': , [0/0] {132} + ¦ ¦--COMMENT: # [1/25] {133} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {134} + ¦ ¦--')': ) [0/1] {135} + ¦ °--expr: { + 1 [0/0] {136} + ¦ ¦--'{': { [0/2] {137} + ¦ ¦--expr: 1 [1/0] {139} + ¦ ¦ °--NUM_CONST: 1 [0/0] {138} + ¦ °--'}': } [1/0] {140} + ¦--COMMENT: # las [3/0] {141} + ¦--expr: funct [1/0] {142} + ¦ ¦--FUNCTION: funct [0/0] {143} + ¦ ¦--'(': ( [0/4] {144} + ¦ ¦--SYMBOL_FORMALS: x [1/0] {145} + ¦ ¦--',': , [0/1] {146} + ¦ ¦--SYMBOL_FORMALS: y [0/0] {147} + ¦ ¦--')': ) [0/1] {148} + ¦ °--expr: NULL [0/0] {150} + ¦ °--NULL_CONST: NULL [0/0] {149} + ¦--expr: funct [2/0] {151} + ¦ ¦--FUNCTION: funct [0/0] {152} + ¦ ¦--'(': ( [0/4] {153} + ¦ ¦--SYMBOL_FORMALS: x [1/0] {154} + ¦ ¦--',': , [0/1] {155} + ¦ ¦--SYMBOL_FORMALS: y [0/0] {156} + ¦ ¦--')': ) [1/1] {157} + ¦ °--expr: NULL [0/0] {159} + ¦ °--NULL_CONST: NULL [0/0] {158} + ¦--expr: funct [2/0] {160} + ¦ ¦--FUNCTION: funct [0/0] {161} + ¦ ¦--'(': ( [0/4] {162} + ¦ ¦--SYMBOL_FORMALS: x [1/0] {163} + ¦ ¦--',': , [0/4] {164} + ¦ ¦--SYMBOL_FORMALS: y [1/0] {165} + ¦ ¦--')': ) [0/1] {166} + ¦ °--expr: NULL [0/0] {168} + ¦ °--NULL_CONST: NULL [0/0] {167} + °--expr: funct [2/0] {169} + ¦--FUNCTION: funct [0/0] {170} + ¦--'(': ( [0/4] {171} + ¦--SYMBOL_FORMALS: x [1/0] {172} + ¦--',': , [0/4] {173} + ¦--SYMBOL_FORMALS: y [1/0] {174} + ¦--')': ) [1/1] {175} + °--expr: NULL [0/0] {177} + °--NULL_CONST: NULL [0/0] {176}