All files

src/compiler/lexer.panack

Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.

    1 import "types.panack"
    2 
    3 record StringScan {
    4   end: Nat,
    5   terminated: Bool
    6 }
    7 
    8 pure scan_digits(source: Str, start: Nat): Nat {
    9   mut cursor: Nat = start
   10   while cursor < len(source) && is_digit(source[cursor]) {
   11     cursor = cursor + 1
   12   }
   13   cursor
   14 }
   15 
   16 pure scan_identifier(source: Str, start: Nat): Nat {
   17   mut cursor: Nat = start
   18   while cursor < len(source) && (is_letter(source[cursor]) || is_digit(source[cursor]) || source[cursor] == "_") {
   19     cursor = cursor + 1
   20   }
   21   cursor
   22 }
   23 
   24 pure scan_comment(source: Str, start: Nat): Nat {
   25   mut cursor: Nat = start
   26   while cursor < len(source) && source[cursor] != "\n" {
   27     cursor = cursor + 1
   28   }
   29   cursor
   30 }
   31 
   32 pure scan_string(source: Str, start: Nat): StringScan {
   33   mut cursor: Nat = start + 1
   34   mut escaped: Bool = false
   35   mut terminated: Bool = false
   36   while cursor < len(source) && !terminated {
   37     if escaped {
   38       escaped = false
   39     } else {
   40       if source[cursor] == "\\" {
   41         escaped = true
   42       } else {
   43         if source[cursor] == "\"" {
   44           terminated = true
   45         } else {
   46         }
   47       }
   48     }
   49     cursor = cursor + 1
   50   }
   51   StringScan(cursor, terminated)
   52 }
   53 
   54 pure advance_position(source: Str, start: Nat, end: Nat, position: SourcePos): SourcePos {
   55   mut cursor: Nat = start
   56   mut line: Nat = position.line
   57   mut column: Nat = position.column
   58   while cursor < end {
   59     if source[cursor] == "\n" { line = line + 1; column = 1; }
   60     else { column = column + 1; }
   61     cursor = cursor + 1
   62   }
   63   SourcePos(position.file, end, line, column)
   64 }
   65 
   66 pure source_token(source: Str, kind: TokenKind, text: Str, start: Nat, end: Nat, position: SourcePos): Token {
   67   end_position: SourcePos = advance_position(source, start, end, position)
   68   Token(kind, text, start, end, position, end_position.line, end_position.column)
   69 }
   70 
   71 pure is_two_character_symbol(source: Str, cursor: Nat): Bool {
   72   starts_with_at(source, "=>", cursor) ||
   73   starts_with_at(source, "..", cursor) ||
   74   starts_with_at(source, "==", cursor) ||
   75   starts_with_at(source, "!=", cursor) ||
   76   starts_with_at(source, "<=", cursor) ||
   77   starts_with_at(source, ">=", cursor) ||
   78   starts_with_at(source, "&&", cursor) ||
   79   starts_with_at(source, "||", cursor)
   80 }
   81 
   82 pure is_single_character_symbol(character: Str): Bool {
   83   character == "(" || character == ")" ||
   84   character == "{" || character == "}" ||
   85   character == "[" || character == "]" ||
   86   character == "." || character == "," ||
   87   character == ";" || character == ":" || character == "=" ||
   88   character == "@" ||
   89   character == "+" || character == "-" || character == "*" ||
   90   character == "/" || character == "%" ||
   91   character == "<" || character == ">" || character == "!"
   92 }
   93 
   94 pure is_line_prefix_keyword(text: Str): Bool {
   95   text == "pure" || text == "import" || text == "type" ||
   96   text == "record" || text == "enum" || text == "mut" ||
   97   text == "for" || text == "while" || text == "if" ||
   98   text == "match" || text == "where" || text == "in"
   99 }
  100 
  101 pure is_line_continuation_keyword(text: Str): Bool {
  102   text == "else" || text == "where" || text == "in"
  103 }
  104 
  105 pure token_can_end_statement(token: Token): Bool {
  106   ((token.kind == Identifier() || token.kind == Number() ||
  107     token.kind == DecimalNumber() || token.kind == StringLiteral()) &&
  108    !is_line_prefix_keyword(token.text)) ||
  109   token.text == ")" || token.text == "]" || token.text == "}"
  110 }
  111 
  112 pure token_can_start_statement(token: Token): Bool {
  113   !is_line_continuation_keyword(token.text) &&
  114   (token.kind == Identifier() || token.kind == Number() ||
  115    token.kind == DecimalNumber() || token.kind == StringLiteral() ||
  116    token.text == "(" || token.text == "[")
  117 }
  118 
  119 pure prior_index(value: Nat): Nat {
  120   if value == 0 { 0 } else { value - 1 }
  121 }
  122 
  123 pure normalize_line_breaks(tokens: [Token]): [Token] {
  124   mut result: [Token] = []
  125   mut soft_depth: Nat = 0
  126   mut brace_depth: Nat = 0
  127   mut brace_soft_depths: Map[Nat,Nat] = map()
  128   mut index: Nat = 0
  129 
  130   while index < len(tokens) {
  131     token: Token = tokens[index]
  132     if token.text == "\n" {
  133       mut next_index: Nat = index + 1
  134       while next_index < len(tokens) && tokens[next_index].text == "\n" {
  135         next_index = next_index + 1
  136       }
  137       baseline: Nat = if brace_depth > 0 && brace_soft_depths.has(brace_depth) {
  138         brace_soft_depths.get(brace_depth)
  139       } else {
  140         0
  141       }
  142       if soft_depth <= baseline && len(result) > 0 && next_index < len(tokens) &&
  143           token_can_end_statement(result[prior_index(len(result))]) &&
  144           token_can_start_statement(tokens[next_index]) {
  145         result = append(result, Token(Punctuation(), ";", token.start, token.end, token.position, token.end_line, token.end_column))
  146       }
  147     } else {
  148       result = append(result, token)
  149       if token.text == "(" || token.text == "[" {
  150         soft_depth = soft_depth + 1
  151       } else {
  152         if (token.text == ")" || token.text == "]") && soft_depth > 0 {
  153           soft_depth = prior_index(soft_depth)
  154         } else {
  155           if token.text == "{" {
  156             brace_depth = brace_depth + 1
  157             brace_soft_depths = brace_soft_depths.put(brace_depth, soft_depth)
  158           } else {
  159             if token.text == "}" && brace_depth > 0 {
  160               brace_depth = prior_index(brace_depth)
  161             }
  162           }
  163         }
  164       }
  165     }
  166     index = index + 1
  167   }
  168 
  169   result
  170 }
  171 
  172 pure lex_file(source: Str, file: Str): Result[[Token],[Diagnostic]] {
  173   mut tokens: [Token] = []
  174   mut diagnostics: [Diagnostic] = []
  175   mut cursor: Nat = 0
  176   mut current_position: SourcePos = SourcePos(file, 0, 1, 1)
  177 
  178   while cursor < len(source) {
  179     iteration_start: Nat = cursor
  180     character: Str = source[cursor]
  181     if character == "\n" {
  182       end: Nat = cursor + 1
  183       tokens = append(tokens, source_token(source, Punctuation(), "\n", cursor, end, current_position))
  184       cursor = end
  185     } else {
  186       if is_whitespace(character) {
  187         cursor = cursor + 1
  188       } else {
  189         if starts_with_at(source, "//", cursor) {
  190           cursor = scan_comment(source, cursor + 2)
  191         } else {
  192           if is_digit(character) {
  193             integer_end: Nat = scan_digits(source, cursor)
  194             if integer_end < len(source) && source[integer_end] == "." && integer_end + 1 < len(source) && is_digit(source[integer_end + 1]) {
  195               end: Nat = scan_digits(source, integer_end + 1)
  196               tokens = append(tokens, source_token(source, DecimalNumber(), slice(source, cursor, end), cursor, end, current_position))
  197               cursor = end
  198             } else {
  199               tokens = append(tokens, source_token(source, Number(), slice(source, cursor, integer_end), cursor, integer_end, current_position))
  200               cursor = integer_end
  201             }
  202           } else {
  203             if is_letter(character) || character == "_" {
  204               end: Nat = scan_identifier(source, cursor)
  205               tokens = append(tokens, source_token(source, Identifier(), slice(source, cursor, end), cursor, end, current_position))
  206               cursor = end
  207             } else {
  208               if character == "\"" {
  209                 scanned: StringScan = scan_string(source, cursor)
  210                 end: Nat = scanned.end
  211                 if !scanned.terminated {
  212                   diagnostics = append(diagnostics, Diagnostic("unterminated string", current_position))
  213                 }
  214                 tokens = append(tokens, source_token(source, StringLiteral(), slice(source, cursor, end), cursor, end, current_position))
  215                 cursor = end
  216               } else {
  217                 if is_two_character_symbol(source, cursor) {
  218                   end: Nat = cursor + 2
  219                   tokens = append(tokens, source_token(source, Punctuation(), slice(source, cursor, end), cursor, end, current_position))
  220                   cursor = end
  221                 } else {
  222                   if is_single_character_symbol(character) {
  223                     end: Nat = cursor + 1
  224                     tokens = append(tokens, source_token(source, Punctuation(), character, cursor, end, current_position))
  225                     cursor = end
  226                   } else {
  227                     diagnostics = append(diagnostics, Diagnostic("unexpected character ${character}", current_position))
  228                     cursor = cursor + 1
  229                   }
  230                 }
  231               }
  232             }
  233           }
  234         }
  235       }
  236     }
  237     current_position = advance_position(source, iteration_start, cursor, current_position)
  238   }
  239 
  240   if len(diagnostics) == 0 { Ok(normalize_line_breaks(tokens)) } else { Error(diagnostics) }
  241 }
  242 
  243 pure lex(source: Str): Result[[Token],[Diagnostic]] {
  244   lex_file(source, "")
  245 }
  246 
  247 pure kind_name(kind: TokenKind): Str {
  248   match kind {
  249     Identifier() => "identifier",
  250     Number() => "number",
  251     DecimalNumber() => "decimal",
  252     StringLiteral() => "string",
  253     Punctuation() => "punctuation"
  254   }
  255 }
  256 
  257 pure render_tokens(tokens: [Token]): Str {
  258   mut output: Str = ""
  259   for token in tokens {
  260     name: Str = kind_name(token.kind)
  261     text: Str = token.text
  262     output = output + "${name}:${text}\n"
  263   }
  264   output
  265 }
  266 
  267 pure render_diagnostics(diagnostics: [Diagnostic]): Str {
  268   mut output: Str = ""
  269   for diagnostic in diagnostics {
  270     line: Nat = diagnostic.position.line
  271     column: Nat = diagnostic.position.column
  272     message: Str = diagnostic.message
  273     output = output + "${line}:${column}: ${message}\n"
  274   }
  275   output
  276 }
  277 
  278 pure render(result: Result[[Token],[Diagnostic]]): Str {
  279   match result {
  280     Ok(tokens) => render_tokens(tokens),
  281     Error(diagnostics) => render_diagnostics(diagnostics)
  282   }
  283 }
  284 

