src/compiler/module_bodies.panack
Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.
1 import "module_signatures.panack" 2 3 // Structural lexical paths are identities, never names lowered into Program. 4 record BodyLocalIdentity { owner: DeclarationIdentity, path: [Nat], name: Str } 5 record BodyLocal { identity: BodyLocalIdentity, type: Option[SignatureType], mutable: Bool } 6 enum BodyTarget { BodyDeclaration(ModuleDeclarationBinding), BodyCore(Str) } 7 enum BodyNode { 8 BodyLiteral(Expr), BodyInterpolation([Str]), BodyLocalUse(BodyLocalIdentity), BodyFunction(ModuleDeclarationBinding), 9 BodyCall(BodyTarget, [SignatureType]), BodyArray, BodyUnary(Str), BodyBinary(Str), 10 BodyField(Str), BodyIndex, BodyIf(Bool), BodyBlock(Bool), 11 BodyMatch([BodyTarget], [[BodyLocalIdentity]]), 12 BodyBinding(BodyLocalIdentity, Option[SignatureType], Bool), BodyAssignment(BodyLocalIdentity), 13 BodyWhile, BodyFor(BodyLocalIdentity), BodyEmpty 14 } 15 record BoundBody { 16 node: BodyNode, span: SourceSpan, children: [BoundBody], type: Option[SignatureType], 17 constraints: [BodySolution] 18 } 19 record BodyContext { 20 graph: ModuleBindingGraph, modules: [LoadedModule], signatures: [ModuleSignature], 21 owner: DeclarationIdentity, parameters: [Str] 22 } 23 record BodyResult { body: BoundBody, diagnostics: [Diagnostic], deferred: [SourceSpan] } 24 // Status certifies this identity-type subset only, never effects or execution. 25 enum BodyCheckStatus { BodyIdentityChecked, BodyDeferred, BodyInvalid } 26 record BoundFunctionBody { signature: ModuleSignature, parameters: [BodyLocal], body: BoundBody, deferred: [SourceSpan], status: BodyCheckStatus } 27 record CheckedModuleBodies { functions: [BoundFunctionBody], diagnostics: [Diagnostic] } 28 29 pure body_core_type(name: Str): Option[SignatureType] { Some(SignatureType(SignatureCore(name), [])) } 30 pure body_result(node: BodyNode, span: SourceSpan, children: [BoundBody], type: Option[SignatureType]): BodyResult { 31 BodyResult(BoundBody(node, span, children, type, []), [], []) 32 } 33 pure body_failure(message: Str, span: SourceSpan): BodyResult { 34 BodyResult(BoundBody(BodyEmpty(), span, [], None(), []), [Diagnostic(message, span.start)], []) 35 } 36 pure body_signature(signatures: [ModuleSignature], identity: DeclarationIdentity): Option[ModuleSignature] { 37 mut found: Option[ModuleSignature] = None() 38 for signature in signatures { if signature.binding.identity == identity { found = Some(signature) } } 39 found 40 } 41 pure body_type_text(type: SignatureType): Str { 42 head: Str = match type.identity { 43 SignatureCore(name) => name, 44 SignatureNominal(identity) => identity.module.path + ":" + identity.name, 45 SignatureHole(owner, path, index) => "unresolved type", 46 SignatureParameter(owner, index) => owner.module.path + ":" + owner.name + " parameter ${index}", 47 SignatureCallable(effect) => match effect { SignaturePure() => "PureFn", SignatureOrdinary() => "Fn", SignatureAsync() => "AsyncFn" } 48 } 49 mut arguments: [Str] = [] 50 for argument in type.arguments { arguments = append(arguments, body_type_text(argument)) } 51 if len(arguments) == 0 { head } else { render_type(head, arguments) } 52 } 53 // Missing expression evidence has a distinct hole tag. Guard conversions require 54 // the shared proof checker; do not reject or approve them by spelling. 55 pure body_compatibility(context: BodyContext, actual: SignatureType, expected: SignatureType): Option[Bool] { 56 if body_is_hole(actual) || body_is_hole(expected) { Some(actual != SignatureType(SignatureCore("Void"), []) && expected != SignatureType(SignatureCore("Void"), [])) } 57 else { if actual == expected || (actual == SignatureType(SignatureCore("Nat"), []) && expected == SignatureType(SignatureCore("Int"), [])) { Some(true) } 58 else { 59 mut guarded: Bool = false 60 for type in [actual, expected] { 61 match type.identity { 62 SignatureNominal(identity) => match signature_declaration(context.modules, identity) { 63 Error(message) => {}, 64 Ok(declaration) => match declaration { 65 TypeDeclaration(name, base, guard) => { guarded = true }, 66 ImportDeclaration(path) => {}, RecordDeclaration(name, types, fields) => {}, 67 EnumDeclaration(name, types, variants) => {}, FunctionDeclaration(name, values, result, pure_flag, async_flag, body, types) => {} 68 } 69 }, 70 SignatureCore(name) => {}, SignatureParameter(owner, index) => {}, SignatureCallable(effect) => {}, SignatureHole(owner, path, index) => {} 71 } 72 } 73 if guarded { None() } 74 else { 75 mut callable: Bool = false 76 match actual.identity { SignatureCallable(effect) => { callable = true }, SignatureCore(name) => {}, SignatureNominal(identity) => {}, SignatureParameter(owner, index) => {}, SignatureHole(owner, path, index) => {} } 77 match expected.identity { SignatureCallable(effect) => { callable = true }, SignatureCore(name) => {}, SignatureNominal(identity) => {}, SignatureParameter(owner, index) => {}, SignatureHole(owner, path, index) => {} } 78 if callable { Some(actual.identity == SignatureCallable(SignaturePure()) && expected.identity == SignatureCallable(SignatureOrdinary()) && actual.arguments == expected.arguments) } 79 else { 80 if actual.identity != expected.identity || len(actual.arguments) != len(expected.arguments) { Some(false) } 81 else { 82 mut compatible: Bool = true 83 mut deferred: Bool = false 84 mut index: Nat = 0 85 for argument in actual.arguments { 86 match body_compatibility(context, argument, expected.arguments[index]) { None() => { deferred = true }, Some(valid) => { compatible = compatible && valid } } 87 index = index + 1 88 } 89 if !compatible { Some(false) } else { if deferred { None() } else { Some(true) } } 90 } 91 } 92 } 93 } 94 } } 95 pure body_require(context: BodyContext, actual: Option[SignatureType], expected: SignatureType, label: Str, span: SourceSpan): BodyResult { 96 mut result: BodyResult = body_result(BodyEmpty(), span, [], None()) 97 match actual { 98 None() => { result = BodyResult(result.body, [], [span]) }, 99 Some(type) => match body_compatibility(context, type, expected) { 100 None() => { result = BodyResult(result.body, [], [span]) }, 101 Some(valid) => { if !valid { result = body_failure(label + " is " + body_type_text(type) + ", expected " + body_type_text(expected), span) } } 102 } 103 } 104 result 105 } 106 pure body_target(context: BodyContext, name: Str, function_only: Bool): Result[BodyTarget,Str] { 107 if !function_only && module_reserved_binding(name) { Ok(BodyCore(name)) } 108 else { 109 match resolve_module_path(context.graph, context.owner.module, name) { 110 Error(message) => Error(message), 111 Ok(target) => match target { 112 NamespaceTarget(owner) => Error("namespace cannot be called: " + name), 113 DeclarationTarget(binding) => { 114 if function_only && binding.kind != ModuleFunction() { Error("declaration is not a function: " + name) } 115 else { if binding.kind == ModuleEnum() { Error("enum type cannot be called: " + name) } else { Ok(BodyDeclaration(binding)) } } 116 } 117 } 118 } 119 } 120 } 121 pure body_call(context: BodyContext, target: BodyTarget, arguments: [Expr], types: [Str], span: SourceSpan, locals: Map[Str,BodyLocal], path: [Nat]): BodyResult { 122 mut children: [BoundBody] = [] 123 mut diagnostics: [Diagnostic] = [] 124 mut deferred: [SourceSpan] = [] 125 mut index: Nat = 0 126 for argument in arguments { 127 checked: BodyResult = bind_body_expression(context, argument, span, locals, append(path, index)) 128 children = append(children, checked.body); diagnostics = concat(diagnostics, checked.diagnostics); deferred = concat(deferred, checked.deferred) 129 if checked.body.type == body_core_type("Void") { diagnostics = append(diagnostics, Diagnostic("Void is not a value and cannot be passed as an argument", checked.body.span.start)) } 130 index = index + 1 131 } 132 mut resolved_types: [SignatureType] = [] 133 for type in types { 134 match signature_type(context.graph, context.modules, context.owner, context.parameters, type, false, false) { 135 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 136 Ok(resolved) => { resolved_types = append(resolved_types, resolved) } 137 } 138 } 139 mut output: Option[SignatureType] = None() 140 match body_contract(context, target) { 141 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 142 Ok(optional) => match optional { None() => { deferred = append(deferred, span) }, 143 Some(contract) => { 144 if len(children) != len(contract.inputs) { 145 expected_count: Nat = len(contract.inputs) 146 actual_count: Nat = len(children) 147 diagnostics = append(diagnostics, Diagnostic(contract.name + " expects ${expected_count} arguments, got ${actual_count}", span.start)) 148 } 149 if len(types) > 0 && (contract.constructor || len(contract.parameters) == 0) { 150 diagnostics = append(diagnostics, Diagnostic("explicit type arguments require a generic function", span.start)) 151 } 152 mut inferred: [SignatureType] = [] 153 index = 0 154 while index < len(contract.parameters) { 155 inferred = append(inferred, SignatureType(SignatureHole(context.owner, path, index), [])) 156 index = index + 1 157 } 158 mut inference_deferred: Bool = false 159 if len(types) > 0 { 160 if len(types) != len(contract.parameters) { 161 diagnostics = append(diagnostics, Diagnostic("call " + contract.name + " has incorrect type argument count", span.start)) 162 } else { if len(resolved_types) == len(types) { inferred = resolved_types } } 163 } else { 164 index = 0 165 for child in children { 166 if index < len(contract.inputs) { 167 match child.type { 168 None() => { inference_deferred = true }, 169 Some(actual) => match body_infer(context, contract.inputs[index], actual, contract.owner, inferred) { 170 Error(message) => { diagnostics = append(diagnostics, Diagnostic("inference for " + contract.name + ": " + message, child.span.start)) }, 171 Ok(evidence) => { inferred = evidence.arguments; inference_deferred = inference_deferred || evidence.deferred } 172 } 173 } 174 } 175 index = index + 1 176 } 177 } 178 if !contract.constructor && len(types) == 0 { 179 index = 0 180 for argument in inferred { 181 if !body_type_complete(argument) { 182 if inference_deferred { deferred = append(deferred, span) } 183 else { parameter_name: Str = contract.parameters[index]; diagnostics = append(diagnostics, Diagnostic("cannot infer type parameter " + parameter_name + " for " + contract.name + "; supply explicit type arguments", span.start)) } 184 } 185 index = index + 1 186 } 187 } 188 if inference_deferred { deferred = append(deferred, span) } 189 resolved_types = inferred 190 index = 0 191 mut refined: [BoundBody] = [] 192 for child in children { 193 mut value: BoundBody = child 194 if index < len(contract.inputs) { 195 match substitute_signature_type(contract.inputs[index], contract.owner, inferred) { 196 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, child.span.start)) }, 197 Ok(expected) => { 198 number: Nat = index + 1 199 required: BodyResult = body_require(context, child.type, expected, "argument ${number} to " + contract.name, child.span) 200 diagnostics = concat(diagnostics, required.diagnostics); deferred = concat(deferred, required.deferred) 201 refined_child: BodyResult = body_refine(context, BodyResult(child, [], []), expected) 202 value = refined_child.body 203 diagnostics = concat(diagnostics, refined_child.diagnostics); deferred = concat(deferred, refined_child.deferred) 204 } 205 } 206 } 207 refined = append(refined, value) 208 index = index + 1 209 } 210 children = refined 211 match substitute_signature_type(contract.output, contract.owner, inferred) { 212 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 213 Ok(type) => { 214 if contract.async_flag { deferred = append(deferred, span) } 215 else { if inference_deferred && !body_type_complete(type) { output = None() } else { output = Some(type) } } 216 } 217 } 218 } } 219 } 220 BodyResult(BoundBody(BodyCall(target, resolved_types), span, children, output, []), diagnostics, deferred) 221 } 222 223 pure bind_body_expression(context: BodyContext, expression: Expr, origin: SourceSpan, locals: Map[Str,BodyLocal], path: [Nat]): BodyResult { 224 mut result: BodyResult = body_result(BodyEmpty(), origin, [], None()) 225 match expression { 226 LocatedExpr(span, value) => { result = bind_body_expression(context, value, span, locals, path) }, 227 NatExpr(value) => { result = body_result(BodyLiteral(expression), origin, [], body_core_type("Nat")) }, 228 DecimalExpr(value) => { result = body_result(BodyLiteral(expression), origin, [], body_core_type("Dec")) }, 229 StringExpr(value) => { result = bind_body_string(context, expression, value, origin, locals) }, 230 BoolExpr(value) => { result = body_result(BodyLiteral(expression), origin, [], body_core_type("Bool")) }, 231 NameExpr(name) => { 232 if !locals.has(name) { result = body_failure("unknown local value " + name, origin) } 233 else { local: BodyLocal = locals.get(name); result = body_result(BodyLocalUse(local.identity), origin, [], local.type) } 234 }, 235 FunctionExpr(name) => { 236 match resolve_module_function(context.graph, context.owner.module, name) { 237 Error(message) => { result = body_failure(message, origin) }, 238 Ok(binding) => { 239 mut type: Option[SignatureType] = None() 240 mut deferred: [SourceSpan] = [] 241 match body_signature(context.signatures, binding.identity) { 242 None() => { deferred = [origin] }, 243 Some(signature) => { 244 if len(signature.parameters) > 0 { result = body_failure("generic function references require a non-generic wrapper", origin) } 245 else { 246 mut arguments: [SignatureType] = [] 247 for slot in signature.slots { arguments = append(arguments, slot.type) } 248 match signature.effect { None() => {}, Some(effect) => { type = Some(SignatureType(SignatureCallable(effect), arguments)) } } 249 } 250 } 251 } 252 result = BodyResult(BoundBody(BodyFunction(binding), origin, [], type, []), result.diagnostics, deferred) 253 } 254 } 255 }, 256 CallExpr(name, arguments, types) => { 257 match body_target(context, name, false) { Error(message) => { result = body_failure(message, origin) }, Ok(target) => { result = body_call(context, target, arguments, types, origin, locals, path) } } 258 }, 259 DotCallExpr(receiver, name, arguments, types) => { 260 mut visible: Set[Str] = set() 261 head: Str = reference_head(expression_reference_path(receiver)) 262 if locals.has(head) { visible = visible.add(head) } 263 match resolve_module_dot_call_scoped(context.graph, context.owner.module, receiver, name, arguments, types, visible) { 264 Error(message) => { result = body_failure(message, origin) }, 265 Ok(call) => match call { 266 NamespaceCall(binding, values, type_arguments) => { result = body_call(context, BodyDeclaration(binding), values, type_arguments, origin, locals, path) }, 267 ValueMethodCall(value, method, values, type_arguments) => { 268 if module_reserved_binding(method) || lowered_method_name(method) != method { 269 result = body_call(context, BodyCore(lowered_method_name(method)), concat([value], values), type_arguments, origin, locals, path) 270 } else { 271 match body_target(context, method, true) { 272 Error(message) => { result = body_failure(message, origin) }, 273 Ok(target) => { result = body_call(context, target, concat([value], values), type_arguments, origin, locals, path) } 274 } 275 } 276 } 277 } 278 } 279 }, 280 BlockExpr(block) => { result = bind_body_block(context, block, origin, locals, path) }, 281 ArrayExpr(items) => { result = check_body_array(context, bind_body_children(context, BodyArray(), items, origin, locals, path), path) }, 282 UnaryExpr(operator, operand) => { result = check_body_operation(context, bind_body_children(context, BodyUnary(operator), [operand], origin, locals, path), operator, true) }, 283 BinaryExpr(operator, left, right) => { result = check_body_operation(context, bind_body_children(context, BodyBinary(operator), [left, right], origin, locals, path), operator, false) }, 284 FieldExpr(target, field) => { 285 raw_path: Str = expression_reference_path(expression) 286 if raw_path != "" && !locals.has(reference_head(raw_path)) && module_head_is_namespace(context.graph, context.owner.module, raw_path) { result = body_failure("qualified binding is not a value: " + raw_path, origin) } 287 else { result = check_body_field(context, bind_body_children(context, BodyField(field), [target], origin, locals, path), field) } 288 }, 289 IndexExpr(target, index) => { result = check_body_index(context, bind_body_children(context, BodyIndex(), [target, index], origin, locals, path)) }, 290 IfExpr(condition, yes, no, has_else) => { result = check_body_conditional(context, bind_body_children(context, BodyIf(has_else), [condition, BlockExpr(yes), BlockExpr(no)], origin, locals, path), has_else, false) }, 291 MatchExpr(subject, arms) => { result = bind_body_match(context, subject, arms, origin, locals, path) } 292 } 293 result 294 } 295 296 pure bind_body_children(context: BodyContext, node: BodyNode, expressions: [Expr], span: SourceSpan, locals: Map[Str,BodyLocal], path: [Nat]): BodyResult { 297 mut children: [BoundBody] = [] 298 mut diagnostics: [Diagnostic] = [] 299 mut deferred: [SourceSpan] = [span] 300 mut index: Nat = 0 301 for expression in expressions { 302 checked: BodyResult = bind_body_expression(context, expression, span, locals, append(path, index)) 303 children = append(children, checked.body); diagnostics = concat(diagnostics, checked.diagnostics); deferred = concat(deferred, checked.deferred); index = index + 1 304 } 305 BodyResult(BoundBody(node, span, children, None(), []), diagnostics, deferred) 306 } 307 308 pure bind_body_block(context: BodyContext, block: Block, span: SourceSpan, locals: Map[Str,BodyLocal], path: [Nat]): BodyResult { 309 mut visible: Map[Str,BodyLocal] = locals 310 mut children: [BoundBody] = [] 311 mut diagnostics: [Diagnostic] = [] 312 mut deferred: [SourceSpan] = [] 313 mut index: Nat = 0 314 for statement in block.statements { 315 statement_path: [Nat] = append(path, index) 316 mut checked: BodyResult = body_result(BodyEmpty(), span, [], None()) 317 match statement { 318 BindingStatement(name, spelling, mutable, value) => { 319 if visible.has(name) { diagnostics = append(diagnostics, Diagnostic("local " + name + " shadows an existing binding", span.start)) } 320 checked = bind_body_expression(context, value, span, visible, append(statement_path, 0)) 321 if checked.body.type == body_core_type("Void") { diagnostics = append(diagnostics, Diagnostic("Void is not a value and cannot be stored in binding " + name, checked.body.span.start)) } 322 mut type: Option[SignatureType] = checked.body.type; 323 if spelling != "" { 324 match signature_type(context.graph, context.modules, context.owner, context.parameters, spelling, false, false) { 325 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, checked.body.span.start)) }, 326 Ok(annotation) => { 327 required: BodyResult = body_require(context, checked.body.type, annotation, "binding " + name, checked.body.span) 328 diagnostics = concat(diagnostics, required.diagnostics); deferred = concat(deferred, required.deferred); type = Some(annotation) 329 checked = body_refine(context, checked, annotation) 330 } 331 } 332 } 333 if spelling == "" { diagnostics = concat(diagnostics, body_incomplete_local(name, checked)) } 334 local: BodyLocalIdentity = BodyLocalIdentity(context.owner, statement_path, name) 335 visible = visible.put(name, BodyLocal(local, type, mutable)) 336 checked = BodyResult(BoundBody(BodyBinding(local, type, mutable), checked.body.span, [checked.body], body_core_type("Void"), []), checked.diagnostics, checked.deferred) 337 }, 338 AssignmentStatement(name, value) => { 339 checked = bind_body_expression(context, value, span, visible, append(statement_path, 0)) 340 if !visible.has(name) { 341 diagnostics = concat(diagnostics, body_incomplete_local(name, checked)) 342 if checked.body.type == body_core_type("Void") { diagnostics = append(diagnostics, Diagnostic("Void is not a value and cannot be stored in binding " + name, checked.body.span.start)) } 343 local: BodyLocalIdentity = BodyLocalIdentity(context.owner, statement_path, name) 344 visible = visible.put(name, BodyLocal(local, checked.body.type, false)) 345 checked = BodyResult(BoundBody(BodyBinding(local, checked.body.type, false), checked.body.span, [checked.body], body_core_type("Void"), []), checked.diagnostics, checked.deferred) 346 } else { 347 local: BodyLocal = visible.get(name) 348 if !local.mutable { diagnostics = append(diagnostics, Diagnostic("cannot assign immutable binding " + name, checked.body.span.start)) } 349 match local.type { 350 None() => { deferred = append(deferred, checked.body.span) }, 351 Some(type) => { 352 required: BodyResult = body_require(context, checked.body.type, type, "assignment " + name, checked.body.span) 353 diagnostics = concat(diagnostics, required.diagnostics); deferred = concat(deferred, required.deferred) 354 checked = body_refine(context, checked, type) 355 } 356 } 357 checked = BodyResult(BoundBody(BodyAssignment(local.identity), checked.body.span, [checked.body], body_core_type("Void"), []), checked.diagnostics, checked.deferred) 358 } 359 }, 360 ExpressionStatement(value) => { checked = bind_body_expression(context, value, span, visible, statement_path) }, 361 WhileStatement(condition, body) => { checked = check_body_conditional(context, bind_body_children(context, BodyWhile(), [condition, BlockExpr(body)], span, visible, statement_path), false, true) }, 362 ForStatement(name, values, body) => { 363 if visible.has(name) { diagnostics = append(diagnostics, Diagnostic("loop variable " + name + " shadows an existing binding", span.start)) } 364 local: BodyLocalIdentity = BodyLocalIdentity(context.owner, append(statement_path, 0), name) 365 iterable: BodyResult = bind_body_expression(context, values, span, visible, append(statement_path, 1)) 366 item: BodyResult = body_iteration_item(context, iterable) 367 nested: BodyResult = bind_body_block(context, body, span, visible.put(name, BodyLocal(local, item.body.type, false)), append(statement_path, 2)) 368 checked = BodyResult(BoundBody(BodyFor(local), span, [iterable.body, nested.body], body_core_type("Void"), []), concat(item.diagnostics, nested.diagnostics), concat(item.deferred, nested.deferred)) 369 } 370 } 371 children = append(children, checked.body); diagnostics = concat(diagnostics, checked.diagnostics); deferred = concat(deferred, checked.deferred); index = index + 1 372 } 373 mut output: Option[SignatureType] = body_core_type("Void") 374 match block.value { 375 NoBlockValue() => {}, 376 TailBlockValue(value) => { 377 checked: BodyResult = bind_body_expression(context, value, span, visible, append(path, index)) 378 children = append(children, checked.body); diagnostics = concat(diagnostics, checked.diagnostics); deferred = concat(deferred, checked.deferred); output = checked.body.type 379 } 380 } 381 BodyResult(BoundBody(BodyBlock(block.value != NoBlockValue()), span, children, output, []), diagnostics, deferred) 382 } 383 384 pure check_module_bodies(graph: ModuleBindingGraph, modules: [LoadedModule], signatures: [ModuleSignature], module: LoadedModule): CheckedModuleBodies { 385 mut functions: [BoundFunctionBody] = [] 386 mut diagnostics: [Diagnostic] = module_import_shadow_diagnostics(module.bindings, module.parsed) 387 if len(diagnostics) == 0 { 388 for declaration in module.parsed.program.declarations { 389 match declaration { 390 FunctionDeclaration(name, parameters, return_type, pure_flag, async_flag, body, type_parameters) => { 391 owner: DeclarationIdentity = DeclarationIdentity(module.bindings.identity, name) 392 match body_signature(signatures, owner) { 393 None() => {}, 394 Some(signature) => { 395 diagnostic_start: Nat = len(diagnostics) 396 context: BodyContext = BodyContext(graph, modules, signatures, owner, type_parameters) 397 mut locals: Map[Str,BodyLocal] = map() 398 mut bound_parameters: [BodyLocal] = [] 399 mut index: Nat = 0 400 for parameter in parameters { 401 local: BodyLocal = BodyLocal(BodyLocalIdentity(owner, [0, index], parameter.name), Some(signature.slots[index].type), false) 402 if locals.has(parameter.name) { diagnostics = append(diagnostics, Diagnostic("duplicate parameter " + parameter.name, signature.binding.span.start)) } 403 locals = locals.put(parameter.name, local); bound_parameters = append(bound_parameters, local); index = index + 1 404 } 405 initial: BodyResult = bind_body_block(context, body, signature.binding.span, locals, [1]) 406 expected: SignatureType = signature.slots[len(parameters)].type; 407 checked: BodyResult = body_finish_constraints(context, body_refine(context, initial, expected)) 408 required: BodyResult = body_require(context, checked.body.type, expected, "return of " + name, checked.body.span) 409 diagnostics = concat(diagnostics, concat(checked.diagnostics, required.diagnostics)) 410 all_deferred: [SourceSpan] = concat(concat(checked.deferred, required.deferred), body_unresolved_spans(checked.body)) 411 status: BodyCheckStatus = if len(diagnostics) > diagnostic_start { BodyInvalid() } else { if len(all_deferred) > 0 { BodyDeferred() } else { BodyIdentityChecked() } } 412 functions = append(functions, BoundFunctionBody(signature, bound_parameters, checked.body, all_deferred, status)) 413 } 414 } 415 }, 416 TypeDeclaration(name, base, guard) => { 417 for binding in module.bindings.declarations { 418 if binding.identity.name == name { 419 diagnostics = concat(diagnostics, resolve_module_expression_uses(graph, module.bindings.identity, guard, binding.span, set_add(set(), "value")).diagnostics) 420 } 421 } 422 }, 423 ImportDeclaration(path) => {}, 424 RecordDeclaration(name, types, fields) => {}, EnumDeclaration(name, types, variants) => {} 425 } 426 } 427 } 428 CheckedModuleBodies(functions, diagnostics) 429 } 430 431 // Remove only this operation's pending marker, preserving every child obligation. 432 pure body_child_obligations(checked: BodyResult): [SourceSpan] { 433 mut result: [SourceSpan] = [] 434 mut index: Nat = 0 435 for span in checked.deferred { 436 if index > 0 { result = append(result, span) } 437 index = index + 1 438 } 439 result 440 } 441 442 pure body_guarded(context: BodyContext, value: SignatureType): Bool { 443 mut result: Bool = false 444 match value.identity { 445 SignatureNominal(identity) => { 446 match signature_declaration(context.modules, identity) { 447 Error(message) => {}, 448 Ok(declaration) => match declaration { 449 TypeDeclaration(name, base, guard) => { result = true }, 450 FunctionDeclaration(name, parameters, return_type, pure_flag, async_flag, body, types) => {}, 451 ImportDeclaration(path) => {}, RecordDeclaration(name, parameters, fields) => {}, EnumDeclaration(name, parameters, variants) => {} 452 } 453 } 454 }, 455 SignatureCore(name) => {}, SignatureParameter(owner, index) => {}, SignatureCallable(effect) => {}, SignatureHole(owner, path, index) => {} 456 } 457 result 458 } 459 460 pure body_scalar(value: SignatureType): Str { 461 match value.identity { 462 SignatureCore(name) => if len(value.arguments) == 0 { name } else { "" }, 463 SignatureNominal(identity) => "", SignatureParameter(owner, index) => "", SignatureCallable(effect) => "", SignatureHole(owner, path, index) => "" 464 } 465 } 466 467 pure check_body_operation(context: BodyContext, checked: BodyResult, operator: Str, unary: Bool): BodyResult { 468 node: BoundBody = checked.body 469 mut diagnostics: [Diagnostic] = checked.diagnostics 470 mut deferred: [SourceSpan] = body_child_obligations(checked) 471 mut output: Option[SignatureType] = None() 472 mut solutions: [BodySolution] = [] 473 left_type: Option[SignatureType] = node.children[0].type; 474 right_type: Option[SignatureType] = if unary { left_type } else { node.children[1].type } 475 if operator == "await" { 476 deferred = append(deferred, node.span) 477 } else { 478 match left_type { 479 None() => { deferred = append(deferred, node.span) }, 480 Some(left) => match right_type { 481 None() => { deferred = append(deferred, node.span) }, 482 Some(right) => { 483 if body_guarded(context, left) || body_guarded(context, right) { 484 deferred = append(deferred, node.span) 485 } else { 486 a: Str = body_scalar(left) 487 b: Str = body_scalar(right) 488 mut valid: Bool = true 489 if unary { 490 if operator == "!" && a == "Bool" { output = body_core_type("Bool") } 491 else { if operator == "-" && scalar_numeric(a) { output = body_core_type(if a == "Nat" { "Int" } else { a }) } 492 else { valid = false } } 493 } else { 494 if operator == ".." { 495 valid = a == "Nat" && b == "Nat" 496 output = body_core_type("Range") 497 } else { if operator == "&&" || operator == "||" { 498 valid = a == "Bool" && b == "Bool" 499 output = body_core_type("Bool") 500 } else { if operator == "==" || operator == "!=" || operator == "<" || operator == "<=" || operator == ">" || operator == ">=" { 501 numeric_pair: Bool = (a == "Nat" || a == "Int" || a == "Rat") && (b == "Nat" || b == "Int" || b == "Rat") 502 ordered: Bool = operator != "==" && operator != "!=" 503 valid = (left == right || numeric_pair) && a != "Void" && b != "Void" 504 if ordered { valid = valid && (scalar_numeric(a) || a == "Str") } 505 else { if !numeric_pair && left != right && a != "Void" && b != "Void" { 506 match body_join(context, left, right) { 507 Error(message) => { valid = false }, 508 Ok(joined) => match joined { 509 None() => { valid = true; deferred = append(deferred, node.span) }, 510 Some(type) => { valid = true; solutions = concat(body_solutions(left, type), body_solutions(right, type)) } 511 } 512 } 513 } } 514 output = body_core_type("Bool") 515 } else { if operator == "+" && a == "Str" && b == "Str" { 516 output = body_core_type("Str") 517 } else { 518 valid = scalar_compatible_numeric(a, b) && !(operator == "%" && (a == "Rat" || b == "Rat")) 519 if valid { 520 output = body_core_type(scalar_arithmetic_result(operator, a, b)) 521 // Even literal/proven-looking subtraction awaits the identity 522 // fact checker. Knowing its type does not discharge its proof. 523 if operator == "-" && output == body_core_type("Nat") { deferred = append(deferred, node.span) } 524 } 525 } } } } 526 } 527 if !valid { 528 message: Str = "operator " + operator + " does not accept " + body_type_text(left) + if unary { "" } else { " and " + body_type_text(right) } 529 diagnostics = append(diagnostics, Diagnostic(message, node.span.start)) 530 output = None() 531 } 532 } 533 } 534 } 535 } 536 } 537 body_apply_solutions(context, BodyResult(BoundBody(node.node, node.span, node.children, output, node.constraints), diagnostics, deferred), solutions) 538 } 539 540 // Joins combine structural evidence without erasing nominal or binder identity. 541 // Guard-dependent joins remain separate proof obligations. 542 pure body_join(context: BodyContext, left: SignatureType, right: SignatureType): Result[Option[SignatureType],Str] { 543 if left == right { Ok(Some(left)) } 544 else { if body_is_hole(left) { Ok(Some(right)) } 545 else { if body_is_hole(right) { Ok(Some(left)) } 546 else { 547 if left.identity == right.identity && len(left.arguments) > 0 && len(left.arguments) == len(right.arguments) && !body_callable(left) { 548 mut joined: [SignatureType] = [] 549 mut failure: Option[Str] = None() 550 mut deferred: Bool = false 551 mut index: Nat = 0 552 for argument in left.arguments { 553 match body_join(context, argument, right.arguments[index]) { 554 Error(message) => { failure = Some(message) }, 555 Ok(optional) => match optional { None() => { deferred = true }, 556 Some(type) => { joined = append(joined, type) } } 557 } 558 index = index + 1 559 } 560 match failure { Some(message) => Error(message), None() => if deferred { Ok(None()) } else { Ok(Some(SignatureType(left.identity, joined))) } } 561 } else { 562 match body_compatibility(context, left, right) { 563 None() => Ok(None()), 564 Some(forward) => if forward { Ok(Some(right)) } else { 565 match body_compatibility(context, right, left) { 566 None() => Ok(None()), 567 Some(backward) => if backward { Ok(Some(left)) } else { 568 a: Str = body_scalar(left) 569 b: Str = body_scalar(right) 570 // Do not inherit the legacy Rat/integer join's loss of rational identity. 571 rational_join: Bool = (a == "Rat" && (b == "Nat" || b == "Int")) || (b == "Rat" && (a == "Nat" || a == "Int")) 572 if rational_join { Ok(None()) } 573 else { Error("incompatible types " + body_type_text(left) + " and " + body_type_text(right)) } 574 } 575 } 576 } 577 } 578 } 579 } } } 580 } 581 582 pure check_body_conditional(context: BodyContext, checked: BodyResult, has_else: Bool, loop: Bool): BodyResult { 583 node: BoundBody = checked.body 584 required: BodyResult = body_require(context, node.children[0].type, SignatureType(SignatureCore("Bool"), []), if loop { "while condition" } else { "if condition" }, node.children[0].span) 585 mut diagnostics: [Diagnostic] = concat(checked.diagnostics, required.diagnostics) 586 mut deferred: [SourceSpan] = concat(body_child_obligations(checked), required.deferred) 587 mut output: Option[SignatureType] = body_core_type("Void") 588 if has_else { 589 output = None() 590 match node.children[1].type { 591 None() => { deferred = append(deferred, node.span) }, 592 Some(left) => match node.children[2].type { 593 None() => { deferred = append(deferred, node.span) }, 594 Some(right) => match body_join(context, left, right) { 595 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, node.span.start)) }, 596 Ok(joined) => { output = joined; if joined == None() { deferred = append(deferred, node.span) } } 597 } 598 } 599 } 600 } 601 mut solutions: [BodySolution] = [] 602 match output { 603 None() => {}, 604 Some(type) => { 605 if has_else { 606 for child in [node.children[1], node.children[2]] { 607 match child.type { None() => {}, Some(actual) => { solutions = concat(solutions, body_solutions(actual, type)) } } 608 } 609 } 610 } 611 } 612 body_apply_solutions(context, BodyResult(BoundBody(node.node, node.span, node.children, output, node.constraints), diagnostics, deferred), solutions) 613 } 614 615 pure body_iteration_item(context: BodyContext, checked: BodyResult): BodyResult { 616 mut output: Option[SignatureType] = None() 617 mut diagnostics: [Diagnostic] = checked.diagnostics 618 mut deferred: [SourceSpan] = checked.deferred 619 match checked.body.type { 620 None() => { deferred = append(deferred, checked.body.span) }, 621 Some(type) => { 622 if body_guarded(context, type) { deferred = append(deferred, checked.body.span) } 623 else { 624 if type == SignatureType(SignatureCore("Range"), []) || type == SignatureType(SignatureCore("Bytes"), []) { output = body_core_type("Nat") } 625 else { if type.identity == SignatureCore("Array") && len(type.arguments) == 1 { output = Some(type.arguments[0]) } 626 else { diagnostics = append(diagnostics, Diagnostic("for requires Range, Bytes or array, got " + body_type_text(type), checked.body.span.start)) } } 627 } 628 } 629 } 630 BodyResult(BoundBody(checked.body.node, checked.body.span, checked.body.children, output, checked.body.constraints), diagnostics, deferred) 631 } 632 633 pure check_body_index(context: BodyContext, checked: BodyResult): BodyResult { 634 node: BoundBody = checked.body 635 required: BodyResult = body_require(context, node.children[1].type, SignatureType(SignatureCore("Nat"), []), "index", node.children[1].span) 636 mut diagnostics: [Diagnostic] = concat(checked.diagnostics, required.diagnostics) 637 mut deferred: [SourceSpan] = concat(body_child_obligations(checked), required.deferred) 638 mut output: Option[SignatureType] = None() 639 match node.children[0].type { 640 None() => { deferred = append(deferred, node.span) }, 641 Some(type) => { 642 if type == SignatureType(SignatureCore("Str"), []) { output = body_core_type("Str") } 643 else { if type == SignatureType(SignatureCore("Bytes"), []) { output = body_core_type("Nat") } 644 else { if type.identity == SignatureCore("Array") && len(type.arguments) == 1 { output = Some(type.arguments[0]) } 645 else { if body_guarded(context, type) { deferred = append(deferred, node.span) } 646 else { diagnostics = append(diagnostics, Diagnostic("indexing requires Str, Bytes or array, got " + body_type_text(type), node.span.start)) } } } } 647 } 648 } 649 BodyResult(BoundBody(node.node, node.span, node.children, output, node.constraints), diagnostics, deferred) 650 } 651 652 pure bind_body_string(context: BodyContext, expression: Expr, token: Str, span: SourceSpan, locals: Map[Str,BodyLocal]): BodyResult { 653 interpolation: InterpolatedString = split_interpolated_string(decode_string_literal(token)) 654 mut result: BodyResult = body_result(BodyLiteral(expression), span, [], body_core_type("Str")) 655 if len(interpolation.variables) > 0 { 656 mut children: [BoundBody] = [] 657 mut diagnostics: [Diagnostic] = [] 658 mut deferred: [SourceSpan] = [] 659 for name in interpolation.variables { 660 if !locals.has(name) { diagnostics = append(diagnostics, Diagnostic("unknown interpolation local " + name, span.start)) } 661 else { 662 local: BodyLocal = locals.get(name) 663 children = append(children, BoundBody(BodyLocalUse(local.identity), span, [], local.type, [])) 664 match local.type { 665 None() => { deferred = append(deferred, span) }, 666 Some(type) => { 667 if body_guarded(context, type) { deferred = append(deferred, span) } 668 else { 669 scalar: Str = body_scalar(type) 670 if !(scalar_numeric(scalar) || scalar == "Str" || scalar == "Bool" || scalar == "Unit") { diagnostics = append(diagnostics, Diagnostic("interpolation requires a scalar local, got " + body_type_text(type), span.start)) } 671 } 672 } 673 } 674 } 675 } 676 result = BodyResult(BoundBody(BodyInterpolation(interpolation.parts), span, children, body_core_type("Str"), []), diagnostics, deferred) 677 } 678 result 679 } 680 681 // Inference holes describe absent expression evidence, not universally quantified 682 // parameters. They never enter declaration signatures or nominal identities. 683 pure body_is_hole(type: SignatureType): Bool { 684 match type.identity { 685 SignatureHole(owner, path, index) => true, 686 SignatureCore(name) => false, SignatureNominal(identity) => false, 687 SignatureParameter(owner, index) => false, SignatureCallable(effect) => false 688 } 689 } 690 pure body_callable(type: SignatureType): Bool { 691 match type.identity { 692 SignatureCallable(effect) => true, SignatureHole(owner, path, index) => false, 693 SignatureCore(name) => false, SignatureNominal(identity) => false, SignatureParameter(owner, index) => false 694 } 695 } 696 pure body_type_complete(type: SignatureType): Bool { 697 mut complete: Bool = !body_is_hole(type) 698 for argument in type.arguments { complete = complete && body_type_complete(argument) } 699 complete 700 } 701 pure body_incomplete_local(name: Str, checked: BodyResult): [Diagnostic] { 702 body: BoundBody = checked.body 703 mut diagnostics: [Diagnostic] = [] 704 match body.type { 705 None() => {}, 706 Some(type) => { if !body_type_complete(type) { diagnostics = [Diagnostic("cannot infer complete type for local " + name + "; add a type annotation", body.span.start)] } } 707 } 708 diagnostics 709 } 710 record BodySolution { hole: SignatureTypeIdentity, type: SignatureType } 711 pure body_solutions(actual: SignatureType, expected: SignatureType): [BodySolution] { 712 mut solutions: [BodySolution] = [] 713 if body_is_hole(actual) { if actual != expected { solutions = [BodySolution(actual.identity, expected)] } } 714 else { 715 if actual.identity == expected.identity && len(actual.arguments) == len(expected.arguments) { 716 mut index: Nat = 0 717 for argument in actual.arguments { 718 solutions = concat(solutions, body_solutions(argument, expected.arguments[index])) 719 index = index + 1 720 } 721 } 722 } 723 solutions 724 } 725 pure body_solve_type(type: SignatureType, solutions: [BodySolution]): SignatureType { 726 mut replacement: Option[SignatureType] = None() 727 for solution in solutions { if solution.hole == type.identity { replacement = Some(solution.type) } } 728 match replacement { 729 Some(value) => body_solve_type(value, solutions), 730 None() => { 731 mut arguments: [SignatureType] = [] 732 for argument in type.arguments { arguments = append(arguments, body_solve_type(argument, solutions)) } 733 SignatureType(type.identity, arguments) 734 } 735 } 736 } 737 pure body_solve_optional(type: Option[SignatureType], solutions: [BodySolution]): Option[SignatureType] { 738 match type { None() => None(), Some(value) => Some(body_solve_type(value, solutions)) } 739 } 740 pure body_solve(body: BoundBody, solutions: [BodySolution]): BoundBody { 741 mut children: [BoundBody] = [] 742 for child in body.children { children = append(children, body_solve(child, solutions)) } 743 mut node: BodyNode = body.node 744 match node { 745 BodyCall(target, types) => { 746 mut arguments: [SignatureType] = [] 747 for type in types { arguments = append(arguments, body_solve_type(type, solutions)) } 748 node = BodyCall(target, arguments) 749 }, 750 BodyBinding(local, type, mutable) => { node = BodyBinding(local, body_solve_optional(type, solutions), mutable) }, 751 BodyLiteral(value) => {}, BodyInterpolation(parts) => {}, BodyLocalUse(local) => {}, BodyFunction(binding) => {}, 752 BodyArray() => {}, BodyUnary(operator) => {}, BodyBinary(operator) => {}, BodyField(name) => {}, BodyIndex() => {}, 753 BodyIf(has_else) => {}, BodyBlock(has_tail) => {}, BodyMatch(targets, bindings) => {}, 754 BodyAssignment(local) => {}, BodyWhile() => {}, BodyFor(local) => {}, BodyEmpty() => {} 755 } 756 BoundBody(node, body.span, children, body_solve_optional(body.type, solutions), body.constraints) 757 } 758 pure body_refine(context: BodyContext, checked: BodyResult, expected: SignatureType): BodyResult { 759 match checked.body.type { 760 None() => checked, 761 Some(actual) => body_apply_solutions(context, checked, body_solutions(actual, expected)) 762 } 763 } 764 pure body_contains_hole(type: SignatureType, hole: SignatureTypeIdentity): Bool { 765 mut found: Bool = type.identity == hole 766 for argument in type.arguments { found = found || body_contains_hole(argument, hole) } 767 found 768 } 769 record BodyUnification { type: SignatureType, solutions: [BodySolution], deferred: Bool } 770 // Context imposes simultaneous constraints, unlike argument evidence widening. 771 // Resolve chains and reject recursive or incompatible uses of one expression hole. 772 pure body_unify(context: BodyContext, left: SignatureType, right: SignatureType, solutions: [BodySolution]): Result[BodyUnification,Str] { 773 a: SignatureType = body_solve_type(left, solutions) 774 b: SignatureType = body_solve_type(right, solutions) 775 mut merged: SignatureType = a 776 mut resolved: [BodySolution] = solutions 777 mut failure: Option[Str] = None() 778 mut deferred: Bool = false 779 if a != b { 780 if body_is_hole(a) { 781 if body_contains_hole(b, a.identity) { failure = Some("recursive inference evidence") } 782 else { merged = b; resolved = append(resolved, BodySolution(a.identity, b)) } 783 } else { if body_is_hole(b) { 784 if body_contains_hole(a, b.identity) { failure = Some("recursive inference evidence") } 785 else { resolved = append(resolved, BodySolution(b.identity, a)) } 786 } else { 787 if a.identity == b.identity && len(a.arguments) > 0 && len(a.arguments) == len(b.arguments) && !body_callable(a) { 788 mut arguments: [SignatureType] = [] 789 mut index: Nat = 0 790 for argument in a.arguments { 791 match body_unify(context, argument, b.arguments[index], resolved) { 792 Error(message) => { failure = Some(message) }, 793 Ok(result) => { arguments = append(arguments, result.type); resolved = result.solutions; deferred = deferred || result.deferred } 794 } 795 index = index + 1 796 } 797 merged = SignatureType(a.identity, arguments) 798 } else { 799 match body_compatibility(context, a, b) { 800 None() => { deferred = true }, 801 Some(forward) => { if !forward { 802 match body_compatibility(context, b, a) { 803 None() => { deferred = true }, 804 Some(backward) => { if backward { merged = b } else { failure = Some("incompatible inference constraints " + body_type_text(a) + " and " + body_type_text(b)) } } 805 } 806 } } 807 } 808 } 809 } } 810 } 811 if failure == None() { 812 for source in [left, right] { 813 if body_is_hole(source) && source != merged && !body_contains_hole(merged, source.identity) { resolved = append(resolved, BodySolution(source.identity, merged)) } 814 } 815 } 816 match failure { Some(message) => Error(message), None() => Ok(BodyUnification(merged, resolved, deferred)) } 817 } 818 pure body_apply_solutions(context: BodyContext, checked: BodyResult, constraints: [BodySolution]): BodyResult { 819 mut solutions: [BodySolution] = [] 820 mut diagnostics: [Diagnostic] = checked.diagnostics 821 mut deferred: [SourceSpan] = checked.deferred 822 for constraint in constraints { 823 match body_unify(context, SignatureType(constraint.hole, []), constraint.type, solutions) { 824 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, checked.body.span.start)) }, 825 Ok(result) => { solutions = result.solutions; if result.deferred { deferred = append(deferred, checked.body.span) } } 826 } 827 } 828 body: BoundBody = checked.body 829 retained: BoundBody = BoundBody(body.node, body.span, body.children, body.type, concat(body.constraints, constraints)) 830 BodyResult(retained, diagnostics, deferred) 831 } 832 pure body_all_constraints(body: BoundBody): [BodySolution] { 833 mut constraints: [BodySolution] = body.constraints 834 for child in body.children { constraints = concat(constraints, body_all_constraints(child)) } 835 constraints 836 } 837 pure body_finish_constraints(context: BodyContext, checked: BodyResult): BodyResult { 838 mut solutions: [BodySolution] = [] 839 mut diagnostics: [Diagnostic] = checked.diagnostics 840 mut deferred: [SourceSpan] = checked.deferred 841 for constraint in body_all_constraints(checked.body) { 842 match body_unify(context, SignatureType(constraint.hole, []), constraint.type, solutions) { 843 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, checked.body.span.start)) }, 844 Ok(result) => { solutions = result.solutions; if result.deferred { deferred = append(deferred, checked.body.span) } } 845 } 846 } 847 BodyResult(body_solve(checked.body, solutions), diagnostics, deferred) 848 } 849 pure body_unresolved_spans(body: BoundBody): [SourceSpan] { 850 mut spans: [SourceSpan] = [] 851 match body.type { None() => {}, Some(type) => { if !body_type_complete(type) { spans = [body.span] } } } 852 for child in body.children { spans = concat(spans, body_unresolved_spans(child)) } 853 spans 854 } 855 856 record BodyContract { 857 owner: DeclarationIdentity, name: Str, parameters: [Str], 858 inputs: [SignatureType], output: SignatureType, constructor: Bool, async_flag: Bool 859 } 860 pure body_core_owner(name: Str): DeclarationIdentity { 861 DeclarationIdentity(ModuleIdentity(ToolchainModulePackage(), "core.panack"), name) 862 } 863 pure body_core_constructor(name: Str): Option[BodyContract] { 864 mut parent: Str = "" 865 mut count: Nat = 0 866 if name == "Some" || name == "None" { parent = "Option"; count = 1 } 867 if name == "Ok" || name == "Error" { parent = "Result"; count = 2 } 868 if name == "map" { parent = "Map"; count = 2 } 869 if name == "set" { parent = "Set"; count = 1 } 870 if parent == "" { None() } 871 else { 872 owner: DeclarationIdentity = body_core_owner(parent) 873 mut arguments: [SignatureType] = [] 874 mut index: Nat = 0 875 while index < count { arguments = append(arguments, SignatureType(SignatureParameter(owner, index), [])); index = index + 1 } 876 mut inputs: [SignatureType] = [] 877 if name == "Some" || name == "Ok" { inputs = [arguments[0]] } 878 if name == "Error" { inputs = [arguments[1]] } 879 Some(BodyContract(owner, name, if count == 1 { ["T"] } else { if name == "map" { ["K", "V"] } else { ["T", "E"] } }, inputs, SignatureType(SignatureCore(parent), arguments), true, false)) 880 } 881 } 882 pure body_contract(context: BodyContext, target: BodyTarget): Result[Option[BodyContract],Str] { 883 match target { 884 BodyCore(name) => Ok(body_core_constructor(name)), 885 BodyDeclaration(binding) => { 886 mut owner: DeclarationIdentity = binding.identity 887 mut variant: Str = "" 888 match binding.kind { 889 ModuleVariant(parent) => { owner = DeclarationIdentity(owner.module, parent); variant = binding.identity.name }, 890 ModuleFunction() => {}, ModuleRecord() => {}, ModuleEnum() => {}, ModuleGuardedType() => {} 891 } 892 if owner.module == ModuleIdentity(ToolchainModulePackage(), "core.panack") && (owner.name == "Option" || owner.name == "Result") && variant != "" { 893 Ok(body_core_constructor(variant)) 894 } else { if binding.kind == ModuleGuardedType() { Ok(None()) } 895 else { 896 match body_signature(context.signatures, owner) { 897 None() => Error("call signature unavailable for " + owner.module.path + ":" + owner.name), 898 Some(signature) => { 899 mut arguments: [SignatureType] = [] 900 mut index: Nat = 0 901 for parameter in signature.parameters { 902 arguments = append(arguments, SignatureType(SignatureParameter(owner, index), [])); index = index + 1 903 } 904 mut inputs: [SignatureType] = [] 905 mut output: SignatureType = SignatureType(SignatureNominal(owner), arguments) 906 index = 0 907 for slot in signature.slots { 908 if binding.kind == ModuleFunction() { 909 if index + 1 == len(signature.slots) { output = slot.type } else { inputs = append(inputs, slot.type) } 910 } else { if variant == "" || starts_with(slot.name, variant + ":") { inputs = append(inputs, slot.type) } } 911 index = index + 1 912 } 913 Ok(Some(BodyContract(owner, binding.identity.name, signature.parameters, inputs, output, binding.kind != ModuleFunction(), signature.effect == Some(SignatureAsync())))) 914 } 915 } 916 } } 917 } 918 } 919 } 920 record BodyInference { arguments: [SignatureType], deferred: Bool } 921 pure body_infer(context: BodyContext, template: SignatureType, actual: SignatureType, owner: DeclarationIdentity, arguments: [SignatureType]): Result[BodyInference,Str] { 922 mut result: [SignatureType] = arguments 923 mut failure: Option[Str] = None() 924 mut deferred: Bool = false 925 mut parameter: Option[Nat] = None() 926 match template.identity { 927 SignatureParameter(binder, index) => { if binder == owner { parameter = Some(index) } }, 928 SignatureCore(name) => {}, SignatureNominal(identity) => {}, SignatureCallable(effect) => {}, SignatureHole(binder, path, index) => {} 929 } 930 match parameter { 931 Some(index) => { 932 if index >= len(result) { failure = Some("missing inference parameter") } 933 else { 934 match body_join(context, result[index], actual) { 935 Error(message) => { failure = Some(message) }, 936 Ok(optional) => match optional { None() => { deferred = true }, 937 Some(type) => { 938 mut joined: [SignatureType] = [] 939 mut cursor: Nat = 0 940 for argument in result { joined = append(joined, if cursor == index { type } else { argument }); cursor = cursor + 1 } 941 result = joined 942 } } 943 } 944 } 945 }, 946 None() => { 947 compatible_head: Bool = template.identity == actual.identity || (template.identity == SignatureCallable(SignatureOrdinary()) && actual.identity == SignatureCallable(SignaturePure())) 948 if compatible_head && len(template.arguments) == len(actual.arguments) { 949 mut index: Nat = 0 950 for child in template.arguments { 951 match body_infer(context, child, actual.arguments[index], owner, result) { 952 Error(message) => { failure = Some(message) }, 953 Ok(inferred) => { result = inferred.arguments; deferred = deferred || inferred.deferred } 954 } 955 index = index + 1 956 } 957 } 958 } 959 } 960 match failure { Some(message) => Error(message), None() => Ok(BodyInference(result, deferred)) } 961 } 962 963 pure check_body_array(context: BodyContext, checked: BodyResult, path: [Nat]): BodyResult { 964 mut diagnostics: [Diagnostic] = checked.diagnostics 965 mut deferred: [SourceSpan] = body_child_obligations(checked) 966 mut item: Option[SignatureType] = Some(SignatureType(SignatureHole(context.owner, path, 0), [])) 967 for child in checked.body.children { 968 if child.type == body_core_type("Void") { diagnostics = append(diagnostics, Diagnostic("Void is not an array element", child.span.start)) } 969 match child.type { 970 None() => { item = None(); deferred = append(deferred, child.span) }, 971 Some(type) => match item { 972 None() => {}, 973 Some(previous) => match body_join(context, previous, type) { 974 Error(message) => { diagnostics = append(diagnostics, Diagnostic("array elements have " + message, child.span.start)) }, 975 Ok(joined) => { item = joined; if joined == None() { deferred = append(deferred, child.span) } } 976 } 977 } 978 } 979 } 980 mut output: Option[SignatureType] = None() 981 mut solutions: [BodySolution] = [] 982 match item { 983 None() => {}, 984 Some(type) => { 985 output = Some(SignatureType(SignatureCore("Array"), [type])) 986 for child in checked.body.children { match child.type { None() => {}, Some(actual) => { solutions = concat(solutions, body_solutions(actual, type)) } } } 987 } 988 } 989 body_apply_solutions(context, BodyResult(BoundBody(BodyArray(), checked.body.span, checked.body.children, output, checked.body.constraints), diagnostics, deferred), solutions) 990 } 991 pure check_body_field(context: BodyContext, checked: BodyResult, field: Str): BodyResult { 992 mut diagnostics: [Diagnostic] = checked.diagnostics 993 mut deferred: [SourceSpan] = body_child_obligations(checked) 994 mut output: Option[SignatureType] = None() 995 match checked.body.children[0].type { 996 None() => { deferred = append(deferred, checked.body.span) }, 997 Some(type) => { 998 mut record: Option[ModuleSignature] = None() 999 match type.identity { 1000 SignatureNominal(owner) => { record = body_signature(context.signatures, owner) }, 1001 SignatureCore(name) => {}, SignatureParameter(owner, index) => {}, SignatureCallable(effect) => {}, SignatureHole(owner, path, index) => {} 1002 } 1003 match record { 1004 Some(signature) => { 1005 if signature.binding.kind != ModuleRecord() { diagnostics = append(diagnostics, Diagnostic("field access requires a record, got " + body_type_text(type), checked.body.span.start)) } 1006 else { 1007 mut found: Bool = false 1008 for slot in signature.slots { 1009 if slot.name == field { 1010 found = true 1011 match substitute_signature_type(slot.type, signature.binding.identity, type.arguments) { 1012 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, checked.body.span.start)) }, 1013 Ok(value) => { output = Some(value) } 1014 } 1015 } 1016 } 1017 if !found { diagnostics = append(diagnostics, Diagnostic("record " + body_type_text(type) + " has no field " + field, checked.body.span.start)) } 1018 } 1019 }, 1020 None() => { 1021 if body_is_hole(type) { deferred = append(deferred, checked.body.span) } 1022 else { diagnostics = append(diagnostics, Diagnostic("field access requires a record, got " + body_type_text(type), checked.body.span.start)) } 1023 } 1024 } 1025 } 1026 } 1027 BodyResult(BoundBody(checked.body.node, checked.body.span, checked.body.children, output, checked.body.constraints), diagnostics, deferred) 1028 } 1029 1030 pure body_variant_identity(target: BodyTarget): DeclarationIdentity { 1031 match target { BodyCore(name) => body_core_owner(name), BodyDeclaration(binding) => binding.identity } 1032 } 1033 pure body_enum_variants(context: BodyContext, type: SignatureType): Result[[BodyTarget],Str] { 1034 mut variants: [BodyTarget] = [] 1035 mut known: Bool = false 1036 if type.identity == SignatureCore("Option") { known = true; variants = [BodyCore("None"), BodyCore("Some")] } 1037 if type.identity == SignatureCore("Result") { known = true; variants = [BodyCore("Ok"), BodyCore("Error")] } 1038 match type.identity { 1039 SignatureNominal(owner) => { 1040 match body_signature(context.signatures, owner) { 1041 None() => {}, 1042 Some(signature) => { 1043 if signature.binding.kind == ModuleEnum() { 1044 known = true 1045 match binding_graph_module(context.graph, owner.module) { 1046 Error(message) => {}, 1047 Ok(module) => { 1048 for binding in module.declarations { 1049 if binding.kind == ModuleVariant(owner.name) { variants = append(variants, BodyDeclaration(binding)) } 1050 } 1051 } 1052 } 1053 } 1054 } 1055 } 1056 }, 1057 SignatureCore(name) => {}, SignatureParameter(owner, index) => {}, SignatureCallable(effect) => {}, SignatureHole(owner, path, index) => {} 1058 } 1059 if known { Ok(variants) } else { Error("match requires an enum, got " + body_type_text(type)) } 1060 } 1061 pure bind_body_match(context: BodyContext, subject: Expr, arms: [MatchArm], span: SourceSpan, locals: Map[Str,BodyLocal], path: [Nat]): BodyResult { 1062 subject_result: BodyResult = bind_body_expression(context, subject, span, locals, append(path, 0)) 1063 mut children: [BoundBody] = [subject_result.body] 1064 mut targets: [BodyTarget] = [] 1065 mut bindings: [[BodyLocalIdentity]] = [] 1066 mut diagnostics: [Diagnostic] = subject_result.diagnostics 1067 mut deferred: [SourceSpan] = subject_result.deferred 1068 mut variants: [BodyTarget] = [] 1069 match subject_result.body.type { 1070 None() => { deferred = append(deferred, span) }, 1071 Some(type) => match body_enum_variants(context, type) { 1072 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, subject_result.body.span.start)) }, 1073 Ok(values) => { variants = values } 1074 } 1075 } 1076 mut output: Option[SignatureType] = None() 1077 mut first: Bool = true 1078 mut seen: [DeclarationIdentity] = [] 1079 mut index: Nat = 1 1080 for arm in arms { 1081 mut payload: [SignatureType] = [] 1082 mut arm_locals: Map[Str,BodyLocal] = locals 1083 mut arm_bindings: [BodyLocalIdentity] = [] 1084 match body_target(context, arm.pattern.variant, false) { 1085 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 1086 Ok(target) => { 1087 targets = append(targets, target) 1088 is_variant: Bool = match target { 1089 BodyCore(name) => name == "Some" || name == "None" || name == "Ok" || name == "Error", 1090 BodyDeclaration(binding) => match binding.kind { 1091 ModuleVariant(parent) => true, 1092 ModuleFunction() => false, ModuleRecord() => false, ModuleEnum() => false, ModuleGuardedType() => false 1093 } 1094 } 1095 if !is_variant { diagnostics = append(diagnostics, Diagnostic("pattern is not a variant: " + arm.pattern.variant, span.start)) } 1096 identity: DeclarationIdentity = body_variant_identity(target) 1097 mut found: Bool = false 1098 for variant in variants { if body_variant_identity(variant) == identity { found = true } } 1099 if subject_result.body.type != None() && !found { diagnostics = append(diagnostics, Diagnostic("pattern " + arm.pattern.variant + " is not a variant of the matched enum", span.start)) } 1100 for previous in seen { if previous == identity { diagnostics = append(diagnostics, Diagnostic("duplicate match arm " + arm.pattern.variant, span.start)) } } 1101 seen = append(seen, identity) 1102 if is_variant { 1103 match body_contract(context, target) { 1104 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 1105 Ok(optional) => match optional { None() => { deferred = append(deferred, span) }, 1106 Some(contract) => { 1107 if len(arm.pattern.bindings) != len(contract.inputs) { 1108 count: Nat = len(contract.inputs) 1109 diagnostics = append(diagnostics, Diagnostic("pattern " + arm.pattern.variant + " expects ${count} bindings", span.start)) 1110 } 1111 match subject_result.body.type { 1112 None() => {}, 1113 Some(type) => { if found { 1114 for input in contract.inputs { 1115 match substitute_signature_type(input, contract.owner, type.arguments) { 1116 Error(message) => { diagnostics = append(diagnostics, Diagnostic(message, span.start)) }, 1117 Ok(value) => { payload = append(payload, value) } 1118 } 1119 } 1120 } } 1121 } 1122 } } 1123 } 1124 } 1125 } 1126 } 1127 mut binding_index: Nat = 0 1128 for name in arm.pattern.bindings { 1129 if arm_locals.has(name) { diagnostics = append(diagnostics, Diagnostic("pattern binding " + name + " shadows an existing binding", span.start)) } 1130 local: BodyLocalIdentity = BodyLocalIdentity(context.owner, concat(path, [index, 0, binding_index]), name) 1131 type: Option[SignatureType] = if binding_index < len(payload) { Some(payload[binding_index]) } else { None() } 1132 arm_bindings = append(arm_bindings, local) 1133 arm_locals = arm_locals.put(name, BodyLocal(local, type, false)) 1134 binding_index = binding_index + 1 1135 } 1136 checked: BodyResult = bind_body_expression(context, arm.body, span, arm_locals, concat(path, [index, 1])) 1137 children = append(children, checked.body); bindings = append(bindings, arm_bindings) 1138 diagnostics = concat(diagnostics, checked.diagnostics); deferred = concat(deferred, checked.deferred) 1139 if first { output = checked.body.type; first = false } 1140 else { 1141 match output { 1142 None() => {}, 1143 Some(previous) => match checked.body.type { 1144 None() => { output = None() }, 1145 Some(type) => match body_join(context, previous, type) { 1146 Error(message) => { diagnostics = append(diagnostics, Diagnostic("match arms have " + message, checked.body.span.start)) }, 1147 Ok(joined) => { output = joined } 1148 } 1149 } 1150 } 1151 } 1152 index = index + 1 1153 } 1154 for variant in variants { 1155 mut found: Bool = false 1156 for identity in seen { if identity == body_variant_identity(variant) { found = true } } 1157 if !found { diagnostics = append(diagnostics, Diagnostic("non-exhaustive match; missing " + body_variant_identity(variant).name, span.start)) } 1158 } 1159 if output == None() { deferred = append(deferred, span) } 1160 mut solutions: [BodySolution] = [] 1161 match output { 1162 None() => {}, 1163 Some(type) => { 1164 index = 0 1165 for child in children { 1166 if index > 0 { match child.type { None() => {}, Some(actual) => { solutions = concat(solutions, body_solutions(actual, type)) } } } 1167 index = index + 1 1168 } 1169 } 1170 } 1171 body: BoundBody = BoundBody(BodyMatch(targets, bindings), span, children, output, []) 1172 body_apply_solutions(context, BodyResult(body, diagnostics, deferred), solutions) 1173 } 1174
Functions
[
{
"id": "declaration/11",
"name": "body_core_type",
"line": 29,
"state": "covered",
"entries": "972"
},
{
"id": "declaration/12",
"name": "body_result",
"line": 30,
"state": "covered",
"entries": "2628"
},
{
"id": "declaration/13",
"name": "body_failure",
"line": 33,
"state": "covered",
"entries": "30"
},
{
"id": "declaration/14",
"name": "body_signature",
"line": 36,
"state": "covered",
"entries": "399"
},
{
"id": "declaration/15",
"name": "body_type_text",
"line": 41,
"state": "covered",
"entries": "117"
},
{
"id": "declaration/16",
"name": "body_compatibility",
"line": 55,
"state": "covered",
"entries": "461"
},
{
"id": "declaration/17",
"name": "body_require",
"line": 95,
"state": "covered",
"entries": "435"
},
{
"id": "declaration/18",
"name": "body_target",
"line": 106,
"state": "covered",
"entries": "175"
},
{
"id": "declaration/19",
"name": "body_call",
"line": 121,
"state": "covered",
"entries": "138"
},
{
"id": "declaration/20",
"name": "bind_body_expression",
"line": 223,
"state": "covered",
"entries": "1652"
},
{
"id": "declaration/21",
"name": "bind_body_children",
"line": 296,
"state": "covered",
"entries": "157"
},
{
"id": "declaration/22",
"name": "bind_body_block",
"line": 308,
"state": "covered",
"entries": "341"
},
{
"id": "declaration/23",
"name": "check_module_bodies",
"line": 384,
"state": "covered",
"entries": "227"
},
{
"id": "declaration/24",
"name": "body_child_obligations",
"line": 432,
"state": "covered",
"entries": "157"
},
{
"id": "declaration/25",
"name": "body_guarded",
"line": 442,
"state": "covered",
"entries": "136"
},
{
"id": "declaration/26",
"name": "body_scalar",
"line": 460,
"state": "covered",
"entries": "150"
},
{
"id": "declaration/27",
"name": "check_body_operation",
"line": 467,
"state": "covered",
"entries": "63"
},
{
"id": "declaration/28",
"name": "body_join",
"line": 542,
"state": "covered",
"entries": "174"
},
{
"id": "declaration/29",
"name": "check_body_conditional",
"line": 582,
"state": "covered",
"entries": "27"
},
{
"id": "declaration/30",
"name": "body_iteration_item",
"line": 615,
"state": "covered",
"entries": "10"
},
{
"id": "declaration/31",
"name": "check_body_index",
"line": 633,
"state": "covered",
"entries": "7"
},
{
"id": "declaration/32",
"name": "bind_body_string",
"line": 652,
"state": "covered",
"entries": "28"
},
{
"id": "declaration/33",
"name": "body_is_hole",
"line": 683,
"state": "covered",
"entries": "3642"
},
{
"id": "declaration/34",
"name": "body_callable",
"line": 690,
"state": "covered",
"entries": "16"
},
{
"id": "declaration/35",
"name": "body_type_complete",
"line": 696,
"state": "covered",
"entries": "1539"
},
{
"id": "declaration/36",
"name": "body_incomplete_local",
"line": 701,
"state": "covered",
"entries": "33"
},
{
"id": "declaration/38",
"name": "body_solutions",
"line": 711,
"state": "covered",
"entries": "647"
},
{
"id": "declaration/39",
"name": "body_solve_type",
"line": 725,
"state": "covered",
"entries": "2096"
},
{
"id": "declaration/40",
"name": "body_solve_optional",
"line": 737,
"state": "covered",
"entries": "1255"
},
{
"id": "declaration/41",
"name": "body_solve",
"line": 740,
"state": "covered",
"entries": "1213"
},
{
"id": "declaration/42",
"name": "body_refine",
"line": 758,
"state": "covered",
"entries": "401"
},
{
"id": "declaration/43",
"name": "body_contains_hole",
"line": 764,
"state": "covered",
"entries": "234"
},
{
"id": "declaration/45",
"name": "body_unify",
"line": 772,
"state": "covered",
"entries": "122"
},
{
"id": "declaration/46",
"name": "body_apply_solutions",
"line": 818,
"state": "covered",
"entries": "543"
},
{
"id": "declaration/47",
"name": "body_all_constraints",
"line": 832,
"state": "covered",
"entries": "1213"
},
{
"id": "declaration/48",
"name": "body_finish_constraints",
"line": 837,
"state": "covered",
"entries": "278"
},
{
"id": "declaration/49",
"name": "body_unresolved_spans",
"line": 849,
"state": "covered",
"entries": "1213"
},
{
"id": "declaration/51",
"name": "body_core_owner",
"line": 860,
"state": "covered",
"entries": "284"
},
{
"id": "declaration/52",
"name": "body_core_constructor",
"line": 863,
"state": "covered",
"entries": "101"
},
{
"id": "declaration/53",
"name": "body_contract",
"line": 882,
"state": "covered",
"entries": "197"
},
{
"id": "declaration/55",
"name": "body_infer",
"line": 921,
"state": "covered",
"entries": "95"
},
{
"id": "declaration/56",
"name": "check_body_array",
"line": 963,
"state": "covered",
"entries": "50"
},
{
"id": "declaration/57",
"name": "check_body_field",
"line": 991,
"state": "covered",
"entries": "10"
},
{
"id": "declaration/58",
"name": "body_variant_identity",
"line": 1030,
"state": "covered",
"entries": "285"
},
{
"id": "declaration/59",
"name": "body_enum_variants",
"line": 1033,
"state": "covered",
"entries": "30"
},
{
"id": "declaration/60",
"name": "bind_body_match",
"line": 1061,
"state": "covered",
"entries": "35"
}
]Source branch outcomes
[
{
"id": "declaration/14/statement/1/decision/body",
"outcome": "body",
"line": 38,
"state": "covered",
"hits": "897"
},
{
"id": "declaration/14/statement/1/decision/exit",
"outcome": "exit",
"line": 38,
"state": "covered",
"hits": "399"
},
{
"id": "declaration/14/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 38,
"state": "covered",
"hits": "399"
},
{
"id": "declaration/14/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 38,
"state": "covered",
"hits": "498"
},
{
"id": "declaration/15/statement/0/value/arm/0",
"outcome": "SignatureCore",
"line": 43,
"state": "covered",
"hits": "86"
},
{
"id": "declaration/15/statement/0/value/arm/1",
"outcome": "SignatureNominal",
"line": 44,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/15/statement/0/value/arm/2",
"outcome": "SignatureHole",
"line": 45,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/statement/0/value/arm/3",
"outcome": "SignatureParameter",
"line": 46,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/15/statement/0/value/arm/4",
"outcome": "SignatureCallable",
"line": 47,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/15/statement/0/value/arm/4/body/arm/0",
"outcome": "SignaturePure",
"line": 47,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/15/statement/0/value/arm/4/body/arm/1",
"outcome": "SignatureOrdinary",
"line": 47,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/15/statement/0/value/arm/4/body/arm/2",
"outcome": "SignatureAsync",
"line": 47,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/15/statement/2/decision/body",
"outcome": "body",
"line": 50,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/15/statement/2/decision/exit",
"outcome": "exit",
"line": 50,
"state": "covered",
"hits": "117"
},
{
"id": "declaration/15/tail/decision/true",
"outcome": "true",
"line": 51,
"state": "covered",
"hits": "105"
},
{
"id": "declaration/15/tail/decision/false",
"outcome": "false",
"line": 51,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/16/tail/decision/true",
"outcome": "true",
"line": 56,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/16/tail/decision/false",
"outcome": "false",
"line": 56,
"state": "covered",
"hits": "444"
},
{
"id": "declaration/16/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 56,
"state": "covered",
"hits": "446"
},
{
"id": "declaration/16/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 56,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/true/tail/args/0/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 56,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/16/tail/true/tail/args/0/decision/skip-right",
"outcome": "skip-right",
"line": 56,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/decision/true",
"outcome": "true",
"line": 57,
"state": "covered",
"hits": "365"
},
{
"id": "declaration/16/tail/false/tail/decision/false",
"outcome": "false",
"line": 57,
"state": "covered",
"hits": "79"
},
{
"id": "declaration/16/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 57,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/16/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 57,
"state": "covered",
"hits": "352"
},
{
"id": "declaration/16/tail/false/tail/condition/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 57,
"state": "covered",
"hits": "31"
},
{
"id": "declaration/16/tail/false/tail/condition/right/decision/skip-right",
"outcome": "skip-right",
"line": 57,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/decision/body",
"outcome": "body",
"line": 60,
"state": "covered",
"hits": "158"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/decision/exit",
"outcome": "exit",
"line": 60,
"state": "covered",
"hits": "79"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0",
"outcome": "SignatureNominal",
"line": 62,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/0",
"outcome": "Error",
"line": 63,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1",
"outcome": "Ok",
"line": 64,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1/body/arm/0",
"outcome": "TypeDeclaration",
"line": 65,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1/body/arm/1",
"outcome": "ImportDeclaration",
"line": 66,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1/body/arm/2",
"outcome": "RecordDeclaration",
"line": 66,
"state": "covered",
"hits": "26"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1/body/arm/3",
"outcome": "EnumDeclaration",
"line": 67,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/0/body/arm/1/body/arm/4",
"outcome": "FunctionDeclaration",
"line": 67,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/1",
"outcome": "SignatureCore",
"line": 70,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/2",
"outcome": "SignatureParameter",
"line": 70,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/3",
"outcome": "SignatureCallable",
"line": 70,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/16/tail/false/tail/false/statement/1/body/tail/arm/4",
"outcome": "SignatureHole",
"line": 70,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 73,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 73,
"state": "covered",
"hits": "78"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/1/value/arm/0",
"outcome": "SignatureCallable",
"line": 76,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/1/value/arm/1",
"outcome": "SignatureCore",
"line": 76,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/1/value/arm/2",
"outcome": "SignatureNominal",
"line": 76,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/1/value/arm/3",
"outcome": "SignatureParameter",
"line": 76,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/1/value/arm/4",
"outcome": "SignatureHole",
"line": 76,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/2/value/arm/0",
"outcome": "SignatureCallable",
"line": 77,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/2/value/arm/1",
"outcome": "SignatureCore",
"line": 77,
"state": "covered",
"hits": "58"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/2/value/arm/2",
"outcome": "SignatureNominal",
"line": 77,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/2/value/arm/3",
"outcome": "SignatureParameter",
"line": 77,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/statement/2/value/arm/4",
"outcome": "SignatureHole",
"line": 77,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 78,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 78,
"state": "covered",
"hits": "73"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/true/tail/args/0/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 78,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/true/tail/args/0/decision/skip-right",
"outcome": "skip-right",
"line": 78,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/true/tail/args/0/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 78,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/true/tail/args/0/left/decision/skip-right",
"outcome": "skip-right",
"line": 78,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 80,
"state": "covered",
"hits": "58"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 80,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 80,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 80,
"state": "covered",
"hits": "58"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/decision/body",
"outcome": "body",
"line": 85,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/decision/exit",
"outcome": "exit",
"line": 85,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/body/statement/0/value/arm/0",
"outcome": "None",
"line": 86,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/body/statement/0/value/arm/1",
"outcome": "Some",
"line": 86,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/body/statement/0/value/arm/1/body/block/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 86,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/statement/3/body/statement/0/value/arm/1/body/block/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 86,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 89,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 89,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/16/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 89,
"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": 89,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/17/statement/1/value/arm/0",
"outcome": "None",
"line": 98,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/17/statement/1/value/arm/1",
"outcome": "Some",
"line": 99,
"state": "covered",
"hits": "402"
},
{
"id": "declaration/17/statement/1/value/arm/1/body/arm/0",
"outcome": "None",
"line": 100,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/17/statement/1/value/arm/1/body/arm/1",
"outcome": "Some",
"line": 101,
"state": "covered",
"hits": "401"
},
{
"id": "declaration/17/statement/1/value/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 101,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/17/statement/1/value/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 101,
"state": "covered",
"hits": "377"
},
{
"id": "declaration/18/tail/decision/true",
"outcome": "true",
"line": 107,
"state": "covered",
"hits": "91"
},
{
"id": "declaration/18/tail/decision/false",
"outcome": "false",
"line": 107,
"state": "covered",
"hits": "84"
},
{
"id": "declaration/18/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 107,
"state": "covered",
"hits": "173"
},
{
"id": "declaration/18/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 107,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/18/tail/false/tail/arm/0",
"outcome": "Error",
"line": 110,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/18/tail/false/tail/arm/1",
"outcome": "Ok",
"line": 111,
"state": "covered",
"hits": "84"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/0",
"outcome": "NamespaceTarget",
"line": 112,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1",
"outcome": "DeclarationTarget",
"line": 113,
"state": "covered",
"hits": "84"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 114,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 114,
"state": "covered",
"hits": "84"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 114,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 114,
"state": "covered",
"hits": "82"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 115,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/18/tail/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 115,
"state": "covered",
"hits": "83"
},
{
"id": "declaration/19/statement/4/decision/body",
"outcome": "body",
"line": 126,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/19/statement/4/decision/exit",
"outcome": "exit",
"line": 126,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/19/statement/4/body/statement/4/value/decision/true",
"outcome": "true",
"line": 129,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/19/statement/4/body/statement/4/value/decision/false",
"outcome": "false",
"line": 129,
"state": "covered",
"hits": "116"
},
{
"id": "declaration/19/statement/6/decision/body",
"outcome": "body",
"line": 133,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/19/statement/6/decision/exit",
"outcome": "exit",
"line": 133,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/19/statement/6/body/tail/arm/0",
"outcome": "Error",
"line": 135,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/6/body/tail/arm/1",
"outcome": "Ok",
"line": 136,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/19/statement/8/value/arm/0",
"outcome": "Error",
"line": 141,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1",
"outcome": "Ok",
"line": 142,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/0",
"outcome": "None",
"line": 142,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1",
"outcome": "Some",
"line": 143,
"state": "covered",
"hits": "128"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/0/value/decision/true",
"outcome": "true",
"line": 144,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/0/value/decision/false",
"outcome": "false",
"line": 144,
"state": "covered",
"hits": "121"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/decision/true",
"outcome": "true",
"line": 149,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/decision/false",
"outcome": "false",
"line": 149,
"state": "covered",
"hits": "125"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 149,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 149,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/condition/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 149,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/1/value/condition/right/decision/skip-right",
"outcome": "skip-right",
"line": 149,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/4/decision/body",
"outcome": "body",
"line": 154,
"state": "covered",
"hits": "110"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/4/decision/exit",
"outcome": "exit",
"line": 154,
"state": "covered",
"hits": "128"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/decision/true",
"outcome": "true",
"line": 159,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/decision/false",
"outcome": "false",
"line": 159,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/true/tail/decision/true",
"outcome": "true",
"line": 160,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/true/tail/decision/false",
"outcome": "false",
"line": 160,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/true/tail/false/tail/decision/true",
"outcome": "true",
"line": 162,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/true/tail/false/tail/decision/false",
"outcome": "false",
"line": 162,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/decision/body",
"outcome": "body",
"line": 165,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/decision/exit",
"outcome": "exit",
"line": 165,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/decision/true",
"outcome": "true",
"line": 166,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/decision/false",
"outcome": "false",
"line": 166,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/0",
"outcome": "None",
"line": 168,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/1",
"outcome": "Some",
"line": 169,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/1/body/arm/0",
"outcome": "Error",
"line": 170,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/1/body/arm/1",
"outcome": "Ok",
"line": 171,
"state": "covered",
"hits": "89"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/1/body/arm/1/body/block/statement/1/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 171,
"state": "covered",
"hits": "89"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/6/value/false/statement/1/body/statement/0/value/true/tail/arm/1/body/arm/1/body/block/statement/1/value/decision/skip-right",
"outcome": "skip-right",
"line": 171,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/decision/true",
"outcome": "true",
"line": 178,
"state": "covered",
"hits": "36"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/decision/false",
"outcome": "false",
"line": 178,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 178,
"state": "covered",
"hits": "43"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 178,
"state": "covered",
"hits": "85"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/decision/body",
"outcome": "body",
"line": 180,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/decision/exit",
"outcome": "exit",
"line": 180,
"state": "covered",
"hits": "36"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/body/statement/0/value/decision/true",
"outcome": "true",
"line": 181,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/body/statement/0/value/decision/false",
"outcome": "false",
"line": 181,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/body/statement/0/value/true/tail/decision/true",
"outcome": "true",
"line": 182,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/7/value/true/statement/1/body/statement/0/value/true/tail/decision/false",
"outcome": "false",
"line": 182,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/8/value/decision/true",
"outcome": "true",
"line": 188,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/8/value/decision/false",
"outcome": "false",
"line": 188,
"state": "covered",
"hits": "128"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/decision/body",
"outcome": "body",
"line": 192,
"state": "covered",
"hits": "104"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/decision/exit",
"outcome": "exit",
"line": 192,
"state": "covered",
"hits": "128"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/body/statement/1/value/decision/true",
"outcome": "true",
"line": 194,
"state": "covered",
"hits": "100"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/body/statement/1/value/decision/false",
"outcome": "false",
"line": 194,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/body/statement/1/value/true/tail/arm/0",
"outcome": "Error",
"line": 196,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/statement/12/body/statement/1/value/true/tail/arm/1",
"outcome": "Ok",
"line": 197,
"state": "covered",
"hits": "100"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/0",
"outcome": "Error",
"line": 212,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1",
"outcome": "Ok",
"line": 213,
"state": "covered",
"hits": "128"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 214,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 214,
"state": "covered",
"hits": "126"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 215,
"state": "covered",
"hits": "126"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 215,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/19/statement/8/value/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 215,
"state": "covered",
"hits": "126"
},
{
"id": "declaration/20/statement/1/value/arm/0",
"outcome": "LocatedExpr",
"line": 226,
"state": "covered",
"hits": "801"
},
{
"id": "declaration/20/statement/1/value/arm/1",
"outcome": "NatExpr",
"line": 227,
"state": "covered",
"hits": "211"
},
{
"id": "declaration/20/statement/1/value/arm/2",
"outcome": "DecimalExpr",
"line": 228,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/20/statement/1/value/arm/3",
"outcome": "StringExpr",
"line": 229,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/20/statement/1/value/arm/4",
"outcome": "BoolExpr",
"line": 230,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/20/statement/1/value/arm/5",
"outcome": "NameExpr",
"line": 231,
"state": "covered",
"hits": "207"
},
{
"id": "declaration/20/statement/1/value/arm/5/body/block/tail/decision/true",
"outcome": "true",
"line": 232,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/20/statement/1/value/arm/5/body/block/tail/decision/false",
"outcome": "false",
"line": 232,
"state": "covered",
"hits": "203"
},
{
"id": "declaration/20/statement/1/value/arm/6",
"outcome": "FunctionExpr",
"line": 235,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/0",
"outcome": "Error",
"line": 237,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1",
"outcome": "Ok",
"line": 238,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/0",
"outcome": "None",
"line": 242,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1",
"outcome": "Some",
"line": 243,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 244,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 244,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/false/statement/1/decision/body",
"outcome": "body",
"line": 247,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/false/statement/1/decision/exit",
"outcome": "exit",
"line": 247,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/false/tail/arm/0",
"outcome": "None",
"line": 248,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/6/body/block/tail/arm/1/body/block/statement/2/value/arm/1/body/block/tail/false/tail/arm/1",
"outcome": "Some",
"line": 248,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/20/statement/1/value/arm/7",
"outcome": "CallExpr",
"line": 256,
"state": "covered",
"hits": "109"
},
{
"id": "declaration/20/statement/1/value/arm/7/body/block/tail/arm/0",
"outcome": "Error",
"line": 257,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/20/statement/1/value/arm/7/body/block/tail/arm/1",
"outcome": "Ok",
"line": 257,
"state": "covered",
"hits": "108"
},
{
"id": "declaration/20/statement/1/value/arm/8",
"outcome": "DotCallExpr",
"line": 259,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/statement/2/value/decision/true",
"outcome": "true",
"line": 262,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/statement/2/value/decision/false",
"outcome": "false",
"line": 262,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/0",
"outcome": "Error",
"line": 264,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1",
"outcome": "Ok",
"line": 265,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/0",
"outcome": "NamespaceCall",
"line": 266,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1",
"outcome": "ValueMethodCall",
"line": 267,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 268,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 268,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 268,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 268,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/false/tail/arm/0",
"outcome": "Error",
"line": 272,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/8/body/block/tail/arm/1/body/arm/1/body/block/tail/false/tail/arm/1",
"outcome": "Ok",
"line": 273,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/20/statement/1/value/arm/9",
"outcome": "BlockExpr",
"line": 280,
"state": "covered",
"hits": "53"
},
{
"id": "declaration/20/statement/1/value/arm/10",
"outcome": "ArrayExpr",
"line": 281,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/20/statement/1/value/arm/11",
"outcome": "UnaryExpr",
"line": 282,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/20/statement/1/value/arm/12",
"outcome": "BinaryExpr",
"line": 283,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/20/statement/1/value/arm/13",
"outcome": "FieldExpr",
"line": 284,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/decision/true",
"outcome": "true",
"line": 286,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/decision/false",
"outcome": "false",
"line": 286,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 286,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 286,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 286,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/20/statement/1/value/arm/13/body/block/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 286,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/20/statement/1/value/arm/14",
"outcome": "IndexExpr",
"line": 289,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/20/statement/1/value/arm/15",
"outcome": "IfExpr",
"line": 290,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/20/statement/1/value/arm/16",
"outcome": "MatchExpr",
"line": 291,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/21/statement/4/decision/body",
"outcome": "body",
"line": 301,
"state": "covered",
"hits": "256"
},
{
"id": "declaration/21/statement/4/decision/exit",
"outcome": "exit",
"line": 301,
"state": "covered",
"hits": "157"
},
{
"id": "declaration/22/statement/5/decision/body",
"outcome": "body",
"line": 314,
"state": "covered",
"hits": "80"
},
{
"id": "declaration/22/statement/5/decision/exit",
"outcome": "exit",
"line": 314,
"state": "covered",
"hits": "341"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0",
"outcome": "BindingStatement",
"line": 318,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/0/value/decision/true",
"outcome": "true",
"line": 319,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/0/value/decision/false",
"outcome": "false",
"line": 319,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/2/value/decision/true",
"outcome": "true",
"line": 321,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/2/value/decision/false",
"outcome": "false",
"line": 321,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/4/value/decision/true",
"outcome": "true",
"line": 323,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/4/value/decision/false",
"outcome": "false",
"line": 323,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/4/value/true/tail/arm/0",
"outcome": "Error",
"line": 325,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/4/value/true/tail/arm/1",
"outcome": "Ok",
"line": 326,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/5/value/decision/true",
"outcome": "true",
"line": 333,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/0/body/block/statement/5/value/decision/false",
"outcome": "false",
"line": 333,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1",
"outcome": "AssignmentStatement",
"line": 338,
"state": "covered",
"hits": "38"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 340,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 340,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/true/statement/1/value/decision/true",
"outcome": "true",
"line": 342,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/true/statement/1/value/decision/false",
"outcome": "false",
"line": 342,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/false/statement/1/value/decision/true",
"outcome": "true",
"line": 348,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/false/statement/1/value/decision/false",
"outcome": "false",
"line": 348,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/false/statement/2/value/arm/0",
"outcome": "None",
"line": 350,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/1/body/block/tail/false/statement/2/value/arm/1",
"outcome": "Some",
"line": 351,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/2",
"outcome": "ExpressionStatement",
"line": 360,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/3",
"outcome": "WhileStatement",
"line": 361,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/4",
"outcome": "ForStatement",
"line": 362,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/4/body/block/statement/0/value/decision/true",
"outcome": "true",
"line": 363,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/22/statement/5/body/statement/2/value/arm/4/body/block/statement/0/value/decision/false",
"outcome": "false",
"line": 363,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/22/statement/7/value/arm/0",
"outcome": "NoBlockValue",
"line": 375,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/22/statement/7/value/arm/1",
"outcome": "TailBlockValue",
"line": 376,
"state": "covered",
"hits": "302"
},
{
"id": "declaration/23/statement/2/value/decision/true",
"outcome": "true",
"line": 387,
"state": "covered",
"hits": "227"
},
{
"id": "declaration/23/statement/2/value/decision/false",
"outcome": "false",
"line": 387,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/decision/body",
"outcome": "body",
"line": 388,
"state": "covered",
"hits": "354"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/decision/exit",
"outcome": "exit",
"line": 388,
"state": "covered",
"hits": "227"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0",
"outcome": "FunctionDeclaration",
"line": 390,
"state": "covered",
"hits": "278"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/0",
"outcome": "None",
"line": 393,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1",
"outcome": "Some",
"line": 394,
"state": "covered",
"hits": "278"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/5/decision/body",
"outcome": "body",
"line": 400,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/5/decision/exit",
"outcome": "exit",
"line": 400,
"state": "covered",
"hits": "278"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/5/body/statement/1/value/decision/true",
"outcome": "true",
"line": 402,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/5/body/statement/1/value/decision/false",
"outcome": "false",
"line": 402,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/12/value/decision/true",
"outcome": "true",
"line": 411,
"state": "covered",
"hits": "106"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/12/value/decision/false",
"outcome": "false",
"line": 411,
"state": "covered",
"hits": "172"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/12/value/false/tail/decision/true",
"outcome": "true",
"line": 411,
"state": "covered",
"hits": "25"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/0/body/block/tail/arm/1/body/block/statement/12/value/false/tail/decision/false",
"outcome": "false",
"line": 411,
"state": "covered",
"hits": "147"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/1",
"outcome": "TypeDeclaration",
"line": 416,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/1/body/block/statement/0/decision/body",
"outcome": "body",
"line": 417,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/1/body/block/statement/0/decision/exit",
"outcome": "exit",
"line": 417,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/1/body/block/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 418,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/1/body/block/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 418,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/2",
"outcome": "ImportDeclaration",
"line": 423,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/3",
"outcome": "RecordDeclaration",
"line": 424,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/23/statement/2/value/true/statement/0/body/tail/arm/4",
"outcome": "EnumDeclaration",
"line": 424,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/24/statement/2/decision/body",
"outcome": "body",
"line": 435,
"state": "covered",
"hits": "168"
},
{
"id": "declaration/24/statement/2/decision/exit",
"outcome": "exit",
"line": 435,
"state": "covered",
"hits": "157"
},
{
"id": "declaration/24/statement/2/body/statement/0/value/decision/true",
"outcome": "true",
"line": 436,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/24/statement/2/body/statement/0/value/decision/false",
"outcome": "false",
"line": 436,
"state": "covered",
"hits": "157"
},
{
"id": "declaration/25/statement/1/value/arm/0",
"outcome": "SignatureNominal",
"line": 445,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/0",
"outcome": "Error",
"line": 447,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1",
"outcome": "Ok",
"line": 448,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1/body/arm/0",
"outcome": "TypeDeclaration",
"line": 449,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1/body/arm/1",
"outcome": "FunctionDeclaration",
"line": 450,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1/body/arm/2",
"outcome": "ImportDeclaration",
"line": 451,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1/body/arm/3",
"outcome": "RecordDeclaration",
"line": 451,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/25/statement/1/value/arm/0/body/block/tail/arm/1/body/arm/4",
"outcome": "EnumDeclaration",
"line": 451,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/1",
"outcome": "SignatureCore",
"line": 455,
"state": "covered",
"hits": "129"
},
{
"id": "declaration/25/statement/1/value/arm/2",
"outcome": "SignatureParameter",
"line": 455,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/25/statement/1/value/arm/3",
"outcome": "SignatureCallable",
"line": 455,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/25/statement/1/value/arm/4",
"outcome": "SignatureHole",
"line": 455,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/26/tail/arm/0",
"outcome": "SignatureCore",
"line": 462,
"state": "covered",
"hits": "136"
},
{
"id": "declaration/26/tail/arm/0/body/decision/true",
"outcome": "true",
"line": 462,
"state": "covered",
"hits": "131"
},
{
"id": "declaration/26/tail/arm/0/body/decision/false",
"outcome": "false",
"line": 462,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/26/tail/arm/1",
"outcome": "SignatureNominal",
"line": 463,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/26/tail/arm/2",
"outcome": "SignatureParameter",
"line": 463,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/26/tail/arm/3",
"outcome": "SignatureCallable",
"line": 463,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/26/tail/arm/4",
"outcome": "SignatureHole",
"line": 463,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/6/value/decision/true",
"outcome": "true",
"line": 474,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/27/statement/6/value/decision/false",
"outcome": "false",
"line": 474,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/27/statement/7/value/decision/true",
"outcome": "true",
"line": 475,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/decision/false",
"outcome": "false",
"line": 475,
"state": "covered",
"hits": "62"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/0",
"outcome": "None",
"line": 479,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1",
"outcome": "Some",
"line": 480,
"state": "covered",
"hits": "62"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 481,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 482,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 483,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 483,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 483,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 483,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/decision/true",
"outcome": "true",
"line": 489,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/decision/false",
"outcome": "false",
"line": 489,
"state": "covered",
"hits": "49"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/decision/true",
"outcome": "true",
"line": 490,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/decision/false",
"outcome": "false",
"line": 490,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 490,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 490,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/decision/true",
"outcome": "true",
"line": 491,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/decision/false",
"outcome": "false",
"line": 491,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 491,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 491,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/true/statement/0/value/args/0/decision/true",
"outcome": "true",
"line": 491,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/true/tail/false/tail/true/statement/0/value/args/0/decision/false",
"outcome": "false",
"line": 491,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/decision/true",
"outcome": "true",
"line": 494,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/decision/false",
"outcome": "false",
"line": 494,
"state": "covered",
"hits": "45"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 495,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 495,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 497,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 497,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 497,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 497,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 498,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 498,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 500,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 500,
"state": "covered",
"hits": "31"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 500,
"state": "covered",
"hits": "31"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 500,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 500,
"state": "covered",
"hits": "32"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 500,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 500,
"state": "covered",
"hits": "32"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 500,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 500,
"state": "covered",
"hits": "34"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 500,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 500,
"state": "covered",
"hits": "34"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/condition/left/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 500,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 501,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 501,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 501,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 501,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 501,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 501,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 501,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 501,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/right/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 501,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/0/value/right/left/decision/skip-right",
"outcome": "skip-right",
"line": 501,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/1/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 502,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/1/value/decision/skip-right",
"outcome": "skip-right",
"line": 502,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 503,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/decision/skip-right",
"outcome": "skip-right",
"line": 503,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 503,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 503,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 503,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/2/value/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 503,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/decision/true",
"outcome": "true",
"line": 504,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/decision/false",
"outcome": "false",
"line": 504,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 504,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 504,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/true/statement/0/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 504,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/true/statement/0/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 504,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/decision/true",
"outcome": "true",
"line": 505,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/decision/false",
"outcome": "false",
"line": 505,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 505,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 505,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 505,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 505,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 505,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 505,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/true/tail/arm/0",
"outcome": "Error",
"line": 507,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/true/tail/arm/1",
"outcome": "Ok",
"line": 508,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/true/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 509,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/true/statement/3/value/false/tail/true/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 510,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 515,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 515,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 515,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 515,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 515,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 515,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 518,
"state": "covered",
"hits": "25"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 518,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/right/operand/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 518,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/right/operand/decision/skip-right",
"outcome": "skip-right",
"line": 518,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/right/operand/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 518,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/statement/0/value/right/operand/right/decision/skip-right",
"outcome": "skip-right",
"line": 518,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 519,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 519,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/true",
"outcome": "true",
"line": 523,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/decision/false",
"outcome": "false",
"line": 523,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 523,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/statement/3/value/false/tail/false/tail/false/tail/false/tail/false/tail/true/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 523,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 527,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 527,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/true/statement/0/value/right/decision/true",
"outcome": "true",
"line": 528,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/27/statement/7/value/false/tail/arm/1/body/arm/1/body/block/tail/false/tail/true/statement/0/value/right/decision/false",
"outcome": "false",
"line": 528,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/28/tail/decision/true",
"outcome": "true",
"line": 543,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/28/tail/decision/false",
"outcome": "false",
"line": 543,
"state": "covered",
"hits": "144"
},
{
"id": "declaration/28/tail/false/tail/decision/true",
"outcome": "true",
"line": 544,
"state": "covered",
"hits": "98"
},
{
"id": "declaration/28/tail/false/tail/decision/false",
"outcome": "false",
"line": 544,
"state": "covered",
"hits": "46"
},
{
"id": "declaration/28/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 545,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/28/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 545,
"state": "covered",
"hits": "36"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 547,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 547,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 547,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 547,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 547,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 547,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 547,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 547,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/decision/body",
"outcome": "body",
"line": 552,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/decision/exit",
"outcome": "exit",
"line": 552,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/body/statement/0/value/arm/0",
"outcome": "Error",
"line": 554,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/body/statement/0/value/arm/1",
"outcome": "Ok",
"line": 555,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/body/statement/0/value/arm/1/body/arm/0",
"outcome": "None",
"line": 555,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/statement/4/body/statement/0/value/arm/1/body/arm/1",
"outcome": "Some",
"line": 556,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/tail/arm/0",
"outcome": "Some",
"line": 560,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/tail/arm/1",
"outcome": "None",
"line": 560,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/tail/arm/1/body/decision/true",
"outcome": "true",
"line": 560,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/true/tail/arm/1/body/decision/false",
"outcome": "false",
"line": 560,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/0",
"outcome": "None",
"line": 563,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1",
"outcome": "Some",
"line": 564,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/decision/true",
"outcome": "true",
"line": 564,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/decision/false",
"outcome": "false",
"line": 564,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/0",
"outcome": "None",
"line": 566,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1",
"outcome": "Some",
"line": 567,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/decision/true",
"outcome": "true",
"line": 567,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/decision/false",
"outcome": "false",
"line": 567,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 571,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/decision/skip-right",
"outcome": "skip-right",
"line": 571,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 571,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 571,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/left/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 571,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/left/right/decision/skip-right",
"outcome": "skip-right",
"line": 571,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 571,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 571,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/right/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 571,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/statement/2/value/right/right/decision/skip-right",
"outcome": "skip-right",
"line": 571,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/tail/decision/true",
"outcome": "true",
"line": 572,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/28/tail/false/tail/false/tail/false/tail/false/tail/arm/1/body/false/tail/arm/1/body/false/tail/decision/false",
"outcome": "false",
"line": 572,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/29/statement/1/value/args/3/decision/true",
"outcome": "true",
"line": 584,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/29/statement/1/value/args/3/decision/false",
"outcome": "false",
"line": 584,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/29/statement/5/value/decision/true",
"outcome": "true",
"line": 588,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/29/statement/5/value/decision/false",
"outcome": "false",
"line": 588,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/0",
"outcome": "None",
"line": 591,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1",
"outcome": "Some",
"line": 592,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 593,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 594,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/1/body/arm/0",
"outcome": "Error",
"line": 595,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/1/body/arm/1",
"outcome": "Ok",
"line": 596,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 596,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/29/statement/5/value/true/tail/arm/1/body/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 596,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/29/statement/7/value/arm/0",
"outcome": "None",
"line": 603,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/29/statement/7/value/arm/1",
"outcome": "Some",
"line": 604,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 605,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 605,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/true/statement/0/decision/body",
"outcome": "body",
"line": 606,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/true/statement/0/decision/exit",
"outcome": "exit",
"line": 606,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/true/statement/0/body/tail/arm/0",
"outcome": "None",
"line": 607,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/29/statement/7/value/arm/1/body/block/tail/true/statement/0/body/tail/arm/1",
"outcome": "Some",
"line": 607,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/30/statement/3/value/arm/0",
"outcome": "None",
"line": 620,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/30/statement/3/value/arm/1",
"outcome": "Some",
"line": 621,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 622,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 622,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 624,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 624,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 624,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 624,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 625,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 625,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 625,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/30/statement/3/value/arm/1/body/block/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 625,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/31/statement/5/value/arm/0",
"outcome": "None",
"line": 640,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/31/statement/5/value/arm/1",
"outcome": "Some",
"line": 641,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 642,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 642,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 643,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 643,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 644,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 644,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 644,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 644,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 645,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/31/statement/5/value/arm/1/body/block/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 645,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/32/statement/2/value/decision/true",
"outcome": "true",
"line": 655,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/32/statement/2/value/decision/false",
"outcome": "false",
"line": 655,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/decision/body",
"outcome": "body",
"line": 659,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/decision/exit",
"outcome": "exit",
"line": 659,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/decision/true",
"outcome": "true",
"line": 660,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/decision/false",
"outcome": "false",
"line": 660,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/0",
"outcome": "None",
"line": 665,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1",
"outcome": "Some",
"line": 666,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 667,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 667,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 670,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 670,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 670,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/decision/skip-right",
"outcome": "skip-right",
"line": 670,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 670,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/left/decision/skip-right",
"outcome": "skip-right",
"line": 670,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 670,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/32/statement/2/value/true/statement/3/body/tail/false/tail/arm/1/body/block/tail/false/tail/condition/operand/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 670,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/33/tail/arm/0",
"outcome": "SignatureHole",
"line": 685,
"state": "covered",
"hits": "449"
},
{
"id": "declaration/33/tail/arm/1",
"outcome": "SignatureCore",
"line": 686,
"state": "covered",
"hits": "2701"
},
{
"id": "declaration/33/tail/arm/2",
"outcome": "SignatureNominal",
"line": 686,
"state": "covered",
"hits": "265"
},
{
"id": "declaration/33/tail/arm/3",
"outcome": "SignatureParameter",
"line": 687,
"state": "covered",
"hits": "182"
},
{
"id": "declaration/33/tail/arm/4",
"outcome": "SignatureCallable",
"line": 687,
"state": "covered",
"hits": "45"
},
{
"id": "declaration/34/tail/arm/0",
"outcome": "SignatureCallable",
"line": 692,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/34/tail/arm/1",
"outcome": "SignatureHole",
"line": 692,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/34/tail/arm/2",
"outcome": "SignatureCore",
"line": 693,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/34/tail/arm/3",
"outcome": "SignatureNominal",
"line": 693,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/34/tail/arm/4",
"outcome": "SignatureParameter",
"line": 693,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/35/statement/1/decision/body",
"outcome": "body",
"line": 698,
"state": "covered",
"hits": "356"
},
{
"id": "declaration/35/statement/1/decision/exit",
"outcome": "exit",
"line": 698,
"state": "covered",
"hits": "1539"
},
{
"id": "declaration/35/statement/1/body/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 698,
"state": "covered",
"hits": "354"
},
{
"id": "declaration/35/statement/1/body/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 698,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/36/statement/2/value/arm/0",
"outcome": "None",
"line": 705,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/36/statement/2/value/arm/1",
"outcome": "Some",
"line": 706,
"state": "covered",
"hits": "32"
},
{
"id": "declaration/36/statement/2/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 706,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/36/statement/2/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 706,
"state": "covered",
"hits": "25"
},
{
"id": "declaration/38/statement/1/value/decision/true",
"outcome": "true",
"line": 713,
"state": "covered",
"hits": "75"
},
{
"id": "declaration/38/statement/1/value/decision/false",
"outcome": "false",
"line": 713,
"state": "covered",
"hits": "572"
},
{
"id": "declaration/38/statement/1/value/true/tail/decision/true",
"outcome": "true",
"line": 713,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/38/statement/1/value/true/tail/decision/false",
"outcome": "false",
"line": 713,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/38/statement/1/value/false/tail/decision/true",
"outcome": "true",
"line": 715,
"state": "covered",
"hits": "532"
},
{
"id": "declaration/38/statement/1/value/false/tail/decision/false",
"outcome": "false",
"line": 715,
"state": "covered",
"hits": "40"
},
{
"id": "declaration/38/statement/1/value/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 715,
"state": "covered",
"hits": "532"
},
{
"id": "declaration/38/statement/1/value/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 715,
"state": "covered",
"hits": "40"
},
{
"id": "declaration/38/statement/1/value/false/tail/true/statement/1/decision/body",
"outcome": "body",
"line": 717,
"state": "covered",
"hits": "149"
},
{
"id": "declaration/38/statement/1/value/false/tail/true/statement/1/decision/exit",
"outcome": "exit",
"line": 717,
"state": "covered",
"hits": "532"
},
{
"id": "declaration/39/statement/1/decision/body",
"outcome": "body",
"line": 727,
"state": "covered",
"hits": "2043"
},
{
"id": "declaration/39/statement/1/decision/exit",
"outcome": "exit",
"line": 727,
"state": "covered",
"hits": "2096"
},
{
"id": "declaration/39/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 727,
"state": "covered",
"hits": "400"
},
{
"id": "declaration/39/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 727,
"state": "covered",
"hits": "1643"
},
{
"id": "declaration/39/tail/arm/0",
"outcome": "Some",
"line": 729,
"state": "covered",
"hits": "193"
},
{
"id": "declaration/39/tail/arm/1",
"outcome": "None",
"line": 730,
"state": "covered",
"hits": "1903"
},
{
"id": "declaration/39/tail/arm/1/body/block/statement/1/decision/body",
"outcome": "body",
"line": 732,
"state": "covered",
"hits": "372"
},
{
"id": "declaration/39/tail/arm/1/body/block/statement/1/decision/exit",
"outcome": "exit",
"line": 732,
"state": "covered",
"hits": "1903"
},
{
"id": "declaration/40/tail/arm/0",
"outcome": "None",
"line": 738,
"state": "covered",
"hits": "78"
},
{
"id": "declaration/40/tail/arm/1",
"outcome": "Some",
"line": 738,
"state": "covered",
"hits": "1177"
},
{
"id": "declaration/41/statement/1/decision/body",
"outcome": "body",
"line": 742,
"state": "covered",
"hits": "935"
},
{
"id": "declaration/41/statement/1/decision/exit",
"outcome": "exit",
"line": 742,
"state": "covered",
"hits": "1213"
},
{
"id": "declaration/41/statement/3/value/arm/0",
"outcome": "BodyCall",
"line": 745,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/41/statement/3/value/arm/0/body/block/statement/1/decision/body",
"outcome": "body",
"line": 747,
"state": "covered",
"hits": "110"
},
{
"id": "declaration/41/statement/3/value/arm/0/body/block/statement/1/decision/exit",
"outcome": "exit",
"line": 747,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/41/statement/3/value/arm/1",
"outcome": "BodyBinding",
"line": 750,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/41/statement/3/value/arm/2",
"outcome": "BodyLiteral",
"line": 751,
"state": "covered",
"hits": "252"
},
{
"id": "declaration/41/statement/3/value/arm/3",
"outcome": "BodyInterpolation",
"line": 751,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/41/statement/3/value/arm/4",
"outcome": "BodyLocalUse",
"line": 751,
"state": "covered",
"hits": "207"
},
{
"id": "declaration/41/statement/3/value/arm/5",
"outcome": "BodyFunction",
"line": 751,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/41/statement/3/value/arm/6",
"outcome": "BodyArray",
"line": 752,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/41/statement/3/value/arm/7",
"outcome": "BodyUnary",
"line": 752,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/41/statement/3/value/arm/8",
"outcome": "BodyBinary",
"line": 752,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/41/statement/3/value/arm/9",
"outcome": "BodyField",
"line": 752,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/41/statement/3/value/arm/10",
"outcome": "BodyIndex",
"line": 752,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/41/statement/3/value/arm/11",
"outcome": "BodyIf",
"line": 753,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/41/statement/3/value/arm/12",
"outcome": "BodyBlock",
"line": 753,
"state": "covered",
"hits": "341"
},
{
"id": "declaration/41/statement/3/value/arm/13",
"outcome": "BodyMatch",
"line": 753,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/41/statement/3/value/arm/14",
"outcome": "BodyAssignment",
"line": 754,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/41/statement/3/value/arm/15",
"outcome": "BodyWhile",
"line": 754,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/41/statement/3/value/arm/16",
"outcome": "BodyFor",
"line": 754,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/41/statement/3/value/arm/17",
"outcome": "BodyEmpty",
"line": 754,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/42/tail/arm/0",
"outcome": "None",
"line": 760,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/42/tail/arm/1",
"outcome": "Some",
"line": 761,
"state": "covered",
"hits": "368"
},
{
"id": "declaration/43/statement/1/decision/body",
"outcome": "body",
"line": 766,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/43/statement/1/decision/exit",
"outcome": "exit",
"line": 766,
"state": "covered",
"hits": "234"
},
{
"id": "declaration/43/statement/1/body/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 766,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/43/statement/1/body/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 766,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/decision/true",
"outcome": "true",
"line": 779,
"state": "covered",
"hits": "121"
},
{
"id": "declaration/45/statement/6/value/decision/false",
"outcome": "false",
"line": 779,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/45/statement/6/value/true/tail/decision/true",
"outcome": "true",
"line": 780,
"state": "covered",
"hits": "116"
},
{
"id": "declaration/45/statement/6/value/true/tail/decision/false",
"outcome": "false",
"line": 780,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/true/tail/decision/true",
"outcome": "true",
"line": 781,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/45/statement/6/value/true/tail/true/tail/decision/false",
"outcome": "false",
"line": 781,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/decision/true",
"outcome": "true",
"line": 783,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/decision/false",
"outcome": "false",
"line": 783,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/true/tail/decision/true",
"outcome": "true",
"line": 784,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/true/tail/decision/false",
"outcome": "false",
"line": 784,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 787,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 787,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 787,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 787,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 787,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 787,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 787,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 787,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/decision/body",
"outcome": "body",
"line": 790,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/decision/exit",
"outcome": "exit",
"line": 790,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/body/statement/0/value/arm/0",
"outcome": "Error",
"line": 792,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/body/statement/0/value/arm/1",
"outcome": "Ok",
"line": 793,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/body/statement/0/value/arm/1/body/block/statement/2/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 793,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/true/statement/2/body/statement/0/value/arm/1/body/block/statement/2/value/decision/skip-right",
"outcome": "skip-right",
"line": 793,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/0",
"outcome": "None",
"line": 800,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1",
"outcome": "Some",
"line": 801,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 801,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 801,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/true/tail/arm/0",
"outcome": "None",
"line": 803,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/true/tail/arm/1",
"outcome": "Some",
"line": 804,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 804,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/45/statement/6/value/true/tail/false/tail/false/tail/false/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 804,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/45/statement/7/value/decision/true",
"outcome": "true",
"line": 811,
"state": "covered",
"hits": "116"
},
{
"id": "declaration/45/statement/7/value/decision/false",
"outcome": "false",
"line": 811,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/decision/body",
"outcome": "body",
"line": 812,
"state": "covered",
"hits": "232"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/decision/exit",
"outcome": "exit",
"line": 812,
"state": "covered",
"hits": "116"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 813,
"state": "covered",
"hits": "117"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 813,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 813,
"state": "covered",
"hits": "117"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 813,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 813,
"state": "covered",
"hits": "118"
},
{
"id": "declaration/45/statement/7/value/true/statement/0/body/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 813,
"state": "covered",
"hits": "114"
},
{
"id": "declaration/45/tail/arm/0",
"outcome": "Some",
"line": 816,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/45/tail/arm/1",
"outcome": "None",
"line": 816,
"state": "covered",
"hits": "116"
},
{
"id": "declaration/46/statement/3/decision/body",
"outcome": "body",
"line": 822,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/46/statement/3/decision/exit",
"outcome": "exit",
"line": 822,
"state": "covered",
"hits": "543"
},
{
"id": "declaration/46/statement/3/body/tail/arm/0",
"outcome": "Error",
"line": 824,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/46/statement/3/body/tail/arm/1",
"outcome": "Ok",
"line": 825,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/46/statement/3/body/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 825,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/46/statement/3/body/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 825,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/47/statement/1/decision/body",
"outcome": "body",
"line": 834,
"state": "covered",
"hits": "935"
},
{
"id": "declaration/47/statement/1/decision/exit",
"outcome": "exit",
"line": 834,
"state": "covered",
"hits": "1213"
},
{
"id": "declaration/48/statement/3/decision/body",
"outcome": "body",
"line": 841,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/48/statement/3/decision/exit",
"outcome": "exit",
"line": 841,
"state": "covered",
"hits": "278"
},
{
"id": "declaration/48/statement/3/body/tail/arm/0",
"outcome": "Error",
"line": 843,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/48/statement/3/body/tail/arm/1",
"outcome": "Ok",
"line": 844,
"state": "covered",
"hits": "57"
},
{
"id": "declaration/48/statement/3/body/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 844,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/48/statement/3/body/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 844,
"state": "covered",
"hits": "57"
},
{
"id": "declaration/49/statement/1/value/arm/0",
"outcome": "None",
"line": 851,
"state": "covered",
"hits": "77"
},
{
"id": "declaration/49/statement/1/value/arm/1",
"outcome": "Some",
"line": 851,
"state": "covered",
"hits": "1136"
},
{
"id": "declaration/49/statement/1/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 851,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/49/statement/1/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 851,
"state": "covered",
"hits": "1131"
},
{
"id": "declaration/49/statement/2/decision/body",
"outcome": "body",
"line": 852,
"state": "covered",
"hits": "935"
},
{
"id": "declaration/49/statement/2/decision/exit",
"outcome": "exit",
"line": 852,
"state": "covered",
"hits": "1213"
},
{
"id": "declaration/52/statement/2/value/decision/true",
"outcome": "true",
"line": 866,
"state": "covered",
"hits": "74"
},
{
"id": "declaration/52/statement/2/value/decision/false",
"outcome": "false",
"line": 866,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/52/statement/2/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 866,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/52/statement/2/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 866,
"state": "covered",
"hits": "37"
},
{
"id": "declaration/52/statement/3/value/decision/true",
"outcome": "true",
"line": 867,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/52/statement/3/value/decision/false",
"outcome": "false",
"line": 867,
"state": "covered",
"hits": "94"
},
{
"id": "declaration/52/statement/3/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 867,
"state": "covered",
"hits": "97"
},
{
"id": "declaration/52/statement/3/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 867,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/52/statement/4/value/decision/true",
"outcome": "true",
"line": 868,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/52/statement/4/value/decision/false",
"outcome": "false",
"line": 868,
"state": "covered",
"hits": "95"
},
{
"id": "declaration/52/statement/5/value/decision/true",
"outcome": "true",
"line": 869,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/52/statement/5/value/decision/false",
"outcome": "false",
"line": 869,
"state": "covered",
"hits": "97"
},
{
"id": "declaration/52/tail/decision/true",
"outcome": "true",
"line": 870,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/52/tail/decision/false",
"outcome": "false",
"line": 870,
"state": "covered",
"hits": "91"
},
{
"id": "declaration/52/tail/false/statement/3/decision/body",
"outcome": "body",
"line": 875,
"state": "covered",
"hits": "104"
},
{
"id": "declaration/52/tail/false/statement/3/decision/exit",
"outcome": "exit",
"line": 875,
"state": "covered",
"hits": "91"
},
{
"id": "declaration/52/tail/false/statement/5/value/decision/true",
"outcome": "true",
"line": 877,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/52/tail/false/statement/5/value/decision/false",
"outcome": "false",
"line": 877,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/52/tail/false/statement/5/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 877,
"state": "covered",
"hits": "54"
},
{
"id": "declaration/52/tail/false/statement/5/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 877,
"state": "covered",
"hits": "37"
},
{
"id": "declaration/52/tail/false/statement/6/value/decision/true",
"outcome": "true",
"line": 878,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/52/tail/false/statement/6/value/decision/false",
"outcome": "false",
"line": 878,
"state": "covered",
"hits": "88"
},
{
"id": "declaration/52/tail/false/tail/args/0/args/2/decision/true",
"outcome": "true",
"line": 879,
"state": "covered",
"hits": "78"
},
{
"id": "declaration/52/tail/false/tail/args/0/args/2/decision/false",
"outcome": "false",
"line": 879,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/52/tail/false/tail/args/0/args/2/false/tail/decision/true",
"outcome": "true",
"line": 879,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/52/tail/false/tail/args/0/args/2/false/tail/decision/false",
"outcome": "false",
"line": 879,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/53/tail/arm/0",
"outcome": "BodyCore",
"line": 884,
"state": "covered",
"hits": "100"
},
{
"id": "declaration/53/tail/arm/1",
"outcome": "BodyDeclaration",
"line": 885,
"state": "covered",
"hits": "97"
},
{
"id": "declaration/53/tail/arm/1/body/block/statement/2/value/arm/0",
"outcome": "ModuleVariant",
"line": 889,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/53/tail/arm/1/body/block/statement/2/value/arm/1",
"outcome": "ModuleFunction",
"line": 890,
"state": "covered",
"hits": "43"
},
{
"id": "declaration/53/tail/arm/1/body/block/statement/2/value/arm/2",
"outcome": "ModuleRecord",
"line": 890,
"state": "covered",
"hits": "31"
},
{
"id": "declaration/53/tail/arm/1/body/block/statement/2/value/arm/3",
"outcome": "ModuleEnum",
"line": 890,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/53/tail/arm/1/body/block/statement/2/value/arm/4",
"outcome": "ModuleGuardedType",
"line": 890,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 892,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 892,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 892,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 892,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 892,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 892,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/left/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 892,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/condition/left/right/decision/skip-right",
"outcome": "skip-right",
"line": 892,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 894,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 894,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/0",
"outcome": "None",
"line": 897,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1",
"outcome": "Some",
"line": 898,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/2/decision/body",
"outcome": "body",
"line": 901,
"state": "covered",
"hits": "61"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/2/decision/exit",
"outcome": "exit",
"line": 901,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/decision/body",
"outcome": "body",
"line": 907,
"state": "covered",
"hits": "143"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/decision/exit",
"outcome": "exit",
"line": 907,
"state": "covered",
"hits": "96"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/decision/true",
"outcome": "true",
"line": 908,
"state": "covered",
"hits": "84"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/decision/false",
"outcome": "false",
"line": 908,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/true/tail/decision/true",
"outcome": "true",
"line": 909,
"state": "covered",
"hits": "43"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/true/tail/decision/false",
"outcome": "false",
"line": 909,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/false/tail/decision/true",
"outcome": "true",
"line": 910,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/false/tail/decision/false",
"outcome": "false",
"line": 910,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/false/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 910,
"state": "covered",
"hits": "21"
},
{
"id": "declaration/53/tail/arm/1/body/block/tail/false/tail/false/tail/arm/1/body/block/statement/6/body/statement/0/value/false/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 910,
"state": "covered",
"hits": "38"
},
{
"id": "declaration/55/statement/4/value/arm/0",
"outcome": "SignatureParameter",
"line": 927,
"state": "covered",
"hits": "68"
},
{
"id": "declaration/55/statement/4/value/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 927,
"state": "covered",
"hits": "68"
},
{
"id": "declaration/55/statement/4/value/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 927,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/statement/4/value/arm/1",
"outcome": "SignatureCore",
"line": 928,
"state": "covered",
"hits": "24"
},
{
"id": "declaration/55/statement/4/value/arm/2",
"outcome": "SignatureNominal",
"line": 928,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/55/statement/4/value/arm/3",
"outcome": "SignatureCallable",
"line": 928,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/55/statement/4/value/arm/4",
"outcome": "SignatureHole",
"line": 928,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/statement/5/value/arm/0",
"outcome": "Some",
"line": 931,
"state": "covered",
"hits": "68"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 932,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 932,
"state": "covered",
"hits": "68"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/0",
"outcome": "Error",
"line": 935,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1",
"outcome": "Ok",
"line": 936,
"state": "covered",
"hits": "65"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 936,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 937,
"state": "covered",
"hits": "65"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/1/body/block/statement/2/decision/body",
"outcome": "body",
"line": 940,
"state": "covered",
"hits": "77"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/1/body/block/statement/2/decision/exit",
"outcome": "exit",
"line": 940,
"state": "covered",
"hits": "65"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/1/body/block/statement/2/body/statement/0/value/args/1/decision/true",
"outcome": "true",
"line": 940,
"state": "covered",
"hits": "65"
},
{
"id": "declaration/55/statement/5/value/arm/0/body/block/tail/false/tail/arm/1/body/arm/1/body/block/statement/2/body/statement/0/value/args/1/decision/false",
"outcome": "false",
"line": 940,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/55/statement/5/value/arm/1",
"outcome": "None",
"line": 946,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 947,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 947,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/statement/0/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 947,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/statement/0/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 947,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 948,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 948,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 948,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 948,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/decision/body",
"outcome": "body",
"line": 950,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/decision/exit",
"outcome": "exit",
"line": 950,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/body/statement/0/value/arm/0",
"outcome": "Error",
"line": 952,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/body/statement/0/value/arm/1",
"outcome": "Ok",
"line": 953,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/body/statement/0/value/arm/1/body/block/statement/1/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 953,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/55/statement/5/value/arm/1/body/block/tail/true/statement/1/body/statement/0/value/arm/1/body/block/statement/1/value/decision/skip-right",
"outcome": "skip-right",
"line": 953,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/55/tail/arm/0",
"outcome": "Some",
"line": 960,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/55/tail/arm/1",
"outcome": "None",
"line": 960,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/56/statement/3/decision/body",
"outcome": "body",
"line": 967,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/56/statement/3/decision/exit",
"outcome": "exit",
"line": 967,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/56/statement/3/body/statement/0/value/decision/true",
"outcome": "true",
"line": 968,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/56/statement/3/body/statement/0/value/decision/false",
"outcome": "false",
"line": 968,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/56/statement/3/body/tail/arm/0",
"outcome": "None",
"line": 970,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1",
"outcome": "Some",
"line": 971,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 972,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 973,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/1/body/arm/0",
"outcome": "Error",
"line": 974,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/1/body/arm/1",
"outcome": "Ok",
"line": 975,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/1/body/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 975,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/56/statement/3/body/tail/arm/1/body/arm/1/body/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 975,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/56/statement/6/value/arm/0",
"outcome": "None",
"line": 983,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/56/statement/6/value/arm/1",
"outcome": "Some",
"line": 984,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/56/statement/6/value/arm/1/body/block/statement/1/decision/body",
"outcome": "body",
"line": 986,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/56/statement/6/value/arm/1/body/block/statement/1/decision/exit",
"outcome": "exit",
"line": 986,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/56/statement/6/value/arm/1/body/block/statement/1/body/tail/arm/0",
"outcome": "None",
"line": 986,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/56/statement/6/value/arm/1/body/block/statement/1/body/tail/arm/1",
"outcome": "Some",
"line": 986,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/57/statement/3/value/arm/0",
"outcome": "None",
"line": 996,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1",
"outcome": "Some",
"line": 997,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/statement/1/value/arm/0",
"outcome": "SignatureNominal",
"line": 1000,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/statement/1/value/arm/1",
"outcome": "SignatureCore",
"line": 1001,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/statement/1/value/arm/2",
"outcome": "SignatureParameter",
"line": 1001,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/statement/1/value/arm/3",
"outcome": "SignatureCallable",
"line": 1001,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/statement/1/value/arm/4",
"outcome": "SignatureHole",
"line": 1001,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0",
"outcome": "Some",
"line": 1004,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 1005,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 1005,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/decision/body",
"outcome": "body",
"line": 1008,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/decision/exit",
"outcome": "exit",
"line": 1008,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 1009,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 1009,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/body/tail/true/tail/arm/0",
"outcome": "Error",
"line": 1012,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/statement/1/body/tail/true/tail/arm/1",
"outcome": "Ok",
"line": 1013,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/tail/decision/true",
"outcome": "true",
"line": 1017,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/0/body/block/tail/false/tail/decision/false",
"outcome": "false",
"line": 1017,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/1",
"outcome": "None",
"line": 1020,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 1021,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/57/statement/3/value/arm/1/body/block/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 1021,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/58/tail/arm/0",
"outcome": "BodyCore",
"line": 1031,
"state": "covered",
"hits": "193"
},
{
"id": "declaration/58/tail/arm/1",
"outcome": "BodyDeclaration",
"line": 1031,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/59/statement/2/value/decision/true",
"outcome": "true",
"line": 1036,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/59/statement/2/value/decision/false",
"outcome": "false",
"line": 1036,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/59/statement/3/value/decision/true",
"outcome": "true",
"line": 1037,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/59/statement/3/value/decision/false",
"outcome": "false",
"line": 1037,
"state": "covered",
"hits": "29"
},
{
"id": "declaration/59/statement/4/value/arm/0",
"outcome": "SignatureNominal",
"line": 1039,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/0",
"outcome": "None",
"line": 1041,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1",
"outcome": "Some",
"line": 1042,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 1043,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 1043,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/0",
"outcome": "Error",
"line": 1046,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/1",
"outcome": "Ok",
"line": 1047,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/statement/0/decision/body",
"outcome": "body",
"line": 1048,
"state": "covered",
"hits": "44"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/statement/0/decision/exit",
"outcome": "exit",
"line": 1048,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 1049,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/59/statement/4/value/arm/0/body/block/tail/arm/1/body/block/tail/true/tail/arm/1/body/block/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 1049,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/59/statement/4/value/arm/1",
"outcome": "SignatureCore",
"line": 1057,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/59/statement/4/value/arm/2",
"outcome": "SignatureParameter",
"line": 1057,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/statement/4/value/arm/3",
"outcome": "SignatureCallable",
"line": 1057,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/statement/4/value/arm/4",
"outcome": "SignatureHole",
"line": 1057,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/59/tail/decision/true",
"outcome": "true",
"line": 1059,
"state": "covered",
"hits": "29"
},
{
"id": "declaration/59/tail/decision/false",
"outcome": "false",
"line": 1059,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/60/statement/7/value/arm/0",
"outcome": "None",
"line": 1070,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/60/statement/7/value/arm/1",
"outcome": "Some",
"line": 1071,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/60/statement/7/value/arm/1/body/arm/0",
"outcome": "Error",
"line": 1072,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/60/statement/7/value/arm/1/body/arm/1",
"outcome": "Ok",
"line": 1073,
"state": "covered",
"hits": "29"
},
{
"id": "declaration/60/statement/12/decision/body",
"outcome": "body",
"line": 1080,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/60/statement/12/decision/exit",
"outcome": "exit",
"line": 1080,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/0",
"outcome": "Error",
"line": 1085,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1",
"outcome": "Ok",
"line": 1086,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0",
"outcome": "BodyCore",
"line": 1089,
"state": "covered",
"hits": "42"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 1089,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/decision/skip-right",
"outcome": "skip-right",
"line": 1089,
"state": "covered",
"hits": "40"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 1089,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/left/decision/skip-right",
"outcome": "skip-right",
"line": 1089,
"state": "covered",
"hits": "38"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 1089,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/0/body/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 1089,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1",
"outcome": "BodyDeclaration",
"line": 1090,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1/body/arm/0",
"outcome": "ModuleVariant",
"line": 1091,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1/body/arm/1",
"outcome": "ModuleFunction",
"line": 1092,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1/body/arm/2",
"outcome": "ModuleRecord",
"line": 1092,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1/body/arm/3",
"outcome": "ModuleEnum",
"line": 1092,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/1/value/arm/1/body/arm/4",
"outcome": "ModuleGuardedType",
"line": 1092,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/2/value/decision/true",
"outcome": "true",
"line": 1095,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/2/value/decision/false",
"outcome": "false",
"line": 1095,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/5/decision/body",
"outcome": "body",
"line": 1098,
"state": "covered",
"hits": "108"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/5/decision/exit",
"outcome": "exit",
"line": 1098,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/5/body/tail/decision/true",
"outcome": "true",
"line": 1098,
"state": "covered",
"hits": "53"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/5/body/tail/decision/false",
"outcome": "false",
"line": 1098,
"state": "covered",
"hits": "55"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/6/value/decision/true",
"outcome": "true",
"line": 1099,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/6/value/decision/false",
"outcome": "false",
"line": 1099,
"state": "covered",
"hits": "60"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/6/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 1099,
"state": "covered",
"hits": "57"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/6/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 1099,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/7/decision/body",
"outcome": "body",
"line": 1100,
"state": "covered",
"hits": "31"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/7/decision/exit",
"outcome": "exit",
"line": 1100,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/7/body/tail/decision/true",
"outcome": "true",
"line": 1100,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/statement/7/body/tail/decision/false",
"outcome": "false",
"line": 1100,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 1102,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 1102,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/0",
"outcome": "Error",
"line": 1104,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1",
"outcome": "Ok",
"line": 1105,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 1105,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 1106,
"state": "covered",
"hits": "59"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/statement/0/value/decision/true",
"outcome": "true",
"line": 1107,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/statement/0/value/decision/false",
"outcome": "false",
"line": 1107,
"state": "covered",
"hits": "56"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/0",
"outcome": "None",
"line": 1112,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1",
"outcome": "Some",
"line": 1113,
"state": "covered",
"hits": "55"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 1113,
"state": "covered",
"hits": "53"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 1113,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/true/statement/0/decision/body",
"outcome": "body",
"line": 1114,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/true/statement/0/decision/exit",
"outcome": "exit",
"line": 1114,
"state": "covered",
"hits": "53"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/true/statement/0/body/tail/arm/0",
"outcome": "Error",
"line": 1116,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/3/value/arm/1/body/block/tail/true/tail/arm/1/body/arm/1/body/block/tail/arm/1/body/block/tail/true/statement/0/body/tail/arm/1",
"outcome": "Ok",
"line": 1117,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/60/statement/12/body/statement/5/decision/body",
"outcome": "body",
"line": 1128,
"state": "covered",
"hits": "34"
},
{
"id": "declaration/60/statement/12/body/statement/5/decision/exit",
"outcome": "exit",
"line": 1128,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/60/statement/12/body/statement/5/body/statement/0/value/decision/true",
"outcome": "true",
"line": 1129,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/12/body/statement/5/body/statement/0/value/decision/false",
"outcome": "false",
"line": 1129,
"state": "covered",
"hits": "32"
},
{
"id": "declaration/60/statement/12/body/statement/5/body/statement/2/value/decision/true",
"outcome": "true",
"line": 1131,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/60/statement/12/body/statement/5/body/statement/2/value/decision/false",
"outcome": "false",
"line": 1131,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/decision/true",
"outcome": "true",
"line": 1139,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/decision/false",
"outcome": "false",
"line": 1139,
"state": "covered",
"hits": "29"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/0",
"outcome": "None",
"line": 1142,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/1",
"outcome": "Some",
"line": 1143,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/1/body/arm/0",
"outcome": "None",
"line": 1144,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/1/body/arm/1",
"outcome": "Some",
"line": 1145,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/1/body/arm/1/body/arm/0",
"outcome": "Error",
"line": 1146,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/60/statement/12/body/statement/11/value/false/tail/arm/1/body/arm/1/body/arm/1",
"outcome": "Ok",
"line": 1147,
"state": "covered",
"hits": "26"
},
{
"id": "declaration/60/statement/13/decision/body",
"outcome": "body",
"line": 1154,
"state": "covered",
"hits": "55"
},
{
"id": "declaration/60/statement/13/decision/exit",
"outcome": "exit",
"line": 1154,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/60/statement/13/body/statement/1/decision/body",
"outcome": "body",
"line": 1156,
"state": "covered",
"hits": "108"
},
{
"id": "declaration/60/statement/13/body/statement/1/decision/exit",
"outcome": "exit",
"line": 1156,
"state": "covered",
"hits": "55"
},
{
"id": "declaration/60/statement/13/body/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 1156,
"state": "covered",
"hits": "53"
},
{
"id": "declaration/60/statement/13/body/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 1156,
"state": "covered",
"hits": "55"
},
{
"id": "declaration/60/statement/13/body/tail/decision/true",
"outcome": "true",
"line": 1157,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/60/statement/13/body/tail/decision/false",
"outcome": "false",
"line": 1157,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/60/statement/14/value/decision/true",
"outcome": "true",
"line": 1159,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/14/value/decision/false",
"outcome": "false",
"line": 1159,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/60/statement/16/value/arm/0",
"outcome": "None",
"line": 1162,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/60/statement/16/value/arm/1",
"outcome": "Some",
"line": 1163,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/decision/body",
"outcome": "body",
"line": 1165,
"state": "covered",
"hits": "93"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/decision/exit",
"outcome": "exit",
"line": 1165,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/body/statement/0/value/decision/true",
"outcome": "true",
"line": 1166,
"state": "covered",
"hits": "60"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/body/statement/0/value/decision/false",
"outcome": "false",
"line": 1166,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/body/statement/0/value/true/tail/arm/0",
"outcome": "None",
"line": 1166,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/60/statement/16/value/arm/1/body/block/statement/1/body/statement/0/value/true/tail/arm/1",
"outcome": "Some",
"line": 1166,
"state": "covered",
"hits": "60"
}
]Reviewed declaration exclusions
[
{
"id": "declaration/0",
"reason": "import",
"line": 1
},
{
"id": "declaration/1",
"reason": "record-declaration",
"line": 4
},
{
"id": "declaration/2",
"reason": "record-declaration",
"line": 5
},
{
"id": "declaration/3",
"reason": "enum-declaration",
"line": 6
},
{
"id": "declaration/4",
"reason": "enum-declaration",
"line": 7
},
{
"id": "declaration/5",
"reason": "record-declaration",
"line": 15
},
{
"id": "declaration/6",
"reason": "record-declaration",
"line": 19
},
{
"id": "declaration/7",
"reason": "record-declaration",
"line": 23
},
{
"id": "declaration/8",
"reason": "enum-declaration",
"line": 25
},
{
"id": "declaration/9",
"reason": "record-declaration",
"line": 26
},
{
"id": "declaration/10",
"reason": "record-declaration",
"line": 27
},
{
"id": "declaration/37",
"reason": "record-declaration",
"line": 710
},
{
"id": "declaration/44",
"reason": "record-declaration",
"line": 769
},
{
"id": "declaration/50",
"reason": "record-declaration",
"line": 856
},
{
"id": "declaration/54",
"reason": "record-declaration",
"line": 920
}
]