src/compiler/driver.panack
Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.
1 import "explanations.panack" 2 import "coverage_session.panack" 3 4 record PreparedProject { 5 valid: Bool, 6 program: Program, 7 message: Str 8 } 9 10 pure diagnostic_messages(diagnostics: [Diagnostic], sources: Map[Str,Str]): Str { 11 mut output: Str = "" 12 mut first: Bool = true 13 for diagnostic in diagnostics { 14 if first { first = false; } else { output = output + "\n"; } 15 output = output + diagnostic_with_source(diagnostic, sources) 16 } 17 output 18 } 19 20 prepare_project(path: Str): PreparedProject { 21 loaded: LoadedProject = load_project(path) 22 if len(loaded.diagnostics) == 0 { 23 PreparedProject(true, loaded.program, "") 24 } else { 25 PreparedProject(false, loaded.program, diagnostic_messages(loaded.diagnostics, loaded.sources)) 26 } 27 } 28 29 report_driver_error(message: Str): Nat { 30 eprint("error: ${message}") 31 1 32 } 33 34 pure driver_usage(): Str { 35 "usage: panack coverage-run ARTIFACT.bc INVENTORY RAW [arguments...]\n panack coverage-session DIRECTORY ARTIFACT INVENTORY [ARTIFACT INVENTORY ...] -- [arguments...]\n panack coverage-aggregate --source SOURCE INVENTORY [--source SOURCE INVENTORY ...] --session DIRECTORY [--session DIRECTORY ...]\n panack coverage-report SOURCE.panack --inventory FILE --coverage RAW\n panack inventory SOURCE.panack -o FILE [--include SOURCE.panack]\n panack inventory-check SOURCE.panack --inventory FILE [--include SOURCE.panack]\n panack FILE | panack {check,compile,run,disasm} FILE\n panack explain SOURCE.panack --function NAME\n panack compile SOURCE.panack -o ARTIFACT.bc --source-map MAP\n panack locate ARTIFACT.bc --source SOURCE.panack --source-map MAP --function NAME --instruction PC" 36 } 37 38 pure without_final_newline(text: Str): Str { 39 end: Nat = len(text) 40 if end > 0 { 41 last: Nat = end - 1 42 if text[last] == "\n" { slice(text, 0, last) } else { text } 43 } else { 44 text 45 } 46 } 47 48 run_source_command(command: Str, path: Str, output: Str, program_arguments: [Str]): Nat { 49 prepared: PreparedProject = prepare_project(path) 50 if !prepared.valid { 51 report_driver_error(prepared.message) 52 } else { 53 if command == "check" { 54 print("ok") 55 0 56 } else { 57 bytecode: BytecodeProgram = compile_program(prepared.program) 58 if command == "compile" { 59 destination: Str = if len(output) > 0 { output } else { path_with_suffix(path, ".bc") } 60 if path_resolve(destination) == path_resolve(path) { 61 report_driver_error("bytecode output cannot overwrite the source file") 62 } else { 63 write_bytes(destination, serialize_bytecode(bytecode)) 64 print("wrote ${destination}") 65 0 66 } 67 } else { 68 if command == "disasm" { 69 print(without_final_newline(render_bytecode(bytecode))) 70 0 71 } else { 72 run_bytecode_args(serialize_bytecode(bytecode), program_arguments) 73 0 74 } 75 } 76 } 77 } 78 } 79 80 run_explain_command(values: [Str]): Nat { 81 if len(values) != 4 { 82 report_driver_error("explain usage: explain SOURCE.panack --function NAME") 83 } else { 84 if path_suffix(values[1]) != ".panack" || values[2] != "--function" || values[3] == "" { 85 report_driver_error("explain usage: explain SOURCE.panack --function NAME") 86 } else { 87 loaded: LoadedProject = load_project_explained(values[1]) 88 name: Str = values[3] 89 valid: Bool = len(loaded.diagnostics) == 0 90 if !function_type(loaded.program, name).found && valid { 91 report_driver_error("explain: unknown function " + source_map_escape(name)) 92 } else { 93 stdlib_root: Str = if environment_has("PANACKELTY_STDLIB_PATH") { 94 path_resolve(environment_get("PANACKELTY_STDLIB_PATH")) 95 } else { "" } 96 print(render_function_explanations(loaded, name, path_parent(path_resolve(values[1])), stdlib_root)) 97 if valid { 0 } else { report_driver_error(diagnostic_messages(loaded.diagnostics, loaded.sources)) } 98 } 99 } 100 } 101 } 102 103 run_artifact_command(command: Str, path: Str, program_arguments: [Str]): Nat { 104 data: Bytes = read_bytes(path) 105 validation: Str = validate_bytecode(data) 106 if validation != "ok" { 107 report_driver_error(validation) 108 } else { 109 if command == "check" { 110 print("ok") 111 0 112 } else { 113 if command == "disasm" { 114 print(without_final_newline(disassemble_bytecode(data))) 115 0 116 } else { 117 run_bytecode_args(data, program_arguments) 118 0 119 } 120 } 121 } 122 } 123 124 pure source_map_argument_present(arguments: [Str]): Bool { 125 mut present: Bool = false 126 for argument in arguments { if argument == "--source-map" { present = true; } } 127 present 128 } 129 130 record SourceMapArguments { 131 valid: Bool, 132 source: Str, 133 artifact: Str, 134 sidecar: Str, 135 function_name: Str, 136 instruction: Nat 137 } 138 139 pure source_map_instruction(text: Str): Option[Nat] { 140 mut valid: Bool = len(text) > 0 && len(text) <= 10 141 for index in 0..len(text) { 142 if text[index] < "0" || text[index] > "9" { valid = false; } 143 } 144 if valid { 145 value: Nat = nat_from_str(text) 146 if value <= 4294967295 { Some(value) } else { None() } 147 } else { None() } 148 } 149 150 pure source_map_arguments(values: [Str], locating: Bool): SourceMapArguments { 151 mut source: Str = "" 152 mut artifact: Str = "" 153 mut sidecar: Str = "" 154 mut function_name: Str = "" 155 mut instruction: Option[Nat] = None() 156 mut valid: Bool = len(values) >= 2 157 if valid { 158 if locating { artifact = values[1]; } else { source = values[1]; } 159 } 160 mut index: Nat = 2 161 while index < len(values) && valid { 162 if index + 1 >= len(values) { valid = false; } 163 else { 164 option: Str = values[index] 165 value: Str = values[index + 1] 166 if option == "--source-map" && sidecar == "" { sidecar = value; } 167 else { if option == "-o" && !locating && artifact == "" { artifact = value; } 168 else { if option == "--source" && locating && source == "" { source = value; } 169 else { if option == "--function" && locating && function_name == "" { function_name = value; } 170 else { if option == "--instruction" && locating { 171 match instruction { 172 Some(previous) => { valid = false; }, 173 None() => { 174 instruction = source_map_instruction(value) 175 match instruction { Some(pc) => {}, None() => { valid = false; } } 176 } 177 } 178 } else { valid = false; } } } } } 179 if value == "" { valid = false; } 180 index = index + 2 181 } 182 } 183 valid = valid && source != "" && artifact != "" && sidecar != "" && 184 path_suffix(source) == ".panack" && path_suffix(artifact) == ".bc" 185 mut pc: Nat = 0 186 if locating { 187 valid = valid && function_name != "" 188 match instruction { Some(value) => { pc = value; }, None() => { valid = false; } } 189 } 190 SourceMapArguments(valid, source, artifact, sidecar, function_name, pc) 191 } 192 193 run_source_map_command(values: [Str], locating: Bool): Nat { 194 args: SourceMapArguments = source_map_arguments(values, locating) 195 if !args.valid { 196 report_driver_error("source-map usage: compile SOURCE.panack -o ARTIFACT.bc --source-map MAP | locate ARTIFACT.bc --source SOURCE.panack --source-map MAP --function NAME --instruction PC") 197 } else { 198 entry: Str = path_resolve(args.source) 199 artifact_path: Str = path_resolve(args.artifact) 200 map_path: Str = path_resolve(args.sidecar) 201 if !locating && (artifact_path == map_path || 202 !source_map_destination_available(artifact_path) || !source_map_destination_available(map_path)) { 203 report_driver_error("source-map compilation requires two distinct, nonexistent output files") 204 } else { 205 loaded: LoadedProject = load_project_for_source_map(entry) 206 if len(loaded.diagnostics) > 0 { 207 if locating { print("source-map: unavailable"); 0 } 208 else { report_driver_error(diagnostic_messages(loaded.diagnostics, loaded.sources)) } 209 } else { 210 root: Str = path_parent(entry) 211 stdlib_root: Str = path_resolve(environment_get("PANACKELTY_STDLIB_PATH")) 212 mapped: SourceMappedProgram = compile_program_with_sources(loaded.program) 213 artifact: Bytes = serialize_bytecode(mapped.bytecode) 214 sidecar: Bytes = serialize_source_map(loaded, mapped, artifact, entry, root, stdlib_root) 215 valid: Bool = byte_len(sidecar) > 0 && validate_bytecode(artifact) == "ok" && source_snapshots_unchanged(loaded) 216 if locating { 217 if valid && source_map_matches(artifact_path, artifact) && source_map_matches(map_path, sidecar) { 218 print(source_map_location(loaded, mapped, args.function_name, args.instruction, root, stdlib_root)) 219 } else { print("source-map: unavailable"); } 220 0 221 } else { 222 if !valid { report_driver_error("source-map limit exceeded, invalid artifact, or source changed during compilation") } 223 else { 224 if !source_map_destination_available(artifact_path) || !source_map_destination_available(map_path) { 225 report_driver_error("source-map output appeared during compilation") 226 } else { 227 // The first write can reveal directory-symlink or case aliases. 228 if !source_map_write(artifact_path, artifact) || 229 !source_map_destination_available(map_path) || !source_map_write(map_path, sidecar) || 230 !source_map_matches(artifact_path, artifact) || !source_map_matches(map_path, sidecar) { 231 report_driver_error("could not write source-map output pair; discard any partial output") 232 } else { 233 print("wrote " + args.artifact) 234 print("wrote source map " + args.sidecar) 235 0 236 } 237 } 238 } 239 } 240 } 241 } 242 } 243 } 244 245 run_compiler_command(arguments: [Str]): Nat { 246 mut values: [Str] = arguments 247 if len(values) > 0 && values[0] == "--" { 248 mut trimmed: [Str] = [] 249 mut cursor: Nat = 1 250 while cursor < len(values) { 251 trimmed = append(trimmed, values[cursor]) 252 cursor = cursor + 1 253 } 254 values = trimmed 255 } else {} 256 if len(values) == 0 || values[0] == "--help" { 257 print(driver_usage()) 258 0 259 } else { 260 if values[0] == "coverage-report" || values[0] == "coverage-aggregate" { 261 if values[0] == "coverage-report" { run_coverage_report(values) } else { run_coverage_aggregate(values) } 262 } else { 263 if values[0] == "inventory" || values[0] == "inventory-check" { 264 run_inventory_command(values, values[0] == "inventory-check") 265 } else { 266 if values[0] == "explain" { 267 run_explain_command(values) 268 } else { 269 if values[0] == "locate" { 270 run_source_map_command(values, true) 271 } else { 272 if values[0] == "compile" && source_map_argument_present(values) { 273 run_source_map_command(values, false) 274 } else { 275 mut command: Str = values[0] 276 mut file_index: Nat = 1 277 if command != "check" && command != "compile" && command != "run" && command != "disasm" { 278 command = "run" 279 file_index = 0 280 } else {} 281 if file_index >= len(values) { 282 report_driver_error("missing input file") 283 } else { 284 path: Str = values[file_index] 285 suffix: Str = path_suffix(path) 286 mut output: Str = "" 287 mut program_arguments: [Str] = [] 288 mut argument_index: Nat = file_index + 1 289 while argument_index < len(values) { 290 program_arguments = append(program_arguments, values[argument_index]) 291 argument_index = argument_index + 1 292 } 293 if command == "compile" && file_index + 2 < len(values) && values[file_index + 1] == "-o" { 294 output = values[file_index + 2] 295 } else {} 296 if command == "compile" && suffix != ".panack" { 297 report_driver_error("compile expects a .panack source file") 298 } else { 299 if suffix != ".panack" && suffix != ".bc" { 300 report_driver_error("expected a .panack source or .bc bytecode file") 301 } else { 302 if suffix == ".panack" { 303 run_source_command(command, path, output, program_arguments) 304 } else { 305 if command == "compile" { report_driver_error("compile expects a .panack source file") } 306 else { run_artifact_command(command, path, program_arguments) } 307 } 308 } 309 } 310 } 311 } 312 } 313 } 314 } 315 } 316 } 317 } 318 319 compiler_main(): Void { 320 status: Nat = run_compiler_command(command_args()) 321 if status != 0 { process_exit(status); } else {} 322 } 323
Functions
[
{
"id": "declaration/3",
"name": "diagnostic_messages",
"line": 10,
"state": "covered",
"entries": "6"
},
{
"id": "declaration/4",
"name": "prepare_project",
"line": 20,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/5",
"name": "report_driver_error",
"line": 29,
"state": "zero",
"entries": "0"
},
{
"id": "declaration/6",
"name": "driver_usage",
"line": 34,
"state": "zero",
"entries": "0"
},
{
"id": "declaration/7",
"name": "without_final_newline",
"line": 38,
"state": "covered",
"entries": "1"
},
{
"id": "declaration/8",
"name": "run_source_command",
"line": 48,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/9",
"name": "run_explain_command",
"line": 80,
"state": "zero",
"entries": "0"
},
{
"id": "declaration/10",
"name": "run_artifact_command",
"line": 103,
"state": "zero",
"entries": "0"
},
{
"id": "declaration/11",
"name": "source_map_argument_present",
"line": 124,
"state": "covered",
"entries": "1"
},
{
"id": "declaration/13",
"name": "source_map_instruction",
"line": 139,
"state": "covered",
"entries": "12"
},
{
"id": "declaration/14",
"name": "source_map_arguments",
"line": 150,
"state": "covered",
"entries": "8"
},
{
"id": "declaration/15",
"name": "run_source_map_command",
"line": 193,
"state": "zero",
"entries": "0"
},
{
"id": "declaration/16",
"name": "run_compiler_command",
"line": 245,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/17",
"name": "compiler_main",
"line": 319,
"state": "covered",
"entries": "3"
}
]Source branch outcomes
[
{
"id": "declaration/3/statement/2/decision/body",
"outcome": "body",
"line": 13,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/3/statement/2/decision/exit",
"outcome": "exit",
"line": 13,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/3/statement/2/body/statement/0/value/decision/true",
"outcome": "true",
"line": 14,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/3/statement/2/body/statement/0/value/decision/false",
"outcome": "false",
"line": 14,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/4/tail/decision/true",
"outcome": "true",
"line": 22,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/4/tail/decision/false",
"outcome": "false",
"line": 22,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/7/tail/decision/true",
"outcome": "true",
"line": 40,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/7/tail/decision/false",
"outcome": "false",
"line": 40,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/7/tail/true/tail/decision/true",
"outcome": "true",
"line": 42,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/7/tail/true/tail/decision/false",
"outcome": "false",
"line": 42,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/8/tail/decision/true",
"outcome": "true",
"line": 50,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/8/tail/decision/false",
"outcome": "false",
"line": 50,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/8/tail/false/tail/decision/true",
"outcome": "true",
"line": 53,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/decision/false",
"outcome": "false",
"line": 53,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/8/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 58,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 58,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/false/tail/true/statement/0/value/decision/true",
"outcome": "true",
"line": 59,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/false/tail/true/statement/0/value/decision/false",
"outcome": "false",
"line": 59,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/8/tail/false/tail/false/tail/true/tail/decision/true",
"outcome": "true",
"line": 60,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/8/tail/false/tail/false/tail/true/tail/decision/false",
"outcome": "false",
"line": 60,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 68,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/8/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 68,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/decision/true",
"outcome": "true",
"line": 81,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/decision/false",
"outcome": "false",
"line": 81,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/decision/true",
"outcome": "true",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/decision/false",
"outcome": "false",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 84,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 90,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 90,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 90,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 90,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/false/statement/0/value/decision/true",
"outcome": "true",
"line": 93,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/false/statement/0/value/decision/false",
"outcome": "false",
"line": 93,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 97,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 97,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/decision/true",
"outcome": "true",
"line": 106,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/decision/false",
"outcome": "false",
"line": 106,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/false/tail/decision/true",
"outcome": "true",
"line": 109,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/false/tail/decision/false",
"outcome": "false",
"line": 109,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 113,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 113,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/1/decision/body",
"outcome": "body",
"line": 126,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/11/statement/1/decision/exit",
"outcome": "exit",
"line": 126,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 126,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 126,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 140,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/13/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 140,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/1/decision/body",
"outcome": "body",
"line": 141,
"state": "covered",
"hits": "44"
},
{
"id": "declaration/13/statement/1/decision/exit",
"outcome": "exit",
"line": 141,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/13/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 142,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/13/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 142,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/13/statement/1/body/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 142,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/13/statement/1/body/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 142,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/13/tail/decision/true",
"outcome": "true",
"line": 144,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/13/tail/decision/false",
"outcome": "false",
"line": 144,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/13/tail/true/tail/decision/true",
"outcome": "true",
"line": 146,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/tail/true/tail/decision/false",
"outcome": "false",
"line": 146,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/statement/6/value/decision/true",
"outcome": "true",
"line": 157,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/14/statement/6/value/decision/false",
"outcome": "false",
"line": 157,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/14/statement/6/value/true/tail/decision/true",
"outcome": "true",
"line": 158,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/6/value/true/tail/decision/false",
"outcome": "false",
"line": 158,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/14/statement/8/decision/body",
"outcome": "body",
"line": 161,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/14/statement/8/decision/exit",
"outcome": "exit",
"line": 161,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/14/statement/8/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 161,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/14/statement/8/condition/decision/skip-right",
"outcome": "skip-right",
"line": 161,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/14/statement/8/body/tail/decision/true",
"outcome": "true",
"line": 162,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/14/statement/8/body/tail/decision/false",
"outcome": "false",
"line": 162,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/decision/true",
"outcome": "true",
"line": 166,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/decision/false",
"outcome": "false",
"line": 166,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 166,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 166,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/decision/true",
"outcome": "true",
"line": 167,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/decision/false",
"outcome": "false",
"line": 167,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 167,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 167,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 167,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 167,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 168,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 168,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 168,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 168,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 168,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 168,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 169,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 169,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 169,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 169,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 169,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 169,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 170,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 170,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 170,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 170,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/true/tail/arm/0",
"outcome": "Some",
"line": 172,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/true/tail/arm/1",
"outcome": "None",
"line": 173,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/true/tail/arm/1/body/block/tail/arm/0",
"outcome": "Some",
"line": 175,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/2/value/false/tail/false/tail/false/tail/false/tail/true/tail/arm/1/body/block/tail/arm/1",
"outcome": "None",
"line": 175,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/3/value/decision/true",
"outcome": "true",
"line": 179,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/statement/8/body/tail/false/statement/3/value/decision/false",
"outcome": "false",
"line": 179,
"state": "covered",
"hits": "21"
},
{
"id": "declaration/14/statement/9/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 183,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/9/value/decision/skip-right",
"outcome": "skip-right",
"line": 183,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/14/statement/9/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 183,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/14/statement/9/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 183,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/9/value/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 183,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/14/statement/9/value/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 183,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/14/statement/9/value/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 183,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/14/statement/9/value/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 183,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/14/statement/9/value/left/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 183,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/14/statement/9/value/left/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 183,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/14/statement/11/value/decision/true",
"outcome": "true",
"line": 186,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/11/value/decision/false",
"outcome": "false",
"line": 186,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/14/statement/11/value/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 187,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/statement/11/value/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 187,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/statement/11/value/true/tail/arm/0",
"outcome": "Some",
"line": 188,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/14/statement/11/value/true/tail/arm/1",
"outcome": "None",
"line": 188,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/decision/true",
"outcome": "true",
"line": 195,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/decision/false",
"outcome": "false",
"line": 195,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/decision/true",
"outcome": "true",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/decision/false",
"outcome": "false",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/right/decision/skip-right",
"outcome": "skip-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/right/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/condition/right/left/decision/skip-right",
"outcome": "skip-right",
"line": 201,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 206,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 206,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/true/tail/decision/true",
"outcome": "true",
"line": 207,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/true/tail/decision/false",
"outcome": "false",
"line": 207,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/statement/5/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/statement/5/value/decision/skip-right",
"outcome": "skip-right",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/statement/5/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/statement/5/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 216,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 216,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/decision/true",
"outcome": "true",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/decision/false",
"outcome": "false",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/true/statement/0/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 217,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 222,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 222,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 224,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 224,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 224,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 224,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 228,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/statement/1/value/decision/true",
"outcome": "true",
"line": 247,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/statement/1/value/decision/false",
"outcome": "false",
"line": 247,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/statement/1/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 247,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/statement/1/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 247,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/statement/1/value/true/statement/2/decision/body",
"outcome": "body",
"line": 250,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/statement/1/value/true/statement/2/decision/exit",
"outcome": "exit",
"line": 250,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/decision/true",
"outcome": "true",
"line": 256,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/decision/false",
"outcome": "false",
"line": 256,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 256,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 256,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/decision/true",
"outcome": "true",
"line": 260,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/decision/false",
"outcome": "false",
"line": 260,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 260,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 260,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/true/tail/decision/true",
"outcome": "true",
"line": 261,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/true/tail/decision/false",
"outcome": "false",
"line": 261,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 263,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 263,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 263,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 263,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 266,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 266,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 269,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 269,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 272,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 272,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 272,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 272,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/decision/true",
"outcome": "true",
"line": 277,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/decision/false",
"outcome": "false",
"line": 277,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 277,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 277,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 277,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 277,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 277,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/2/value/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 277,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 281,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 281,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/5/decision/body",
"outcome": "body",
"line": 289,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/5/decision/exit",
"outcome": "exit",
"line": 289,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/decision/true",
"outcome": "true",
"line": 293,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/decision/false",
"outcome": "false",
"line": 293,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 293,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 293,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 293,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/statement/6/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 293,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 296,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 296,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 296,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 296,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 299,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 299,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 299,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 299,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 302,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 302,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 305,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 305,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/17/tail/decision/true",
"outcome": "true",
"line": 321,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/17/tail/decision/false",
"outcome": "false",
"line": 321,
"state": "covered",
"hits": "3"
}
]Reviewed declaration exclusions
[
{
"id": "declaration/0",
"reason": "import",
"line": 1
},
{
"id": "declaration/1",
"reason": "import",
"line": 2
},
{
"id": "declaration/2",
"reason": "record-declaration",
"line": 4
},
{
"id": "declaration/12",
"reason": "record-declaration",
"line": 130
}
]