Functions

[
  {
    "id": "declaration/2",
    "name": "scan_digits",
    "line": 8,
    "state": "covered",
    "entries": "2820"
  },
  {
    "id": "declaration/3",
    "name": "scan_identifier",
    "line": 16,
    "state": "covered",
    "entries": "56289"
  },
  {
    "id": "declaration/4",
    "name": "scan_comment",
    "line": 24,
    "state": "covered",
    "entries": "301"
  },
  {
    "id": "declaration/5",
    "name": "scan_string",
    "line": 32,
    "state": "covered",
    "entries": "2670"
  },
  {
    "id": "declaration/6",
    "name": "advance_position",
    "line": 54,
    "state": "covered",
    "entries": "421604"
  },
  {
    "id": "declaration/7",
    "name": "source_token",
    "line": 66,
    "state": "covered",
    "entries": "151170"
  },
  {
    "id": "declaration/8",
    "name": "is_two_character_symbol",
    "line": 71,
    "state": "covered",
    "entries": "75644"
  },
  {
    "id": "declaration/9",
    "name": "is_single_character_symbol",
    "line": 82,
    "state": "covered",
    "entries": "70819"
  },
  {
    "id": "declaration/10",
    "name": "is_line_prefix_keyword",
    "line": 94,
    "state": "covered",
    "entries": "1578"
  },
  {
    "id": "declaration/11",
    "name": "is_line_continuation_keyword",
    "line": 101,
    "state": "covered",
    "entries": "7941"
  },
  {
    "id": "declaration/12",
    "name": "token_can_end_statement",
    "line": 105,
    "state": "covered",
    "entries": "13425"
  },
  {
    "id": "declaration/13",
    "name": "token_can_start_statement",
    "line": 112,
    "state": "covered",
    "entries": "7941"
  },
  {
    "id": "declaration/14",
    "name": "prior_index",
    "line": 119,
    "state": "covered",
    "entries": "35204"
  },
  {
    "id": "declaration/15",
    "name": "normalize_line_breaks",
    "line": 123,
    "state": "covered",
    "entries": "1149"
  },
  {
    "id": "declaration/16",
    "name": "lex_file",
    "line": 172,
    "state": "covered",
    "entries": "1156"
  },
  {
    "id": "declaration/17",
    "name": "lex",
    "line": 243,
    "state": "covered",
    "entries": "544"
  },
  {
    "id": "declaration/18",
    "name": "kind_name",
    "line": 247,
    "state": "covered",
    "entries": "65"
  },
  {
    "id": "declaration/19",
    "name": "render_tokens",
    "line": 257,
    "state": "covered",
    "entries": "4"
  },
  {
    "id": "declaration/20",
    "name": "render_diagnostics",
    "line": 267,
    "state": "covered",
    "entries": "3"
  },
  {
    "id": "declaration/21",
    "name": "render",
    "line": 278,
    "state": "covered",
    "entries": "7"
  }
]

