src/compiler/module_signatures.panack
Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.
1 import "module_resolution.panack" 2 import "checker.panack" 3 4 // Semantic tags never encode nominal identity as an inference-placeholder name. 5 enum SignatureEffect { SignaturePure, SignatureOrdinary, SignatureAsync } 6 enum SignatureTypeIdentity { 7 SignatureCore(Str), 8 SignatureNominal(DeclarationIdentity), 9 SignatureParameter(DeclarationIdentity, Nat), 10 SignatureCallable(SignatureEffect), 11 // Body-local missing evidence; never a declaration name or a signature binder. 12 SignatureHole(DeclarationIdentity, [Nat], Nat) 13 } 14 record SignatureType { identity: SignatureTypeIdentity, arguments: [SignatureType] } 15 record SignatureSlot { name: Str, type: SignatureType } 16 record ModuleSignature { 17 binding: ModuleDeclarationBinding, 18 parameters: [Str], 19 slots: [SignatureSlot], 20 effect: Option[SignatureEffect] 21 } 22 record CheckedModuleSignatures { 23 declarations: [ModuleSignature], 24 diagnostics: [Diagnostic] 25 } 26 27 pure signature_effect(is_pure: Bool, is_async: Bool): SignatureEffect { 28 if is_async { SignatureAsync() } else { if is_pure { SignaturePure() } else { SignatureOrdinary() } } 29 } 30 31 pure signature_declaration(modules: [LoadedModule], identity: DeclarationIdentity): Result[TopLevel,Str] { 32 mut found: Option[TopLevel] = None() 33 for module in modules { 34 if module.bindings.identity == identity.module { 35 for declaration in module.parsed.program.declarations { 36 name: Str = match declaration { 37 ImportDeclaration(path) => "", TypeDeclaration(name, base, guard) => name, 38 RecordDeclaration(name, parameters, fields) => name, EnumDeclaration(name, parameters, variants) => name, 39 FunctionDeclaration(name, parameters, result, pure_flag, async_flag, body, types) => name 40 } 41 if name == identity.name { found = Some(declaration) } 42 } 43 } 44 } 45 match found { Some(declaration) => Ok(declaration), None() => Error("missing signature declaration " + identity.module.path + ":" + identity.name) } 46 } 47 48 // Reachability is by original identity, not the spelling chosen in a signature. 49 // Thus an explicit public re-export can expose an otherwise private import alias. 50 pure signature_public_identity(graph: ModuleBindingGraph, owner: ModuleIdentity, identity: DeclarationIdentity, visited: [ModuleIdentity]): Bool { 51 mut reachable: Bool = identity.module == ModuleIdentity(ToolchainModulePackage(), "core.panack") && (identity.name == "Option" || identity.name == "Result") 52 if !reachable && !module_identity_in(visited, owner) { 53 match binding_graph_module(graph, owner) { 54 Error(message) => {}, 55 Ok(module) => { 56 for binding in module.declarations { 57 if binding.is_public && binding.identity == identity { reachable = true } 58 } 59 mut index: Nat = 0 60 for imported in module.imports { 61 if imported.is_public { 62 match binding_graph_target(graph, owner, index) { 63 Error(message) => {}, 64 Ok(target) => { 65 for selector in module_import_names(imported) { 66 if selector.name == "" { 67 reachable = reachable || signature_public_identity(graph, target, identity, append(visited, owner)) 68 } else { 69 match resolve_module_path_inner(graph, target, selector.name, true, []) { 70 Error(message) => {}, 71 Ok(resolved) => match resolved { 72 DeclarationTarget(binding) => { reachable = reachable || binding.identity == identity }, 73 NamespaceTarget(namespace) => { reachable = reachable || signature_public_identity(graph, namespace, identity, append(visited, owner)) } 74 } 75 } 76 } 77 } 78 } 79 } 80 } 81 index = index + 1 82 } 83 } 84 } 85 } 86 // Exporting an enum exposes its qualified constructors, but exporting only 87 // one constructor does not expose the parent enum type. 88 if !reachable { 89 match binding_graph_module(graph, identity.module) { 90 Error(message) => {}, 91 Ok(origin) => { 92 for declaration in origin.declarations { 93 if declaration.identity == identity { 94 match declaration.kind { 95 ModuleVariant(parent) => { 96 reachable = signature_public_identity(graph, owner, DeclarationIdentity(identity.module, parent), visited) 97 }, 98 ModuleFunction() => {}, ModuleGuardedType() => {}, ModuleRecord() => {}, ModuleEnum() => {} 99 } 100 } 101 } 102 } 103 } 104 } 105 reachable 106 } 107 108 pure signature_type(graph: ModuleBindingGraph, modules: [LoadedModule], owner: DeclarationIdentity, parameters: [Str], spelling: Str, exported: Bool, allow_void: Bool): Result[SignatureType,Str] { 109 shape: TypeShape = type_shape(spelling) 110 mut head: SignatureTypeIdentity = SignatureCore(shape.base) 111 mut arity: Nat = 0 112 mut known: Bool = false 113 mut callable: Bool = false 114 mut failure: Option[Str] = None() 115 mut index: Nat = 0 116 for parameter in parameters { 117 if parameter == shape.base { known = true; head = SignatureParameter(owner, index) } 118 index = index + 1 119 } 120 if !known { 121 known = is_scalar_base(shape.base) || shape.base == "Bytes" || shape.base == "Path" || shape.base == "Duration" || shape.base == "Instant" 122 if shape.base == "Void" { 123 known = true 124 if !allow_void { failure = Some("Void is only valid as a function return type") } 125 } 126 if shape.base == "Array" || shape.base == "Set" || shape.base == "Option" { known = true; arity = 1 } 127 if shape.base == "Map" || shape.base == "Result" { known = true; arity = 2 } 128 if shape.base == "Fn" || shape.base == "PureFn" || shape.base == "AsyncFn" { 129 known = true; callable = true; arity = len(shape.arguments) 130 head = SignatureCallable(signature_effect(shape.base == "PureFn", shape.base == "AsyncFn")) 131 if arity == 0 { failure = Some(shape.base + " expects at least a return type") } 132 } 133 if !known { 134 match resolve_module_type(graph, owner.module, shape.base) { 135 Error(message) => { failure = Some(message) }, 136 Ok(binding) => { 137 head = SignatureNominal(binding.identity) 138 implicit_core: Bool = binding.identity.module == ModuleIdentity(ToolchainModulePackage(), "core.panack") && (binding.identity.name == "Option" || binding.identity.name == "Result") 139 if implicit_core { 140 head = SignatureCore(binding.identity.name) 141 } 142 if exported && !implicit_core && !signature_public_identity(graph, owner.module, binding.identity, []) { 143 failure = Some("public signature exposes inaccessible type " + shape.base + " from " + binding.identity.module.path) 144 } 145 match signature_declaration(modules, binding.identity) { 146 Error(message) => { failure = Some(message) }, 147 Ok(declaration) => match declaration { 148 RecordDeclaration(name, types, fields) => { arity = len(types) }, 149 EnumDeclaration(name, types, variants) => { arity = len(types) }, 150 TypeDeclaration(name, base, guard) => {}, 151 ImportDeclaration(path) => { failure = Some("import is not a nominal type") }, 152 FunctionDeclaration(name, values, result, pure_flag, async_flag, body, types) => { failure = Some("function is not a nominal type") } 153 } 154 } 155 } 156 } 157 } 158 } 159 if len(shape.arguments) != arity { failure = Some(shape.base + " has incorrect type argument count") } 160 mut arguments: [SignatureType] = [] 161 index = 0 162 for argument in shape.arguments { 163 return_slot: Bool = callable && shape.base != "AsyncFn" && index + 1 == len(shape.arguments) 164 match signature_type(graph, modules, owner, parameters, argument, exported, return_slot) { 165 Error(message) => { if failure == None() { failure = Some(message) } }, 166 Ok(resolved) => { arguments = append(arguments, resolved) } 167 } 168 index = index + 1 169 } 170 match failure { Some(message) => Error(message), None() => Ok(SignatureType(head, arguments)) } 171 } 172 173 // Substitution uses the binder's tagged identity, not another module's spelling. 174 pure substitute_signature_type(value: SignatureType, owner: DeclarationIdentity, arguments: [SignatureType]): Result[SignatureType,Str] { 175 mut replacement: Option[SignatureType] = None() 176 mut failure: Option[Str] = None() 177 match value.identity { 178 SignatureParameter(binder, index) => { 179 if binder == owner { 180 if index < len(arguments) { replacement = Some(arguments[index]) } 181 else { failure = Some("missing signature substitution") } 182 } 183 }, 184 SignatureCore(name) => {}, SignatureNominal(identity) => {}, SignatureCallable(effect) => {}, SignatureHole(binder, path, index) => {} 185 } 186 mut nested: [SignatureType] = [] 187 for child in value.arguments { 188 match substitute_signature_type(child, owner, arguments) { 189 Error(message) => { failure = Some(message) }, Ok(resolved) => { nested = append(nested, resolved) } 190 } 191 } 192 match failure { 193 Some(message) => Error(message), 194 None() => match replacement { Some(resolved) => Ok(resolved), None() => Ok(SignatureType(value.identity, nested)) } 195 } 196 } 197 198 pure check_module_signatures(graph: ModuleBindingGraph, modules: [LoadedModule], module: LoadedModule): CheckedModuleSignatures { 199 mut signatures: [ModuleSignature] = [] 200 mut diagnostics: [Diagnostic] = [] 201 mut declaration_index: Nat = 0 202 for declaration in module.parsed.program.declarations { 203 before: Nat = len(diagnostics) 204 syntax: DeclarationSyntax = module.parsed.syntax[declaration_index] 205 mut name: Str = "" 206 mut parameters: [Str] = [] 207 mut fields: [RecordField] = [] 208 mut effect: Option[SignatureEffect] = None() 209 mut result_void: Bool = false 210 match declaration { 211 ImportDeclaration(path) => {}, 212 TypeDeclaration(declared, base, guard) => { 213 name = declared; fields = [RecordField("base", base)] 214 if syntax.is_public { 215 uses: ResolvedModuleUses = resolve_module_expression_uses(graph, module.bindings.identity, guard, syntax.span, set_add(set(), "value")) 216 diagnostics = concat(diagnostics, uses.diagnostics) 217 for reference in uses.references { 218 match reference.target { 219 NamespaceTarget(identity) => {}, 220 DeclarationTarget(binding) => { 221 if !signature_public_identity(graph, module.bindings.identity, binding.identity, []) { 222 diagnostics = append(diagnostics, Diagnostic("public guard depends on inaccessible declaration " + reference.spelling + " from " + binding.identity.module.path, reference.span.start)) 223 } 224 } 225 } 226 } 227 } 228 }, 229 RecordDeclaration(declared, types, members) => { name = declared; parameters = types; fields = members }, 230 EnumDeclaration(declared, types, variants) => { 231 name = declared; parameters = types 232 for variant in variants { 233 mut payload_index: Nat = 0 234 for payload in variant.payload { fields = append(fields, RecordField(variant.name + ":${payload_index}", payload)); payload_index = payload_index + 1 } 235 } 236 }, 237 FunctionDeclaration(declared, values, result, pure_flag, async_flag, body, types) => { 238 name = declared; parameters = types; effect = Some(signature_effect(pure_flag, async_flag)); result_void = !async_flag 239 for parameter in values { fields = append(fields, RecordField(parameter.name, parameter.type_name)) } 240 fields = append(fields, RecordField("return", result)) 241 } 242 } 243 if name != "" { 244 owner: DeclarationIdentity = DeclarationIdentity(module.bindings.identity, name) 245 mut seen: Set[Str] = set() 246 mut valid: Bool = len(diagnostics) == before 247 core_owner: Bool = owner.module == ModuleIdentity(ToolchainModulePackage(), "core.panack") 248 if (module_reserved_binding(name) || name == "Rat" || name == "Array") && !(core_owner && (name == "Option" || name == "Result")) { 249 diagnostics = append(diagnostics, Diagnostic("declaration " + name + " conflicts with a reserved core identity", syntax.span.start)); valid = false 250 } 251 for parameter in parameters { 252 if seen.has(parameter) || module_reserved_binding(parameter) || parameter == "Rat" || parameter == "Array" { 253 diagnostics = append(diagnostics, Diagnostic("invalid or duplicate type parameter " + parameter, syntax.span.start)); valid = false 254 } 255 seen = seen.add(parameter) 256 } 257 mut slots: [SignatureSlot] = [] 258 mut field_index: Nat = 0 259 for field in fields { 260 match signature_type(graph, modules, owner, parameters, field.type_name, syntax.is_public, field_index + 1 == len(fields) && result_void) { 261 Error(message) => { diagnostics = append(diagnostics, Diagnostic("signature " + name + "." + field.name + ": " + message, syntax.span.start)); valid = false }, 262 Ok(resolved) => { slots = append(slots, SignatureSlot(field.name, resolved)) } 263 } 264 field_index = field_index + 1 265 } 266 if valid { 267 for binding in module.bindings.declarations { 268 if binding.identity == owner { signatures = append(signatures, ModuleSignature(binding, parameters, slots, effect)) } 269 } 270 } 271 } 272 declaration_index = declaration_index + 1 273 } 274 CheckedModuleSignatures(signatures, diagnostics) 275 } 276
Functions
[
{
"id": "declaration/8",
"name": "signature_effect",
"line": 27,
"state": "covered",
"entries": "326"
},
{
"id": "declaration/9",
"name": "signature_declaration",
"line": 31,
"state": "covered",
"entries": "115"
},
{
"id": "declaration/10",
"name": "signature_public_identity",
"line": 50,
"state": "covered",
"entries": "69"
},
{
"id": "declaration/11",
"name": "signature_type",
"line": 108,
"state": "covered",
"entries": "783"
},
{
"id": "declaration/12",
"name": "substitute_signature_type",
"line": 174,
"state": "covered",
"entries": "358"
},
{
"id": "declaration/13",
"name": "check_module_signatures",
"line": 198,
"state": "covered",
"entries": "276"
}
]Source branch outcomes
[
{
"id": "declaration/8/tail/decision/true",
"outcome": "true",
"line": 28,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/8/tail/decision/false",
"outcome": "false",
"line": 28,
"state": "covered",
"hits": "319"
},
{
"id": "declaration/8/tail/false/tail/decision/true",
"outcome": "true",
"line": 28,
"state": "covered",
"hits": "306"
},
{
"id": "declaration/8/tail/false/tail/decision/false",
"outcome": "false",
"line": 28,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/9/statement/1/decision/body",
"outcome": "body",
"line": 33,
"state": "covered",
"hits": "253"
},
{
"id": "declaration/9/statement/1/decision/exit",
"outcome": "exit",
"line": 33,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/9/statement/1/body/tail/decision/true",
"outcome": "true",
"line": 34,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/9/statement/1/body/tail/decision/false",
"outcome": "false",
"line": 34,
"state": "covered",
"hits": "138"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/decision/body",
"outcome": "body",
"line": 35,
"state": "covered",
"hits": "272"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/decision/exit",
"outcome": "exit",
"line": 35,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/statement/0/value/arm/0",
"outcome": "ImportDeclaration",
"line": 37,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/statement/0/value/arm/1",
"outcome": "TypeDeclaration",
"line": 37,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/statement/0/value/arm/2",
"outcome": "RecordDeclaration",
"line": 38,
"state": "covered",
"hits": "126"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/statement/0/value/arm/3",
"outcome": "EnumDeclaration",
"line": 38,
"state": "covered",
"hits": "52"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/statement/0/value/arm/4",
"outcome": "FunctionDeclaration",
"line": 39,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 41,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/9/statement/1/body/tail/true/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 41,
"state": "covered",
"hits": "157"
},
{
"id": "declaration/9/tail/arm/0",
"outcome": "Some",
"line": 45,
"state": "covered",
"hits": "115"
},
{
"id": "declaration/9/tail/arm/1",
"outcome": "None",
"line": 45,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 51,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/10/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 51,
"state": "covered",
"hits": "65"
},
{
"id": "declaration/10/statement/0/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 51,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/0/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 51,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/1/value/decision/true",
"outcome": "true",
"line": 52,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/10/statement/1/value/decision/false",
"outcome": "false",
"line": 52,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/1/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 52,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/10/statement/1/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 52,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/0",
"outcome": "Error",
"line": 54,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1",
"outcome": "Ok",
"line": 55,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/decision/body",
"outcome": "body",
"line": 56,
"state": "covered",
"hits": "135"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/decision/exit",
"outcome": "exit",
"line": 56,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 57,
"state": "covered",
"hits": "41"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 57,
"state": "covered",
"hits": "94"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/body/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 57,
"state": "covered",
"hits": "126"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/0/body/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 57,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/decision/body",
"outcome": "body",
"line": 60,
"state": "covered",
"hits": "27"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/decision/exit",
"outcome": "exit",
"line": 60,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/decision/true",
"outcome": "true",
"line": 61,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/decision/false",
"outcome": "false",
"line": 61,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/0",
"outcome": "Error",
"line": 63,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1",
"outcome": "Ok",
"line": 64,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/decision/body",
"outcome": "body",
"line": 65,
"state": "covered",
"hits": "21"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/decision/exit",
"outcome": "exit",
"line": 65,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 66,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 66,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 67,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 67,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/0",
"outcome": "Error",
"line": 70,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1",
"outcome": "Ok",
"line": 71,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/0",
"outcome": "DeclarationTarget",
"line": 72,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/0/body/block/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 72,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/0/body/block/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 72,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/1",
"outcome": "NamespaceTarget",
"line": 73,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/1/body/block/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 73,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/1/value/true/tail/arm/1/body/block/statement/2/body/statement/0/value/true/tail/arm/1/body/block/statement/0/body/tail/false/tail/arm/1/body/arm/1/body/block/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 73,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/2/value/decision/true",
"outcome": "true",
"line": 88,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/10/statement/2/value/decision/false",
"outcome": "false",
"line": 88,
"state": "covered",
"hits": "54"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/0",
"outcome": "Error",
"line": 90,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1",
"outcome": "Ok",
"line": 91,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/decision/body",
"outcome": "body",
"line": 92,
"state": "covered",
"hits": "37"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/decision/exit",
"outcome": "exit",
"line": 92,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 93,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 93,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/true/tail/arm/0",
"outcome": "ModuleVariant",
"line": 95,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/true/tail/arm/1",
"outcome": "ModuleFunction",
"line": 98,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/true/tail/arm/2",
"outcome": "ModuleGuardedType",
"line": 98,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/true/tail/arm/3",
"outcome": "ModuleRecord",
"line": 98,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/10/statement/2/value/true/tail/arm/1/body/block/statement/0/body/tail/true/tail/arm/4",
"outcome": "ModuleEnum",
"line": 98,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/7/decision/body",
"outcome": "body",
"line": 116,
"state": "covered",
"hits": "191"
},
{
"id": "declaration/11/statement/7/decision/exit",
"outcome": "exit",
"line": 116,
"state": "covered",
"hits": "783"
},
{
"id": "declaration/11/statement/7/body/statement/0/value/decision/true",
"outcome": "true",
"line": 117,
"state": "covered",
"hits": "169"
},
{
"id": "declaration/11/statement/7/body/statement/0/value/decision/false",
"outcome": "false",
"line": 117,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/11/statement/8/value/decision/true",
"outcome": "true",
"line": 120,
"state": "covered",
"hits": "615"
},
{
"id": "declaration/11/statement/8/value/decision/false",
"outcome": "false",
"line": 120,
"state": "covered",
"hits": "168"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 121,
"state": "covered",
"hits": "215"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 121,
"state": "covered",
"hits": "400"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 121,
"state": "covered",
"hits": "215"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 121,
"state": "covered",
"hits": "400"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 121,
"state": "covered",
"hits": "215"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 121,
"state": "covered",
"hits": "400"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 121,
"state": "covered",
"hits": "217"
},
{
"id": "declaration/11/statement/8/value/true/statement/0/value/left/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 121,
"state": "covered",
"hits": "398"
},
{
"id": "declaration/11/statement/8/value/true/statement/1/value/decision/true",
"outcome": "true",
"line": 122,
"state": "covered",
"hits": "21"
},
{
"id": "declaration/11/statement/8/value/true/statement/1/value/decision/false",
"outcome": "false",
"line": 122,
"state": "covered",
"hits": "594"
},
{
"id": "declaration/11/statement/8/value/true/statement/1/value/true/tail/decision/true",
"outcome": "true",
"line": 124,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/11/statement/8/value/true/statement/1/value/true/tail/decision/false",
"outcome": "false",
"line": 124,
"state": "covered",
"hits": "19"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/decision/true",
"outcome": "true",
"line": 126,
"state": "covered",
"hits": "83"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/decision/false",
"outcome": "false",
"line": 126,
"state": "covered",
"hits": "532"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 126,
"state": "covered",
"hits": "568"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 126,
"state": "covered",
"hits": "47"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 126,
"state": "covered",
"hits": "572"
},
{
"id": "declaration/11/statement/8/value/true/statement/2/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 126,
"state": "covered",
"hits": "43"
},
{
"id": "declaration/11/statement/8/value/true/statement/3/value/decision/true",
"outcome": "true",
"line": 127,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/11/statement/8/value/true/statement/3/value/decision/false",
"outcome": "false",
"line": 127,
"state": "covered",
"hits": "604"
},
{
"id": "declaration/11/statement/8/value/true/statement/3/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 127,
"state": "covered",
"hits": "609"
},
{
"id": "declaration/11/statement/8/value/true/statement/3/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 127,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/decision/true",
"outcome": "true",
"line": 128,
"state": "covered",
"hits": "17"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/decision/false",
"outcome": "false",
"line": 128,
"state": "covered",
"hits": "598"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 128,
"state": "covered",
"hits": "599"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 128,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 128,
"state": "covered",
"hits": "604"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 128,
"state": "covered",
"hits": "11"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/true/tail/decision/true",
"outcome": "true",
"line": 131,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/8/value/true/statement/4/value/true/tail/decision/false",
"outcome": "false",
"line": 131,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/11/statement/8/value/true/tail/decision/true",
"outcome": "true",
"line": 133,
"state": "covered",
"hits": "83"
},
{
"id": "declaration/11/statement/8/value/true/tail/decision/false",
"outcome": "false",
"line": 133,
"state": "covered",
"hits": "532"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/0",
"outcome": "Error",
"line": 135,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1",
"outcome": "Ok",
"line": 136,
"state": "covered",
"hits": "83"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/1/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 138,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/1/value/decision/skip-right",
"outcome": "skip-right",
"line": 138,
"state": "covered",
"hits": "80"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/1/value/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 138,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/1/value/right/decision/skip-right",
"outcome": "skip-right",
"line": 138,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/2/value/decision/true",
"outcome": "true",
"line": 139,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/2/value/decision/false",
"outcome": "false",
"line": 139,
"state": "covered",
"hits": "80"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/decision/true",
"outcome": "true",
"line": 142,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/decision/false",
"outcome": "false",
"line": 142,
"state": "covered",
"hits": "78"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 142,
"state": "covered",
"hits": "47"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 142,
"state": "covered",
"hits": "36"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 142,
"state": "covered",
"hits": "50"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/statement/3/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 142,
"state": "covered",
"hits": "33"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/0",
"outcome": "Error",
"line": 146,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1",
"outcome": "Ok",
"line": 147,
"state": "covered",
"hits": "83"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1/body/arm/0",
"outcome": "RecordDeclaration",
"line": 148,
"state": "covered",
"hits": "64"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1/body/arm/1",
"outcome": "EnumDeclaration",
"line": 149,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1/body/arm/2",
"outcome": "TypeDeclaration",
"line": 150,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1/body/arm/3",
"outcome": "ImportDeclaration",
"line": 151,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/8/value/true/tail/true/tail/arm/1/body/block/tail/arm/1/body/arm/4",
"outcome": "FunctionDeclaration",
"line": 152,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/9/value/decision/true",
"outcome": "true",
"line": 159,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/11/statement/9/value/decision/false",
"outcome": "false",
"line": 159,
"state": "covered",
"hits": "782"
},
{
"id": "declaration/11/statement/12/decision/body",
"outcome": "body",
"line": 162,
"state": "covered",
"hits": "164"
},
{
"id": "declaration/11/statement/12/decision/exit",
"outcome": "exit",
"line": 162,
"state": "covered",
"hits": "783"
},
{
"id": "declaration/11/statement/12/body/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 163,
"state": "covered",
"hits": "21"
},
{
"id": "declaration/11/statement/12/body/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 163,
"state": "covered",
"hits": "143"
},
{
"id": "declaration/11/statement/12/body/statement/0/value/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 163,
"state": "covered",
"hits": "23"
},
{
"id": "declaration/11/statement/12/body/statement/0/value/left/decision/skip-right",
"outcome": "skip-right",
"line": 163,
"state": "covered",
"hits": "141"
},
{
"id": "declaration/11/statement/12/body/statement/1/value/arm/0",
"outcome": "Error",
"line": 165,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/11/statement/12/body/statement/1/value/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 165,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/11/statement/12/body/statement/1/value/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 165,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/12/body/statement/1/value/arm/1",
"outcome": "Ok",
"line": 166,
"state": "covered",
"hits": "160"
},
{
"id": "declaration/11/tail/arm/0",
"outcome": "Some",
"line": 170,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/11/tail/arm/1",
"outcome": "None",
"line": 170,
"state": "covered",
"hits": "770"
},
{
"id": "declaration/12/statement/2/value/arm/0",
"outcome": "SignatureParameter",
"line": 178,
"state": "covered",
"hits": "220"
},
{
"id": "declaration/12/statement/2/value/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 179,
"state": "covered",
"hits": "219"
},
{
"id": "declaration/12/statement/2/value/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 179,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/12/statement/2/value/arm/0/body/block/tail/true/tail/decision/true",
"outcome": "true",
"line": 180,
"state": "covered",
"hits": "218"
},
{
"id": "declaration/12/statement/2/value/arm/0/body/block/tail/true/tail/decision/false",
"outcome": "false",
"line": 180,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/12/statement/2/value/arm/1",
"outcome": "SignatureCore",
"line": 184,
"state": "covered",
"hits": "97"
},
{
"id": "declaration/12/statement/2/value/arm/2",
"outcome": "SignatureNominal",
"line": 184,
"state": "covered",
"hits": "39"
},
{
"id": "declaration/12/statement/2/value/arm/3",
"outcome": "SignatureCallable",
"line": 184,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/12/statement/2/value/arm/4",
"outcome": "SignatureHole",
"line": 184,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/12/statement/4/decision/body",
"outcome": "body",
"line": 187,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/12/statement/4/decision/exit",
"outcome": "exit",
"line": 187,
"state": "covered",
"hits": "358"
},
{
"id": "declaration/12/statement/4/body/tail/arm/0",
"outcome": "Error",
"line": 189,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/12/statement/4/body/tail/arm/1",
"outcome": "Ok",
"line": 189,
"state": "covered",
"hits": "92"
},
{
"id": "declaration/12/tail/arm/0",
"outcome": "Some",
"line": 193,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/12/tail/arm/1",
"outcome": "None",
"line": 194,
"state": "covered",
"hits": "357"
},
{
"id": "declaration/12/tail/arm/1/body/arm/0",
"outcome": "Some",
"line": 194,
"state": "covered",
"hits": "218"
},
{
"id": "declaration/12/tail/arm/1/body/arm/1",
"outcome": "None",
"line": 194,
"state": "covered",
"hits": "139"
},
{
"id": "declaration/13/statement/3/decision/body",
"outcome": "body",
"line": 202,
"state": "covered",
"hits": "467"
},
{
"id": "declaration/13/statement/3/decision/exit",
"outcome": "exit",
"line": 202,
"state": "covered",
"hits": "276"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/0",
"outcome": "ImportDeclaration",
"line": 211,
"state": "covered",
"hits": "46"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1",
"outcome": "TypeDeclaration",
"line": 212,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 214,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 214,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/decision/body",
"outcome": "body",
"line": 217,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/decision/exit",
"outcome": "exit",
"line": 217,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/body/tail/arm/0",
"outcome": "NamespaceTarget",
"line": 219,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/body/tail/arm/1",
"outcome": "DeclarationTarget",
"line": 220,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/body/tail/arm/1/body/block/tail/decision/true",
"outcome": "true",
"line": 221,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/1/body/block/tail/true/statement/2/body/tail/arm/1/body/block/tail/decision/false",
"outcome": "false",
"line": 221,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/2",
"outcome": "RecordDeclaration",
"line": 229,
"state": "covered",
"hits": "69"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/3",
"outcome": "EnumDeclaration",
"line": 230,
"state": "covered",
"hits": "37"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/3/body/block/statement/2/decision/body",
"outcome": "body",
"line": 232,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/3/body/block/statement/2/decision/exit",
"outcome": "exit",
"line": 232,
"state": "covered",
"hits": "37"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/3/body/block/statement/2/body/statement/1/decision/body",
"outcome": "body",
"line": 234,
"state": "covered",
"hits": "35"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/3/body/block/statement/2/body/statement/1/decision/exit",
"outcome": "exit",
"line": 234,
"state": "covered",
"hits": "67"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/4",
"outcome": "FunctionDeclaration",
"line": 237,
"state": "covered",
"hits": "306"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/4/body/block/statement/4/decision/body",
"outcome": "body",
"line": 239,
"state": "covered",
"hits": "158"
},
{
"id": "declaration/13/statement/3/body/statement/7/value/arm/4/body/block/statement/4/decision/exit",
"outcome": "exit",
"line": 239,
"state": "covered",
"hits": "306"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/decision/true",
"outcome": "true",
"line": 243,
"state": "covered",
"hits": "421"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/decision/false",
"outcome": "false",
"line": 243,
"state": "covered",
"hits": "46"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/decision/true",
"outcome": "true",
"line": 248,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/decision/false",
"outcome": "false",
"line": 248,
"state": "covered",
"hits": "419"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 248,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 248,
"state": "covered",
"hits": "417"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 248,
"state": "covered",
"hits": "417"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 248,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 248,
"state": "covered",
"hits": "417"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 248,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/right/operand/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 248,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/right/operand/decision/skip-right",
"outcome": "skip-right",
"line": 248,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/right/operand/right/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 248,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/4/value/condition/right/operand/right/decision/skip-right",
"outcome": "skip-right",
"line": 248,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/decision/body",
"outcome": "body",
"line": 251,
"state": "covered",
"hits": "107"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/decision/exit",
"outcome": "exit",
"line": 251,
"state": "covered",
"hits": "421"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/decision/true",
"outcome": "true",
"line": 252,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/decision/false",
"outcome": "false",
"line": 252,
"state": "covered",
"hits": "106"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 252,
"state": "covered",
"hits": "106"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 252,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 252,
"state": "covered",
"hits": "106"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/left/decision/skip-right",
"outcome": "skip-right",
"line": 252,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/left/left/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 252,
"state": "covered",
"hits": "106"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/5/body/statement/0/value/condition/left/left/decision/skip-right",
"outcome": "skip-right",
"line": 252,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/decision/body",
"outcome": "body",
"line": 259,
"state": "covered",
"hits": "583"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/decision/exit",
"outcome": "exit",
"line": 259,
"state": "covered",
"hits": "421"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/body/statement/0/value/subject/args/6/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 260,
"state": "covered",
"hits": "417"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/body/statement/0/value/subject/args/6/decision/skip-right",
"outcome": "skip-right",
"line": 260,
"state": "covered",
"hits": "166"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/body/statement/0/value/arm/0",
"outcome": "Error",
"line": 261,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/statement/8/body/statement/0/value/arm/1",
"outcome": "Ok",
"line": 262,
"state": "covered",
"hits": "575"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/decision/true",
"outcome": "true",
"line": 266,
"state": "covered",
"hits": "407"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/decision/false",
"outcome": "false",
"line": 266,
"state": "covered",
"hits": "14"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/true/statement/0/decision/body",
"outcome": "body",
"line": 267,
"state": "covered",
"hits": "946"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/true/statement/0/decision/exit",
"outcome": "exit",
"line": 267,
"state": "covered",
"hits": "407"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/true/statement/0/body/tail/decision/true",
"outcome": "true",
"line": 268,
"state": "covered",
"hits": "407"
},
{
"id": "declaration/13/statement/3/body/statement/8/value/true/tail/true/statement/0/body/tail/decision/false",
"outcome": "false",
"line": 268,
"state": "covered",
"hits": "539"
}
]Reviewed declaration exclusions
[
{
"id": "declaration/0",
"reason": "import",
"line": 1
},
{
"id": "declaration/1",
"reason": "import",
"line": 2
},
{
"id": "declaration/2",
"reason": "enum-declaration",
"line": 5
},
{
"id": "declaration/3",
"reason": "enum-declaration",
"line": 6
},
{
"id": "declaration/4",
"reason": "record-declaration",
"line": 14
},
{
"id": "declaration/5",
"reason": "record-declaration",
"line": 15
},
{
"id": "declaration/6",
"reason": "record-declaration",
"line": 16
},
{
"id": "declaration/7",
"reason": "record-declaration",
"line": 22
}
]