src/bytecode/codec.panack
Green: covered; red: known zero; amber: unavailable. Blank lines are outside the executable-start-line denominator.
1 import "../compiler/emitter.panack" 2 3 pure encode_u8(value: Nat): Bytes { 4 byte_append(bytes(), value) 5 } 6 7 pure encode_u16(value: Nat): Bytes { 8 mut output: Bytes = bytes() 9 output = byte_append(output, (quotient(value, 256)) % 256) 10 byte_append(output, value % 256) 11 } 12 13 pure encode_u32(value: Nat): Bytes { 14 mut output: Bytes = bytes() 15 output = byte_append(output, (quotient(value, 16777216)) % 256) 16 output = byte_append(output, (quotient(value, 65536)) % 256) 17 output = byte_append(output, (quotient(value, 256)) % 256) 18 byte_append(output, value % 256) 19 } 20 21 pure encode_i16_negative(magnitude: Nat): Bytes { 22 if magnitude <= 32768 { 23 mut encoded: Nat = 65536 24 mut remaining: Nat = magnitude 25 while remaining > 0 { 26 if encoded > 0 { encoded = encoded - 1; } else {} 27 remaining = remaining - 1 28 } 29 encode_u16(encoded) 30 } else { 31 bytes() 32 } 33 } 34 35 pure encode_name(value: Str): Bytes { 36 encoded: Bytes = utf8_encode(value) 37 bytes_concat(encode_u16(byte_len(encoded)), encoded) 38 } 39 40 pure encode_text(value: Str): Bytes { 41 encoded: Bytes = utf8_encode(value) 42 bytes_concat(encode_u32(byte_len(encoded)), encoded) 43 } 44 45 pure encode_nat_body(value: Nat): Bytes { 46 if value < 256 { 47 encode_u8(value) 48 } else { 49 byte_append(encode_nat_body(quotient(value, 256)), value % 256) 50 } 51 } 52 53 pure encode_natural(value: Nat): Bytes { 54 if value == 0 { 55 encode_u16(0) 56 } else { 57 body: Bytes = encode_nat_body(value) 58 bytes_concat(encode_u16(byte_len(body)), body) 59 } 60 } 61 62 pure decimal_digits(text: Str): [Nat] { 63 mut digits: [Nat] = [] 64 mut seen_nonzero: Bool = false 65 mut cursor: Nat = 0 66 while cursor < len(text) { 67 character: Str = text[cursor] 68 if character != "." && character != "-" { 69 digit: Nat = nat_from_str(character) 70 if digit != 0 || seen_nonzero { 71 seen_nonzero = true 72 digits = append(digits, digit) 73 } else { 74 } 75 } else { 76 } 77 cursor = cursor + 1 78 } 79 if len(digits) == 0 { 80 [0] 81 } else { 82 digits 83 } 84 } 85 86 pure decimal_fraction_digits(text: Str): Nat { 87 mut result: Nat = 0 88 mut after_point: Bool = false 89 mut cursor: Nat = 0 90 while cursor < len(text) { 91 character: Str = text[cursor] 92 if character == "." { 93 after_point = true 94 } else { 95 if after_point { result = result + 1; } else {} 96 } 97 cursor = cursor + 1 98 } 99 result 100 } 101 102 pure encode_decimal(text: Str): Bytes { 103 negative: Bool = len(text) > 0 && text[0] == "-" 104 digits: [Nat] = decimal_digits(text) 105 fraction_digits: Nat = decimal_fraction_digits(text) 106 mut output: Bytes = encode_u8(if negative { 1 } else { 0 }) 107 output = bytes_concat(output, encode_i16_negative(fraction_digits)) 108 output = bytes_concat(output, encode_u16(len(digits))) 109 mut cursor: Nat = 0 110 while cursor < len(digits) { 111 high: Nat = digits[cursor] 112 low: Nat = if cursor + 1 < len(digits) { digits[cursor + 1] } else { 15 } 113 output = byte_append(output, high * 16 + low) 114 cursor = cursor + 2 115 } 116 output 117 } 118 119 pure encode_decimal_parts(negative: Bool, digits: [Nat], exponent_negative: Bool, exponent_magnitude: Nat): Bytes { 120 mut output: Bytes = encode_u8(if negative { 1 } else { 0 }) 121 if exponent_negative { 122 output = bytes_concat(output, encode_i16_negative(exponent_magnitude)) 123 } else { 124 output = bytes_concat(output, encode_u16(exponent_magnitude)) 125 } 126 output = bytes_concat(output, encode_u16(len(digits))) 127 mut cursor: Nat = 0 128 while cursor < len(digits) { 129 high: Nat = digits[cursor] 130 low: Nat = if cursor + 1 < len(digits) { digits[cursor + 1] } else { 15 } 131 output = byte_append(output, high * 16 + low) 132 cursor = cursor + 2 133 } 134 output 135 } 136 137 pure encode_constant(constant: ConstantValue): Bytes { 138 match constant { 139 NatConstant(number) => bytes_concat(encode_u8(0), encode_natural(number)), 140 IntConstant(negative, magnitude) => { 141 mut output: Bytes = encode_u8(1) 142 output = bytes_concat(output, encode_u8(if negative { 1 } else { 0 })) 143 bytes_concat(output, encode_natural(magnitude)) 144 }, 145 DecimalConstant(text) => bytes_concat(encode_u8(2), encode_decimal(text)), 146 DecimalPartsConstant(negative, digits, exponent_negative, exponent_magnitude) => { 147 body: Bytes = encode_decimal_parts(negative, digits, exponent_negative, exponent_magnitude) 148 bytes_concat(encode_u8(2), body) 149 }, 150 StringConstant(text) => bytes_concat(encode_u8(3), encode_text(text)), 151 BoolConstant(flag) => bytes_concat(encode_u8(4), encode_u8(if flag { 1 } else { 0 })), 152 VoidConstant() => encode_u8(5) 153 } 154 } 155 156 pure unary_code(operator: Str): Nat { 157 if operator == "-" { 0 } else { 1 } 158 } 159 160 pure binary_code(operator: Str): Nat { 161 if operator == "+" { 0 } 162 else { if operator == "-" { 1 } 163 else { if operator == "*" { 2 } 164 else { if operator == "/" { 3 } 165 else { if operator == "%" { 4 } 166 else { if operator == "==" { 5 } 167 else { if operator == "!=" { 6 } 168 else { if operator == "<" { 7 } 169 else { if operator == "<=" { 8 } 170 else { if operator == ">" { 9 } 171 else { if operator == ">=" { 10 } 172 else { if operator == "&&" { 11 } else { 12 } } } } } } } } } } } } 173 } 174 175 pure encode_names(values: [Str]): Bytes { 176 mut output: Bytes = bytes() 177 for value in values { 178 output = bytes_concat(output, encode_name(value)) 179 } 180 output 181 } 182 183 pure encode_texts(values: [Str]): Bytes { 184 mut output: Bytes = encode_u16(len(values)) 185 for value in values { 186 output = bytes_concat(output, encode_text(value)) 187 } 188 output 189 } 190 191 pure encode_instruction(instruction: Instruction): Bytes { 192 match instruction { 193 ConstInstruction(value) => bytes_concat(encode_u8(0), encode_constant(value)), 194 LoadInstruction(name) => bytes_concat(encode_u8(1), encode_name(name)), 195 StoreInstruction(name) => bytes_concat(encode_u8(2), encode_name(name)), 196 PopInstruction() => encode_u8(3), 197 UnaryInstruction(operator) => bytes_concat(encode_u8(4), encode_u8(unary_code(operator))), 198 BinaryInstruction(operator) => bytes_concat(encode_u8(5), encode_u8(binary_code(operator))), 199 MakeRangeInstruction() => encode_u8(6), 200 MakeArrayInstruction(count) => bytes_concat(encode_u8(7), encode_u16(count)), 201 IndexGetInstruction() => encode_u8(8), 202 InterpolateInstruction(parts) => bytes_concat(encode_u8(9), encode_texts(parts)), 203 IterInitInstruction(name) => bytes_concat(encode_u8(10), encode_name(name)), 204 IterNextInstruction(iterator, name, end) => { 205 mut output: Bytes = bytes_concat(encode_u8(11), encode_name(iterator)) 206 output = bytes_concat(output, encode_name(name)) 207 bytes_concat(output, encode_u32(end)) 208 }, 209 MakeRecordInstruction(name, fields) => { 210 mut output: Bytes = bytes_concat(encode_u8(12), encode_name(name)) 211 output = bytes_concat(output, encode_u16(len(fields))) 212 bytes_concat(output, encode_names(fields)) 213 }, 214 FieldGetInstruction(name) => bytes_concat(encode_u8(13), encode_name(name)), 215 MakeVariantInstruction(enum_name, variant, count) => { 216 mut output: Bytes = bytes_concat(encode_u8(14), encode_name(enum_name)) 217 output = bytes_concat(output, encode_name(variant)) 218 bytes_concat(output, encode_u16(count)) 219 }, 220 MatchVariantInstruction(variant, failure) => { 221 mut output: Bytes = bytes_concat(encode_u8(15), encode_name(variant)) 222 bytes_concat(output, encode_u32(failure)) 223 }, 224 MatchFailInstruction() => encode_u8(16), 225 CallInstruction(name, arity) => { 226 mut output: Bytes = bytes_concat(encode_u8(17), encode_name(name)) 227 bytes_concat(output, encode_u8(arity)) 228 }, 229 JumpFalseInstruction(target) => bytes_concat(encode_u8(18), encode_u32(target)), 230 JumpInstruction(target) => bytes_concat(encode_u8(19), encode_u32(target)), 231 PendingEndJumpInstruction() => bytes(), 232 ReturnInstruction() => encode_u8(20), 233 AwaitCallInstruction(name, arity) => bytes_concat(bytes_concat(encode_u8(22), encode_name(name)), encode_u8(arity)), 234 AwaitValueInstruction(arity) => bytes_concat(encode_u8(23), encode_u8(arity)), 235 CallValueInstruction(arity) => bytes_concat(encode_u8(21), encode_u8(arity)) 236 } 237 } 238 239 pure insert_function(functions: [FunctionCode], function: FunctionCode): [FunctionCode] { 240 mut result: [FunctionCode] = [] 241 mut inserted: Bool = false 242 for existing in functions { 243 if !inserted && function.name < existing.name { 244 result = append(result, function) 245 inserted = true 246 } else {} 247 result = append(result, existing) 248 } 249 if !inserted { result = append(result, function); } else {} 250 result 251 } 252 253 pure sort_functions(functions: [FunctionCode]): [FunctionCode] { 254 mut result: [FunctionCode] = [] 255 for function in functions { 256 result = insert_function(result, function) 257 } 258 result 259 } 260 261 pure encode_function(function: FunctionCode): Bytes { 262 mut output: Bytes = encode_name(function.name) 263 output = bytes_concat(output, encode_u8(if function.is_async { 2 } else { if function.is_pure { 1 } else { 0 } })) 264 output = bytes_concat(output, encode_u8(len(function.parameters))) 265 output = bytes_concat(output, encode_names(function.parameters)) 266 output = bytes_concat(output, encode_u32(len(function.instructions))) 267 for instruction in function.instructions { 268 output = bytes_concat(output, encode_instruction(instruction)) 269 } 270 output 271 } 272 273 pure serialize_bytecode(program: BytecodeProgram): Bytes { 274 mut output: Bytes = utf8_encode("PANACKBC") 275 output = byte_append(output, 0) 276 output = bytes_concat(output, encode_u16(9)) 277 functions: [FunctionCode] = sort_functions(program.functions) 278 output = bytes_concat(output, encode_u16(len(functions))) 279 for function in functions { 280 output = bytes_concat(output, encode_function(function)) 281 } 282 output 283 } 284 285 pure compile_source_bytecode(source: Str): Bytes { 286 match lex(source) { 287 Ok(tokens) => { 288 match parse_program_complete(tokens) { 289 Ok(program) => { 290 diagnostics: [Diagnostic] = check_program_frontend(program) 291 if len(diagnostics) == 0 { serialize_bytecode(compile_program(program)) } else { bytes() } 292 }, 293 Error(error) => bytes() 294 } 295 }, 296 Error(errors) => bytes() 297 } 298 } 299
Functions
[
{
"id": "declaration/1",
"name": "encode_u8",
"line": 3,
"state": "covered",
"entries": "74794"
},
{
"id": "declaration/2",
"name": "encode_u16",
"line": 7,
"state": "covered",
"entries": "41594"
},
{
"id": "declaration/3",
"name": "encode_u32",
"line": 13,
"state": "covered",
"entries": "28446"
},
{
"id": "declaration/4",
"name": "encode_i16_negative",
"line": 21,
"state": "covered",
"entries": "7"
},
{
"id": "declaration/5",
"name": "encode_name",
"line": 35,
"state": "covered",
"entries": "37666"
},
{
"id": "declaration/6",
"name": "encode_text",
"line": 40,
"state": "covered",
"entries": "6263"
},
{
"id": "declaration/7",
"name": "encode_nat_body",
"line": 45,
"state": "covered",
"entries": "1331"
},
{
"id": "declaration/8",
"name": "encode_natural",
"line": 53,
"state": "covered",
"entries": "1642"
},
{
"id": "declaration/9",
"name": "decimal_digits",
"line": 62,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/10",
"name": "decimal_fraction_digits",
"line": 86,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/11",
"name": "encode_decimal",
"line": 102,
"state": "covered",
"entries": "3"
},
{
"id": "declaration/12",
"name": "encode_decimal_parts",
"line": 119,
"state": "covered",
"entries": "5"
},
{
"id": "declaration/13",
"name": "encode_constant",
"line": 137,
"state": "covered",
"entries": "7985"
},
{
"id": "declaration/14",
"name": "unary_code",
"line": 156,
"state": "covered",
"entries": "181"
},
{
"id": "declaration/15",
"name": "binary_code",
"line": 160,
"state": "covered",
"entries": "3046"
},
{
"id": "declaration/16",
"name": "encode_names",
"line": 175,
"state": "covered",
"entries": "1243"
},
{
"id": "declaration/17",
"name": "encode_texts",
"line": 183,
"state": "covered",
"entries": "221"
},
{
"id": "declaration/18",
"name": "encode_instruction",
"line": 191,
"state": "covered",
"entries": "54721"
},
{
"id": "declaration/19",
"name": "insert_function",
"line": 239,
"state": "covered",
"entries": "725"
},
{
"id": "declaration/20",
"name": "sort_functions",
"line": 253,
"state": "covered",
"entries": "77"
},
{
"id": "declaration/21",
"name": "encode_function",
"line": 261,
"state": "covered",
"entries": "689"
},
{
"id": "declaration/22",
"name": "serialize_bytecode",
"line": 273,
"state": "covered",
"entries": "49"
},
{
"id": "declaration/23",
"name": "compile_source_bytecode",
"line": 285,
"state": "covered",
"entries": "22"
}
]Source branch outcomes
[
{
"id": "declaration/4/tail/decision/true",
"outcome": "true",
"line": 22,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/4/tail/decision/false",
"outcome": "false",
"line": 22,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/4/tail/true/statement/2/decision/body",
"outcome": "body",
"line": 25,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/4/tail/true/statement/2/decision/exit",
"outcome": "exit",
"line": 25,
"state": "covered",
"hits": "7"
},
{
"id": "declaration/4/tail/true/statement/2/body/statement/0/value/decision/true",
"outcome": "true",
"line": 26,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/4/tail/true/statement/2/body/statement/0/value/decision/false",
"outcome": "false",
"line": 26,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/7/tail/decision/true",
"outcome": "true",
"line": 46,
"state": "covered",
"hits": "1079"
},
{
"id": "declaration/7/tail/decision/false",
"outcome": "false",
"line": 46,
"state": "covered",
"hits": "252"
},
{
"id": "declaration/8/tail/decision/true",
"outcome": "true",
"line": 54,
"state": "covered",
"hits": "563"
},
{
"id": "declaration/8/tail/decision/false",
"outcome": "false",
"line": 54,
"state": "covered",
"hits": "1079"
},
{
"id": "declaration/9/statement/3/decision/body",
"outcome": "body",
"line": 66,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/9/statement/3/decision/exit",
"outcome": "exit",
"line": 66,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/decision/true",
"outcome": "true",
"line": 68,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/decision/false",
"outcome": "false",
"line": 68,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 68,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 68,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/true/tail/decision/true",
"outcome": "true",
"line": 70,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/true/tail/decision/false",
"outcome": "false",
"line": 70,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/true/tail/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 70,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/9/statement/3/body/statement/1/value/true/tail/condition/decision/skip-right",
"outcome": "skip-right",
"line": 70,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/9/tail/decision/true",
"outcome": "true",
"line": 79,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/9/tail/decision/false",
"outcome": "false",
"line": 79,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/10/statement/3/decision/body",
"outcome": "body",
"line": 90,
"state": "covered",
"hits": "18"
},
{
"id": "declaration/10/statement/3/decision/exit",
"outcome": "exit",
"line": 90,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/10/statement/3/body/statement/1/value/decision/true",
"outcome": "true",
"line": 92,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/10/statement/3/body/statement/1/value/decision/false",
"outcome": "false",
"line": 92,
"state": "covered",
"hits": "15"
},
{
"id": "declaration/10/statement/3/body/statement/1/value/false/tail/decision/true",
"outcome": "true",
"line": 95,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/10/statement/3/body/statement/1/value/false/tail/decision/false",
"outcome": "false",
"line": 95,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/11/statement/0/value/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 103,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/11/statement/0/value/decision/skip-right",
"outcome": "skip-right",
"line": 103,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/3/value/args/0/decision/true",
"outcome": "true",
"line": 106,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/11/statement/3/value/args/0/decision/false",
"outcome": "false",
"line": 106,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/11/statement/7/decision/body",
"outcome": "body",
"line": 110,
"state": "covered",
"hits": "8"
},
{
"id": "declaration/11/statement/7/decision/exit",
"outcome": "exit",
"line": 110,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/11/statement/7/body/statement/1/value/decision/true",
"outcome": "true",
"line": 112,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/11/statement/7/body/statement/1/value/decision/false",
"outcome": "false",
"line": 112,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/12/statement/0/value/args/0/decision/true",
"outcome": "true",
"line": 120,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/12/statement/0/value/args/0/decision/false",
"outcome": "false",
"line": 120,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/12/statement/1/value/decision/true",
"outcome": "true",
"line": 121,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/12/statement/1/value/decision/false",
"outcome": "false",
"line": 121,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/12/statement/4/decision/body",
"outcome": "body",
"line": 128,
"state": "covered",
"hits": "13"
},
{
"id": "declaration/12/statement/4/decision/exit",
"outcome": "exit",
"line": 128,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/12/statement/4/body/statement/1/value/decision/true",
"outcome": "true",
"line": 130,
"state": "covered",
"hits": "9"
},
{
"id": "declaration/12/statement/4/body/statement/1/value/decision/false",
"outcome": "false",
"line": 130,
"state": "covered",
"hits": "4"
},
{
"id": "declaration/13/tail/arm/0",
"outcome": "NatConstant",
"line": 139,
"state": "covered",
"hits": "1640"
},
{
"id": "declaration/13/tail/arm/1",
"outcome": "IntConstant",
"line": 140,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/13/tail/arm/1/body/block/statement/1/value/args/1/args/0/decision/true",
"outcome": "true",
"line": 142,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/13/tail/arm/1/body/block/statement/1/value/args/1/args/0/decision/false",
"outcome": "false",
"line": 142,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/13/tail/arm/2",
"outcome": "DecimalConstant",
"line": 145,
"state": "covered",
"hits": "3"
},
{
"id": "declaration/13/tail/arm/3",
"outcome": "DecimalPartsConstant",
"line": 146,
"state": "covered",
"hits": "5"
},
{
"id": "declaration/13/tail/arm/4",
"outcome": "StringConstant",
"line": 150,
"state": "covered",
"hits": "2315"
},
{
"id": "declaration/13/tail/arm/5",
"outcome": "BoolConstant",
"line": 151,
"state": "covered",
"hits": "1654"
},
{
"id": "declaration/13/tail/arm/5/body/args/1/args/0/decision/true",
"outcome": "true",
"line": 151,
"state": "covered",
"hits": "893"
},
{
"id": "declaration/13/tail/arm/5/body/args/1/args/0/decision/false",
"outcome": "false",
"line": 151,
"state": "covered",
"hits": "761"
},
{
"id": "declaration/13/tail/arm/6",
"outcome": "VoidConstant",
"line": 152,
"state": "covered",
"hits": "2366"
},
{
"id": "declaration/14/tail/decision/true",
"outcome": "true",
"line": 157,
"state": "covered",
"hits": "1"
},
{
"id": "declaration/14/tail/decision/false",
"outcome": "false",
"line": 157,
"state": "covered",
"hits": "180"
},
{
"id": "declaration/15/tail/decision/true",
"outcome": "true",
"line": 161,
"state": "covered",
"hits": "942"
},
{
"id": "declaration/15/tail/decision/false",
"outcome": "false",
"line": 161,
"state": "covered",
"hits": "2104"
},
{
"id": "declaration/15/tail/false/tail/decision/true",
"outcome": "true",
"line": 162,
"state": "covered",
"hits": "20"
},
{
"id": "declaration/15/tail/false/tail/decision/false",
"outcome": "false",
"line": 162,
"state": "covered",
"hits": "2084"
},
{
"id": "declaration/15/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 163,
"state": "covered",
"hits": "38"
},
{
"id": "declaration/15/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 163,
"state": "covered",
"hits": "2046"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 164,
"state": "covered",
"hits": "16"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 164,
"state": "covered",
"hits": "2030"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 165,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 165,
"state": "covered",
"hits": "2018"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 166,
"state": "covered",
"hits": "1419"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 166,
"state": "covered",
"hits": "599"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 167,
"state": "covered",
"hits": "165"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 167,
"state": "covered",
"hits": "434"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 168,
"state": "covered",
"hits": "186"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 168,
"state": "covered",
"hits": "248"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 169,
"state": "covered",
"hits": "45"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 169,
"state": "covered",
"hits": "203"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 170,
"state": "covered",
"hits": "130"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 170,
"state": "covered",
"hits": "73"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 171,
"state": "covered",
"hits": "73"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 171,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/true",
"outcome": "true",
"line": 172,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/15/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/false/tail/decision/false",
"outcome": "false",
"line": 172,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/16/statement/1/decision/body",
"outcome": "body",
"line": 177,
"state": "covered",
"hits": "2880"
},
{
"id": "declaration/16/statement/1/decision/exit",
"outcome": "exit",
"line": 177,
"state": "covered",
"hits": "1243"
},
{
"id": "declaration/17/statement/1/decision/body",
"outcome": "body",
"line": 185,
"state": "covered",
"hits": "563"
},
{
"id": "declaration/17/statement/1/decision/exit",
"outcome": "exit",
"line": 185,
"state": "covered",
"hits": "221"
},
{
"id": "declaration/18/tail/arm/0",
"outcome": "ConstInstruction",
"line": 193,
"state": "covered",
"hits": "7985"
},
{
"id": "declaration/18/tail/arm/1",
"outcome": "LoadInstruction",
"line": 194,
"state": "covered",
"hits": "14683"
},
{
"id": "declaration/18/tail/arm/2",
"outcome": "StoreInstruction",
"line": 195,
"state": "covered",
"hits": "6483"
},
{
"id": "declaration/18/tail/arm/3",
"outcome": "PopInstruction",
"line": 196,
"state": "covered",
"hits": "1384"
},
{
"id": "declaration/18/tail/arm/4",
"outcome": "UnaryInstruction",
"line": 197,
"state": "covered",
"hits": "181"
},
{
"id": "declaration/18/tail/arm/5",
"outcome": "BinaryInstruction",
"line": 198,
"state": "covered",
"hits": "3046"
},
{
"id": "declaration/18/tail/arm/6",
"outcome": "MakeRangeInstruction",
"line": 199,
"state": "covered",
"hits": "28"
},
{
"id": "declaration/18/tail/arm/7",
"outcome": "MakeArrayInstruction",
"line": 200,
"state": "covered",
"hits": "455"
},
{
"id": "declaration/18/tail/arm/8",
"outcome": "IndexGetInstruction",
"line": 201,
"state": "covered",
"hits": "484"
},
{
"id": "declaration/18/tail/arm/9",
"outcome": "InterpolateInstruction",
"line": 202,
"state": "covered",
"hits": "221"
},
{
"id": "declaration/18/tail/arm/10",
"outcome": "IterInitInstruction",
"line": 203,
"state": "covered",
"hits": "355"
},
{
"id": "declaration/18/tail/arm/11",
"outcome": "IterNextInstruction",
"line": 204,
"state": "covered",
"hits": "355"
},
{
"id": "declaration/18/tail/arm/12",
"outcome": "MakeRecordInstruction",
"line": 209,
"state": "covered",
"hits": "554"
},
{
"id": "declaration/18/tail/arm/13",
"outcome": "FieldGetInstruction",
"line": 214,
"state": "covered",
"hits": "3146"
},
{
"id": "declaration/18/tail/arm/14",
"outcome": "MakeVariantInstruction",
"line": 215,
"state": "covered",
"hits": "942"
},
{
"id": "declaration/18/tail/arm/15",
"outcome": "MatchVariantInstruction",
"line": 220,
"state": "covered",
"hits": "1673"
},
{
"id": "declaration/18/tail/arm/16",
"outcome": "MatchFailInstruction",
"line": 224,
"state": "covered",
"hits": "417"
},
{
"id": "declaration/18/tail/arm/17",
"outcome": "CallInstruction",
"line": 225,
"state": "covered",
"hits": "4599"
},
{
"id": "declaration/18/tail/arm/18",
"outcome": "JumpFalseInstruction",
"line": 229,
"state": "covered",
"hits": "2672"
},
{
"id": "declaration/18/tail/arm/19",
"outcome": "JumpInstruction",
"line": 230,
"state": "covered",
"hits": "4327"
},
{
"id": "declaration/18/tail/arm/20",
"outcome": "PendingEndJumpInstruction",
"line": 231,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/18/tail/arm/21",
"outcome": "ReturnInstruction",
"line": 232,
"state": "covered",
"hits": "689"
},
{
"id": "declaration/18/tail/arm/22",
"outcome": "AwaitCallInstruction",
"line": 233,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/18/tail/arm/23",
"outcome": "AwaitValueInstruction",
"line": 234,
"state": "covered",
"hits": "2"
},
{
"id": "declaration/18/tail/arm/24",
"outcome": "CallValueInstruction",
"line": 235,
"state": "covered",
"hits": "30"
},
{
"id": "declaration/19/statement/2/decision/body",
"outcome": "body",
"line": 242,
"state": "covered",
"hits": "120869"
},
{
"id": "declaration/19/statement/2/decision/exit",
"outcome": "exit",
"line": 242,
"state": "covered",
"hits": "725"
},
{
"id": "declaration/19/statement/2/body/statement/0/value/decision/true",
"outcome": "true",
"line": 243,
"state": "covered",
"hits": "602"
},
{
"id": "declaration/19/statement/2/body/statement/0/value/decision/false",
"outcome": "false",
"line": 243,
"state": "covered",
"hits": "120267"
},
{
"id": "declaration/19/statement/2/body/statement/0/value/condition/decision/evaluate-right",
"outcome": "evaluate-right",
"line": 243,
"state": "covered",
"hits": "54223"
},
{
"id": "declaration/19/statement/2/body/statement/0/value/condition/decision/skip-right",
"outcome": "skip-right",
"line": 243,
"state": "covered",
"hits": "66646"
},
{
"id": "declaration/19/statement/3/value/decision/true",
"outcome": "true",
"line": 249,
"state": "covered",
"hits": "123"
},
{
"id": "declaration/19/statement/3/value/decision/false",
"outcome": "false",
"line": 249,
"state": "covered",
"hits": "602"
},
{
"id": "declaration/20/statement/1/decision/body",
"outcome": "body",
"line": 255,
"state": "covered",
"hits": "725"
},
{
"id": "declaration/20/statement/1/decision/exit",
"outcome": "exit",
"line": 255,
"state": "covered",
"hits": "77"
},
{
"id": "declaration/21/statement/1/value/args/1/args/0/decision/true",
"outcome": "true",
"line": 263,
"state": "covered",
"hits": "6"
},
{
"id": "declaration/21/statement/1/value/args/1/args/0/decision/false",
"outcome": "false",
"line": 263,
"state": "covered",
"hits": "683"
},
{
"id": "declaration/21/statement/1/value/args/1/args/0/false/tail/decision/true",
"outcome": "true",
"line": 263,
"state": "covered",
"hits": "607"
},
{
"id": "declaration/21/statement/1/value/args/1/args/0/false/tail/decision/false",
"outcome": "false",
"line": 263,
"state": "covered",
"hits": "76"
},
{
"id": "declaration/21/statement/5/decision/body",
"outcome": "body",
"line": 267,
"state": "covered",
"hits": "54721"
},
{
"id": "declaration/21/statement/5/decision/exit",
"outcome": "exit",
"line": 267,
"state": "covered",
"hits": "689"
},
{
"id": "declaration/22/statement/5/decision/body",
"outcome": "body",
"line": 279,
"state": "covered",
"hits": "689"
},
{
"id": "declaration/22/statement/5/decision/exit",
"outcome": "exit",
"line": 279,
"state": "covered",
"hits": "49"
},
{
"id": "declaration/23/tail/arm/0",
"outcome": "Ok",
"line": 287,
"state": "covered",
"hits": "22"
},
{
"id": "declaration/23/tail/arm/0/body/block/tail/arm/0",
"outcome": "Ok",
"line": 289,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/23/tail/arm/0/body/block/tail/arm/0/body/block/tail/decision/true",
"outcome": "true",
"line": 291,
"state": "covered",
"hits": "12"
},
{
"id": "declaration/23/tail/arm/0/body/block/tail/arm/0/body/block/tail/decision/false",
"outcome": "false",
"line": 291,
"state": "zero",
"hits": "0"
},
{
"id": "declaration/23/tail/arm/0/body/block/tail/arm/1",
"outcome": "Error",
"line": 293,
"state": "covered",
"hits": "10"
},
{
"id": "declaration/23/tail/arm/1",
"outcome": "Error",
"line": 296,
"state": "zero",
"hits": "0"
}
]Reviewed declaration exclusions
[
{
"id": "declaration/0",
"reason": "import",
"line": 1
}
]