Source branch outcomes

[
  {
    "id": "declaration/2/statement/1/decision/body",
    "outcome": "body",
    "line": 10,
    "state": "covered",
    "hits": "3554"
  },
  {
    "id": "declaration/2/statement/1/decision/exit",
    "outcome": "exit",
    "line": 10,
    "state": "covered",
    "hits": "2820"
  },
  {
    "id": "declaration/2/statement/1/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 10,
    "state": "covered",
    "hits": "6350"
  },
  {
    "id": "declaration/2/statement/1/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 10,
    "state": "covered",
    "hits": "24"
  },
  {
    "id": "declaration/3/statement/1/decision/body",
    "outcome": "body",
    "line": 18,
    "state": "covered",
    "hits": "366640"
  },
  {
    "id": "declaration/3/statement/1/decision/exit",
    "outcome": "exit",
    "line": 18,
    "state": "covered",
    "hits": "56289"
  },
  {
    "id": "declaration/3/statement/1/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 18,
    "state": "covered",
    "hits": "422807"
  },
  {
    "id": "declaration/3/statement/1/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 18,
    "state": "covered",
    "hits": "122"
  },
  {
    "id": "declaration/3/statement/1/condition/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 18,
    "state": "covered",
    "hits": "64089"
  },
  {
    "id": "declaration/3/statement/1/condition/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 18,
    "state": "covered",
    "hits": "358718"
  },
  {
    "id": "declaration/3/statement/1/condition/right/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 18,
    "state": "covered",
    "hits": "64478"
  },
  {
    "id": "declaration/3/statement/1/condition/right/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 18,
    "state": "covered",
    "hits": "358329"
  },
  {
    "id": "declaration/4/statement/1/decision/body",
    "outcome": "body",
    "line": 26,
    "state": "covered",
    "hits": "20945"
  },
  {
    "id": "declaration/4/statement/1/decision/exit",
    "outcome": "exit",
    "line": 26,
    "state": "covered",
    "hits": "301"
  },
  {
    "id": "declaration/4/statement/1/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 26,
    "state": "covered",
    "hits": "21244"
  },
  {
    "id": "declaration/4/statement/1/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 26,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/5/statement/3/decision/body",
    "outcome": "body",
    "line": 36,
    "state": "covered",
    "hits": "35716"
  },
  {
    "id": "declaration/5/statement/3/decision/exit",
    "outcome": "exit",
    "line": 36,
    "state": "covered",
    "hits": "2670"
  },
  {
    "id": "declaration/5/statement/3/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 36,
    "state": "covered",
    "hits": "38379"
  },
  {
    "id": "declaration/5/statement/3/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 36,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/decision/true",
    "outcome": "true",
    "line": 37,
    "state": "covered",
    "hits": "140"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/decision/false",
    "outcome": "false",
    "line": 37,
    "state": "covered",
    "hits": "35576"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/false/tail/decision/true",
    "outcome": "true",
    "line": 40,
    "state": "covered",
    "hits": "140"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/false/tail/decision/false",
    "outcome": "false",
    "line": 40,
    "state": "covered",
    "hits": "35436"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 43,
    "state": "covered",
    "hits": "2668"
  },
  {
    "id": "declaration/5/statement/3/body/statement/0/value/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 43,
    "state": "covered",
    "hits": "32768"
  },
  {
    "id": "declaration/6/statement/3/decision/body",
    "outcome": "body",
    "line": 58,
    "state": "covered",
    "hits": "1146174"
  },
  {
    "id": "declaration/6/statement/3/decision/exit",
    "outcome": "exit",
    "line": 58,
    "state": "covered",
    "hits": "421604"
  },
  {
    "id": "declaration/6/statement/3/body/statement/0/value/decision/true",
    "outcome": "true",
    "line": 59,
    "state": "covered",
    "hits": "27546"
  },
  {
    "id": "declaration/6/statement/3/body/statement/0/value/decision/false",
    "outcome": "false",
    "line": 59,
    "state": "covered",
    "hits": "1118628"
  },
  {
    "id": "declaration/8/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "71492"
  },
  {
    "id": "declaration/8/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "4152"
  },
  {
    "id": "declaration/8/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "71988"
  },
  {
    "id": "declaration/8/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "3656"
  },
  {
    "id": "declaration/8/tail/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "72119"
  },
  {
    "id": "declaration/8/tail/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "3525"
  },
  {
    "id": "declaration/8/tail/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "72176"
  },
  {
    "id": "declaration/8/tail/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "3468"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "72343"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "3301"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "73796"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "1848"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 72,
    "state": "covered",
    "hits": "73878"
  },
  {
    "id": "declaration/8/tail/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 72,
    "state": "covered",
    "hits": "1766"
  },
  {
    "id": "declaration/9/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "193"
  },
  {
    "id": "declaration/9/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "70626"
  },
  {
    "id": "declaration/9/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "370"
  },
  {
    "id": "declaration/9/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "70449"
  },
  {
    "id": "declaration/9/tail/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "656"
  },
  {
    "id": "declaration/9/tail/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "70163"
  },
  {
    "id": "declaration/9/tail/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "673"
  },
  {
    "id": "declaration/9/tail/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "70146"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "868"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "69951"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "905"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "69914"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "1066"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "69753"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "2123"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "68696"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "2195"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "68624"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "6544"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "64275"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "12616"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "58203"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "13960"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "56859"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "23695"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "47124"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "27620"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "43199"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "30807"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "40012"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "33997"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "36822"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "41318"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "29501"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "48643"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "22176"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 83,
    "state": "covered",
    "hits": "59728"
  },
  {
    "id": "declaration/9/tail/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 83,
    "state": "covered",
    "hits": "11091"
  },
  {
    "id": "declaration/10/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1578"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 95,
    "state": "covered",
    "hits": "1578"
  },
  {
    "id": "declaration/10/tail/left/left/left/left/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 95,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/11/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 102,
    "state": "covered",
    "hits": "7740"
  },
  {
    "id": "declaration/11/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 102,
    "state": "covered",
    "hits": "201"
  },
  {
    "id": "declaration/11/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 102,
    "state": "covered",
    "hits": "7740"
  },
  {
    "id": "declaration/11/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 102,
    "state": "covered",
    "hits": "201"
  },
  {
    "id": "declaration/12/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "9121"
  },
  {
    "id": "declaration/12/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "4304"
  },
  {
    "id": "declaration/12/tail/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "9479"
  },
  {
    "id": "declaration/12/tail/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "3946"
  },
  {
    "id": "declaration/12/tail/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "11848"
  },
  {
    "id": "declaration/12/tail/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "1577"
  },
  {
    "id": "declaration/12/tail/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "1578"
  },
  {
    "id": "declaration/12/tail/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "11847"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "12116"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "1309"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "12117"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "1308"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 106,
    "state": "covered",
    "hits": "12629"
  },
  {
    "id": "declaration/12/tail/left/left/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 106,
    "state": "covered",
    "hits": "796"
  },
  {
    "id": "declaration/13/tail/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 113,
    "state": "covered",
    "hits": "7740"
  },
  {
    "id": "declaration/13/tail/decision/skip-right",
    "outcome": "skip-right",
    "line": 113,
    "state": "covered",
    "hits": "201"
  },
  {
    "id": "declaration/13/tail/right/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 114,
    "state": "covered",
    "hits": "3135"
  },
  {
    "id": "declaration/13/tail/right/decision/skip-right",
    "outcome": "skip-right",
    "line": 114,
    "state": "covered",
    "hits": "4605"
  },
  {
    "id": "declaration/13/tail/right/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 114,
    "state": "covered",
    "hits": "3138"
  },
  {
    "id": "declaration/13/tail/right/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 114,
    "state": "covered",
    "hits": "4602"
  },
  {
    "id": "declaration/13/tail/right/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 114,
    "state": "covered",
    "hits": "3162"
  },
  {
    "id": "declaration/13/tail/right/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 114,
    "state": "covered",
    "hits": "4578"
  },
  {
    "id": "declaration/13/tail/right/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 114,
    "state": "covered",
    "hits": "3162"
  },
  {
    "id": "declaration/13/tail/right/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 114,
    "state": "covered",
    "hits": "4578"
  },
  {
    "id": "declaration/13/tail/right/left/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 114,
    "state": "covered",
    "hits": "3179"
  },
  {
    "id": "declaration/13/tail/right/left/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 114,
    "state": "covered",
    "hits": "4561"
  },
  {
    "id": "declaration/14/tail/decision/true",
    "outcome": "true",
    "line": 120,
    "state": "zero",
    "hits": "0"
  },
  {
    "id": "declaration/14/tail/decision/false",
    "outcome": "false",
    "line": 120,
    "state": "covered",
    "hits": "35204"
  },
  {
    "id": "declaration/15/statement/5/decision/body",
    "outcome": "body",
    "line": 130,
    "state": "covered",
    "hits": "151166"
  },
  {
    "id": "declaration/15/statement/5/decision/exit",
    "outcome": "exit",
    "line": 130,
    "state": "covered",
    "hits": "1149"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/decision/true",
    "outcome": "true",
    "line": 132,
    "state": "covered",
    "hits": "13772"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/decision/false",
    "outcome": "false",
    "line": 132,
    "state": "covered",
    "hits": "137394"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/1/decision/body",
    "outcome": "body",
    "line": 134,
    "state": "covered",
    "hits": "1278"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/1/decision/exit",
    "outcome": "exit",
    "line": 134,
    "state": "covered",
    "hits": "13772"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/1/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 134,
    "state": "covered",
    "hits": "14900"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/1/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 134,
    "state": "covered",
    "hits": "150"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/2/value/decision/true",
    "outcome": "true",
    "line": 137,
    "state": "covered",
    "hits": "11341"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/2/value/decision/false",
    "outcome": "false",
    "line": 137,
    "state": "covered",
    "hits": "2431"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/2/value/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 137,
    "state": "covered",
    "hits": "11341"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/statement/2/value/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 137,
    "state": "covered",
    "hits": "2431"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/decision/true",
    "outcome": "true",
    "line": 142,
    "state": "covered",
    "hits": "4605"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/decision/false",
    "outcome": "false",
    "line": 142,
    "state": "covered",
    "hits": "9167"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 142,
    "state": "covered",
    "hits": "7941"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 142,
    "state": "covered",
    "hits": "5831"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 142,
    "state": "covered",
    "hits": "13425"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 142,
    "state": "covered",
    "hits": "347"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 142,
    "state": "covered",
    "hits": "13575"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 142,
    "state": "covered",
    "hits": "197"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 142,
    "state": "covered",
    "hits": "13732"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/true/tail/condition/left/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 142,
    "state": "covered",
    "hits": "40"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/decision/true",
    "outcome": "true",
    "line": 149,
    "state": "covered",
    "hits": "14281"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/decision/false",
    "outcome": "false",
    "line": 149,
    "state": "covered",
    "hits": "123113"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 149,
    "state": "covered",
    "hits": "126303"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 149,
    "state": "covered",
    "hits": "11091"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 152,
    "state": "covered",
    "hits": "14272"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 152,
    "state": "covered",
    "hits": "108841"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 152,
    "state": "covered",
    "hits": "14272"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 152,
    "state": "covered",
    "hits": "108841"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 152,
    "state": "covered",
    "hits": "112028"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 152,
    "state": "covered",
    "hits": "11085"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 155,
    "state": "covered",
    "hits": "7325"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 155,
    "state": "covered",
    "hits": "101516"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 159,
    "state": "covered",
    "hits": "7321"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 159,
    "state": "covered",
    "hits": "94195"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 159,
    "state": "covered",
    "hits": "7321"
  },
  {
    "id": "declaration/15/statement/5/body/statement/1/value/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 159,
    "state": "covered",
    "hits": "94195"
  },
  {
    "id": "declaration/16/statement/4/decision/body",
    "outcome": "body",
    "line": 178,
    "state": "covered",
    "hits": "270434"
  },
  {
    "id": "declaration/16/statement/4/decision/exit",
    "outcome": "exit",
    "line": 178,
    "state": "covered",
    "hits": "1156"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/decision/true",
    "outcome": "true",
    "line": 181,
    "state": "covered",
    "hits": "13773"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/decision/false",
    "outcome": "false",
    "line": 181,
    "state": "covered",
    "hits": "256661"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/decision/true",
    "outcome": "true",
    "line": 186,
    "state": "covered",
    "hits": "118955"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/decision/false",
    "outcome": "false",
    "line": 186,
    "state": "covered",
    "hits": "137706"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 189,
    "state": "covered",
    "hits": "301"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 189,
    "state": "covered",
    "hits": "137405"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 192,
    "state": "covered",
    "hits": "2802"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 192,
    "state": "covered",
    "hits": "134603"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/decision/true",
    "outcome": "true",
    "line": 194,
    "state": "covered",
    "hits": "18"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/decision/false",
    "outcome": "false",
    "line": 194,
    "state": "covered",
    "hits": "2784"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 194,
    "state": "covered",
    "hits": "82"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 194,
    "state": "covered",
    "hits": "2720"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 194,
    "state": "covered",
    "hits": "82"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 194,
    "state": "covered",
    "hits": "2720"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/left/left/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 194,
    "state": "covered",
    "hits": "2782"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/true/tail/condition/left/left/decision/skip-right",
    "outcome": "skip-right",
    "line": 194,
    "state": "covered",
    "hits": "20"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 203,
    "state": "covered",
    "hits": "56289"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 203,
    "state": "covered",
    "hits": "78314"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
    "outcome": "evaluate-right",
    "line": 203,
    "state": "covered",
    "hits": "78315"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
    "outcome": "skip-right",
    "line": 203,
    "state": "covered",
    "hits": "56288"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 208,
    "state": "covered",
    "hits": "2670"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 208,
    "state": "covered",
    "hits": "75644"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/statement/2/value/decision/true",
    "outcome": "true",
    "line": 211,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/statement/2/value/decision/false",
    "outcome": "false",
    "line": 211,
    "state": "covered",
    "hits": "2668"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 217,
    "state": "covered",
    "hits": "4825"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 217,
    "state": "covered",
    "hits": "70819"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
    "outcome": "true",
    "line": 222,
    "state": "covered",
    "hits": "70811"
  },
  {
    "id": "declaration/16/statement/4/body/statement/2/value/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
    "outcome": "false",
    "line": 222,
    "state": "covered",
    "hits": "8"
  },
  {
    "id": "declaration/16/tail/decision/true",
    "outcome": "true",
    "line": 240,
    "state": "covered",
    "hits": "1149"
  },
  {
    "id": "declaration/16/tail/decision/false",
    "outcome": "false",
    "line": 240,
    "state": "covered",
    "hits": "7"
  },
  {
    "id": "declaration/18/tail/arm/0",
    "outcome": "Identifier",
    "line": 249,
    "state": "covered",
    "hits": "12"
  },
  {
    "id": "declaration/18/tail/arm/1",
    "outcome": "Number",
    "line": 250,
    "state": "covered",
    "hits": "5"
  },
  {
    "id": "declaration/18/tail/arm/2",
    "outcome": "DecimalNumber",
    "line": 251,
    "state": "covered",
    "hits": "2"
  },
  {
    "id": "declaration/18/tail/arm/3",
    "outcome": "StringLiteral",
    "line": 252,
    "state": "covered",
    "hits": "1"
  },
  {
    "id": "declaration/18/tail/arm/4",
    "outcome": "Punctuation",
    "line": 253,
    "state": "covered",
    "hits": "45"
  },
  {
    "id": "declaration/19/statement/1/decision/body",
    "outcome": "body",
    "line": 259,
    "state": "covered",
    "hits": "65"
  },
  {
    "id": "declaration/19/statement/1/decision/exit",
    "outcome": "exit",
    "line": 259,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/20/statement/1/decision/body",
    "outcome": "body",
    "line": 269,
    "state": "covered",
    "hits": "6"
  },
  {
    "id": "declaration/20/statement/1/decision/exit",
    "outcome": "exit",
    "line": 269,
    "state": "covered",
    "hits": "3"
  },
  {
    "id": "declaration/21/tail/arm/0",
    "outcome": "Ok",
    "line": 280,
    "state": "covered",
    "hits": "4"
  },
  {
    "id": "declaration/21/tail/arm/1",
    "outcome": "Error",
    "line": 281,
    "state": "covered",
    "hits": "3"
  }
]

Reviewed declaration exclusions

[
  {
    "id": "declaration/0",
    "reason": "import",
    "line": 1
  },
  {
    "id": "declaration/1",
    "reason": "record-declaration",
    "line": 3
  }
]