Merge branch 'main' into builtin-task

This commit is contained in:
Sam Mohr 2024-07-03 00:42:48 -07:00
commit f61b303a59
No known key found for this signature in database
GPG key ID: EA41D161A3C1BC99
82 changed files with 2661 additions and 5699 deletions

View file

@ -988,20 +988,14 @@ fn link_linux(
LinkType::Executable => (
// Presumably this S stands for Static, since if we include Scrt1.o
// in the linking for dynamic builds, linking fails.
vec![scrt1_path_str.to_string()],
[scrt1_path_str.as_ref()],
output_path,
),
LinkType::Dylib => {
let mut output_path = output_path;
output_path.set_extension("so");
(
// TODO: find a way to avoid using a vec! here - should theoretically be
// able to do this somehow using &[] but the borrow checker isn't having it.
// Also find a way to have these be string slices instead of Strings.
vec!["-shared".to_string()],
output_path,
)
(["-shared"], output_path)
}
LinkType::None => internal_error!("link_linux should not be called with link type of none"),
};
@ -1032,7 +1026,7 @@ fn link_linux(
&crti_path_str,
&crtn_path_str,
])
.args(&base_args)
.args(base_args)
.args(["-dynamic-linker", ld_linux_path_str])
.args(input_paths)
.args(extra_link_flags())

View file

@ -1169,7 +1169,7 @@ fn build_and_preprocess_host_lowlevel(
opt_level: OptLevel,
target: Target,
platform_main_roc: &Path,
preprocessed_host_path: &Path,
_preprocessed_host_path: &Path,
stub_dll_symbols: &[String],
) {
let stub_lib =
@ -1177,14 +1177,15 @@ fn build_and_preprocess_host_lowlevel(
debug_assert!(stub_lib.exists());
rebuild_host(opt_level, target, platform_main_roc, Some(&stub_lib));
let host_dest = rebuild_host(opt_level, target, platform_main_roc, Some(&stub_lib));
roc_linker::preprocess_host(
target,
host_dest.as_path(),
platform_main_roc,
preprocessed_host_path,
&stub_lib,
stub_dll_symbols,
false,
false,
)
}

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,6 @@ package [
Encode,
Hash,
Box,
TotallyNotJson,
Inspect,
Task,
] {}

View file

@ -16,7 +16,6 @@ pub fn module_source(module_id: ModuleId) -> &'static str {
ModuleId::DECODE => DECODE,
ModuleId::HASH => HASH,
ModuleId::INSPECT => INSPECT,
ModuleId::JSON => JSON,
ModuleId::TASK => TASK,
_ => internal_error!(
"ModuleId {:?} is not part of the standard library",
@ -37,5 +36,4 @@ const ENCODE: &str = include_str!("../roc/Encode.roc");
const DECODE: &str = include_str!("../roc/Decode.roc");
const HASH: &str = include_str!("../roc/Hash.roc");
const INSPECT: &str = include_str!("../roc/Inspect.roc");
const JSON: &str = include_str!("../roc/TotallyNotJson.roc");
const TASK: &str = include_str!("../roc/Task.roc");

View file

@ -755,28 +755,6 @@ pub fn desugar_expr<'a>(
})
}
// Replace an empty final def with a `Task.ok {}`
EmptyDefsFinal => {
let mut apply_args: Vec<&'a Loc<Expr<'a>>> = Vec::new_in(arena);
apply_args
.push(arena.alloc(Loc::at(loc_expr.region, Expr::Record(Collection::empty()))));
arena.alloc(Loc::at(
loc_expr.region,
Expr::Apply(
arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name: ModuleName::TASK,
ident: "ok",
},
)),
arena.alloc(apply_args),
CalledVia::BangSuffix,
),
))
}
// note this only exists after desugaring
LowLevelDbg(_, _, _) => loc_expr,
}

View file

@ -621,9 +621,6 @@ pub fn canonicalize_expr<'a>(
use Expr::*;
let (expr, output) = match expr {
&ast::Expr::EmptyDefsFinal => {
internal_error!("EmptyDefsFinal should have been desugared")
}
&ast::Expr::Num(str) => {
let answer = num_expr_from_result(var_store, finish_parsing_num(str), region, env);
@ -2392,8 +2389,7 @@ pub fn is_valid_interpolation(expr: &ast::Expr<'_>) -> bool {
| ast::Expr::Backpassing(_, _, _)
| ast::Expr::SpaceBefore(_, _)
| ast::Expr::Str(StrLiteral::Block(_))
| ast::Expr::SpaceAfter(_, _)
| ast::Expr::EmptyDefsFinal => false,
| ast::Expr::SpaceAfter(_, _) => false,
// These can contain subexpressions, so we need to recursively check those
ast::Expr::Str(StrLiteral::Line(segments)) => {
segments.iter().all(|segment| match segment {

View file

@ -207,7 +207,7 @@ pub struct ListPatterns {
/// [ .., A, B ] -> patterns = [A, B], rest = 0
/// [ A, .., B ] -> patterns = [A, B], rest = 1
/// [ A, B, .. ] -> patterns = [A, B], rest = 2
pub opt_rest: Option<(usize, Option<Symbol>)>,
pub opt_rest: Option<(usize, Option<Loc<Symbol>>)>,
}
impl ListPatterns {
@ -793,7 +793,8 @@ pub fn canonicalize_pattern<'a>(
pattern_as.identifier.value,
) {
Ok(symbol) => {
rest_name = Some(symbol);
rest_name =
Some(Loc::at(pattern_as.identifier.region, symbol));
}
Err(pattern) => {
opt_erroneous = Some(pattern);
@ -997,6 +998,10 @@ impl<'a> BindingsFromPattern<'a> {
| OpaqueNotInScope(..) => (),
List { patterns, .. } => {
stack.extend(patterns.patterns.iter().rev().map(Pattern));
if let Some((_, Some(rest_sym))) = &patterns.opt_rest {
return Some((rest_sym.value, rest_sym.region));
}
}
}
}

View file

@ -129,46 +129,7 @@ pub fn unwrap_suffixed_expression<'a>(
internal_error!("BinOps should have been desugared in desugar_expr");
}
Expr::LowLevelDbg(dbg_src, arg, rest) => {
if is_expr_suffixed(&arg.value) {
// we cannot unwrap a suffixed expression within dbg
// e.g. dbg (foo! "bar")
return Err(EUnwrapped::Malformed);
}
match unwrap_suffixed_expression(arena, rest, maybe_def_pat) {
Ok(unwrapped_expr) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
return Ok(new_dbg);
}
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_expr)) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
Err(EUnwrapped::UnwrappedDefExpr(new_dbg))
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: unwrapped_expr,
sub_pat,
sub_new,
}) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: new_dbg,
sub_pat,
sub_new,
})
}
Err(EUnwrapped::Malformed) => Err(EUnwrapped::Malformed),
}
}
Expr::LowLevelDbg(..) => unwrap_low_level_dbg(arena, loc_expr, maybe_def_pat),
Expr::Expect(condition, continuation) => {
if is_expr_suffixed(&condition.value) {
@ -658,7 +619,8 @@ pub fn unwrap_suffixed_expression_defs_help<'a>(
let after_empty = split_defs.after.is_empty();
if before_empty && after_empty {
// NIL before, NIL after -> SINGLE DEF
let next_expr = match unwrap_suffixed_expression(arena,loc_ret,maybe_def_pat) {
// We pass None as a def pattern here because it's desugaring of the ret expression
let next_expr = match unwrap_suffixed_expression(arena,loc_ret, None) {
Ok(next_expr) => next_expr,
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
// We need to apply Task.ok here as the defs final expression was unwrapped
@ -688,7 +650,8 @@ pub fn unwrap_suffixed_expression_defs_help<'a>(
return unwrap_suffixed_expression(arena, apply_task_await(arena,def_expr.region,unwrapped_expr,def_pattern,next_expr), maybe_def_pat);
} else if after_empty {
// SOME before, NIL after -> LAST DEF
match unwrap_suffixed_expression(arena,loc_ret,maybe_def_pat){
// We pass None as a def pattern here because it's desugaring of the ret expression
match unwrap_suffixed_expression(arena,loc_ret,None){
Ok(new_loc_ret) => {
let applied_task_await = apply_task_await(arena, loc_expr.region, unwrapped_expr, def_pattern, new_loc_ret);
let new_defs = arena.alloc(Loc::at(loc_expr.region,Defs(arena.alloc(split_defs.before), applied_task_await)));
@ -767,6 +730,87 @@ pub fn unwrap_suffixed_expression_defs_help<'a>(
}
}
fn unwrap_low_level_dbg<'a>(
arena: &'a Bump,
loc_expr: &'a Loc<Expr<'a>>,
maybe_def_pat: Option<&'a Loc<Pattern<'a>>>,
) -> Result<&'a Loc<Expr<'a>>, EUnwrapped<'a>> {
match loc_expr.value {
LowLevelDbg(dbg_src, arg, rest) => {
if is_expr_suffixed(&arg.value) {
return match unwrap_suffixed_expression(arena, arg, maybe_def_pat) {
Ok(unwrapped_expr) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, unwrapped_expr, rest),
));
unwrap_low_level_dbg(arena, new_dbg, maybe_def_pat)
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, sub_new, rest),
));
unwrap_suffixed_expression(
arena,
apply_task_await(arena, new_dbg.region, sub_arg, sub_pat, new_dbg),
maybe_def_pat,
)
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
internal_error!(
"unreachable, arg of LowLevelDbg should generate UnwrappedSubExpr instead"
);
}
Err(EUnwrapped::Malformed) => Err(EUnwrapped::Malformed),
};
}
match unwrap_suffixed_expression(arena, rest, maybe_def_pat) {
Ok(unwrapped_expr) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
Ok(&*new_dbg)
}
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_expr)) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
Err(EUnwrapped::UnwrappedDefExpr(new_dbg))
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: unwrapped_expr,
sub_pat,
sub_new,
}) => {
let new_dbg = arena.alloc(Loc::at(
loc_expr.region,
LowLevelDbg(dbg_src, arg, unwrapped_expr),
));
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: new_dbg,
sub_pat,
sub_new,
})
}
Err(EUnwrapped::Malformed) => Err(EUnwrapped::Malformed),
}
}
_ => internal_error!(
"unreachable, expected a LowLevelDbg node to be passed into unwrap_low_level_dbg"
),
}
}
/// Helper for `Task.await (loc_arg) \loc_pat -> loc_new`
pub fn apply_task_await<'a>(
arena: &'a Bump,

View file

@ -379,11 +379,7 @@ mod test_can {
let arena = Bump::new();
let CanExprOut { problems, .. } = can_expr_with(&arena, test_home(), src);
assert_eq!(problems.len(), 2);
assert!(problems.iter().any(|problem| matches!(
problem,
Problem::RuntimeError(RuntimeError::Shadowing { .. })
)));
assert_eq!(problems.len(), 0);
}
#[test]
@ -400,11 +396,7 @@ mod test_can {
let arena = Bump::new();
let CanExprOut { problems, .. } = can_expr_with(&arena, test_home(), src);
assert_eq!(problems.len(), 2);
assert!(problems.iter().any(|problem| matches!(
problem,
Problem::RuntimeError(RuntimeError::Shadowing { .. })
)));
assert_eq!(problems.len(), 0);
}
#[test]

View file

@ -1,3 +1,6 @@
#[macro_use]
extern crate indoc;
#[cfg(test)]
mod suffixed_tests {
@ -375,7 +378,7 @@ mod suffixed_tests {
x = foo! msg
bar x
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-88], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-88 Defs(Defs { tags: [Index(2147483649)], regions: [@30-37], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@24-27 Identifier { ident: "msg" }, @30-37 Str(PlainLine("hello"))), Body(@24-27 Identifier { ident: "msg" }, @30-37 Str(PlainLine("hello")))] }, @0-88 Apply(@0-88 Var { module_name: "Task", ident: "await" }, [@54-66 Apply(@54-66 Var { module_name: "", ident: "foo" }, [@63-66 Var { module_name: "", ident: "msg" }], Space), @0-88 Closure([@54-55 Identifier { ident: "x" }], @83-88 Apply(@83-86 Var { module_name: "", ident: "bar" }, [@87-88 Var { module_name: "", ident: "x" }], Space))], BangSuffix)))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-88], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @24-88 Defs(Defs { tags: [Index(2147483649)], regions: [@30-37], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@24-27 Identifier { ident: "msg" }, @30-37 Str(PlainLine("hello"))), Body(@24-27 Identifier { ident: "msg" }, @30-37 Str(PlainLine("hello")))] }, @24-88 Apply(@24-88 Var { module_name: "Task", ident: "await" }, [@54-66 Apply(@54-66 Var { module_name: "", ident: "foo" }, [@63-66 Var { module_name: "", ident: "msg" }], Space), @24-88 Closure([@54-55 Identifier { ident: "x" }], @83-88 Apply(@83-86 Var { module_name: "", ident: "bar" }, [@87-88 Var { module_name: "", ident: "x" }], Space))], BangSuffix)))] }"#,
);
}
@ -416,7 +419,7 @@ mod suffixed_tests {
x "foo"
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-187], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-187 Defs(Defs { tags: [Index(2147483650)], regions: [@60-162], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Annotation(@24-25 Identifier { ident: "x" }, @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred]))), AnnotatedBody { ann_pattern: @24-25 Identifier { ident: "x" }, ann_type: @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred])), comment: None, body_pattern: @60-61 Identifier { ident: "x" }, body_expr: @60-162 Closure([@65-68 Identifier { ident: "msg" }], @93-162 Defs(Defs { tags: [Index(2147483649)], regions: [@93-140], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Annotation(@93-94 Identifier { ident: "y" }, @97-106 Apply("", "Task", [@102-104 Record { fields: [], ext: None }, @105-106 Inferred])), AnnotatedBody { ann_pattern: @93-94 Identifier { ident: "y" }, ann_type: @97-106 Apply("", "Task", [@102-104 Record { fields: [], ext: None }, @105-106 Inferred]), comment: None, body_pattern: @127-128 Identifier { ident: "y" }, body_expr: @127-140 Apply(@131-135 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@137-140 Var { module_name: "", ident: "msg" }], Space) }] }, @161-162 Var { module_name: "", ident: "y" })) }, AnnotatedBody { ann_pattern: @24-25 Identifier { ident: "x" }, ann_type: @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred])), comment: None, body_pattern: @60-61 Identifier { ident: "x" }, body_expr: @60-162 Closure([@65-68 Identifier { ident: "msg" }], @127-140 Apply(@127-140 Var { module_name: "Task", ident: "await" }, [@127-140 Apply(@127-140 Var { module_name: "", ident: "line" }, [@137-140 Var { module_name: "", ident: "msg" }], Space), @127-140 Closure([@127-128 Identifier { ident: "y" }], @161-162 Var { module_name: "", ident: "y" })], BangSuffix)) }] }, @180-187 Apply(@180-181 Var { module_name: "", ident: "x" }, [@182-187 Str(PlainLine("foo"))], Space)))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-187], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @24-187 Defs(Defs { tags: [Index(2147483650)], regions: [@64-162], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Annotation(@24-25 Identifier { ident: "x" }, @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred]))), AnnotatedBody { ann_pattern: @24-25 Identifier { ident: "x" }, ann_type: @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred])), comment: None, body_pattern: @60-61 Identifier { ident: "x" }, body_expr: @64-162 Closure([@65-68 Identifier { ident: "msg" }], @93-162 Defs(Defs { tags: [Index(2147483649)], regions: [@93-140], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Annotation(@93-94 Identifier { ident: "y" }, @97-106 Apply("", "Task", [@102-104 Record { fields: [], ext: None }, @105-106 Inferred])), AnnotatedBody { ann_pattern: @93-94 Identifier { ident: "y" }, ann_type: @97-106 Apply("", "Task", [@102-104 Record { fields: [], ext: None }, @105-106 Inferred]), comment: None, body_pattern: @127-128 Identifier { ident: "y" }, body_expr: @127-140 Apply(@131-135 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@137-140 Var { module_name: "", ident: "msg" }], Space) }] }, @161-162 Var { module_name: "", ident: "y" })) }, AnnotatedBody { ann_pattern: @24-25 Identifier { ident: "x" }, ann_type: @28-43 Function([@28-31 Apply("", "Str", [])], @35-43 Apply("", "Task", [@40-41 Inferred, @42-43 Inferred])), comment: None, body_pattern: @60-61 Identifier { ident: "x" }, body_expr: @64-162 Closure([@65-68 Identifier { ident: "msg" }], @127-140 Apply(@127-140 Var { module_name: "Task", ident: "await" }, [@127-140 Apply(@127-140 Var { module_name: "", ident: "line" }, [@137-140 Var { module_name: "", ident: "msg" }], Space), @127-140 Closure([@127-128 Identifier { ident: "y" }], @161-162 Var { module_name: "", ident: "y" })], BangSuffix)) }] }, @180-187 Apply(@180-181 Var { module_name: "", ident: "x" }, [@182-187 Str(PlainLine("foo"))], Space)))] }"#,
);
}
@ -610,7 +613,7 @@ mod suffixed_tests {
else
line "fail"
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-286], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-286 Defs(Defs { tags: [Index(2147483650), Index(2147483651)], regions: [@32-49, @76-94], space_before: [Slice(start = 0, length = 0), Slice(start = 0, length = 1)], space_after: [Slice(start = 0, length = 0), Slice(start = 1, length = 0)], spaces: [Newline], type_defs: [], value_defs: [Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-73 Identifier { ident: "isFalse" }, @76-94 Apply(@76-83 Var { module_name: "Task", ident: "ok" }, [@84-94 Var { module_name: "Bool", ident: "false" }], Space)), Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-73 Identifier { ident: "isFalse" }, @76-94 Apply(@76-83 Var { module_name: "Task", ident: "ok" }, [@84-94 Var { module_name: "Bool", ident: "false" }], Space))] }, @115-123 Apply(@115-123 Var { module_name: "Task", ident: "await" }, [@115-123 Var { module_name: "", ident: "isFalse" }, @115-123 Closure([@115-123 Identifier { ident: "#!a0" }], @112-286 If([(@115-123 Var { module_name: "", ident: "#!a0" }, @149-160 Apply(@149-153 Var { module_name: "", ident: "line" }, [@154-160 Str(PlainLine("fail"))], Space))], @185-192 Apply(@185-192 Var { module_name: "Task", ident: "await" }, [@185-192 Var { module_name: "", ident: "isTrue" }, @185-192 Closure([@185-192 Identifier { ident: "#!a1" }], @112-286 If([(@185-192 Var { module_name: "", ident: "#!a1" }, @219-233 Apply(@219-223 Var { module_name: "", ident: "line" }, [@224-233 Str(PlainLine("success"))], Space))], @275-286 Apply(@275-279 Var { module_name: "", ident: "line" }, [@280-286 Str(PlainLine("fail"))], Space)))], BangSuffix)))], BangSuffix)))] }"##,
r##"Defs { tags: [Index(2147483648)], regions: [@0-286], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-286 Defs(Defs { tags: [Index(2147483650), Index(2147483651)], regions: [@32-49, @76-94], space_before: [Slice(start = 0, length = 0), Slice(start = 0, length = 1)], space_after: [Slice(start = 0, length = 0), Slice(start = 1, length = 0)], spaces: [Newline], type_defs: [], value_defs: [Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-73 Identifier { ident: "isFalse" }, @76-94 Apply(@76-83 Var { module_name: "Task", ident: "ok" }, [@84-94 Var { module_name: "Bool", ident: "false" }], Space)), Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-73 Identifier { ident: "isFalse" }, @76-94 Apply(@76-83 Var { module_name: "Task", ident: "ok" }, [@84-94 Var { module_name: "Bool", ident: "false" }], Space))] }, @115-123 Apply(@115-123 Var { module_name: "Task", ident: "await" }, [@115-123 Var { module_name: "", ident: "isFalse" }, @115-123 Closure([@115-123 Identifier { ident: "#!a0" }], @112-286 If([(@115-123 Var { module_name: "", ident: "#!a0" }, @149-160 Apply(@149-153 Var { module_name: "", ident: "line" }, [@154-160 Str(PlainLine("fail"))], Space))], @185-192 Apply(@185-192 Var { module_name: "Task", ident: "await" }, [@185-192 Var { module_name: "", ident: "isTrue" }, @185-192 Closure([@185-192 Identifier { ident: "#!a1" }], @112-286 If([(@185-192 Var { module_name: "", ident: "#!a1" }, @219-233 Apply(@219-223 Var { module_name: "", ident: "line" }, [@224-233 Str(PlainLine("success"))], Space))], @275-286 Apply(@275-279 Var { module_name: "", ident: "line" }, [@280-286 Str(PlainLine("fail"))], Space)))], BangSuffix)))], BangSuffix)))] }"##,
);
}
@ -650,7 +653,7 @@ mod suffixed_tests {
msg
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-466], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-466 Defs(Defs { tags: [Index(2147483652), Index(2147483653), Index(2147483654)], regions: [@32-49, @77-92, @143-445], space_before: [Slice(start = 0, length = 0), Slice(start = 0, length = 1), Slice(start = 1, length = 1)], space_after: [Slice(start = 0, length = 0), Slice(start = 1, length = 0), Slice(start = 2, length = 0)], spaces: [Newline, Newline], type_defs: [], value_defs: [Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-74 Identifier { ident: "isFalsey" }, @77-92 Closure([@78-79 Identifier { ident: "x" }], @83-92 Apply(@83-90 Var { module_name: "Task", ident: "ok" }, [@91-92 Var { module_name: "", ident: "x" }], Space))), Annotation(@109-112 Identifier { ident: "msg" }, @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])])), AnnotatedBody { ann_pattern: @109-112 Identifier { ident: "msg" }, ann_type: @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])]), comment: None, body_pattern: @143-146 Identifier { ident: "msg" }, body_expr: @143-445 If([(@173-183 Apply(@173-174 Var { module_name: "Bool", ident: "not" }, [@175-182 ParensAround(TaskAwaitBang(Var { module_name: "", ident: "isTrue" }))], UnaryOp(Not)), @213-256 Defs(Defs { tags: [Index(2147483648)], regions: [@218-225], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@218-225 RecordDestructure([]), @218-225 Apply(@213-217 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@219-225 Str(PlainLine("fail"))], Space))] }, @251-256 Apply(@251-254 Var { module_name: "", ident: "err" }, [@255-256 Num("1")], Space))), (@285-307 ParensAround(Apply(@286-294 TaskAwaitBang(Var { module_name: "", ident: "isFalsey" }), [@296-306 Var { module_name: "Bool", ident: "false" }], Space)), @338-380 Defs(Defs { tags: [Index(2147483648)], regions: [@343-350], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@343-350 RecordDestructure([]), @343-350 Apply(@338-342 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@344-350 Str(PlainLine("nope"))], Space))] }, @375-380 Apply(@375-377 Var { module_name: "", ident: "ok" }, [@378-380 Record([])], Space)))], @430-445 Apply(@430-434 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@436-445 Str(PlainLine("success"))], Space)) }, Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-74 Identifier { ident: "isFalsey" }, @77-92 Closure([@78-79 Identifier { ident: "x" }], @83-92 Apply(@83-90 Var { module_name: "Task", ident: "ok" }, [@91-92 Var { module_name: "", ident: "x" }], Space))), AnnotatedBody { ann_pattern: @109-112 Identifier { ident: "msg" }, ann_type: @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])]), comment: None, body_pattern: @143-146 Identifier { ident: "msg" }, body_expr: Apply(Var { module_name: "Task", ident: "await" }, [Var { module_name: "", ident: "isTrue" }, Closure([Identifier { ident: "#!a0" }], @143-445 If([(@173-183 Apply(@173-174 Var { module_name: "Bool", ident: "not" }, [@175-182 ParensAround(Var { module_name: "", ident: "#!a0" })], UnaryOp(Not)), @218-225 Apply(@218-225 Var { module_name: "Task", ident: "await" }, [@218-225 Apply(@218-225 Var { module_name: "", ident: "line" }, [@219-225 Str(PlainLine("fail"))], Space), @218-225 Closure([@218-225 RecordDestructure([])], @251-256 Apply(@251-254 Var { module_name: "", ident: "err" }, [@255-256 Num("1")], Space))], BangSuffix))], Apply(Var { module_name: "Task", ident: "await" }, [Apply(Var { module_name: "", ident: "isFalsey" }, [@296-306 Var { module_name: "Bool", ident: "false" }], Space), Closure([Identifier { ident: "#!a1" }], @143-445 If([(@285-307 ParensAround(Var { module_name: "", ident: "#!a1" }), @343-350 Apply(@343-350 Var { module_name: "Task", ident: "await" }, [@343-350 Apply(@343-350 Var { module_name: "", ident: "line" }, [@344-350 Str(PlainLine("nope"))], Space), @343-350 Closure([@343-350 RecordDestructure([])], @375-380 Apply(@375-377 Var { module_name: "", ident: "ok" }, [@378-380 Record([])], Space))], BangSuffix))], @430-445 Apply(@430-445 Var { module_name: "", ident: "line" }, [@436-445 Str(PlainLine("success"))], Space)))], BangSuffix)))], BangSuffix) }] }, @463-466 Var { module_name: "", ident: "msg" }))] }"##,
r##"Defs { tags: [Index(2147483648)], regions: [@0-466], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-466 Defs(Defs { tags: [Index(2147483652), Index(2147483653), Index(2147483654)], regions: [@32-49, @77-92, @170-445], space_before: [Slice(start = 0, length = 0), Slice(start = 0, length = 1), Slice(start = 1, length = 1)], space_after: [Slice(start = 0, length = 0), Slice(start = 1, length = 0), Slice(start = 2, length = 0)], spaces: [Newline, Newline], type_defs: [], value_defs: [Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-74 Identifier { ident: "isFalsey" }, @77-92 Closure([@78-79 Identifier { ident: "x" }], @83-92 Apply(@83-90 Var { module_name: "Task", ident: "ok" }, [@91-92 Var { module_name: "", ident: "x" }], Space))), Annotation(@109-112 Identifier { ident: "msg" }, @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])])), AnnotatedBody { ann_pattern: @109-112 Identifier { ident: "msg" }, ann_type: @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])]), comment: None, body_pattern: @143-146 Identifier { ident: "msg" }, body_expr: @170-445 If([(@173-183 Apply(@173-174 Var { module_name: "Bool", ident: "not" }, [@175-182 ParensAround(TaskAwaitBang(Var { module_name: "", ident: "isTrue" }))], UnaryOp(Not)), @213-256 Defs(Defs { tags: [Index(2147483648)], regions: [@218-225], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@218-225 RecordDestructure([]), @218-225 Apply(@213-217 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@219-225 Str(PlainLine("fail"))], Space))] }, @251-256 Apply(@251-254 Var { module_name: "", ident: "err" }, [@255-256 Num("1")], Space))), (@285-307 ParensAround(Apply(@286-294 TaskAwaitBang(Var { module_name: "", ident: "isFalsey" }), [@296-306 Var { module_name: "Bool", ident: "false" }], Space)), @338-380 Defs(Defs { tags: [Index(2147483648)], regions: [@343-350], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@343-350 RecordDestructure([]), @343-350 Apply(@338-342 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@344-350 Str(PlainLine("nope"))], Space))] }, @375-380 Apply(@375-377 Var { module_name: "", ident: "ok" }, [@378-380 Record([])], Space)))], @430-445 Apply(@430-434 TaskAwaitBang(Var { module_name: "", ident: "line" }), [@436-445 Str(PlainLine("success"))], Space)) }, Body(@23-29 Identifier { ident: "isTrue" }, @32-49 Apply(@32-39 Var { module_name: "Task", ident: "ok" }, [@40-49 Var { module_name: "Bool", ident: "true" }], Space)), Body(@66-74 Identifier { ident: "isFalsey" }, @77-92 Closure([@78-79 Identifier { ident: "x" }], @83-92 Apply(@83-90 Var { module_name: "Task", ident: "ok" }, [@91-92 Var { module_name: "", ident: "x" }], Space))), AnnotatedBody { ann_pattern: @109-112 Identifier { ident: "msg" }, ann_type: @115-126 Apply("", "Task", [@120-122 Record { fields: [], ext: None }, @123-126 Apply("", "I32", [])]), comment: None, body_pattern: @143-146 Identifier { ident: "msg" }, body_expr: Apply(Var { module_name: "Task", ident: "await" }, [Var { module_name: "", ident: "isTrue" }, Closure([Identifier { ident: "#!a0" }], @170-445 If([(@173-183 Apply(@173-174 Var { module_name: "Bool", ident: "not" }, [@175-182 ParensAround(Var { module_name: "", ident: "#!a0" })], UnaryOp(Not)), @218-225 Apply(@218-225 Var { module_name: "Task", ident: "await" }, [@218-225 Apply(@218-225 Var { module_name: "", ident: "line" }, [@219-225 Str(PlainLine("fail"))], Space), @218-225 Closure([@218-225 RecordDestructure([])], @251-256 Apply(@251-254 Var { module_name: "", ident: "err" }, [@255-256 Num("1")], Space))], BangSuffix))], Apply(Var { module_name: "Task", ident: "await" }, [Apply(Var { module_name: "", ident: "isFalsey" }, [@296-306 Var { module_name: "Bool", ident: "false" }], Space), Closure([Identifier { ident: "#!a1" }], @170-445 If([(@285-307 ParensAround(Var { module_name: "", ident: "#!a1" }), @343-350 Apply(@343-350 Var { module_name: "Task", ident: "await" }, [@343-350 Apply(@343-350 Var { module_name: "", ident: "line" }, [@344-350 Str(PlainLine("nope"))], Space), @343-350 Closure([@343-350 RecordDestructure([])], @375-380 Apply(@375-377 Var { module_name: "", ident: "ok" }, [@378-380 Record([])], Space))], BangSuffix))], @430-445 Apply(@430-445 Var { module_name: "", ident: "line" }, [@436-445 Str(PlainLine("success"))], Space)))], BangSuffix)))], BangSuffix) }] }, @463-466 Var { module_name: "", ident: "msg" }))] }"##,
);
}
@ -681,7 +684,7 @@ mod suffixed_tests {
CMD.new "cp"
|> mapErr! ERR
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-103], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "copy" }, @0-103 Closure([@8-9 Identifier { ident: "a" }, @10-11 Identifier { ident: "b" }], @36-42 Apply(@36-42 Var { module_name: "Task", ident: "await" }, [@36-42 Apply(@36-42 Var { module_name: "", ident: "line" }, [@37-42 Str(PlainLine("FOO"))], Space), @36-42 Closure([@36-42 RecordDestructure([])], @60-103 Apply(@60-103 Var { module_name: "", ident: "mapErr" }, [@60-72 Apply(@60-67 Var { module_name: "CMD", ident: "new" }, [@68-72 Str(PlainLine("cp"))], Space), @100-103 Tag("ERR")], BinOp(Pizza)))], BangSuffix)))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-103], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "copy" }, @7-103 Closure([@8-9 Identifier { ident: "a" }, @10-11 Identifier { ident: "b" }], @36-42 Apply(@36-42 Var { module_name: "Task", ident: "await" }, [@36-42 Apply(@36-42 Var { module_name: "", ident: "line" }, [@37-42 Str(PlainLine("FOO"))], Space), @36-42 Closure([@36-42 RecordDestructure([])], @60-103 Apply(@60-103 Var { module_name: "", ident: "mapErr" }, [@60-72 Apply(@60-67 Var { module_name: "CMD", ident: "new" }, [@68-72 Str(PlainLine("cp"))], Space), @100-103 Tag("ERR")], BinOp(Pizza)))], BangSuffix)))] }"#,
);
}
@ -709,7 +712,7 @@ mod suffixed_tests {
[] -> "empty"
_ -> "non-empty"
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-111], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "list" }, @0-111 Apply(@0-111 Var { module_name: "Task", ident: "await" }, [@29-37 Var { module_name: "", ident: "getList" }, @0-111 Closure([@29-37 Identifier { ident: "#!a0" }], @0-111 When(@29-37 Var { module_name: "", ident: "#!a0" }, [WhenBranch { patterns: [@61-63 List([])], value: @67-74 Str(PlainLine("empty")), guard: None }, WhenBranch { patterns: [@95-96 Underscore("")], value: @100-111 Str(PlainLine("non-empty")), guard: None }]))], BangSuffix))] }"##,
r##"Defs { tags: [Index(2147483648)], regions: [@0-111], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "list" }, @24-111 Apply(@24-111 Var { module_name: "Task", ident: "await" }, [@29-37 Var { module_name: "", ident: "getList" }, @24-111 Closure([@29-37 Identifier { ident: "#!a0" }], @24-111 When(@29-37 Var { module_name: "", ident: "#!a0" }, [WhenBranch { patterns: [@61-63 List([])], value: @67-74 Str(PlainLine("empty")), guard: None }, WhenBranch { patterns: [@95-96 Underscore("")], value: @100-111 Str(PlainLine("non-empty")), guard: None }]))], BangSuffix))] }"##,
);
}
@ -754,7 +757,7 @@ mod suffixed_tests {
_ ->
ok {}
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-195], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "list" }, @0-195 Apply(@0-195 Var { module_name: "Task", ident: "await" }, [@29-37 Var { module_name: "", ident: "getList" }, @0-195 Closure([@29-37 Identifier { ident: "#!a0" }], @0-195 When(@29-37 Var { module_name: "", ident: "#!a0" }, [WhenBranch { patterns: [@61-63 List([])], value: @97-103 Apply(@97-103 Var { module_name: "Task", ident: "await" }, [@97-103 Apply(@97-103 Var { module_name: "", ident: "line" }, [@98-103 Str(PlainLine("foo"))], Space), @97-103 Closure([@97-103 RecordDestructure([])], @128-139 Apply(@128-139 Var { module_name: "", ident: "line" }, [@134-139 Str(PlainLine("bar"))], Space))], BangSuffix), guard: None }, WhenBranch { patterns: [@160-161 Underscore("")], value: @190-195 Apply(@190-192 Var { module_name: "", ident: "ok" }, [@193-195 Record([])], Space), guard: None }]))], BangSuffix))] }"##,
r##"Defs { tags: [Index(2147483648)], regions: [@0-195], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "list" }, @24-195 Apply(@24-195 Var { module_name: "Task", ident: "await" }, [@29-37 Var { module_name: "", ident: "getList" }, @24-195 Closure([@29-37 Identifier { ident: "#!a1" }], @24-195 When(@29-37 Var { module_name: "", ident: "#!a1" }, [WhenBranch { patterns: [@61-63 List([])], value: @97-103 Apply(@97-103 Var { module_name: "Task", ident: "await" }, [@97-103 Apply(@97-103 Var { module_name: "", ident: "line" }, [@98-103 Str(PlainLine("foo"))], Space), @97-103 Closure([@97-103 RecordDestructure([])], @128-139 Apply(@128-139 Var { module_name: "", ident: "line" }, [@134-139 Str(PlainLine("bar"))], Space))], BangSuffix), guard: None }, WhenBranch { patterns: [@160-161 Underscore("")], value: @190-195 Apply(@190-192 Var { module_name: "", ident: "ok" }, [@193-195 Record([])], Space), guard: None }]))], BangSuffix))] }"##,
);
}
@ -862,7 +865,7 @@ mod suffixed_tests {
expect 1 == 2
x!
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-55], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-55 Expect(@30-36 Apply(@32-34 Var { module_name: "Bool", ident: "isEq" }, [@30-31 Num("1"), @35-36 Num("2")], BinOp(Equals)), @53-55 Var { module_name: "", ident: "x" }))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-55], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-55 Expect(@30-36 Apply(@32-34 Var { module_name: "Bool", ident: "isEq" }, [@30-31 Num("1"), @35-36 Num("2")], BinOp(Equals)), @53-55 Var { module_name: "", ident: "x" }))] }"#,
);
}
@ -877,7 +880,7 @@ mod suffixed_tests {
1 ->
c!
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-159], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-159 When(@28-29 Var { module_name: "", ident: "a" }, [WhenBranch { patterns: [@53-54 NumLiteral("0")], value: @82-159 When(@87-88 Var { module_name: "", ident: "b" }, [WhenBranch { patterns: [@120-121 NumLiteral("1")], value: @157-159 Var { module_name: "", ident: "c" }, guard: None }]), guard: None }]))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-159], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-159 When(@28-29 Var { module_name: "", ident: "a" }, [WhenBranch { patterns: [@53-54 NumLiteral("0")], value: @82-159 When(@87-88 Var { module_name: "", ident: "b" }, [WhenBranch { patterns: [@120-121 NumLiteral("1")], value: @157-159 Var { module_name: "", ident: "c" }, guard: None }]), guard: None }]))] }"#,
);
}
@ -897,7 +900,49 @@ mod suffixed_tests {
B ->
d!
"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-266], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @0-266 When(@28-29 Var { module_name: "", ident: "x" }, [WhenBranch { patterns: [@53-54 Tag("A")], value: @82-214 Defs(Defs { tags: [Index(2147483649)], regions: [@86-88], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@82-83 Identifier { ident: "y" }, @86-88 Num("42")), Body(@82-83 Identifier { ident: "y" }, @86-88 Num("42"))] }, @114-214 If([(@117-118 Var { module_name: "", ident: "a" }, @152-154 Var { module_name: "", ident: "b" })], @212-214 Var { module_name: "", ident: "c" })), guard: None }, WhenBranch { patterns: [@235-236 Tag("B")], value: @264-266 Var { module_name: "", ident: "d" }, guard: None }]))] }"#,
r#"Defs { tags: [Index(2147483648)], regions: [@0-266], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-266 When(@28-29 Var { module_name: "", ident: "x" }, [WhenBranch { patterns: [@53-54 Tag("A")], value: @82-214 Defs(Defs { tags: [Index(2147483649)], regions: [@86-88], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@82-83 Identifier { ident: "y" }, @86-88 Num("42")), Body(@82-83 Identifier { ident: "y" }, @86-88 Num("42"))] }, @114-214 If([(@117-118 Var { module_name: "", ident: "a" }, @152-154 Var { module_name: "", ident: "b" })], @212-214 Var { module_name: "", ident: "c" })), guard: None }, WhenBranch { patterns: [@235-236 Tag("B")], value: @264-266 Var { module_name: "", ident: "d" }, guard: None }]))] }"#,
);
}
#[test]
fn dbg_stmt_arg() {
run_test(
r#"
main =
dbg a!
b
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-48], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-48 Apply(@23-48 Var { module_name: "Task", ident: "await" }, [@27-29 Var { module_name: "", ident: "a" }, @23-48 Closure([@27-29 Identifier { ident: "#!a0" }], @23-48 LowLevelDbg(("test.roc:3", " "), @27-29 Apply(@27-29 Var { module_name: "Inspect", ident: "toStr" }, [@27-29 Var { module_name: "", ident: "#!a0" }], Space), @47-48 Var { module_name: "", ident: "b" }))], BangSuffix))] }"##,
)
}
#[test]
fn last_stmt_not_top_level_suffixed() {
run_test(
r#"
main =
x = 42
a b!
"#,
r##"Defs { tags: [Index(2147483648)], regions: [@0-50], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @23-50 Defs(Defs { tags: [Index(2147483650)], regions: [@27-29], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@23-24 Identifier { ident: "x" }, @27-29 Num("42")), Body(@23-24 Identifier { ident: "x" }, @27-29 Num("42")), Body(@23-24 Identifier { ident: "x" }, @27-29 Num("42"))] }, @23-50 Apply(@23-50 Var { module_name: "Task", ident: "await" }, [@48-49 Var { module_name: "", ident: "b" }, @23-50 Closure([@48-49 Identifier { ident: "#!a0" }], @46-50 Apply(@46-47 Var { module_name: "", ident: "a" }, [@48-49 Var { module_name: "", ident: "#!a0" }], Space))], BangSuffix)))] }"##,
);
}
#[test]
fn nested_defs() {
run_test(
indoc!(
r##"
main =
x =
a = b!
c! a
x
"##,
),
r##"Defs { tags: [Index(2147483648)], regions: [@0-49], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@0-4 Identifier { ident: "main" }, @11-49 Defs(Defs { tags: [Index(2147483649)], regions: [@23-42], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@11-12 Identifier { ident: "x" }, @23-42 Defs(Defs { tags: [Index(2147483648)], regions: [@23-29], space_before: [Slice(start = 0, length = 0)], space_after: [Slice(start = 0, length = 0)], spaces: [], type_defs: [], value_defs: [Body(@23-24 Identifier { ident: "a" }, @27-29 TaskAwaitBang(Var { module_name: "", ident: "b" }))] }, @38-42 Apply(@38-39 TaskAwaitBang(Var { module_name: "", ident: "c" }), [@41-42 Var { module_name: "", ident: "a" }], Space))), Body(@11-12 Identifier { ident: "x" }, @27-29 Apply(@27-29 Var { module_name: "Task", ident: "await" }, [@27-29 Var { module_name: "", ident: "b" }, @27-29 Closure([@23-24 Identifier { ident: "a" }], @38-42 Apply(@38-42 Var { module_name: "", ident: "c" }, [@41-42 Var { module_name: "", ident: "a" }], Space))], BangSuffix))] }, @48-49 Var { module_name: "", ident: "x" }))] }"##,
);
}
}

View file

@ -141,7 +141,7 @@ fn headers_from_annotation_help(
constraints.push_type(types, typ)
};
let typ = Loc::at(annotation.region, annotation_index);
headers.insert(rest, typ);
headers.insert(rest.value, typ);
false
} else {
@ -735,7 +735,7 @@ pub fn constrain_pattern(
if let Some((_, Some(rest))) = opt_rest {
state.headers.insert(
*rest,
rest.value,
Loc {
region,
value: *constraints[expected].get_type_ref(),

View file

@ -45,7 +45,6 @@ impl<'a> Formattable for Expr<'a> {
| MalformedClosure
| Tag(_)
| OpaqueRef(_)
| EmptyDefsFinal
| Crash => false,
RecordAccess(inner, _) | TupleAccess(inner, _) | TaskAwaitBang(inner) => {
@ -420,9 +419,6 @@ impl<'a> Formattable for Expr<'a> {
indent,
);
}
EmptyDefsFinal => {
// no need to print anything
}
_ => {
buf.ensure_ends_with_newline();
buf.indent(indent);
@ -439,9 +435,6 @@ impl<'a> Formattable for Expr<'a> {
buf.push(')');
}
}
EmptyDefsFinal => {
// no need to print anything
}
Expect(condition, continuation) => {
fmt_expect(buf, condition, continuation, self.is_multiline(), indent);
}

View file

@ -766,7 +766,6 @@ impl<'a> RemoveSpaces<'a> for StrSegment<'a> {
impl<'a> RemoveSpaces<'a> for Expr<'a> {
fn remove_spaces(&self, arena: &'a Bump) -> Self {
match *self {
Expr::EmptyDefsFinal => Expr::EmptyDefsFinal,
Expr::Float(a) => Expr::Float(a),
Expr::Num(a) => Expr::Num(a),
Expr::NonBase10Int {

View file

@ -1,7 +1,6 @@
use bitvec::vec::BitVec;
use bumpalo::collections::vec::Vec;
use bumpalo::Bump;
use core::panic;
use roc_wasm_module::linking::IndexRelocType;
use roc_error_macros::internal_error;

View file

@ -25,7 +25,6 @@ const MODULES: &[(ModuleId, &str)] = &[
(ModuleId::DECODE, "Decode.roc"),
(ModuleId::HASH, "Hash.roc"),
(ModuleId::INSPECT, "Inspect.roc"),
(ModuleId::JSON, "TotallyNotJson.roc"),
(ModuleId::TASK, "Task.roc"),
];

View file

@ -10502,6 +10502,29 @@ In roc, functions are always written as a lambda, like{}
"###
);
test_report!(
issue_6825,
indoc!(
r#"
when [] is
[] | [_, .. as rest] if List.isEmpty rest -> []
_ -> []
"#
),
@r###"
NAME NOT BOUND IN ALL PATTERNS in /code/proj/Main.roc
`rest` is not bound in all patterns of this `when` branch
5 [] | [_, .. as rest] if List.isEmpty rest -> []
^^^^
Identifiers introduced in a `when` branch must be bound in all patterns
of the branch. Otherwise, the program would crash when it tries to use
an identifier that wasn't bound!
"###
);
test_report!(
flip_flop_catch_all_branches_not_exhaustive,
indoc!(
@ -11379,10 +11402,50 @@ In roc, functions are always written as a lambda, like{}
r#"
app "test" imports [] provides [main] to "./platform"
import TotallyNotJson
ErrDecoder := {} implements [DecoderFormatting {
u8: decodeU8,
u16: decodeU16,
u32: decodeU32,
u64: decodeU64,
u128: decodeU128,
i8: decodeI8,
i16: decodeI16,
i32: decodeI32,
i64: decodeI64,
i128: decodeI128,
f32: decodeF32,
f64: decodeF64,
dec: decodeDec,
bool: decodeBool,
string: decodeString,
list: decodeList,
record: decodeRecord,
tuple: decodeTuple,
}]
decodeU8 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeU16 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeU32 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeU64 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeU128 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeI8 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeI16 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeI32 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeI64 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeI128 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeF32 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeF64 = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeDec = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeBool = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeString = Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeList : Decoder elem (ErrDecoder) -> Decoder (List elem) (ErrDecoder)
decodeList = \_ -> Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeRecord : state, (state, Str -> [Keep (Decoder state (ErrDecoder)), Skip]), (state, (ErrDecoder) -> Result val DecodeError) -> Decoder val (ErrDecoder)
decodeRecord =\_, _, _ -> Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
decodeTuple : state, (state, U64 -> [Next (Decoder state (ErrDecoder)), TooLong]), (state -> Result val DecodeError) -> Decoder val (ErrDecoder)
decodeTuple = \_, _, _ -> Decode.custom \rest, @ErrDecoder {} -> {result: Err TooShort, rest}
main =
decoded = Str.toUtf8 "{\"first\":\"ab\",\"second\":\"cd\"}" |> Decode.fromBytes TotallyNotJson.json
decoded = Str.toUtf8 "{\"first\":\"ab\",\"second\":\"cd\"}" |> Decode.fromBytes (@ErrDecoder {})
when decoded is
Ok rcd -> rcd.first rcd.second
_ -> "something went wrong"
@ -11393,8 +11456,8 @@ In roc, functions are always written as a lambda, like{}
This expression has a type that does not implement the abilities it's expected to:
8 Ok rcd -> rcd.first rcd.second
^^^^^^^^^
48 Ok rcd -> rcd.first rcd.second
^^^^^^^^^
I can't generate an implementation of the `Decoding` ability for

View file

@ -3630,7 +3630,6 @@ fn load_module<'a>(
"Decode", ModuleId::DECODE
"Hash", ModuleId::HASH
"Inspect", ModuleId::INSPECT
"TotallyNotJson", ModuleId::JSON
"Task", ModuleId::TASK
}

View file

@ -25,6 +25,5 @@ pub const BUILTIN_MODULES: &[(ModuleId, &str)] = &[
(ModuleId::DECODE, "Decode"),
(ModuleId::HASH, "Hash"),
(ModuleId::INSPECT, "Inspect"),
(ModuleId::JSON, "TotallyNotJson"),
(ModuleId::TASK, "Task"),
];

View file

@ -91,7 +91,6 @@ impl Default for ModuleCache<'_> {
DECODE,
HASH,
INSPECT,
JSON,
TASK,
}

View file

@ -131,7 +131,6 @@ impl ModuleName {
pub const HASH: &'static str = "Hash";
pub const INSPECT: &'static str = "Inspect";
pub const TASK: &'static str = "Task";
pub const JSON: &'static str = "TotallyNotJson";
pub fn as_str(&self) -> &str {
self.0.as_str()

View file

@ -395,8 +395,7 @@ impl ModuleId {
}
pub fn is_automatically_imported(self) -> bool {
// The deprecated TotallyNotJson module is not automatically imported.
self.is_builtin() && self != ModuleId::JSON
self.is_builtin()
}
}
@ -1738,16 +1737,7 @@ define_builtins! {
32 INSPECT_TO_INSPECTOR: "toInspector"
33 INSPECT_TO_STR: "toStr"
}
15 JSON: "TotallyNotJson" => {
0 JSON_JSON: "TotallyNotJson"
1 JSON_FIELD_NAME_MAPPING: "FieldNameMapping"
2 JSON_NUMBER_STATE: "NumberState"
3 JSON_STRING_STATE: "StringState"
4 JSON_ARRAY_OPENING_STATE: "ArrayOpeningState"
5 JSON_ARRAY_CLOSING_STATE: "ArrayClosingState"
6 JSON_OBJECT_STATE: "ObjectState"
}
16 TASK: "Task" => {
15 TASK: "Task" => {
0 TASK_TASK: "Task" exposed_type=true // the Task.Task opaque type
1 TASK_FOREVER: "forever"
2 TASK_LOOP: "loop"
@ -1765,5 +1755,5 @@ define_builtins! {
14 TASK_RESULT: "result"
}
num_modules: 17 // Keep this count up to date by hand! (TODO: see the mut_map! macro for how we could determine this count correctly in the macro)
num_modules: 16 // Keep this count up to date by hand! (TODO: see the mut_map! macro for how we could determine this count correctly in the macro)
}

View file

@ -1084,7 +1084,9 @@ fn from_can_pattern_help<'a>(
list_layout,
element_layout,
elements: mono_patterns,
opt_rest: patterns.opt_rest,
opt_rest: patterns
.opt_rest
.map(|(i, name)| (i, name.map(|s| s.value))),
})
}
}

View file

@ -462,10 +462,6 @@ pub enum Expr<'a> {
/// Multiple defs in a row
Defs(&'a Defs<'a>, &'a Loc<Expr<'a>>),
/// Used in place of an expression when the final expression is empty
/// This may happen if the final expression is actually a suffixed statement
EmptyDefsFinal,
Backpassing(&'a [Loc<Pattern<'a>>], &'a Loc<Expr<'a>>, &'a Loc<Expr<'a>>),
Expect(&'a Loc<Expr<'a>>, &'a Loc<Expr<'a>>),
Dbg(&'a Loc<Expr<'a>>, &'a Loc<Expr<'a>>),
@ -536,6 +532,19 @@ pub fn split_loc_exprs_around<'a>(
(before, after)
}
/// Checks if the bang suffix is applied only at the top level of expression
pub fn is_top_level_suffixed(expr: &Expr) -> bool {
// TODO: should we check BinOps with pizza where the last expression is TaskAwaitBang?
match expr {
Expr::TaskAwaitBang(..) => true,
Expr::Apply(a, _, _) => is_top_level_suffixed(&a.value),
Expr::SpaceBefore(a, _) => is_top_level_suffixed(a),
Expr::SpaceAfter(a, _) => is_top_level_suffixed(a),
_ => false,
}
}
/// Check if the bang suffix is applied recursevely in expression
pub fn is_expr_suffixed(expr: &Expr) -> bool {
match expr {
// expression without arguments, `read!`
@ -613,7 +622,6 @@ pub fn is_expr_suffixed(expr: &Expr) -> bool {
Expr::Crash => false,
Expr::Tag(_) => false,
Expr::OpaqueRef(_) => false,
Expr::EmptyDefsFinal => false,
Expr::Backpassing(_, _, _) => false, // TODO: we might want to check this?
Expr::Expect(a, b) | Expr::Dbg(a, b) => {
is_expr_suffixed(&a.value) || is_expr_suffixed(&b.value)
@ -975,8 +983,7 @@ impl<'a, 'b> RecursiveValueDefIter<'a, 'b> {
| MalformedIdent(_, _)
| MalformedClosure
| PrecedenceConflict(_)
| MalformedSuffixed(_)
| EmptyDefsFinal => { /* terminal */ }
| MalformedSuffixed(_) => { /* terminal */ }
}
}
}
@ -1183,51 +1190,39 @@ impl<'a> Defs<'a> {
})
}
// We could have a type annotation as the last tag,
// this helper ensures we refer to the last value_def
// and that we remove the correct tag
pub fn last_value_suffixed(&self) -> Option<(Self, &'a Loc<Expr<'a>>)> {
let value_indexes =
self.tags
.clone()
.into_iter()
.enumerate()
.filter_map(|(tag_index, tag)| match tag.split() {
Ok(_) => None,
Err(value_index) => Some((tag_index, value_index.index())),
});
pub fn pop_last_value(&mut self) -> Option<&'a Loc<Expr<'a>>> {
let last_value_suffix = self
.tags
.iter()
.enumerate()
.rev()
.find_map(|(tag_index, tag)| match tag.split() {
Ok(_) => None,
Err(value_index) => match self.value_defs[value_index.index()] {
ValueDef::Body(
Loc {
value: Pattern::RecordDestructure(collection),
..
},
loc_expr,
) if collection.is_empty() => Some((tag_index, loc_expr)),
ValueDef::Stmt(loc_expr) => Some((tag_index, loc_expr)),
_ => None,
},
});
if let Some((tag_index, value_index)) = value_indexes.last() {
match self.value_defs[value_index] {
ValueDef::Body(
Loc {
value: Pattern::RecordDestructure(collection),
..
},
loc_expr,
) if collection.is_empty() && is_expr_suffixed(&loc_expr.value) => {
let mut new_defs = self.clone();
new_defs.remove_value_def(tag_index);
return Some((new_defs, loc_expr));
}
ValueDef::Stmt(loc_expr) if is_expr_suffixed(&loc_expr.value) => {
let mut new_defs = self.clone();
new_defs.remove_value_def(tag_index);
return Some((new_defs, loc_expr));
}
_ => {}
}
if let Some((tag_index, loc_expr)) = last_value_suffix {
self.remove_tag(tag_index);
Some(loc_expr)
} else {
None
}
None
}
pub fn remove_value_def(&mut self, index: usize) {
pub fn remove_tag(&mut self, tag_index: usize) {
match self
.tags
.get(index)
.get(tag_index)
.expect("got an invalid index for Defs")
.split()
{
@ -1260,10 +1255,10 @@ impl<'a> Defs<'a> {
}
}
}
self.tags.remove(index);
self.regions.remove(index);
self.space_after.remove(index);
self.space_before.remove(index);
self.tags.remove(tag_index);
self.regions.remove(tag_index);
self.space_after.remove(tag_index);
self.space_before.remove(tag_index);
}
/// NOTE assumes the def itself is pushed already!
@ -2394,7 +2389,6 @@ impl<'a> Malformed for Expr<'a> {
Tag(_) |
OpaqueRef(_) |
SingleQuote(_) | // This is just a &str - not a bunch of segments
EmptyDefsFinal |
Crash => false,
Str(inner) => inner.is_malformed(),

View file

@ -1,9 +1,9 @@
use crate::ast::{
is_expr_suffixed, AssignedField, Collection, CommentOrNewline, Defs, Expr, ExtractSpaces,
Implements, ImplementsAbilities, ImportAlias, ImportAsKeyword, ImportExposingKeyword,
ImportedModuleName, IngestedFileAnnotation, IngestedFileImport, ModuleImport,
ModuleImportParams, Pattern, RecordBuilderField, Spaceable, Spaced, Spaces, TypeAnnotation,
TypeDef, TypeHeader, ValueDef,
is_expr_suffixed, is_top_level_suffixed, AssignedField, Collection, CommentOrNewline, Defs,
Expr, ExtractSpaces, Implements, ImplementsAbilities, ImportAlias, ImportAsKeyword,
ImportExposingKeyword, ImportedModuleName, IngestedFileAnnotation, IngestedFileImport,
ModuleImport, ModuleImportParams, Pattern, RecordBuilderField, Spaceable, Spaced, Spaces,
TypeAnnotation, TypeDef, TypeHeader, ValueDef,
};
use crate::blankspace::{
space0_after_e, space0_around_e_no_after_indent_check, space0_around_ee, space0_before_e,
@ -384,7 +384,7 @@ fn expr_operator_chain<'a>(options: ExprParseOptions) -> impl Parser<'a, Expr<'a
Ok((progress, expr, new_state)) => {
// We need to check if we have just parsed a suffixed statement,
// if so, this is a defs node.
if is_expr_suffixed(&expr) {
if is_top_level_suffixed(&expr) {
let def_region = Region::new(end, new_state.pos());
let value_def = ValueDef::Stmt(arena.alloc(Loc::at(def_region, expr)));
@ -1154,13 +1154,13 @@ pub fn parse_single_def_assignment<'a>(
// If the expression is actually a suffixed statement, then we need to continue
// to parse the rest of the expression
if crate::ast::is_expr_suffixed(&first_loc_expr.value) {
if is_top_level_suffixed(&first_loc_expr.value) {
let mut defs = Defs::default();
// Take the suffixed value and make it a e.g. Body(`{}=`, Apply(Var(...)))
// we will keep the pattern `def_loc_pattern` for the new Defs
defs.push_value_def(
ValueDef::Stmt(arena.alloc(first_loc_expr)),
Region::span_across(&def_loc_pattern.region, &first_loc_expr.region),
region,
spaces_before_current,
&[],
);
@ -1169,16 +1169,16 @@ pub fn parse_single_def_assignment<'a>(
match parse_defs_expr(
options,
min_indent,
defs.clone(),
defs,
arena,
state_after_first_expression.clone(),
state_after_first_expression,
) {
Ok((progress_after_rest_of_def, expr, state_after_rest_of_def)) => {
let final_loc_expr = arena.alloc(Loc::at(region, expr));
let value_def = ValueDef::Body(arena.alloc(def_loc_pattern), final_loc_expr);
return Ok((
Ok((
progress_after_rest_of_def,
Some(SingleDef {
type_or_value: Either::Second(value_def),
@ -1187,45 +1187,24 @@ pub fn parse_single_def_assignment<'a>(
spaces_after: &[],
}),
state_after_rest_of_def,
));
}
Err(_) => {
// Unable to parse more defs, continue and return the first parsed expression as a stement
let empty_return =
arena.alloc(Loc::at(first_loc_expr.region, Expr::EmptyDefsFinal));
let value_def = ValueDef::Body(
arena.alloc(def_loc_pattern),
arena.alloc(Loc::at(
first_loc_expr.region,
Expr::Defs(arena.alloc(defs), empty_return),
)),
);
return Ok((
progress_after_first,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
spaces_after: &[],
}),
state_after_first_expression,
));
))
}
Err((progress, err)) => Err((progress, err)),
}
} else {
let value_def = ValueDef::Body(arena.alloc(def_loc_pattern), arena.alloc(first_loc_expr));
Ok((
progress_after_first,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
spaces_after: &[],
}),
state_after_first_expression,
))
}
let value_def = ValueDef::Body(arena.alloc(def_loc_pattern), arena.alloc(first_loc_expr));
Ok((
progress_after_first,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
spaces_after: &[],
}),
state_after_first_expression,
))
}
/// e.g. Things that can be on their own line in a def, e.g. `expect`, `expect-fx`, or `dbg`
@ -1368,16 +1347,20 @@ fn parse_defs_end<'a>(
Either::Second(value_def) => {
// If we got a ValueDef::Body, check if a type annotation preceded it.
// If so, we may need to combine them into an AnnotatedBody.
let joined = match value_def {
ValueDef::Body(loc_pattern, loc_def_expr)
if spaces_before_current.len() <= 1 =>
{
let joined_def = match value_def {
ValueDef::Body(loc_pattern, loc_def_expr) => {
let region =
Region::span_across(&loc_pattern.region, &loc_def_expr.region);
let signature_must_match_value = spaces_before_current.len() <= 1;
let value_name = &loc_pattern.value;
match defs.last() {
Some(Err(ValueDef::Annotation(ann_pattern, ann_type))) => {
let (value_def, region) = join_ann_to_body!(
Some(Err(ValueDef::Annotation(ann_pattern, ann_type)))
if signature_must_match_value
|| ann_pattern.value.equivalent(value_name) =>
{
Some(join_ann_to_body!(
arena,
loc_pattern,
loc_def_expr,
@ -1385,21 +1368,19 @@ fn parse_defs_end<'a>(
ann_type,
spaces_before_current,
region
);
defs.replace_with_value_def(
defs.tags.len() - 1,
value_def,
region,
);
true
))
}
Some(Ok(TypeDef::Alias {
header,
ann: ann_type,
})) => {
let (value_def, region) = join_alias_to_body!(
})) if signature_must_match_value
|| header
.vars
.first()
.map(|var| var.value.equivalent(value_name))
.unwrap_or(false) =>
{
Some(join_alias_to_body!(
arena,
loc_pattern,
loc_def_expr,
@ -1407,24 +1388,16 @@ fn parse_defs_end<'a>(
ann_type,
spaces_before_current,
region
);
defs.replace_with_value_def(
defs.tags.len() - 1,
value_def,
region,
);
true
))
}
_ => false,
_ => None,
}
}
_ => false,
_ => None,
};
if !joined {
// the previous and current def can't be joined up
if let Some((joined_def, region)) = joined_def {
defs.replace_with_value_def(defs.tags.len() - 1, joined_def, region);
} else {
defs.push_value_def(
value_def,
region,
@ -1466,48 +1439,31 @@ fn parse_defs_expr<'a>(
Err(bad) => Err(bad),
Ok((_, def_state, state)) => {
// this is no def, because there is no `=` or `:`; parse as an expr
let parse_final_expr = space0_before_e(expr_start(options), EExpr::IndentEnd);
match parse_final_expr.parse(arena, state.clone(), min_indent) {
match space0_before_e(expr_start(options), EExpr::IndentEnd).parse(
arena,
state.clone(),
min_indent,
) {
Err((_, fail)) => {
// If the last def was a suffixed statement, assume this was
// intentional by the application author instead of giving
// an error.
if let Some((new_defs, loc_ret)) = def_state.last_value_suffixed() {
// note we check the tags here and not value_defs, as there may be redundant defs in Defs
let mut local_defs = new_defs.clone();
let last_stmt = ValueDef::Stmt(loc_ret);
local_defs.push_value_def(last_stmt, loc_ret.region, &[], &[]);
//check the length of the defs we would return, if we only have one
// we can just return the expression
// note we use tags here, as we may have redundant defs in Defs
if local_defs
.tags
.iter()
.filter(|tag| tag.split().is_err())
.count()
== 1
{
return Ok((MadeProgress, loc_ret.value, state));
let mut def_state = def_state;
match def_state.pop_last_value() {
Some(loc_ret) => {
// If the poped value was the only item in defs - just return it as an expression
if def_state.is_empty() {
Ok((MadeProgress, loc_ret.value, state))
} else {
Ok((
MadeProgress,
Expr::Defs(arena.alloc(def_state), arena.alloc(loc_ret)),
state,
))
}
}
return Ok((
None => Err((
MadeProgress,
Expr::Defs(
arena.alloc(local_defs),
arena.alloc(Loc::at_zero(Expr::EmptyDefsFinal)),
),
state,
));
EExpr::DefMissingFinalExpr2(arena.alloc(fail), state.pos()),
)),
}
Err((
MadeProgress,
EExpr::DefMissingFinalExpr2(arena.alloc(fail), state.pos()),
))
}
Ok((_, loc_ret, state)) => Ok((
MadeProgress,
@ -2414,8 +2370,7 @@ fn expr_to_pattern_help<'a>(arena: &'a Bump, expr: &Expr<'a>) -> Result<Pattern<
Expr::SpaceBefore(..)
| Expr::SpaceAfter(..)
| Expr::ParensAround(..)
| Expr::RecordBuilder(..)
| Expr::EmptyDefsFinal => unreachable!(),
| Expr::RecordBuilder(..) => unreachable!(),
Expr::Record(fields) => {
let patterns = fields.map_items_result(arena, |loc_assigned_field| {

View file

@ -45,6 +45,7 @@ roc_reporting = { path = "../../reporting" }
roc_solve = { path = "../solve" }
roc_std = { path = "../../roc_std" }
roc_target = { path = "../roc_target" }
roc_test_utils = { path = "../../test_utils"}
roc_types = { path = "../types" }
roc_unify = { path = "../unify" }
roc_wasm_interp = { path = "../../wasm_interp" }

File diff suppressed because it is too large Load diff

View file

@ -21,6 +21,7 @@ roc_mono = { path = "../mono" }
roc_packaging = { path = "../../packaging" }
roc_reporting = { path = "../../reporting" }
roc_target = { path = "../roc_target" }
roc_test_utils = { path = "../../test_utils" }
roc_tracing = { path = "../../tracing" }
test_mono_macros = { path = "../test_mono_macros" }

View file

@ -12,7 +12,7 @@ procedure List.66 (#Attr.2, #Attr.3):
let List.584 : [] = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.92 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
procedure List.92 (#Derived_gen.11, #Derived_gen.12, #Derived_gen.13, #Derived_gen.14, #Derived_gen.15):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
@ -25,7 +25,7 @@ procedure List.92 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_g
dec List.163;
ret List.164;
in
jump List.577 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
jump List.577 #Derived_gen.11 #Derived_gen.12 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.280 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
@ -37,8 +37,8 @@ procedure Num.51 (#Attr.2, #Attr.3):
procedure Test.10 (Test.69, #Attr.12):
let Test.72 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12;
let #Derived_gen.20 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.20 then
let #Derived_gen.18 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.18 then
free #Attr.12;
ret Test.72;
else
@ -52,7 +52,7 @@ procedure Test.10 (Test.69, #Attr.12):
procedure Test.14 (Test.45, #Attr.12):
let Test.55 : {{}, []} = UnionAtIndex (Id 1) (Index 1) #Attr.12;
let Test.54 : [<r>C {}, C *self {{}, []}] = UnionAtIndex (Id 1) (Index 0) #Attr.12;
joinpoint #Derived_gen.18:
joinpoint #Derived_gen.19:
let Test.50 : {} = Struct {};
let Test.51 : U8 = GetTagId Test.54;
joinpoint Test.52 Test.15:
@ -79,14 +79,14 @@ procedure Test.14 (Test.45, #Attr.12):
jump Test.52 Test.53;
in
let #Derived_gen.19 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.19 then
let #Derived_gen.20 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.20 then
free #Attr.12;
jump #Derived_gen.18;
jump #Derived_gen.19;
else
inc Test.54;
decref #Attr.12;
jump #Derived_gen.18;
jump #Derived_gen.19;
procedure Test.20 (Test.21, Test.18):
let Test.23 : [C {}, C []] = CallByName Test.32 Test.21 Test.18;

View file

@ -46,11 +46,11 @@ procedure Str.3 (#Attr.2, #Attr.3):
procedure Test.1 (Test.5):
ret Test.5;
procedure Test.11 (#Derived_gen.3, #Derived_gen.4):
procedure Test.11 (#Derived_gen.10, #Derived_gen.11):
joinpoint Test.27 Test.12 #Attr.12:
let Test.34 : Int1 = UnionAtIndex (Id 2) (Index 1) #Attr.12;
let Test.33 : [<rnw><null>, C *self Int1, C *self Int1] = UnionAtIndex (Id 2) (Index 0) #Attr.12;
joinpoint #Derived_gen.12:
joinpoint #Derived_gen.14:
joinpoint Test.31 Test.29:
let Test.30 : U8 = GetTagId Test.33;
switch Test.30:
@ -77,16 +77,16 @@ procedure Test.11 (#Derived_gen.3, #Derived_gen.4):
jump Test.31 Test.32;
in
let #Derived_gen.13 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.13 then
let #Derived_gen.15 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.15 then
free #Attr.12;
jump #Derived_gen.12;
jump #Derived_gen.14;
else
inc Test.33;
decref #Attr.12;
jump #Derived_gen.12;
jump #Derived_gen.14;
in
jump Test.27 #Derived_gen.3 #Derived_gen.4;
jump Test.27 #Derived_gen.10 #Derived_gen.11;
procedure Test.2 (Test.13):
ret Test.13;
@ -117,7 +117,7 @@ procedure Test.6 (Test.7, Test.8, Test.5):
procedure Test.9 (Test.10, #Attr.12):
let Test.43 : Int1 = UnionAtIndex (Id 1) (Index 1) #Attr.12;
let Test.42 : [<rnw><null>, C *self Int1, C *self Int1] = UnionAtIndex (Id 1) (Index 0) #Attr.12;
joinpoint #Derived_gen.14:
joinpoint #Derived_gen.12:
let Test.39 : U8 = GetTagId Test.42;
joinpoint Test.40 Test.38:
switch Test.43:
@ -145,14 +145,14 @@ procedure Test.9 (Test.10, #Attr.12):
jump Test.40 Test.41;
in
let #Derived_gen.15 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.15 then
let #Derived_gen.13 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.13 then
free #Attr.12;
jump #Derived_gen.14;
jump #Derived_gen.12;
else
inc Test.42;
decref #Attr.12;
jump #Derived_gen.14;
jump #Derived_gen.12;
procedure Test.0 ():
let Test.45 : Int1 = false;

View file

@ -7,7 +7,7 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Derived.1):
let #Derived_gen.8 : Str = CallByName #Derived.5 #Derived.1;
let #Derived_gen.6 : {Str, Str} = Struct {#Derived_gen.7, #Derived_gen.8};
let #Derived_gen.5 : List {Str, Str} = Array [#Derived_gen.6];
let #Derived_gen.4 : List {Str, Str} = CallByName TotallyNotJson.29 #Derived_gen.5;
let #Derived_gen.4 : List {Str, Str} = CallByName Test.21 #Derived_gen.5;
let #Derived_gen.3 : List U8 = CallByName Encode.24 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
@ -17,17 +17,13 @@ procedure #Derived.5 (#Derived.6):
procedure #Derived.7 (#Derived.8, #Derived.9, #Derived.6):
let #Derived_gen.17 : Str = "b";
let #Derived_gen.18 : Str = CallByName TotallyNotJson.25 #Derived.6;
let #Derived_gen.18 : Str = CallByName Test.19 #Derived.6;
let #Derived_gen.16 : {Str, Str} = Struct {#Derived_gen.17, #Derived_gen.18};
let #Derived_gen.15 : List {Str, Str} = Array [#Derived_gen.16];
let #Derived_gen.14 : List {Str, Str} = CallByName TotallyNotJson.29 #Derived_gen.15;
let #Derived_gen.14 : List {Str, Str} = CallByName Test.21 #Derived_gen.15;
let #Derived_gen.13 : List U8 = CallByName Encode.24 #Derived.8 #Derived_gen.14 #Derived.9;
ret #Derived_gen.13;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.24 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.24;
procedure Encode.23 (Encode.98):
ret Encode.98;
@ -48,20 +44,20 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName Test.67 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.115 : List U8 = CallByName #Derived.7 Encode.99 Encode.101 Encode.107;
ret Encode.115;
let Encode.116 : List U8 = CallByName #Derived.7 Encode.99 Encode.101 Encode.107;
ret Encode.116;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.117 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
ret Encode.117;
let Encode.119 : List U8 = CallByName Test.67 Encode.99 Encode.101 Encode.107;
ret Encode.119;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.120 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.120;
let Encode.124 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.124;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
@ -69,229 +65,107 @@ procedure Encode.26 (Encode.105, Encode.106):
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.687 : U64 = 0i64;
let List.688 : U64 = CallByName List.6 List.488;
let List.686 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.687 List.688;
ret List.686;
procedure List.18 (List.160, List.161, List.162):
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.18 (List.160, List.161, List.162):
let List.595 : U64 = 0i64;
let List.596 : U64 = CallByName List.6 List.160;
let List.594 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.595 List.596;
ret List.594;
procedure List.18 (List.160, List.161, List.162):
let List.630 : U64 = 0i64;
let List.631 : U64 = CallByName List.6 List.160;
let List.629 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.630 List.631;
ret List.629;
procedure List.18 (List.160, List.161, List.162):
let List.642 : U64 = 0i64;
let List.643 : U64 = CallByName List.6 List.160;
let List.641 : List U8 = CallByName List.92 List.160 List.161 List.162 List.642 List.643;
ret List.641;
procedure List.26 (List.201, List.202, List.203):
let List.680 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.683 : U8 = 1i64;
let List.684 : U8 = GetTagId List.680;
let List.685 : Int1 = lowlevel Eq List.683 List.684;
if List.685 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.680;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.680;
ret List.205;
let List.601 : U64 = 0i64;
let List.602 : U64 = CallByName List.6 List.160;
let List.600 : List U8 = CallByName List.92 List.160 List.161 List.162 List.601 List.602;
ret List.600;
procedure List.4 (List.124, List.125):
let List.628 : U64 = 1i64;
let List.627 : List U8 = CallByName List.70 List.124 List.628;
let List.626 : List U8 = CallByName List.71 List.627 List.125;
ret List.626;
procedure List.49 (List.420, List.421):
let List.671 : U64 = StructAtIndex 1 List.421;
let List.672 : U64 = StructAtIndex 0 List.421;
let List.670 : List U8 = CallByName List.72 List.420 List.671 List.672;
ret List.670;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.678 List.438:
let List.676 : U64 = 0i64;
let List.675 : {U64, U64} = Struct {List.438, List.676};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.675;
let List.674 : U64 = CallByName Num.75 List.437 List.438;
let List.669 : {U64, U64} = Struct {List.674, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.669;
let List.668 : {List U8, List U8} = Struct {List.439, List.440};
ret List.668;
in
let List.679 : Int1 = CallByName Num.24 List.437 List.436;
if List.679 then
jump List.678 List.436;
else
jump List.678 List.437;
let List.622 : U64 = 1i64;
let List.621 : List U8 = CallByName List.70 List.124 List.622;
let List.620 : List U8 = CallByName List.71 List.621 List.125;
ret List.620;
procedure List.6 (#Attr.2):
let List.608 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.608;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.6 (#Attr.2):
let List.663 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.663;
procedure List.6 (#Attr.2):
let List.665 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.665;
let List.625 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.625;
procedure List.66 (#Attr.2, #Attr.3):
let List.604 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.604;
let List.584 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.66 (#Attr.2, #Attr.3):
let List.639 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.639;
procedure List.66 (#Attr.2, #Attr.3):
let List.651 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.651;
procedure List.68 (#Attr.2):
let List.667 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.667;
let List.610 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.610;
procedure List.70 (#Attr.2, #Attr.3):
let List.613 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.613;
let List.616 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.616;
procedure List.71 (#Attr.2, #Attr.3):
let List.611 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.611;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.673 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.673;
let List.614 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.614;
procedure List.8 (#Attr.2, #Attr.3):
let List.662 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.662;
let List.624 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.624;
procedure List.80 (#Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_gen.30):
joinpoint List.689 List.491 List.492 List.493 List.494 List.495:
let List.691 : Int1 = CallByName Num.22 List.494 List.495;
if List.691 then
let List.700 : U8 = CallByName List.66 List.491 List.494;
let List.692 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.700;
let List.697 : U8 = 1i64;
let List.698 : U8 = GetTagId List.692;
let List.699 : Int1 = lowlevel Eq List.697 List.698;
if List.699 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.692;
let List.695 : U64 = 1i64;
let List.694 : U64 = CallByName Num.51 List.494 List.695;
jump List.689 List.491 List.496 List.493 List.694 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.692;
let List.696 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.696;
else
dec List.491;
let List.690 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.690;
in
jump List.689 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30;
procedure List.92 (#Derived_gen.31, #Derived_gen.32, #Derived_gen.33, #Derived_gen.34, #Derived_gen.35):
joinpoint List.597 List.163 List.164 List.165 List.166 List.167:
let List.599 : Int1 = CallByName Num.22 List.166 List.167;
if List.599 then
let List.603 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.603;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.204 List.164 List.603;
let List.602 : U64 = 1i64;
let List.601 : U64 = CallByName Num.51 List.166 List.602;
jump List.597 List.163 List.168 List.165 List.601 List.167;
procedure List.92 (#Derived_gen.29, #Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_gen.33):
joinpoint List.603 List.163 List.164 List.165 List.166 List.167:
let List.605 : Int1 = CallByName Num.22 List.166 List.167;
if List.605 then
let List.609 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.609;
let List.168 : List U8 = CallByName Test.70 List.164 List.609;
let List.608 : U64 = 1i64;
let List.607 : U64 = CallByName Num.51 List.166 List.608;
jump List.603 List.163 List.168 List.165 List.607 List.167;
else
dec List.163;
ret List.164;
in
jump List.597 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33 #Derived_gen.34 #Derived_gen.35;
jump List.603 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33;
procedure List.92 (#Derived_gen.36, #Derived_gen.37, #Derived_gen.38, #Derived_gen.39, #Derived_gen.40):
joinpoint List.632 List.163 List.164 List.165 List.166 List.167:
let List.634 : Int1 = CallByName Num.22 List.166 List.167;
if List.634 then
let List.638 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.638;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.204 List.164 List.638;
let List.637 : U64 = 1i64;
let List.636 : U64 = CallByName Num.51 List.166 List.637;
jump List.632 List.163 List.168 List.165 List.636 List.167;
procedure List.92 (#Derived_gen.37, #Derived_gen.38, #Derived_gen.39, #Derived_gen.40, #Derived_gen.41):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.70 List.164 List.583;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.632 #Derived_gen.36 #Derived_gen.37 #Derived_gen.38 #Derived_gen.39 #Derived_gen.40;
procedure List.92 (#Derived_gen.47, #Derived_gen.48, #Derived_gen.49, #Derived_gen.50, #Derived_gen.51):
joinpoint List.644 List.163 List.164 List.165 List.166 List.167:
let List.646 : Int1 = CallByName Num.22 List.166 List.167;
if List.646 then
let List.650 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.650;
let List.649 : U64 = 1i64;
let List.648 : U64 = CallByName Num.51 List.166 List.649;
jump List.644 List.163 List.168 List.165 List.648 List.167;
else
dec List.163;
ret List.164;
in
jump List.644 #Derived_gen.47 #Derived_gen.48 #Derived_gen.49 #Derived_gen.50 #Derived_gen.51;
jump List.577 #Derived_gen.37 #Derived_gen.38 #Derived_gen.39 #Derived_gen.40 #Derived_gen.41;
procedure Num.127 (#Attr.2):
let Num.295 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.295;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.301 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.301;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.300 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.300;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.297 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.297;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.302 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.302;
let Num.284 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.284;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.308 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.308;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.310 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.310;
let Num.286 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.286;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.305 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.305;
let Num.285 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.285;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.309 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.309;
procedure Num.96 (#Attr.2):
let Num.283 : Str = lowlevel NumToStr #Attr.2;
ret Num.283;
procedure Str.12 (#Attr.2):
let Str.242 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.242;
let Str.244 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.244;
procedure Str.36 (#Attr.2):
let Str.245 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.245;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
@ -307,324 +181,96 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.55 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.55;
let #Derived_gen.45 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.45;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1060, TotallyNotJson.149):
let TotallyNotJson.1063 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1062 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1063;
ret TotallyNotJson.1062;
procedure Test.19 (Test.55):
let Test.324 : Str = CallByName Encode.23 Test.55;
ret Test.324;
procedure TotallyNotJson.157 (TotallyNotJson.1111, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1111;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1111;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1114 : Int1 = false;
let TotallyNotJson.1113 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1114};
let TotallyNotJson.1112 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1113;
ret TotallyNotJson.1112;
case 92:
let TotallyNotJson.1117 : Int1 = false;
let TotallyNotJson.1116 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1117};
let TotallyNotJson.1115 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1116;
ret TotallyNotJson.1115;
case 47:
let TotallyNotJson.1120 : Int1 = false;
let TotallyNotJson.1119 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1120};
let TotallyNotJson.1118 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1119;
ret TotallyNotJson.1118;
case 8:
let TotallyNotJson.1123 : Int1 = false;
let TotallyNotJson.1122 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1123};
let TotallyNotJson.1121 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1122;
ret TotallyNotJson.1121;
case 12:
let TotallyNotJson.1126 : Int1 = false;
let TotallyNotJson.1125 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1126};
let TotallyNotJson.1124 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1125;
ret TotallyNotJson.1124;
case 10:
let TotallyNotJson.1129 : Int1 = false;
let TotallyNotJson.1128 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1129};
let TotallyNotJson.1127 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1128;
ret TotallyNotJson.1127;
case 13:
let TotallyNotJson.1132 : Int1 = false;
let TotallyNotJson.1131 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1132};
let TotallyNotJson.1130 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1131;
ret TotallyNotJson.1130;
case 9:
let TotallyNotJson.1135 : Int1 = false;
let TotallyNotJson.1134 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1135};
let TotallyNotJson.1133 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1134;
ret TotallyNotJson.1133;
default:
let TotallyNotJson.1139 : U64 = 1i64;
let TotallyNotJson.1138 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1139;
let TotallyNotJson.1137 : {U64, Int1} = Struct {TotallyNotJson.1138, TotallyNotJson.159};
let TotallyNotJson.1136 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1137;
ret TotallyNotJson.1136;
procedure Test.2 ():
let Test.257 : {} = Struct {};
ret Test.257;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1082 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1081 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1082;
ret TotallyNotJson.1081;
procedure Test.21 (Test.66):
let Test.260 : List {Str, Str} = CallByName Encode.23 Test.66;
ret Test.260;
procedure TotallyNotJson.202 (TotallyNotJson.203, TotallyNotJson.976, TotallyNotJson.201):
let TotallyNotJson.1016 : I64 = 123i64;
let TotallyNotJson.1015 : U8 = CallByName Num.127 TotallyNotJson.1016;
let TotallyNotJson.205 : List U8 = CallByName List.4 TotallyNotJson.203 TotallyNotJson.1015;
let TotallyNotJson.1014 : U64 = CallByName List.6 TotallyNotJson.201;
let TotallyNotJson.984 : {List U8, U64} = Struct {TotallyNotJson.205, TotallyNotJson.1014};
let TotallyNotJson.985 : {} = Struct {};
let TotallyNotJson.983 : {List U8, U64} = CallByName List.18 TotallyNotJson.201 TotallyNotJson.984 TotallyNotJson.985;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.981;
ret TotallyNotJson.980;
procedure Test.21 (Test.66):
let Test.292 : List {Str, Str} = CallByName Encode.23 Test.66;
ret Test.292;
procedure TotallyNotJson.202 (TotallyNotJson.203, TotallyNotJson.976, TotallyNotJson.201):
let TotallyNotJson.1057 : I64 = 123i64;
let TotallyNotJson.1056 : U8 = CallByName Num.127 TotallyNotJson.1057;
let TotallyNotJson.205 : List U8 = CallByName List.4 TotallyNotJson.203 TotallyNotJson.1056;
let TotallyNotJson.1055 : U64 = CallByName List.6 TotallyNotJson.201;
let TotallyNotJson.1025 : {List U8, U64} = Struct {TotallyNotJson.205, TotallyNotJson.1055};
let TotallyNotJson.1026 : {} = Struct {};
let TotallyNotJson.1024 : {List U8, U64} = CallByName List.18 TotallyNotJson.201 TotallyNotJson.1025 TotallyNotJson.1026;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.1024;
let TotallyNotJson.1023 : I64 = 125i64;
let TotallyNotJson.1022 : U8 = CallByName Num.127 TotallyNotJson.1023;
let TotallyNotJson.1021 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.1022;
ret TotallyNotJson.1021;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.321 : U8 = CallByName Num.127 Test.49;
let Test.318 : List U8 = CallByName List.4 Test.48 Test.321;
let Test.320 : Str = CallByName Num.96 Test.50;
let Test.319 : List U8 = CallByName Str.12 Test.320;
let Test.316 : List U8 = CallByName List.8 Test.318 Test.319;
let Test.317 : U8 = 32i64;
let Test.315 : List U8 = CallByName List.4 Test.316 Test.317;
ret Test.315;
procedure TotallyNotJson.204 (TotallyNotJson.978, TotallyNotJson.979):
let TotallyNotJson.210 : Str = StructAtIndex 0 TotallyNotJson.979;
let TotallyNotJson.211 : Str = StructAtIndex 1 TotallyNotJson.979;
let TotallyNotJson.208 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.209 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.1011 : List U8 = Array [];
let TotallyNotJson.1012 : {} = CallByName TotallyNotJson.8;
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.1011 TotallyNotJson.211 TotallyNotJson.1012;
let TotallyNotJson.1010 : List U8 = Array [];
let TotallyNotJson.1006 : Int1 = CallByName Bool.11 TotallyNotJson.212 TotallyNotJson.1010;
dec TotallyNotJson.1010;
if TotallyNotJson.1006 then
dec TotallyNotJson.210;
dec TotallyNotJson.212;
let TotallyNotJson.1009 : U64 = 1i64;
let TotallyNotJson.1008 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.1009;
let TotallyNotJson.1007 : {List U8, U64} = Struct {TotallyNotJson.208, TotallyNotJson.1008};
ret TotallyNotJson.1007;
else
let TotallyNotJson.1005 : I64 = 34i64;
let TotallyNotJson.1004 : U8 = CallByName Num.127 TotallyNotJson.1005;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.208 TotallyNotJson.1004;
let TotallyNotJson.1003 : List U8 = CallByName Str.12 TotallyNotJson.210;
let TotallyNotJson.999 : List U8 = CallByName List.8 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 34i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.996 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : I64 = 58i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.995 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.214 : List U8 = CallByName List.8 TotallyNotJson.995 TotallyNotJson.212;
joinpoint TotallyNotJson.990 TotallyNotJson.215:
let TotallyNotJson.988 : U64 = 1i64;
let TotallyNotJson.987 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.988;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.215, TotallyNotJson.987};
ret TotallyNotJson.986;
in
let TotallyNotJson.994 : U64 = 1i64;
let TotallyNotJson.991 : Int1 = CallByName Num.24 TotallyNotJson.209 TotallyNotJson.994;
if TotallyNotJson.991 then
let TotallyNotJson.993 : I64 = 44i64;
let TotallyNotJson.992 : U8 = CallByName Num.127 TotallyNotJson.993;
let TotallyNotJson.989 : List U8 = CallByName List.4 TotallyNotJson.214 TotallyNotJson.992;
jump TotallyNotJson.990 TotallyNotJson.989;
else
jump TotallyNotJson.990 TotallyNotJson.214;
procedure Test.56 (Test.57, Test.274, Test.55):
let Test.313 : I64 = 115i64;
let Test.314 : U64 = CallByName Str.36 Test.55;
let Test.311 : List U8 = CallByName Test.3 Test.57 Test.313 Test.314;
let Test.312 : List U8 = CallByName Str.12 Test.55;
let Test.309 : List U8 = CallByName List.8 Test.311 Test.312;
let Test.310 : U8 = 32i64;
let Test.308 : List U8 = CallByName List.4 Test.309 Test.310;
ret Test.308;
procedure TotallyNotJson.204 (TotallyNotJson.978, TotallyNotJson.979):
let TotallyNotJson.210 : Str = StructAtIndex 0 TotallyNotJson.979;
let TotallyNotJson.211 : Str = StructAtIndex 1 TotallyNotJson.979;
let TotallyNotJson.208 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.209 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.1052 : List U8 = Array [];
let TotallyNotJson.1053 : {} = CallByName TotallyNotJson.8;
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.1052 TotallyNotJson.211 TotallyNotJson.1053;
let TotallyNotJson.1051 : List U8 = Array [];
let TotallyNotJson.1047 : Int1 = CallByName Bool.11 TotallyNotJson.212 TotallyNotJson.1051;
dec TotallyNotJson.1051;
if TotallyNotJson.1047 then
dec TotallyNotJson.210;
dec TotallyNotJson.212;
let TotallyNotJson.1050 : U64 = 1i64;
let TotallyNotJson.1049 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.1050;
let TotallyNotJson.1048 : {List U8, U64} = Struct {TotallyNotJson.208, TotallyNotJson.1049};
ret TotallyNotJson.1048;
else
let TotallyNotJson.1046 : I64 = 34i64;
let TotallyNotJson.1045 : U8 = CallByName Num.127 TotallyNotJson.1046;
let TotallyNotJson.1043 : List U8 = CallByName List.4 TotallyNotJson.208 TotallyNotJson.1045;
let TotallyNotJson.1044 : List U8 = CallByName Str.12 TotallyNotJson.210;
let TotallyNotJson.1040 : List U8 = CallByName List.8 TotallyNotJson.1043 TotallyNotJson.1044;
let TotallyNotJson.1042 : I64 = 34i64;
let TotallyNotJson.1041 : U8 = CallByName Num.127 TotallyNotJson.1042;
let TotallyNotJson.1037 : List U8 = CallByName List.4 TotallyNotJson.1040 TotallyNotJson.1041;
let TotallyNotJson.1039 : I64 = 58i64;
let TotallyNotJson.1038 : U8 = CallByName Num.127 TotallyNotJson.1039;
let TotallyNotJson.1036 : List U8 = CallByName List.4 TotallyNotJson.1037 TotallyNotJson.1038;
let TotallyNotJson.214 : List U8 = CallByName List.8 TotallyNotJson.1036 TotallyNotJson.212;
joinpoint TotallyNotJson.1031 TotallyNotJson.215:
let TotallyNotJson.1029 : U64 = 1i64;
let TotallyNotJson.1028 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.1029;
let TotallyNotJson.1027 : {List U8, U64} = Struct {TotallyNotJson.215, TotallyNotJson.1028};
ret TotallyNotJson.1027;
in
let TotallyNotJson.1035 : U64 = 1i64;
let TotallyNotJson.1032 : Int1 = CallByName Num.24 TotallyNotJson.209 TotallyNotJson.1035;
if TotallyNotJson.1032 then
let TotallyNotJson.1034 : I64 = 44i64;
let TotallyNotJson.1033 : U8 = CallByName Num.127 TotallyNotJson.1034;
let TotallyNotJson.1030 : List U8 = CallByName List.4 TotallyNotJson.214 TotallyNotJson.1033;
jump TotallyNotJson.1031 TotallyNotJson.1030;
else
jump TotallyNotJson.1031 TotallyNotJson.214;
procedure Test.67 (Test.68, Test.262, Test.66):
let Test.290 : I64 = 114i64;
let Test.291 : U64 = CallByName List.6 Test.66;
let Test.69 : List U8 = CallByName Test.3 Test.68 Test.290 Test.291;
let Test.265 : {} = Struct {};
let Test.264 : List U8 = CallByName List.18 Test.66 Test.69 Test.265;
ret Test.264;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1058 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1058;
procedure Test.67 (Test.68, Test.262, Test.66):
let Test.322 : I64 = 114i64;
let Test.323 : U64 = CallByName List.6 Test.66;
let Test.69 : List U8 = CallByName Test.3 Test.68 Test.322 Test.323;
let Test.297 : {} = Struct {};
let Test.296 : List U8 = CallByName List.18 Test.66 Test.69 Test.297;
ret Test.296;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1140 : U64 = 0i64;
let TotallyNotJson.1141 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1140, TotallyNotJson.1141};
let TotallyNotJson.1110 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1110;
let TotallyNotJson.1064 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1108 : Int1 = true;
let TotallyNotJson.1109 : Int1 = lowlevel Eq TotallyNotJson.1108 TotallyNotJson.1064;
if TotallyNotJson.1109 then
let TotallyNotJson.1074 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1075 : U64 = 2i64;
let TotallyNotJson.1073 : U64 = CallByName Num.19 TotallyNotJson.1074 TotallyNotJson.1075;
let TotallyNotJson.1070 : List U8 = CallByName List.68 TotallyNotJson.1073;
let TotallyNotJson.1072 : U8 = 34i64;
let TotallyNotJson.1071 : List U8 = Array [TotallyNotJson.1072];
let TotallyNotJson.1069 : List U8 = CallByName List.8 TotallyNotJson.1070 TotallyNotJson.1071;
let TotallyNotJson.1066 : List U8 = CallByName List.8 TotallyNotJson.1069 TotallyNotJson.153;
let TotallyNotJson.1068 : U8 = 34i64;
let TotallyNotJson.1067 : List U8 = Array [TotallyNotJson.1068];
let TotallyNotJson.1065 : List U8 = CallByName List.8 TotallyNotJson.1066 TotallyNotJson.1067;
ret TotallyNotJson.1065;
else
inc TotallyNotJson.153;
let TotallyNotJson.1107 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1106 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1107;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1106;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1106;
let TotallyNotJson.1104 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1105 : U64 = 120i64;
let TotallyNotJson.1102 : U64 = CallByName Num.21 TotallyNotJson.1104 TotallyNotJson.1105;
let TotallyNotJson.1103 : U64 = 100i64;
let TotallyNotJson.1101 : U64 = CallByName Num.137 TotallyNotJson.1102 TotallyNotJson.1103;
let TotallyNotJson.1098 : List U8 = CallByName List.68 TotallyNotJson.1101;
let TotallyNotJson.1100 : U8 = 34i64;
let TotallyNotJson.1099 : List U8 = Array [TotallyNotJson.1100];
let TotallyNotJson.1097 : List U8 = CallByName List.8 TotallyNotJson.1098 TotallyNotJson.1099;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1097 TotallyNotJson.179;
let TotallyNotJson.1080 : {} = Struct {};
let TotallyNotJson.1077 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1080;
let TotallyNotJson.1079 : U8 = 34i64;
let TotallyNotJson.1078 : List U8 = Array [TotallyNotJson.1079];
let TotallyNotJson.1076 : List U8 = CallByName List.8 TotallyNotJson.1077 TotallyNotJson.1078;
ret TotallyNotJson.1076;
procedure Test.70 (Test.71, Test.266):
let Test.72 : Str = StructAtIndex 0 Test.266;
let Test.73 : Str = StructAtIndex 1 Test.266;
let Test.270 : Str = CallByName Test.19 Test.72;
let Test.271 : {} = Struct {};
let Test.268 : List U8 = CallByName Encode.24 Test.71 Test.270 Test.271;
let Test.269 : {} = Struct {};
let Test.267 : List U8 = CallByName Encode.24 Test.268 Test.73 Test.269;
ret Test.267;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1083 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1083;
case 92:
let TotallyNotJson.1084 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1084;
case 47:
let TotallyNotJson.1085 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1085;
case 8:
let TotallyNotJson.1087 : U8 = 98i64;
let TotallyNotJson.1086 : List U8 = Array [92i64, TotallyNotJson.1087];
ret TotallyNotJson.1086;
case 12:
let TotallyNotJson.1089 : U8 = 102i64;
let TotallyNotJson.1088 : List U8 = Array [92i64, TotallyNotJson.1089];
ret TotallyNotJson.1088;
case 10:
let TotallyNotJson.1091 : U8 = 110i64;
let TotallyNotJson.1090 : List U8 = Array [92i64, TotallyNotJson.1091];
ret TotallyNotJson.1090;
case 13:
let TotallyNotJson.1093 : U8 = 114i64;
let TotallyNotJson.1092 : List U8 = Array [92i64, TotallyNotJson.1093];
ret TotallyNotJson.1092;
case 9:
let TotallyNotJson.1095 : U8 = 114i64;
let TotallyNotJson.1094 : List U8 = Array [92i64, TotallyNotJson.1095];
ret TotallyNotJson.1094;
default:
let TotallyNotJson.1096 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1096;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.1017 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.1017;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.1054 : {} = Struct {};
ret TotallyNotJson.1054;
procedure Test.70 (Test.71, Test.266):
let Test.72 : Str = StructAtIndex 0 Test.266;
let Test.73 : Str = StructAtIndex 1 Test.266;
let Test.302 : Str = CallByName Test.19 Test.72;
let Test.303 : {} = Struct {};
let Test.300 : List U8 = CallByName Encode.24 Test.71 Test.302 Test.303;
let Test.301 : {} = Struct {};
let Test.299 : List U8 = CallByName Encode.24 Test.300 Test.73 Test.301;
ret Test.299;
procedure Test.0 ():
let Test.12 : Str = "bar";
let Test.10 : {} = CallByName TotallyNotJson.8;
let Test.8 : List U8 = CallByName Encode.26 Test.12 Test.10;
let Test.1 : [C {U64, U8}, C Str] = CallByName Str.9 Test.8;
let Test.5 : U8 = 1i64;
let Test.6 : U8 = GetTagId Test.1;
let Test.7 : Int1 = lowlevel Eq Test.5 Test.6;
if Test.7 then
let Test.2 : Str = UnionAtIndex (Id 1) (Index 0) Test.1;
ret Test.2;
let Test.259 : Str = "bar";
let Test.256 : {} = CallByName Test.2;
let Test.254 : List U8 = CallByName Encode.26 Test.259 Test.256;
let Test.209 : [C {U64, U8}, C Str] = CallByName Str.9 Test.254;
let Test.251 : U8 = 1i64;
let Test.252 : U8 = GetTagId Test.209;
let Test.253 : Int1 = lowlevel Eq Test.251 Test.252;
if Test.253 then
let Test.210 : Str = UnionAtIndex (Id 1) (Index 0) Test.209;
ret Test.210;
else
dec Test.1;
let Test.4 : Str = "<bad>";
ret Test.4;
dec Test.209;
let Test.250 : Str = "<bad>";
ret Test.250;

View file

@ -4,17 +4,13 @@ procedure #Derived.0 (#Derived.1):
procedure #Derived.2 (#Derived.3, #Derived.4, #Derived.1):
let #Derived_gen.7 : Str = "a";
let #Derived_gen.8 : Str = CallByName TotallyNotJson.25 #Derived.1;
let #Derived_gen.8 : Str = CallByName Test.19 #Derived.1;
let #Derived_gen.6 : {Str, Str} = Struct {#Derived_gen.7, #Derived_gen.8};
let #Derived_gen.5 : List {Str, Str} = Array [#Derived_gen.6];
let #Derived_gen.4 : List {Str, Str} = CallByName TotallyNotJson.29 #Derived_gen.5;
let #Derived_gen.4 : List {Str, Str} = CallByName Test.21 #Derived_gen.5;
let #Derived_gen.3 : List U8 = CallByName Encode.24 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.23;
procedure Encode.23 (Encode.98):
ret Encode.98;
@ -29,12 +25,12 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName Test.67 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.116 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.116;
let Encode.118 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.118;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
@ -42,200 +38,78 @@ procedure Encode.26 (Encode.105, Encode.106):
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.652 : U64 = 0i64;
let List.653 : U64 = CallByName List.6 List.488;
let List.651 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.652 List.653;
ret List.651;
procedure List.18 (List.160, List.161, List.162):
let List.595 : U64 = 0i64;
let List.596 : U64 = CallByName List.6 List.160;
let List.594 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.595 List.596;
ret List.594;
procedure List.18 (List.160, List.161, List.162):
let List.607 : U64 = 0i64;
let List.608 : U64 = CallByName List.6 List.160;
let List.606 : List U8 = CallByName List.92 List.160 List.161 List.162 List.607 List.608;
ret List.606;
procedure List.26 (List.201, List.202, List.203):
let List.645 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.648 : U8 = 1i64;
let List.649 : U8 = GetTagId List.645;
let List.650 : Int1 = lowlevel Eq List.648 List.649;
if List.650 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.645;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.645;
ret List.205;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.4 (List.124, List.125):
let List.593 : U64 = 1i64;
let List.592 : List U8 = CallByName List.70 List.124 List.593;
let List.591 : List U8 = CallByName List.71 List.592 List.125;
ret List.591;
procedure List.49 (List.420, List.421):
let List.636 : U64 = StructAtIndex 1 List.421;
let List.637 : U64 = StructAtIndex 0 List.421;
let List.635 : List U8 = CallByName List.72 List.420 List.636 List.637;
ret List.635;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.643 List.438:
let List.641 : U64 = 0i64;
let List.640 : {U64, U64} = Struct {List.438, List.641};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.640;
let List.639 : U64 = CallByName Num.75 List.437 List.438;
let List.634 : {U64, U64} = Struct {List.639, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.634;
let List.633 : {List U8, List U8} = Struct {List.439, List.440};
ret List.633;
in
let List.644 : Int1 = CallByName Num.24 List.437 List.436;
if List.644 then
jump List.643 List.436;
else
jump List.643 List.437;
let List.596 : U64 = 1i64;
let List.595 : List U8 = CallByName List.70 List.124 List.596;
let List.594 : List U8 = CallByName List.71 List.595 List.125;
ret List.594;
procedure List.6 (#Attr.2):
let List.628 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.628;
procedure List.6 (#Attr.2):
let List.630 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.630;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.66 (#Attr.2, #Attr.3):
let List.604 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.604;
procedure List.66 (#Attr.2, #Attr.3):
let List.616 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.616;
procedure List.68 (#Attr.2):
let List.632 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.632;
let List.584 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
let List.590 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.590;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.638 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.638;
let List.588 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.588;
procedure List.8 (#Attr.2, #Attr.3):
let List.627 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.627;
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.80 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
joinpoint List.654 List.491 List.492 List.493 List.494 List.495:
let List.656 : Int1 = CallByName Num.22 List.494 List.495;
if List.656 then
let List.665 : U8 = CallByName List.66 List.491 List.494;
let List.657 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.665;
let List.662 : U8 = 1i64;
let List.663 : U8 = GetTagId List.657;
let List.664 : Int1 = lowlevel Eq List.662 List.663;
if List.664 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.657;
let List.660 : U64 = 1i64;
let List.659 : U64 = CallByName Num.51 List.494 List.660;
jump List.654 List.491 List.496 List.493 List.659 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.657;
let List.661 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.661;
else
dec List.491;
let List.655 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.655;
in
jump List.654 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
procedure List.92 (#Derived_gen.24, #Derived_gen.25, #Derived_gen.26, #Derived_gen.27, #Derived_gen.28):
joinpoint List.597 List.163 List.164 List.165 List.166 List.167:
let List.599 : Int1 = CallByName Num.22 List.166 List.167;
if List.599 then
let List.603 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.603;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.204 List.164 List.603;
let List.602 : U64 = 1i64;
let List.601 : U64 = CallByName Num.51 List.166 List.602;
jump List.597 List.163 List.168 List.165 List.601 List.167;
procedure List.92 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.70 List.164 List.583;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.597 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28;
procedure List.92 (#Derived_gen.29, #Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_gen.33):
joinpoint List.609 List.163 List.164 List.165 List.166 List.167:
let List.611 : Int1 = CallByName Num.22 List.166 List.167;
if List.611 then
let List.615 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.615;
let List.614 : U64 = 1i64;
let List.613 : U64 = CallByName Num.51 List.166 List.614;
jump List.609 List.163 List.168 List.165 List.613 List.167;
else
dec List.163;
ret List.164;
in
jump List.609 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33;
jump List.577 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
procedure Num.127 (#Attr.2):
let Num.284 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.284;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.290;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.289;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.286 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.286;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.291;
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.297 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.297;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.299 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.299;
let Num.282 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.282;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.294 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.294;
let Num.281 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.281;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.298 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.298;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
procedure Str.36 (#Attr.2):
let Str.242 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.242;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.239;
@ -250,259 +124,74 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.34 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.34;
let #Derived_gen.24 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.24;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1019, TotallyNotJson.149):
let TotallyNotJson.1022 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1021 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1022;
ret TotallyNotJson.1021;
procedure Test.19 (Test.55):
let Test.291 : Str = CallByName Encode.23 Test.55;
ret Test.291;
procedure TotallyNotJson.157 (TotallyNotJson.1070, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1070;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1070;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1073 : Int1 = false;
let TotallyNotJson.1072 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1073};
let TotallyNotJson.1071 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1072;
ret TotallyNotJson.1071;
case 92:
let TotallyNotJson.1076 : Int1 = false;
let TotallyNotJson.1075 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1076};
let TotallyNotJson.1074 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1075;
ret TotallyNotJson.1074;
case 47:
let TotallyNotJson.1079 : Int1 = false;
let TotallyNotJson.1078 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1079};
let TotallyNotJson.1077 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1078;
ret TotallyNotJson.1077;
case 8:
let TotallyNotJson.1082 : Int1 = false;
let TotallyNotJson.1081 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1082};
let TotallyNotJson.1080 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1081;
ret TotallyNotJson.1080;
case 12:
let TotallyNotJson.1085 : Int1 = false;
let TotallyNotJson.1084 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1085};
let TotallyNotJson.1083 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1084;
ret TotallyNotJson.1083;
case 10:
let TotallyNotJson.1088 : Int1 = false;
let TotallyNotJson.1087 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1088};
let TotallyNotJson.1086 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1087;
ret TotallyNotJson.1086;
case 13:
let TotallyNotJson.1091 : Int1 = false;
let TotallyNotJson.1090 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1091};
let TotallyNotJson.1089 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1090;
ret TotallyNotJson.1089;
case 9:
let TotallyNotJson.1094 : Int1 = false;
let TotallyNotJson.1093 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1094};
let TotallyNotJson.1092 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1093;
ret TotallyNotJson.1092;
default:
let TotallyNotJson.1098 : U64 = 1i64;
let TotallyNotJson.1097 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1098;
let TotallyNotJson.1096 : {U64, Int1} = Struct {TotallyNotJson.1097, TotallyNotJson.159};
let TotallyNotJson.1095 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1096;
ret TotallyNotJson.1095;
procedure Test.2 ():
let Test.257 : {} = Struct {};
ret Test.257;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1041 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1040 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1041;
ret TotallyNotJson.1040;
procedure Test.21 (Test.66):
let Test.259 : List {Str, Str} = CallByName Encode.23 Test.66;
ret Test.259;
procedure TotallyNotJson.202 (TotallyNotJson.203, TotallyNotJson.976, TotallyNotJson.201):
let TotallyNotJson.1016 : I64 = 123i64;
let TotallyNotJson.1015 : U8 = CallByName Num.127 TotallyNotJson.1016;
let TotallyNotJson.205 : List U8 = CallByName List.4 TotallyNotJson.203 TotallyNotJson.1015;
let TotallyNotJson.1014 : U64 = CallByName List.6 TotallyNotJson.201;
let TotallyNotJson.984 : {List U8, U64} = Struct {TotallyNotJson.205, TotallyNotJson.1014};
let TotallyNotJson.985 : {} = Struct {};
let TotallyNotJson.983 : {List U8, U64} = CallByName List.18 TotallyNotJson.201 TotallyNotJson.984 TotallyNotJson.985;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.981;
ret TotallyNotJson.980;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.288 : U8 = CallByName Num.127 Test.49;
let Test.285 : List U8 = CallByName List.4 Test.48 Test.288;
let Test.287 : Str = CallByName Num.96 Test.50;
let Test.286 : List U8 = CallByName Str.12 Test.287;
let Test.283 : List U8 = CallByName List.8 Test.285 Test.286;
let Test.284 : U8 = 32i64;
let Test.282 : List U8 = CallByName List.4 Test.283 Test.284;
ret Test.282;
procedure TotallyNotJson.204 (TotallyNotJson.978, TotallyNotJson.979):
let TotallyNotJson.210 : Str = StructAtIndex 0 TotallyNotJson.979;
let TotallyNotJson.211 : Str = StructAtIndex 1 TotallyNotJson.979;
let TotallyNotJson.208 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.209 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.1011 : List U8 = Array [];
let TotallyNotJson.1012 : {} = CallByName TotallyNotJson.8;
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.1011 TotallyNotJson.211 TotallyNotJson.1012;
let TotallyNotJson.1010 : List U8 = Array [];
let TotallyNotJson.1006 : Int1 = CallByName Bool.11 TotallyNotJson.212 TotallyNotJson.1010;
dec TotallyNotJson.1010;
if TotallyNotJson.1006 then
dec TotallyNotJson.210;
dec TotallyNotJson.212;
let TotallyNotJson.1009 : U64 = 1i64;
let TotallyNotJson.1008 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.1009;
let TotallyNotJson.1007 : {List U8, U64} = Struct {TotallyNotJson.208, TotallyNotJson.1008};
ret TotallyNotJson.1007;
else
let TotallyNotJson.1005 : I64 = 34i64;
let TotallyNotJson.1004 : U8 = CallByName Num.127 TotallyNotJson.1005;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.208 TotallyNotJson.1004;
let TotallyNotJson.1003 : List U8 = CallByName Str.12 TotallyNotJson.210;
let TotallyNotJson.999 : List U8 = CallByName List.8 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 34i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.996 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : I64 = 58i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.995 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.214 : List U8 = CallByName List.8 TotallyNotJson.995 TotallyNotJson.212;
joinpoint TotallyNotJson.990 TotallyNotJson.215:
let TotallyNotJson.988 : U64 = 1i64;
let TotallyNotJson.987 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.988;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.215, TotallyNotJson.987};
ret TotallyNotJson.986;
in
let TotallyNotJson.994 : U64 = 1i64;
let TotallyNotJson.991 : Int1 = CallByName Num.24 TotallyNotJson.209 TotallyNotJson.994;
if TotallyNotJson.991 then
let TotallyNotJson.993 : I64 = 44i64;
let TotallyNotJson.992 : U8 = CallByName Num.127 TotallyNotJson.993;
let TotallyNotJson.989 : List U8 = CallByName List.4 TotallyNotJson.214 TotallyNotJson.992;
jump TotallyNotJson.990 TotallyNotJson.989;
else
jump TotallyNotJson.990 TotallyNotJson.214;
procedure Test.56 (Test.57, Test.273, Test.55):
let Test.280 : I64 = 115i64;
let Test.281 : U64 = CallByName Str.36 Test.55;
let Test.278 : List U8 = CallByName Test.3 Test.57 Test.280 Test.281;
let Test.279 : List U8 = CallByName Str.12 Test.55;
let Test.276 : List U8 = CallByName List.8 Test.278 Test.279;
let Test.277 : U8 = 32i64;
let Test.275 : List U8 = CallByName List.4 Test.276 Test.277;
ret Test.275;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1017 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1017;
procedure Test.67 (Test.68, Test.261, Test.66):
let Test.289 : I64 = 114i64;
let Test.290 : U64 = CallByName List.6 Test.66;
let Test.69 : List U8 = CallByName Test.3 Test.68 Test.289 Test.290;
let Test.264 : {} = Struct {};
let Test.263 : List U8 = CallByName List.18 Test.66 Test.69 Test.264;
ret Test.263;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1099 : U64 = 0i64;
let TotallyNotJson.1100 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1099, TotallyNotJson.1100};
let TotallyNotJson.1069 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1069;
let TotallyNotJson.1023 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1067 : Int1 = true;
let TotallyNotJson.1068 : Int1 = lowlevel Eq TotallyNotJson.1067 TotallyNotJson.1023;
if TotallyNotJson.1068 then
let TotallyNotJson.1033 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1034 : U64 = 2i64;
let TotallyNotJson.1032 : U64 = CallByName Num.19 TotallyNotJson.1033 TotallyNotJson.1034;
let TotallyNotJson.1029 : List U8 = CallByName List.68 TotallyNotJson.1032;
let TotallyNotJson.1031 : U8 = 34i64;
let TotallyNotJson.1030 : List U8 = Array [TotallyNotJson.1031];
let TotallyNotJson.1028 : List U8 = CallByName List.8 TotallyNotJson.1029 TotallyNotJson.1030;
let TotallyNotJson.1025 : List U8 = CallByName List.8 TotallyNotJson.1028 TotallyNotJson.153;
let TotallyNotJson.1027 : U8 = 34i64;
let TotallyNotJson.1026 : List U8 = Array [TotallyNotJson.1027];
let TotallyNotJson.1024 : List U8 = CallByName List.8 TotallyNotJson.1025 TotallyNotJson.1026;
ret TotallyNotJson.1024;
else
inc TotallyNotJson.153;
let TotallyNotJson.1066 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1065 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1066;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1065;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1065;
let TotallyNotJson.1063 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1064 : U64 = 120i64;
let TotallyNotJson.1061 : U64 = CallByName Num.21 TotallyNotJson.1063 TotallyNotJson.1064;
let TotallyNotJson.1062 : U64 = 100i64;
let TotallyNotJson.1060 : U64 = CallByName Num.137 TotallyNotJson.1061 TotallyNotJson.1062;
let TotallyNotJson.1057 : List U8 = CallByName List.68 TotallyNotJson.1060;
let TotallyNotJson.1059 : U8 = 34i64;
let TotallyNotJson.1058 : List U8 = Array [TotallyNotJson.1059];
let TotallyNotJson.1056 : List U8 = CallByName List.8 TotallyNotJson.1057 TotallyNotJson.1058;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1056 TotallyNotJson.179;
let TotallyNotJson.1039 : {} = Struct {};
let TotallyNotJson.1036 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1039;
let TotallyNotJson.1038 : U8 = 34i64;
let TotallyNotJson.1037 : List U8 = Array [TotallyNotJson.1038];
let TotallyNotJson.1035 : List U8 = CallByName List.8 TotallyNotJson.1036 TotallyNotJson.1037;
ret TotallyNotJson.1035;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1042 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1042;
case 92:
let TotallyNotJson.1043 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1043;
case 47:
let TotallyNotJson.1044 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1044;
case 8:
let TotallyNotJson.1046 : U8 = 98i64;
let TotallyNotJson.1045 : List U8 = Array [92i64, TotallyNotJson.1046];
ret TotallyNotJson.1045;
case 12:
let TotallyNotJson.1048 : U8 = 102i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 10:
let TotallyNotJson.1050 : U8 = 110i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 13:
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
case 9:
let TotallyNotJson.1054 : U8 = 114i64;
let TotallyNotJson.1053 : List U8 = Array [92i64, TotallyNotJson.1054];
ret TotallyNotJson.1053;
default:
let TotallyNotJson.1055 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1055;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.1013 : {} = Struct {};
ret TotallyNotJson.1013;
procedure Test.70 (Test.71, Test.265):
let Test.72 : Str = StructAtIndex 0 Test.265;
let Test.73 : Str = StructAtIndex 1 Test.265;
let Test.269 : Str = CallByName Test.19 Test.72;
let Test.270 : {} = Struct {};
let Test.267 : List U8 = CallByName Encode.24 Test.71 Test.269 Test.270;
let Test.268 : {} = Struct {};
let Test.266 : List U8 = CallByName Encode.24 Test.267 Test.73 Test.268;
ret Test.266;
procedure Test.0 ():
let Test.11 : Str = "foo";
let Test.10 : {} = CallByName TotallyNotJson.8;
let Test.8 : List U8 = CallByName Encode.26 Test.11 Test.10;
let Test.1 : [C {U64, U8}, C Str] = CallByName Str.9 Test.8;
let Test.5 : U8 = 1i64;
let Test.6 : U8 = GetTagId Test.1;
let Test.7 : Int1 = lowlevel Eq Test.5 Test.6;
if Test.7 then
let Test.2 : Str = UnionAtIndex (Id 1) (Index 0) Test.1;
ret Test.2;
let Test.258 : Str = "foo";
let Test.256 : {} = CallByName Test.2;
let Test.254 : List U8 = CallByName Encode.26 Test.258 Test.256;
let Test.209 : [C {U64, U8}, C Str] = CallByName Str.9 Test.254;
let Test.251 : U8 = 1i64;
let Test.252 : U8 = GetTagId Test.209;
let Test.253 : Int1 = lowlevel Eq Test.251 Test.252;
if Test.253 then
let Test.210 : Str = UnionAtIndex (Id 1) (Index 0) Test.209;
ret Test.210;
else
dec Test.1;
let Test.4 : Str = "<bad>";
ret Test.4;
dec Test.209;
let Test.250 : Str = "<bad>";
ret Test.250;

View file

@ -6,22 +6,18 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Derived.1):
let #Derived_gen.11 : Str = "a";
let #Derived_gen.13 : Str = StructAtIndex 0 #Derived.1;
inc #Derived_gen.13;
let #Derived_gen.12 : Str = CallByName TotallyNotJson.25 #Derived_gen.13;
let #Derived_gen.12 : Str = CallByName Test.19 #Derived_gen.13;
let #Derived_gen.6 : {Str, Str} = Struct {#Derived_gen.11, #Derived_gen.12};
let #Derived_gen.8 : Str = "b";
let #Derived_gen.10 : Str = StructAtIndex 1 #Derived.1;
dec #Derived_gen.13;
let #Derived_gen.9 : Str = CallByName TotallyNotJson.25 #Derived_gen.10;
let #Derived_gen.9 : Str = CallByName Test.19 #Derived_gen.10;
let #Derived_gen.7 : {Str, Str} = Struct {#Derived_gen.8, #Derived_gen.9};
let #Derived_gen.5 : List {Str, Str} = Array [#Derived_gen.6, #Derived_gen.7];
let #Derived_gen.4 : List {Str, Str} = CallByName TotallyNotJson.29 #Derived_gen.5;
let #Derived_gen.4 : List {Str, Str} = CallByName Test.21 #Derived_gen.5;
let #Derived_gen.3 : List U8 = CallByName Encode.24 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.23;
procedure Encode.23 (Encode.98):
ret Encode.98;
@ -36,12 +32,12 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName Test.67 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.117 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.117;
let Encode.119 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.119;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
@ -49,200 +45,78 @@ procedure Encode.26 (Encode.105, Encode.106):
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.652 : U64 = 0i64;
let List.653 : U64 = CallByName List.6 List.488;
let List.651 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.652 List.653;
ret List.651;
procedure List.18 (List.160, List.161, List.162):
let List.595 : U64 = 0i64;
let List.596 : U64 = CallByName List.6 List.160;
let List.594 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.595 List.596;
ret List.594;
procedure List.18 (List.160, List.161, List.162):
let List.607 : U64 = 0i64;
let List.608 : U64 = CallByName List.6 List.160;
let List.606 : List U8 = CallByName List.92 List.160 List.161 List.162 List.607 List.608;
ret List.606;
procedure List.26 (List.201, List.202, List.203):
let List.645 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.648 : U8 = 1i64;
let List.649 : U8 = GetTagId List.645;
let List.650 : Int1 = lowlevel Eq List.648 List.649;
if List.650 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.645;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.645;
ret List.205;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.4 (List.124, List.125):
let List.593 : U64 = 1i64;
let List.592 : List U8 = CallByName List.70 List.124 List.593;
let List.591 : List U8 = CallByName List.71 List.592 List.125;
ret List.591;
procedure List.49 (List.420, List.421):
let List.636 : U64 = StructAtIndex 1 List.421;
let List.637 : U64 = StructAtIndex 0 List.421;
let List.635 : List U8 = CallByName List.72 List.420 List.636 List.637;
ret List.635;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.643 List.438:
let List.641 : U64 = 0i64;
let List.640 : {U64, U64} = Struct {List.438, List.641};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.640;
let List.639 : U64 = CallByName Num.75 List.437 List.438;
let List.634 : {U64, U64} = Struct {List.639, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.634;
let List.633 : {List U8, List U8} = Struct {List.439, List.440};
ret List.633;
in
let List.644 : Int1 = CallByName Num.24 List.437 List.436;
if List.644 then
jump List.643 List.436;
else
jump List.643 List.437;
let List.596 : U64 = 1i64;
let List.595 : List U8 = CallByName List.70 List.124 List.596;
let List.594 : List U8 = CallByName List.71 List.595 List.125;
ret List.594;
procedure List.6 (#Attr.2):
let List.628 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.628;
procedure List.6 (#Attr.2):
let List.630 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.630;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.66 (#Attr.2, #Attr.3):
let List.604 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.604;
procedure List.66 (#Attr.2, #Attr.3):
let List.616 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.616;
procedure List.68 (#Attr.2):
let List.632 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.632;
let List.584 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
let List.590 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.590;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.638 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.638;
let List.588 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.588;
procedure List.8 (#Attr.2, #Attr.3):
let List.627 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.627;
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.80 (#Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20, #Derived_gen.21):
joinpoint List.654 List.491 List.492 List.493 List.494 List.495:
let List.656 : Int1 = CallByName Num.22 List.494 List.495;
if List.656 then
let List.665 : U8 = CallByName List.66 List.491 List.494;
let List.657 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.665;
let List.662 : U8 = 1i64;
let List.663 : U8 = GetTagId List.657;
let List.664 : Int1 = lowlevel Eq List.662 List.663;
if List.664 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.657;
let List.660 : U64 = 1i64;
let List.659 : U64 = CallByName Num.51 List.494 List.660;
jump List.654 List.491 List.496 List.493 List.659 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.657;
let List.661 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.661;
else
dec List.491;
let List.655 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.655;
in
jump List.654 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21;
procedure List.92 (#Derived_gen.28, #Derived_gen.29, #Derived_gen.30, #Derived_gen.31, #Derived_gen.32):
joinpoint List.597 List.163 List.164 List.165 List.166 List.167:
let List.599 : Int1 = CallByName Num.22 List.166 List.167;
if List.599 then
let List.603 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.603;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.204 List.164 List.603;
let List.602 : U64 = 1i64;
let List.601 : U64 = CallByName Num.51 List.166 List.602;
jump List.597 List.163 List.168 List.165 List.601 List.167;
procedure List.92 (#Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20, #Derived_gen.21):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : {Str, Str} = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.70 List.164 List.583;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.597 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32;
procedure List.92 (#Derived_gen.33, #Derived_gen.34, #Derived_gen.35, #Derived_gen.36, #Derived_gen.37):
joinpoint List.609 List.163 List.164 List.165 List.166 List.167:
let List.611 : Int1 = CallByName Num.22 List.166 List.167;
if List.611 then
let List.615 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.615;
let List.614 : U64 = 1i64;
let List.613 : U64 = CallByName Num.51 List.166 List.614;
jump List.609 List.163 List.168 List.165 List.613 List.167;
else
dec List.163;
ret List.164;
in
jump List.609 #Derived_gen.33 #Derived_gen.34 #Derived_gen.35 #Derived_gen.36 #Derived_gen.37;
jump List.577 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21;
procedure Num.127 (#Attr.2):
let Num.284 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.284;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.290;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.289;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.286 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.286;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.291;
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.297 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.297;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.299 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.299;
let Num.282 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.282;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.294 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.294;
let Num.281 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.281;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.298 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.298;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
procedure Str.36 (#Attr.2):
let Str.242 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.242;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.239;
@ -257,261 +131,76 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.38 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.38;
let #Derived_gen.28 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.28;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1019, TotallyNotJson.149):
let TotallyNotJson.1022 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1021 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1022;
ret TotallyNotJson.1021;
procedure Test.19 (Test.55):
let Test.295 : Str = CallByName Encode.23 Test.55;
ret Test.295;
procedure TotallyNotJson.157 (TotallyNotJson.1070, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1070;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1070;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1073 : Int1 = false;
let TotallyNotJson.1072 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1073};
let TotallyNotJson.1071 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1072;
ret TotallyNotJson.1071;
case 92:
let TotallyNotJson.1076 : Int1 = false;
let TotallyNotJson.1075 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1076};
let TotallyNotJson.1074 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1075;
ret TotallyNotJson.1074;
case 47:
let TotallyNotJson.1079 : Int1 = false;
let TotallyNotJson.1078 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1079};
let TotallyNotJson.1077 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1078;
ret TotallyNotJson.1077;
case 8:
let TotallyNotJson.1082 : Int1 = false;
let TotallyNotJson.1081 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1082};
let TotallyNotJson.1080 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1081;
ret TotallyNotJson.1080;
case 12:
let TotallyNotJson.1085 : Int1 = false;
let TotallyNotJson.1084 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1085};
let TotallyNotJson.1083 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1084;
ret TotallyNotJson.1083;
case 10:
let TotallyNotJson.1088 : Int1 = false;
let TotallyNotJson.1087 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1088};
let TotallyNotJson.1086 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1087;
ret TotallyNotJson.1086;
case 13:
let TotallyNotJson.1091 : Int1 = false;
let TotallyNotJson.1090 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1091};
let TotallyNotJson.1089 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1090;
ret TotallyNotJson.1089;
case 9:
let TotallyNotJson.1094 : Int1 = false;
let TotallyNotJson.1093 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1094};
let TotallyNotJson.1092 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1093;
ret TotallyNotJson.1092;
default:
let TotallyNotJson.1098 : U64 = 1i64;
let TotallyNotJson.1097 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1098;
let TotallyNotJson.1096 : {U64, Int1} = Struct {TotallyNotJson.1097, TotallyNotJson.159};
let TotallyNotJson.1095 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1096;
ret TotallyNotJson.1095;
procedure Test.2 ():
let Test.257 : {} = Struct {};
ret Test.257;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1041 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1040 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1041;
ret TotallyNotJson.1040;
procedure Test.21 (Test.66):
let Test.260 : List {Str, Str} = CallByName Encode.23 Test.66;
ret Test.260;
procedure TotallyNotJson.202 (TotallyNotJson.203, TotallyNotJson.976, TotallyNotJson.201):
let TotallyNotJson.1016 : I64 = 123i64;
let TotallyNotJson.1015 : U8 = CallByName Num.127 TotallyNotJson.1016;
let TotallyNotJson.205 : List U8 = CallByName List.4 TotallyNotJson.203 TotallyNotJson.1015;
let TotallyNotJson.1014 : U64 = CallByName List.6 TotallyNotJson.201;
let TotallyNotJson.984 : {List U8, U64} = Struct {TotallyNotJson.205, TotallyNotJson.1014};
let TotallyNotJson.985 : {} = Struct {};
let TotallyNotJson.983 : {List U8, U64} = CallByName List.18 TotallyNotJson.201 TotallyNotJson.984 TotallyNotJson.985;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.981;
ret TotallyNotJson.980;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.289 : U8 = CallByName Num.127 Test.49;
let Test.286 : List U8 = CallByName List.4 Test.48 Test.289;
let Test.288 : Str = CallByName Num.96 Test.50;
let Test.287 : List U8 = CallByName Str.12 Test.288;
let Test.284 : List U8 = CallByName List.8 Test.286 Test.287;
let Test.285 : U8 = 32i64;
let Test.283 : List U8 = CallByName List.4 Test.284 Test.285;
ret Test.283;
procedure TotallyNotJson.204 (TotallyNotJson.978, TotallyNotJson.979):
let TotallyNotJson.210 : Str = StructAtIndex 0 TotallyNotJson.979;
let TotallyNotJson.211 : Str = StructAtIndex 1 TotallyNotJson.979;
let TotallyNotJson.208 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.209 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.1011 : List U8 = Array [];
let TotallyNotJson.1012 : {} = CallByName TotallyNotJson.8;
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.1011 TotallyNotJson.211 TotallyNotJson.1012;
let TotallyNotJson.1010 : List U8 = Array [];
let TotallyNotJson.1006 : Int1 = CallByName Bool.11 TotallyNotJson.212 TotallyNotJson.1010;
dec TotallyNotJson.1010;
if TotallyNotJson.1006 then
dec TotallyNotJson.210;
dec TotallyNotJson.212;
let TotallyNotJson.1009 : U64 = 1i64;
let TotallyNotJson.1008 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.1009;
let TotallyNotJson.1007 : {List U8, U64} = Struct {TotallyNotJson.208, TotallyNotJson.1008};
ret TotallyNotJson.1007;
else
let TotallyNotJson.1005 : I64 = 34i64;
let TotallyNotJson.1004 : U8 = CallByName Num.127 TotallyNotJson.1005;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.208 TotallyNotJson.1004;
let TotallyNotJson.1003 : List U8 = CallByName Str.12 TotallyNotJson.210;
let TotallyNotJson.999 : List U8 = CallByName List.8 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 34i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.996 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : I64 = 58i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.995 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.214 : List U8 = CallByName List.8 TotallyNotJson.995 TotallyNotJson.212;
joinpoint TotallyNotJson.990 TotallyNotJson.215:
let TotallyNotJson.988 : U64 = 1i64;
let TotallyNotJson.987 : U64 = CallByName Num.20 TotallyNotJson.209 TotallyNotJson.988;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.215, TotallyNotJson.987};
ret TotallyNotJson.986;
in
let TotallyNotJson.994 : U64 = 1i64;
let TotallyNotJson.991 : Int1 = CallByName Num.24 TotallyNotJson.209 TotallyNotJson.994;
if TotallyNotJson.991 then
let TotallyNotJson.993 : I64 = 44i64;
let TotallyNotJson.992 : U8 = CallByName Num.127 TotallyNotJson.993;
let TotallyNotJson.989 : List U8 = CallByName List.4 TotallyNotJson.214 TotallyNotJson.992;
jump TotallyNotJson.990 TotallyNotJson.989;
else
jump TotallyNotJson.990 TotallyNotJson.214;
procedure Test.56 (Test.57, Test.274, Test.55):
let Test.281 : I64 = 115i64;
let Test.282 : U64 = CallByName Str.36 Test.55;
let Test.279 : List U8 = CallByName Test.3 Test.57 Test.281 Test.282;
let Test.280 : List U8 = CallByName Str.12 Test.55;
let Test.277 : List U8 = CallByName List.8 Test.279 Test.280;
let Test.278 : U8 = 32i64;
let Test.276 : List U8 = CallByName List.4 Test.277 Test.278;
ret Test.276;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1101 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1101;
procedure Test.67 (Test.68, Test.262, Test.66):
let Test.290 : I64 = 114i64;
let Test.291 : U64 = CallByName List.6 Test.66;
let Test.69 : List U8 = CallByName Test.3 Test.68 Test.290 Test.291;
let Test.265 : {} = Struct {};
let Test.264 : List U8 = CallByName List.18 Test.66 Test.69 Test.265;
ret Test.264;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1099 : U64 = 0i64;
let TotallyNotJson.1100 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1099, TotallyNotJson.1100};
let TotallyNotJson.1069 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1069;
let TotallyNotJson.1023 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1067 : Int1 = true;
let TotallyNotJson.1068 : Int1 = lowlevel Eq TotallyNotJson.1067 TotallyNotJson.1023;
if TotallyNotJson.1068 then
let TotallyNotJson.1033 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1034 : U64 = 2i64;
let TotallyNotJson.1032 : U64 = CallByName Num.19 TotallyNotJson.1033 TotallyNotJson.1034;
let TotallyNotJson.1029 : List U8 = CallByName List.68 TotallyNotJson.1032;
let TotallyNotJson.1031 : U8 = 34i64;
let TotallyNotJson.1030 : List U8 = Array [TotallyNotJson.1031];
let TotallyNotJson.1028 : List U8 = CallByName List.8 TotallyNotJson.1029 TotallyNotJson.1030;
let TotallyNotJson.1025 : List U8 = CallByName List.8 TotallyNotJson.1028 TotallyNotJson.153;
let TotallyNotJson.1027 : U8 = 34i64;
let TotallyNotJson.1026 : List U8 = Array [TotallyNotJson.1027];
let TotallyNotJson.1024 : List U8 = CallByName List.8 TotallyNotJson.1025 TotallyNotJson.1026;
ret TotallyNotJson.1024;
else
inc TotallyNotJson.153;
let TotallyNotJson.1066 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1065 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1066;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1065;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1065;
let TotallyNotJson.1063 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1064 : U64 = 120i64;
let TotallyNotJson.1061 : U64 = CallByName Num.21 TotallyNotJson.1063 TotallyNotJson.1064;
let TotallyNotJson.1062 : U64 = 100i64;
let TotallyNotJson.1060 : U64 = CallByName Num.137 TotallyNotJson.1061 TotallyNotJson.1062;
let TotallyNotJson.1057 : List U8 = CallByName List.68 TotallyNotJson.1060;
let TotallyNotJson.1059 : U8 = 34i64;
let TotallyNotJson.1058 : List U8 = Array [TotallyNotJson.1059];
let TotallyNotJson.1056 : List U8 = CallByName List.8 TotallyNotJson.1057 TotallyNotJson.1058;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1056 TotallyNotJson.179;
let TotallyNotJson.1039 : {} = Struct {};
let TotallyNotJson.1036 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1039;
let TotallyNotJson.1038 : U8 = 34i64;
let TotallyNotJson.1037 : List U8 = Array [TotallyNotJson.1038];
let TotallyNotJson.1035 : List U8 = CallByName List.8 TotallyNotJson.1036 TotallyNotJson.1037;
ret TotallyNotJson.1035;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1042 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1042;
case 92:
let TotallyNotJson.1043 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1043;
case 47:
let TotallyNotJson.1044 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1044;
case 8:
let TotallyNotJson.1046 : U8 = 98i64;
let TotallyNotJson.1045 : List U8 = Array [92i64, TotallyNotJson.1046];
ret TotallyNotJson.1045;
case 12:
let TotallyNotJson.1048 : U8 = 102i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 10:
let TotallyNotJson.1050 : U8 = 110i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 13:
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
case 9:
let TotallyNotJson.1054 : U8 = 114i64;
let TotallyNotJson.1053 : List U8 = Array [92i64, TotallyNotJson.1054];
ret TotallyNotJson.1053;
default:
let TotallyNotJson.1055 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1055;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.1013 : {} = Struct {};
ret TotallyNotJson.1013;
procedure Test.70 (Test.71, Test.266):
let Test.72 : Str = StructAtIndex 0 Test.266;
let Test.73 : Str = StructAtIndex 1 Test.266;
let Test.270 : Str = CallByName Test.19 Test.72;
let Test.271 : {} = Struct {};
let Test.268 : List U8 = CallByName Encode.24 Test.71 Test.270 Test.271;
let Test.269 : {} = Struct {};
let Test.267 : List U8 = CallByName Encode.24 Test.268 Test.73 Test.269;
ret Test.267;
procedure Test.0 ():
let Test.11 : Str = "foo";
let Test.12 : Str = "bar";
let Test.9 : {Str, Str} = Struct {Test.11, Test.12};
let Test.10 : {} = CallByName TotallyNotJson.8;
let Test.8 : List U8 = CallByName Encode.26 Test.9 Test.10;
let Test.1 : [C {U64, U8}, C Str] = CallByName Str.9 Test.8;
let Test.5 : U8 = 1i64;
let Test.6 : U8 = GetTagId Test.1;
let Test.7 : Int1 = lowlevel Eq Test.5 Test.6;
if Test.7 then
let Test.2 : Str = UnionAtIndex (Id 1) (Index 0) Test.1;
ret Test.2;
let Test.258 : Str = "foo";
let Test.259 : Str = "bar";
let Test.255 : {Str, Str} = Struct {Test.258, Test.259};
let Test.256 : {} = CallByName Test.2;
let Test.254 : List U8 = CallByName Encode.26 Test.255 Test.256;
let Test.209 : [C {U64, U8}, C Str] = CallByName Str.9 Test.254;
let Test.251 : U8 = 1i64;
let Test.252 : U8 = GetTagId Test.209;
let Test.253 : Int1 = lowlevel Eq Test.251 Test.252;
if Test.253 then
let Test.210 : Str = UnionAtIndex (Id 1) (Index 0) Test.209;
ret Test.210;
else
dec Test.1;
let Test.4 : Str = "<bad>";
ret Test.4;
dec Test.209;
let Test.250 : Str = "<bad>";
ret Test.250;

View file

@ -2,156 +2,48 @@ procedure Encode.23 (Encode.98):
ret Encode.98;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.111 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
let Encode.111 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.111;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
let Encode.110 : Str = CallByName TotallyNotJson.25 Encode.105;
let Encode.110 : Str = CallByName Test.19 Encode.105;
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.616 : U64 = 0i64;
let List.617 : U64 = CallByName List.6 List.488;
let List.615 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.616 List.617;
ret List.615;
procedure List.4 (List.124, List.125):
let List.584 : U64 = 1i64;
let List.583 : List U8 = CallByName List.70 List.124 List.584;
let List.582 : List U8 = CallByName List.71 List.583 List.125;
ret List.582;
procedure List.18 (List.160, List.161, List.162):
let List.587 : U64 = 0i64;
let List.588 : U64 = CallByName List.6 List.160;
let List.586 : List U8 = CallByName List.92 List.160 List.161 List.162 List.587 List.588;
ret List.586;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
procedure List.26 (List.201, List.202, List.203):
let List.609 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.612 : U8 = 1i64;
let List.613 : U8 = GetTagId List.609;
let List.614 : Int1 = lowlevel Eq List.612 List.613;
if List.614 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.609;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.609;
ret List.205;
procedure List.49 (List.420, List.421):
let List.600 : U64 = StructAtIndex 1 List.421;
let List.601 : U64 = StructAtIndex 0 List.421;
let List.599 : List U8 = CallByName List.72 List.420 List.600 List.601;
ret List.599;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.607 List.438:
let List.605 : U64 = 0i64;
let List.604 : {U64, U64} = Struct {List.438, List.605};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.604;
let List.603 : U64 = CallByName Num.75 List.437 List.438;
let List.598 : {U64, U64} = Struct {List.603, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.598;
let List.597 : {List U8, List U8} = Struct {List.439, List.440};
ret List.597;
in
let List.608 : Int1 = CallByName Num.24 List.437 List.436;
if List.608 then
jump List.607 List.436;
else
jump List.607 List.437;
procedure List.6 (#Attr.2):
let List.585 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.585;
procedure List.66 (#Attr.2, #Attr.3):
let List.596 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.596;
procedure List.68 (#Attr.2):
let List.583 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.583;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.602 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.602;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.8 (#Attr.2, #Attr.3):
let List.581 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.581;
let List.586 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.586;
procedure List.80 (#Derived_gen.0, #Derived_gen.1, #Derived_gen.2, #Derived_gen.3, #Derived_gen.4):
joinpoint List.618 List.491 List.492 List.493 List.494 List.495:
let List.620 : Int1 = CallByName Num.22 List.494 List.495;
if List.620 then
let List.629 : U8 = CallByName List.66 List.491 List.494;
let List.621 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.629;
let List.626 : U8 = 1i64;
let List.627 : U8 = GetTagId List.621;
let List.628 : Int1 = lowlevel Eq List.626 List.627;
if List.628 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.621;
let List.624 : U64 = 1i64;
let List.623 : U64 = CallByName Num.51 List.494 List.624;
jump List.618 List.491 List.496 List.493 List.623 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.621;
let List.625 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.625;
else
dec List.491;
let List.619 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.619;
in
jump List.618 #Derived_gen.0 #Derived_gen.1 #Derived_gen.2 #Derived_gen.3 #Derived_gen.4;
procedure List.92 (#Derived_gen.5, #Derived_gen.6, #Derived_gen.7, #Derived_gen.8, #Derived_gen.9):
joinpoint List.589 List.163 List.164 List.165 List.166 List.167:
let List.591 : Int1 = CallByName Num.22 List.166 List.167;
if List.591 then
let List.595 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.595;
let List.594 : U64 = 1i64;
let List.593 : U64 = CallByName Num.51 List.166 List.594;
jump List.589 List.163 List.168 List.165 List.593 List.167;
else
dec List.163;
ret List.164;
in
jump List.589 #Derived_gen.5 #Derived_gen.6 #Derived_gen.7 #Derived_gen.8 #Derived_gen.9;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.281 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.281;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.280 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
procedure Num.127 (#Attr.2):
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.282 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.282;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.286 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.286;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.288 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.288;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.284 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.284;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.287;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.240 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.240;
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
procedure Str.36 (#Attr.2):
let Str.242 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.242;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
@ -167,194 +59,52 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.13 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.13;
let #Derived_gen.3 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.3;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.976, TotallyNotJson.149):
let TotallyNotJson.979 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.978 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.979;
ret TotallyNotJson.978;
procedure Test.19 (Test.55):
let Test.258 : Str = CallByName Encode.23 Test.55;
ret Test.258;
procedure TotallyNotJson.157 (TotallyNotJson.1027, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1027;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1027;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1030 : Int1 = false;
let TotallyNotJson.1029 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1030};
let TotallyNotJson.1028 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1029;
ret TotallyNotJson.1028;
case 92:
let TotallyNotJson.1033 : Int1 = false;
let TotallyNotJson.1032 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1033};
let TotallyNotJson.1031 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1032;
ret TotallyNotJson.1031;
case 47:
let TotallyNotJson.1036 : Int1 = false;
let TotallyNotJson.1035 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1036};
let TotallyNotJson.1034 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1035;
ret TotallyNotJson.1034;
case 8:
let TotallyNotJson.1039 : Int1 = false;
let TotallyNotJson.1038 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1039};
let TotallyNotJson.1037 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1038;
ret TotallyNotJson.1037;
case 12:
let TotallyNotJson.1042 : Int1 = false;
let TotallyNotJson.1041 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1042};
let TotallyNotJson.1040 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1041;
ret TotallyNotJson.1040;
case 10:
let TotallyNotJson.1045 : Int1 = false;
let TotallyNotJson.1044 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1045};
let TotallyNotJson.1043 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1044;
ret TotallyNotJson.1043;
case 13:
let TotallyNotJson.1048 : Int1 = false;
let TotallyNotJson.1047 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1048};
let TotallyNotJson.1046 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1047;
ret TotallyNotJson.1046;
case 9:
let TotallyNotJson.1051 : Int1 = false;
let TotallyNotJson.1050 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1051};
let TotallyNotJson.1049 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1050;
ret TotallyNotJson.1049;
default:
let TotallyNotJson.1055 : U64 = 1i64;
let TotallyNotJson.1054 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1055;
let TotallyNotJson.1053 : {U64, Int1} = Struct {TotallyNotJson.1054, TotallyNotJson.159};
let TotallyNotJson.1052 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1053;
ret TotallyNotJson.1052;
procedure Test.2 ():
let Test.257 : {} = Struct {};
ret Test.257;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.998 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.997 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.998;
ret TotallyNotJson.997;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.275 : U8 = CallByName Num.127 Test.49;
let Test.272 : List U8 = CallByName List.4 Test.48 Test.275;
let Test.274 : Str = CallByName Num.96 Test.50;
let Test.273 : List U8 = CallByName Str.12 Test.274;
let Test.270 : List U8 = CallByName List.8 Test.272 Test.273;
let Test.271 : U8 = 32i64;
let Test.269 : List U8 = CallByName List.4 Test.270 Test.271;
ret Test.269;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.974 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.974;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1056 : U64 = 0i64;
let TotallyNotJson.1057 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1056, TotallyNotJson.1057};
let TotallyNotJson.1026 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1026;
let TotallyNotJson.980 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1024 : Int1 = true;
let TotallyNotJson.1025 : Int1 = lowlevel Eq TotallyNotJson.1024 TotallyNotJson.980;
if TotallyNotJson.1025 then
let TotallyNotJson.990 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.991 : U64 = 2i64;
let TotallyNotJson.989 : U64 = CallByName Num.19 TotallyNotJson.990 TotallyNotJson.991;
let TotallyNotJson.986 : List U8 = CallByName List.68 TotallyNotJson.989;
let TotallyNotJson.988 : U8 = 34i64;
let TotallyNotJson.987 : List U8 = Array [TotallyNotJson.988];
let TotallyNotJson.985 : List U8 = CallByName List.8 TotallyNotJson.986 TotallyNotJson.987;
let TotallyNotJson.982 : List U8 = CallByName List.8 TotallyNotJson.985 TotallyNotJson.153;
let TotallyNotJson.984 : U8 = 34i64;
let TotallyNotJson.983 : List U8 = Array [TotallyNotJson.984];
let TotallyNotJson.981 : List U8 = CallByName List.8 TotallyNotJson.982 TotallyNotJson.983;
ret TotallyNotJson.981;
else
inc TotallyNotJson.153;
let TotallyNotJson.1023 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1022 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1023;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1022;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1022;
let TotallyNotJson.1020 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1021 : U64 = 120i64;
let TotallyNotJson.1018 : U64 = CallByName Num.21 TotallyNotJson.1020 TotallyNotJson.1021;
let TotallyNotJson.1019 : U64 = 100i64;
let TotallyNotJson.1017 : U64 = CallByName Num.137 TotallyNotJson.1018 TotallyNotJson.1019;
let TotallyNotJson.1014 : List U8 = CallByName List.68 TotallyNotJson.1017;
let TotallyNotJson.1016 : U8 = 34i64;
let TotallyNotJson.1015 : List U8 = Array [TotallyNotJson.1016];
let TotallyNotJson.1013 : List U8 = CallByName List.8 TotallyNotJson.1014 TotallyNotJson.1015;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1013 TotallyNotJson.179;
let TotallyNotJson.996 : {} = Struct {};
let TotallyNotJson.993 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.996;
let TotallyNotJson.995 : U8 = 34i64;
let TotallyNotJson.994 : List U8 = Array [TotallyNotJson.995];
let TotallyNotJson.992 : List U8 = CallByName List.8 TotallyNotJson.993 TotallyNotJson.994;
ret TotallyNotJson.992;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.999 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.999;
case 92:
let TotallyNotJson.1000 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1000;
case 47:
let TotallyNotJson.1001 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1001;
case 8:
let TotallyNotJson.1003 : U8 = 98i64;
let TotallyNotJson.1002 : List U8 = Array [92i64, TotallyNotJson.1003];
ret TotallyNotJson.1002;
case 12:
let TotallyNotJson.1005 : U8 = 102i64;
let TotallyNotJson.1004 : List U8 = Array [92i64, TotallyNotJson.1005];
ret TotallyNotJson.1004;
case 10:
let TotallyNotJson.1007 : U8 = 110i64;
let TotallyNotJson.1006 : List U8 = Array [92i64, TotallyNotJson.1007];
ret TotallyNotJson.1006;
case 13:
let TotallyNotJson.1009 : U8 = 114i64;
let TotallyNotJson.1008 : List U8 = Array [92i64, TotallyNotJson.1009];
ret TotallyNotJson.1008;
case 9:
let TotallyNotJson.1011 : U8 = 114i64;
let TotallyNotJson.1010 : List U8 = Array [92i64, TotallyNotJson.1011];
ret TotallyNotJson.1010;
default:
let TotallyNotJson.1012 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1012;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.56 (Test.57, Test.260, Test.55):
let Test.267 : I64 = 115i64;
let Test.268 : U64 = CallByName Str.36 Test.55;
let Test.265 : List U8 = CallByName Test.3 Test.57 Test.267 Test.268;
let Test.266 : List U8 = CallByName Str.12 Test.55;
let Test.263 : List U8 = CallByName List.8 Test.265 Test.266;
let Test.264 : U8 = 32i64;
let Test.262 : List U8 = CallByName List.4 Test.263 Test.264;
ret Test.262;
procedure Test.0 ():
let Test.9 : Str = "abc";
let Test.10 : {} = CallByName TotallyNotJson.8;
let Test.8 : List U8 = CallByName Encode.26 Test.9 Test.10;
let Test.1 : [C {U64, U8}, C Str] = CallByName Str.9 Test.8;
let Test.5 : U8 = 1i64;
let Test.6 : U8 = GetTagId Test.1;
let Test.7 : Int1 = lowlevel Eq Test.5 Test.6;
if Test.7 then
let Test.2 : Str = UnionAtIndex (Id 1) (Index 0) Test.1;
ret Test.2;
let Test.255 : Str = "abc";
let Test.256 : {} = CallByName Test.2;
let Test.254 : List U8 = CallByName Encode.26 Test.255 Test.256;
let Test.209 : [C {U64, U8}, C Str] = CallByName Str.9 Test.254;
let Test.251 : U8 = 1i64;
let Test.252 : U8 = GetTagId Test.209;
let Test.253 : Int1 = lowlevel Eq Test.251 Test.252;
if Test.253 then
let Test.210 : Str = UnionAtIndex (Id 1) (Index 0) Test.209;
ret Test.210;
else
dec Test.1;
let Test.4 : Str = "<bad>";
ret Test.4;
dec Test.209;
let Test.250 : Str = "<bad>";
ret Test.250;

View file

@ -8,9 +8,9 @@ procedure #Derived.3 (#Derived.4, #Derived.5, #Derived.1):
ret #Derived_gen.3;
in
let #Derived_gen.7 : Str = "A";
let #Derived_gen.9 : Str = CallByName TotallyNotJson.25 #Derived.1;
let #Derived_gen.9 : Str = CallByName Test.19 #Derived.1;
let #Derived_gen.8 : List Str = Array [#Derived_gen.9];
let #Derived_gen.6 : {Str, List Str} = CallByName TotallyNotJson.31 #Derived_gen.7 #Derived_gen.8;
let #Derived_gen.6 : {List Str, {}} = CallByName Test.23 #Derived_gen.7 #Derived_gen.8;
jump #Derived_gen.5 #Derived_gen.6;
procedure Encode.23 (Encode.98):
@ -27,12 +27,12 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName Test.60 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.116 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.116;
let Encode.117 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.117;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
@ -40,200 +40,82 @@ procedure Encode.26 (Encode.105, Encode.106):
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.657 : U64 = 0i64;
let List.658 : U64 = CallByName List.6 List.488;
let List.656 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.657 List.658;
ret List.656;
procedure List.18 (List.160, List.161, List.162):
let List.601 : U64 = 0i64;
let List.602 : U64 = CallByName List.6 List.160;
let List.600 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.601 List.602;
procedure List.13 (#Attr.2, #Attr.3):
let List.600 : List Str = lowlevel ListPrepend #Attr.2 #Attr.3;
ret List.600;
procedure List.18 (List.160, List.161, List.162):
let List.613 : U64 = 0i64;
let List.614 : U64 = CallByName List.6 List.160;
let List.612 : List U8 = CallByName List.92 List.160 List.161 List.162 List.613 List.614;
ret List.612;
procedure List.26 (List.201, List.202, List.203):
let List.650 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.653 : U8 = 1i64;
let List.654 : U8 = GetTagId List.650;
let List.655 : Int1 = lowlevel Eq List.653 List.654;
if List.655 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.650;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.650;
ret List.205;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.4 (List.124, List.125):
let List.599 : U64 = 1i64;
let List.598 : List U8 = CallByName List.70 List.124 List.599;
let List.597 : List U8 = CallByName List.71 List.598 List.125;
ret List.597;
procedure List.49 (List.420, List.421):
let List.641 : U64 = StructAtIndex 1 List.421;
let List.642 : U64 = StructAtIndex 0 List.421;
let List.640 : List U8 = CallByName List.72 List.420 List.641 List.642;
ret List.640;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.648 List.438:
let List.646 : U64 = 0i64;
let List.645 : {U64, U64} = Struct {List.438, List.646};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.645;
let List.644 : U64 = CallByName Num.75 List.437 List.438;
let List.639 : {U64, U64} = Struct {List.644, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.639;
let List.638 : {List U8, List U8} = Struct {List.439, List.440};
ret List.638;
in
let List.649 : Int1 = CallByName Num.24 List.437 List.436;
if List.649 then
jump List.648 List.436;
else
jump List.648 List.437;
let List.596 : U64 = 1i64;
let List.595 : List U8 = CallByName List.70 List.124 List.596;
let List.594 : List U8 = CallByName List.71 List.595 List.125;
ret List.594;
procedure List.6 (#Attr.2):
let List.624 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.624;
procedure List.6 (#Attr.2):
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.66 (#Attr.2, #Attr.3):
let List.610 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.610;
procedure List.66 (#Attr.2, #Attr.3):
let List.622 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.622;
procedure List.68 (#Attr.2):
let List.637 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.637;
let List.584 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
let List.590 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.590;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.643 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.643;
let List.588 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.588;
procedure List.8 (#Attr.2, #Attr.3):
let List.635 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.635;
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.80 (#Derived_gen.18, #Derived_gen.19, #Derived_gen.20, #Derived_gen.21, #Derived_gen.22):
joinpoint List.659 List.491 List.492 List.493 List.494 List.495:
let List.661 : Int1 = CallByName Num.22 List.494 List.495;
if List.661 then
let List.670 : U8 = CallByName List.66 List.491 List.494;
let List.662 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.670;
let List.667 : U8 = 1i64;
let List.668 : U8 = GetTagId List.662;
let List.669 : Int1 = lowlevel Eq List.667 List.668;
if List.669 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.662;
let List.665 : U64 = 1i64;
let List.664 : U64 = CallByName Num.51 List.494 List.665;
jump List.659 List.491 List.496 List.493 List.664 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.662;
let List.666 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.666;
else
dec List.491;
let List.660 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.660;
in
jump List.659 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22;
procedure List.92 (#Derived_gen.10, #Derived_gen.11, #Derived_gen.12, #Derived_gen.13, #Derived_gen.14):
joinpoint List.603 List.163 List.164 List.165 List.166 List.167:
let List.605 : Int1 = CallByName Num.22 List.166 List.167;
if List.605 then
let List.609 : Str = CallByName List.66 List.163 List.166;
inc List.609;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.233 List.164 List.609;
let List.608 : U64 = 1i64;
let List.607 : U64 = CallByName Num.51 List.166 List.608;
jump List.603 List.163 List.168 List.165 List.607 List.167;
procedure List.92 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : Str = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.63 List.164 List.583 List.165;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.603 #Derived_gen.10 #Derived_gen.11 #Derived_gen.12 #Derived_gen.13 #Derived_gen.14;
procedure List.92 (#Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_gen.26, #Derived_gen.27):
joinpoint List.615 List.163 List.164 List.165 List.166 List.167:
let List.617 : Int1 = CallByName Num.22 List.166 List.167;
if List.617 then
let List.621 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.621;
let List.620 : U64 = 1i64;
let List.619 : U64 = CallByName Num.51 List.166 List.620;
jump List.615 List.163 List.168 List.165 List.619 List.167;
else
dec List.163;
ret List.164;
in
jump List.615 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27;
jump List.577 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
procedure Num.127 (#Attr.2):
let Num.286 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.286;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.291;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.287;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.292 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.292;
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.298 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.298;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.300;
let Num.282 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.282;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.295 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.295;
let Num.281 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.281;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.299;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
procedure Str.36 (#Attr.2):
let Str.242 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.242;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.239;
@ -248,253 +130,86 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.34 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.34;
let #Derived_gen.27 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.27;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1017, TotallyNotJson.149):
let TotallyNotJson.1020 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1019 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1020;
ret TotallyNotJson.1019;
procedure Test.19 (Test.55):
let Test.296 : Str = CallByName Encode.23 Test.55;
ret Test.296;
procedure TotallyNotJson.157 (TotallyNotJson.1068, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1068;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1068;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1071 : Int1 = false;
let TotallyNotJson.1070 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1071};
let TotallyNotJson.1069 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1070;
ret TotallyNotJson.1069;
case 92:
let TotallyNotJson.1074 : Int1 = false;
let TotallyNotJson.1073 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1074};
let TotallyNotJson.1072 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1073;
ret TotallyNotJson.1072;
case 47:
let TotallyNotJson.1077 : Int1 = false;
let TotallyNotJson.1076 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1077};
let TotallyNotJson.1075 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1076;
ret TotallyNotJson.1075;
case 8:
let TotallyNotJson.1080 : Int1 = false;
let TotallyNotJson.1079 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1080};
let TotallyNotJson.1078 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1079;
ret TotallyNotJson.1078;
case 12:
let TotallyNotJson.1083 : Int1 = false;
let TotallyNotJson.1082 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1083};
let TotallyNotJson.1081 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1082;
ret TotallyNotJson.1081;
case 10:
let TotallyNotJson.1086 : Int1 = false;
let TotallyNotJson.1085 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1086};
let TotallyNotJson.1084 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1085;
ret TotallyNotJson.1084;
case 13:
let TotallyNotJson.1089 : Int1 = false;
let TotallyNotJson.1088 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1089};
let TotallyNotJson.1087 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1088;
ret TotallyNotJson.1087;
case 9:
let TotallyNotJson.1092 : Int1 = false;
let TotallyNotJson.1091 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1092};
let TotallyNotJson.1090 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1091;
ret TotallyNotJson.1090;
default:
let TotallyNotJson.1096 : U64 = 1i64;
let TotallyNotJson.1095 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1096;
let TotallyNotJson.1094 : {U64, Int1} = Struct {TotallyNotJson.1095, TotallyNotJson.159};
let TotallyNotJson.1093 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1094;
ret TotallyNotJson.1093;
procedure Test.2 ():
let Test.258 : {} = Struct {};
ret Test.258;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1039 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1038 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1039;
ret TotallyNotJson.1038;
procedure Test.20 (Test.58, Test.59):
let Test.265 : {List Str, {}} = Struct {Test.58, Test.59};
let Test.264 : {List Str, {}} = CallByName Encode.23 Test.265;
ret Test.264;
procedure TotallyNotJson.231 (TotallyNotJson.232, TotallyNotJson.976, #Attr.12):
let TotallyNotJson.230 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.229 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1014 : I64 = 123i64;
let TotallyNotJson.1013 : U8 = CallByName Num.127 TotallyNotJson.1014;
let TotallyNotJson.1010 : List U8 = CallByName List.4 TotallyNotJson.232 TotallyNotJson.1013;
let TotallyNotJson.1012 : I64 = 34i64;
let TotallyNotJson.1011 : U8 = CallByName Num.127 TotallyNotJson.1012;
let TotallyNotJson.1008 : List U8 = CallByName List.4 TotallyNotJson.1010 TotallyNotJson.1011;
let TotallyNotJson.1009 : List U8 = CallByName Str.12 TotallyNotJson.229;
let TotallyNotJson.1005 : List U8 = CallByName List.8 TotallyNotJson.1008 TotallyNotJson.1009;
let TotallyNotJson.1007 : I64 = 34i64;
let TotallyNotJson.1006 : U8 = CallByName Num.127 TotallyNotJson.1007;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 58i64;
let TotallyNotJson.1003 : U8 = CallByName Num.127 TotallyNotJson.1004;
let TotallyNotJson.999 : List U8 = CallByName List.4 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 91i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.234 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : U64 = CallByName List.6 TotallyNotJson.230;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.234, TotallyNotJson.998};
let TotallyNotJson.987 : {} = Struct {};
let TotallyNotJson.985 : {List U8, U64} = CallByName List.18 TotallyNotJson.230 TotallyNotJson.986 TotallyNotJson.987;
let TotallyNotJson.236 : List U8 = StructAtIndex 0 TotallyNotJson.985;
let TotallyNotJson.984 : I64 = 93i64;
let TotallyNotJson.983 : U8 = CallByName Num.127 TotallyNotJson.984;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.236 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.979 : List U8 = CallByName List.4 TotallyNotJson.980 TotallyNotJson.981;
ret TotallyNotJson.979;
procedure Test.22 (Test.74):
let Test.263 : {} = Struct {};
let Test.262 : {List Str, {}} = CallByName Test.20 Test.74 Test.263;
ret Test.262;
procedure TotallyNotJson.233 (TotallyNotJson.978, TotallyNotJson.239):
let TotallyNotJson.237 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.238 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.997 : {} = Struct {};
let TotallyNotJson.240 : List U8 = CallByName Encode.24 TotallyNotJson.237 TotallyNotJson.239 TotallyNotJson.997;
joinpoint TotallyNotJson.992 TotallyNotJson.241:
let TotallyNotJson.990 : U64 = 1i64;
let TotallyNotJson.989 : U64 = CallByName Num.20 TotallyNotJson.238 TotallyNotJson.990;
let TotallyNotJson.988 : {List U8, U64} = Struct {TotallyNotJson.241, TotallyNotJson.989};
ret TotallyNotJson.988;
in
let TotallyNotJson.996 : U64 = 1i64;
let TotallyNotJson.993 : Int1 = CallByName Num.24 TotallyNotJson.238 TotallyNotJson.996;
if TotallyNotJson.993 then
let TotallyNotJson.995 : I64 = 44i64;
let TotallyNotJson.994 : U8 = CallByName Num.127 TotallyNotJson.995;
let TotallyNotJson.991 : List U8 = CallByName List.4 TotallyNotJson.240 TotallyNotJson.994;
jump TotallyNotJson.992 TotallyNotJson.991;
else
jump TotallyNotJson.992 TotallyNotJson.240;
procedure Test.23 (Test.77, Test.78):
let Test.284 : Str = CallByName Test.19 Test.77;
let Test.261 : List Str = CallByName List.13 Test.78 Test.284;
let Test.260 : {List Str, {}} = CallByName Test.22 Test.261;
ret Test.260;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1015 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1015;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.282 : U8 = CallByName Num.127 Test.49;
let Test.279 : List U8 = CallByName List.4 Test.48 Test.282;
let Test.281 : Str = CallByName Num.96 Test.50;
let Test.280 : List U8 = CallByName Str.12 Test.281;
let Test.277 : List U8 = CallByName List.8 Test.279 Test.280;
let Test.278 : U8 = 32i64;
let Test.276 : List U8 = CallByName List.4 Test.277 Test.278;
ret Test.276;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1097 : U64 = 0i64;
let TotallyNotJson.1098 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1097, TotallyNotJson.1098};
let TotallyNotJson.1067 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1067;
let TotallyNotJson.1021 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1065 : Int1 = true;
let TotallyNotJson.1066 : Int1 = lowlevel Eq TotallyNotJson.1065 TotallyNotJson.1021;
if TotallyNotJson.1066 then
let TotallyNotJson.1031 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1032 : U64 = 2i64;
let TotallyNotJson.1030 : U64 = CallByName Num.19 TotallyNotJson.1031 TotallyNotJson.1032;
let TotallyNotJson.1027 : List U8 = CallByName List.68 TotallyNotJson.1030;
let TotallyNotJson.1029 : U8 = 34i64;
let TotallyNotJson.1028 : List U8 = Array [TotallyNotJson.1029];
let TotallyNotJson.1026 : List U8 = CallByName List.8 TotallyNotJson.1027 TotallyNotJson.1028;
let TotallyNotJson.1023 : List U8 = CallByName List.8 TotallyNotJson.1026 TotallyNotJson.153;
let TotallyNotJson.1025 : U8 = 34i64;
let TotallyNotJson.1024 : List U8 = Array [TotallyNotJson.1025];
let TotallyNotJson.1022 : List U8 = CallByName List.8 TotallyNotJson.1023 TotallyNotJson.1024;
ret TotallyNotJson.1022;
else
inc TotallyNotJson.153;
let TotallyNotJson.1064 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1063 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1064;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1063;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1063;
let TotallyNotJson.1061 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1062 : U64 = 120i64;
let TotallyNotJson.1059 : U64 = CallByName Num.21 TotallyNotJson.1061 TotallyNotJson.1062;
let TotallyNotJson.1060 : U64 = 100i64;
let TotallyNotJson.1058 : U64 = CallByName Num.137 TotallyNotJson.1059 TotallyNotJson.1060;
let TotallyNotJson.1055 : List U8 = CallByName List.68 TotallyNotJson.1058;
let TotallyNotJson.1057 : U8 = 34i64;
let TotallyNotJson.1056 : List U8 = Array [TotallyNotJson.1057];
let TotallyNotJson.1054 : List U8 = CallByName List.8 TotallyNotJson.1055 TotallyNotJson.1056;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1054 TotallyNotJson.179;
let TotallyNotJson.1037 : {} = Struct {};
let TotallyNotJson.1034 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1037;
let TotallyNotJson.1036 : U8 = 34i64;
let TotallyNotJson.1035 : List U8 = Array [TotallyNotJson.1036];
let TotallyNotJson.1033 : List U8 = CallByName List.8 TotallyNotJson.1034 TotallyNotJson.1035;
ret TotallyNotJson.1033;
procedure Test.56 (Test.57, Test.287, Test.55):
let Test.294 : I64 = 115i64;
let Test.295 : U64 = CallByName Str.36 Test.55;
let Test.292 : List U8 = CallByName Test.3 Test.57 Test.294 Test.295;
let Test.293 : List U8 = CallByName Str.12 Test.55;
let Test.290 : List U8 = CallByName List.8 Test.292 Test.293;
let Test.291 : U8 = 32i64;
let Test.289 : List U8 = CallByName List.4 Test.290 Test.291;
ret Test.289;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1040 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1040;
case 92:
let TotallyNotJson.1041 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1041;
case 47:
let TotallyNotJson.1042 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1042;
case 8:
let TotallyNotJson.1044 : U8 = 98i64;
let TotallyNotJson.1043 : List U8 = Array [92i64, TotallyNotJson.1044];
ret TotallyNotJson.1043;
case 12:
let TotallyNotJson.1046 : U8 = 102i64;
let TotallyNotJson.1045 : List U8 = Array [92i64, TotallyNotJson.1046];
ret TotallyNotJson.1045;
case 10:
let TotallyNotJson.1048 : U8 = 110i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 13:
let TotallyNotJson.1050 : U8 = 114i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 9:
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
default:
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1053;
procedure Test.60 (Test.61, Test.266, #Attr.12):
let Test.59 : {} = StructAtIndex 1 #Attr.12;
let Test.58 : List Str = StructAtIndex 0 #Attr.12;
let Test.274 : I64 = 108i64;
let Test.275 : U64 = CallByName List.6 Test.58;
let Test.62 : List U8 = CallByName Test.3 Test.61 Test.274 Test.275;
let Test.268 : List U8 = CallByName List.18 Test.58 Test.62 Test.59;
ret Test.268;
procedure TotallyNotJson.31 (TotallyNotJson.229, TotallyNotJson.230):
let TotallyNotJson.975 : {Str, List Str} = Struct {TotallyNotJson.229, TotallyNotJson.230};
let TotallyNotJson.974 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.975;
ret TotallyNotJson.974;
procedure Test.63 (Test.64, Test.65, Test.59):
let Test.272 : Str = CallByName Test.75 Test.65;
let Test.273 : {} = Struct {};
let Test.271 : List U8 = CallByName Encode.24 Test.64 Test.272 Test.273;
ret Test.271;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.75 (Test.76):
ret Test.76;
procedure Test.0 ():
let Test.12 : Str = "foo";
let Test.11 : {} = CallByName TotallyNotJson.8;
let Test.10 : List U8 = CallByName Encode.26 Test.12 Test.11;
let Test.2 : [C {U64, U8}, C Str] = CallByName Str.9 Test.10;
let Test.7 : U8 = 1i64;
let Test.8 : U8 = GetTagId Test.2;
let Test.9 : Int1 = lowlevel Eq Test.7 Test.8;
if Test.9 then
let Test.4 : Str = UnionAtIndex (Id 1) (Index 0) Test.2;
ret Test.4;
let Test.259 : Str = "foo";
let Test.257 : {} = CallByName Test.2;
let Test.256 : List U8 = CallByName Encode.26 Test.259 Test.257;
let Test.210 : [C {U64, U8}, C Str] = CallByName Str.9 Test.256;
let Test.253 : U8 = 1i64;
let Test.254 : U8 = GetTagId Test.210;
let Test.255 : Int1 = lowlevel Eq Test.253 Test.254;
if Test.255 then
let Test.212 : Str = UnionAtIndex (Id 1) (Index 0) Test.210;
ret Test.212;
else
dec Test.2;
let Test.6 : Str = "<bad>";
ret Test.6;
dec Test.210;
let Test.252 : Str = "<bad>";
ret Test.252;

View file

@ -10,10 +10,10 @@ procedure #Derived.4 (#Derived.5, #Derived.6, #Derived.1):
let #Derived.2 : Str = StructAtIndex 0 #Derived.1;
let #Derived.3 : Str = StructAtIndex 1 #Derived.1;
let #Derived_gen.7 : Str = "A";
let #Derived_gen.9 : Str = CallByName TotallyNotJson.25 #Derived.2;
let #Derived_gen.10 : Str = CallByName TotallyNotJson.25 #Derived.3;
let #Derived_gen.9 : Str = CallByName Test.19 #Derived.2;
let #Derived_gen.10 : Str = CallByName Test.19 #Derived.3;
let #Derived_gen.8 : List Str = Array [#Derived_gen.9, #Derived_gen.10];
let #Derived_gen.6 : {Str, List Str} = CallByName TotallyNotJson.31 #Derived_gen.7 #Derived_gen.8;
let #Derived_gen.6 : {List Str, {}} = CallByName Test.23 #Derived_gen.7 #Derived_gen.8;
jump #Derived_gen.5 #Derived_gen.6;
procedure Encode.23 (Encode.98):
@ -30,12 +30,12 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName Test.60 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.117 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.117;
let Encode.118 : List U8 = CallByName Test.56 Encode.99 Encode.101 Encode.107;
ret Encode.118;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
@ -43,200 +43,82 @@ procedure Encode.26 (Encode.105, Encode.106):
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.657 : U64 = 0i64;
let List.658 : U64 = CallByName List.6 List.488;
let List.656 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.657 List.658;
ret List.656;
procedure List.18 (List.160, List.161, List.162):
let List.601 : U64 = 0i64;
let List.602 : U64 = CallByName List.6 List.160;
let List.600 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.601 List.602;
procedure List.13 (#Attr.2, #Attr.3):
let List.600 : List Str = lowlevel ListPrepend #Attr.2 #Attr.3;
ret List.600;
procedure List.18 (List.160, List.161, List.162):
let List.613 : U64 = 0i64;
let List.614 : U64 = CallByName List.6 List.160;
let List.612 : List U8 = CallByName List.92 List.160 List.161 List.162 List.613 List.614;
ret List.612;
procedure List.26 (List.201, List.202, List.203):
let List.650 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.653 : U8 = 1i64;
let List.654 : U8 = GetTagId List.650;
let List.655 : Int1 = lowlevel Eq List.653 List.654;
if List.655 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.650;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.650;
ret List.205;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.4 (List.124, List.125):
let List.599 : U64 = 1i64;
let List.598 : List U8 = CallByName List.70 List.124 List.599;
let List.597 : List U8 = CallByName List.71 List.598 List.125;
ret List.597;
procedure List.49 (List.420, List.421):
let List.641 : U64 = StructAtIndex 1 List.421;
let List.642 : U64 = StructAtIndex 0 List.421;
let List.640 : List U8 = CallByName List.72 List.420 List.641 List.642;
ret List.640;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.648 List.438:
let List.646 : U64 = 0i64;
let List.645 : {U64, U64} = Struct {List.438, List.646};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.645;
let List.644 : U64 = CallByName Num.75 List.437 List.438;
let List.639 : {U64, U64} = Struct {List.644, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.639;
let List.638 : {List U8, List U8} = Struct {List.439, List.440};
ret List.638;
in
let List.649 : Int1 = CallByName Num.24 List.437 List.436;
if List.649 then
jump List.648 List.436;
else
jump List.648 List.437;
let List.596 : U64 = 1i64;
let List.595 : List U8 = CallByName List.70 List.124 List.596;
let List.594 : List U8 = CallByName List.71 List.595 List.125;
ret List.594;
procedure List.6 (#Attr.2):
let List.624 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.624;
procedure List.6 (#Attr.2):
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.66 (#Attr.2, #Attr.3):
let List.610 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.610;
procedure List.66 (#Attr.2, #Attr.3):
let List.622 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.622;
procedure List.68 (#Attr.2):
let List.637 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.637;
let List.584 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
let List.590 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.590;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.643 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.643;
let List.588 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.588;
procedure List.8 (#Attr.2, #Attr.3):
let List.635 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.635;
procedure List.80 (#Derived_gen.19, #Derived_gen.20, #Derived_gen.21, #Derived_gen.22, #Derived_gen.23):
joinpoint List.659 List.491 List.492 List.493 List.494 List.495:
let List.661 : Int1 = CallByName Num.22 List.494 List.495;
if List.661 then
let List.670 : U8 = CallByName List.66 List.491 List.494;
let List.662 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.670;
let List.667 : U8 = 1i64;
let List.668 : U8 = GetTagId List.662;
let List.669 : Int1 = lowlevel Eq List.667 List.668;
if List.669 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.662;
let List.665 : U64 = 1i64;
let List.664 : U64 = CallByName Num.51 List.494 List.665;
jump List.659 List.491 List.496 List.493 List.664 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.662;
let List.666 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.666;
else
dec List.491;
let List.660 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.660;
in
jump List.659 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22 #Derived_gen.23;
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.92 (#Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17, #Derived_gen.18):
joinpoint List.615 List.163 List.164 List.165 List.166 List.167:
let List.617 : Int1 = CallByName Num.22 List.166 List.167;
if List.617 then
let List.621 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.621;
let List.620 : U64 = 1i64;
let List.619 : U64 = CallByName Num.51 List.166 List.620;
jump List.615 List.163 List.168 List.165 List.619 List.167;
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : Str = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.63 List.164 List.583 List.165;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.615 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18;
procedure List.92 (#Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_gen.33, #Derived_gen.34):
joinpoint List.603 List.163 List.164 List.165 List.166 List.167:
let List.605 : Int1 = CallByName Num.22 List.166 List.167;
if List.605 then
let List.609 : Str = CallByName List.66 List.163 List.166;
inc List.609;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.233 List.164 List.609;
let List.608 : U64 = 1i64;
let List.607 : U64 = CallByName Num.51 List.166 List.608;
jump List.603 List.163 List.168 List.165 List.607 List.167;
else
dec List.163;
ret List.164;
in
jump List.603 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33 #Derived_gen.34;
jump List.577 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18;
procedure Num.127 (#Attr.2):
let Num.286 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.286;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.291;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.287;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.292 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.292;
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.298 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.298;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.300;
let Num.282 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.282;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.295 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.295;
let Num.281 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.281;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.299;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
procedure Str.36 (#Attr.2):
let Str.242 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.242;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.239;
@ -251,255 +133,88 @@ procedure Str.9 (Str.67):
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.35 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.35;
let #Derived_gen.28 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.28;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1017, TotallyNotJson.149):
let TotallyNotJson.1020 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1019 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1020;
ret TotallyNotJson.1019;
procedure Test.19 (Test.55):
let Test.300 : Str = CallByName Encode.23 Test.55;
ret Test.300;
procedure TotallyNotJson.157 (TotallyNotJson.1068, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1068;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1068;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1071 : Int1 = false;
let TotallyNotJson.1070 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1071};
let TotallyNotJson.1069 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1070;
ret TotallyNotJson.1069;
case 92:
let TotallyNotJson.1074 : Int1 = false;
let TotallyNotJson.1073 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1074};
let TotallyNotJson.1072 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1073;
ret TotallyNotJson.1072;
case 47:
let TotallyNotJson.1077 : Int1 = false;
let TotallyNotJson.1076 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1077};
let TotallyNotJson.1075 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1076;
ret TotallyNotJson.1075;
case 8:
let TotallyNotJson.1080 : Int1 = false;
let TotallyNotJson.1079 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1080};
let TotallyNotJson.1078 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1079;
ret TotallyNotJson.1078;
case 12:
let TotallyNotJson.1083 : Int1 = false;
let TotallyNotJson.1082 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1083};
let TotallyNotJson.1081 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1082;
ret TotallyNotJson.1081;
case 10:
let TotallyNotJson.1086 : Int1 = false;
let TotallyNotJson.1085 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1086};
let TotallyNotJson.1084 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1085;
ret TotallyNotJson.1084;
case 13:
let TotallyNotJson.1089 : Int1 = false;
let TotallyNotJson.1088 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1089};
let TotallyNotJson.1087 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1088;
ret TotallyNotJson.1087;
case 9:
let TotallyNotJson.1092 : Int1 = false;
let TotallyNotJson.1091 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1092};
let TotallyNotJson.1090 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1091;
ret TotallyNotJson.1090;
default:
let TotallyNotJson.1096 : U64 = 1i64;
let TotallyNotJson.1095 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1096;
let TotallyNotJson.1094 : {U64, Int1} = Struct {TotallyNotJson.1095, TotallyNotJson.159};
let TotallyNotJson.1093 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1094;
ret TotallyNotJson.1093;
procedure Test.2 ():
let Test.258 : {} = Struct {};
ret Test.258;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1039 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1038 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1039;
ret TotallyNotJson.1038;
procedure Test.20 (Test.58, Test.59):
let Test.266 : {List Str, {}} = Struct {Test.58, Test.59};
let Test.265 : {List Str, {}} = CallByName Encode.23 Test.266;
ret Test.265;
procedure TotallyNotJson.231 (TotallyNotJson.232, TotallyNotJson.976, #Attr.12):
let TotallyNotJson.230 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.229 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1014 : I64 = 123i64;
let TotallyNotJson.1013 : U8 = CallByName Num.127 TotallyNotJson.1014;
let TotallyNotJson.1010 : List U8 = CallByName List.4 TotallyNotJson.232 TotallyNotJson.1013;
let TotallyNotJson.1012 : I64 = 34i64;
let TotallyNotJson.1011 : U8 = CallByName Num.127 TotallyNotJson.1012;
let TotallyNotJson.1008 : List U8 = CallByName List.4 TotallyNotJson.1010 TotallyNotJson.1011;
let TotallyNotJson.1009 : List U8 = CallByName Str.12 TotallyNotJson.229;
let TotallyNotJson.1005 : List U8 = CallByName List.8 TotallyNotJson.1008 TotallyNotJson.1009;
let TotallyNotJson.1007 : I64 = 34i64;
let TotallyNotJson.1006 : U8 = CallByName Num.127 TotallyNotJson.1007;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 58i64;
let TotallyNotJson.1003 : U8 = CallByName Num.127 TotallyNotJson.1004;
let TotallyNotJson.999 : List U8 = CallByName List.4 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 91i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.234 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : U64 = CallByName List.6 TotallyNotJson.230;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.234, TotallyNotJson.998};
let TotallyNotJson.987 : {} = Struct {};
let TotallyNotJson.985 : {List U8, U64} = CallByName List.18 TotallyNotJson.230 TotallyNotJson.986 TotallyNotJson.987;
let TotallyNotJson.236 : List U8 = StructAtIndex 0 TotallyNotJson.985;
let TotallyNotJson.984 : I64 = 93i64;
let TotallyNotJson.983 : U8 = CallByName Num.127 TotallyNotJson.984;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.236 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.979 : List U8 = CallByName List.4 TotallyNotJson.980 TotallyNotJson.981;
ret TotallyNotJson.979;
procedure Test.22 (Test.74):
let Test.264 : {} = Struct {};
let Test.263 : {List Str, {}} = CallByName Test.20 Test.74 Test.264;
ret Test.263;
procedure TotallyNotJson.233 (TotallyNotJson.978, TotallyNotJson.239):
let TotallyNotJson.237 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.238 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.997 : {} = Struct {};
let TotallyNotJson.240 : List U8 = CallByName Encode.24 TotallyNotJson.237 TotallyNotJson.239 TotallyNotJson.997;
joinpoint TotallyNotJson.992 TotallyNotJson.241:
let TotallyNotJson.990 : U64 = 1i64;
let TotallyNotJson.989 : U64 = CallByName Num.20 TotallyNotJson.238 TotallyNotJson.990;
let TotallyNotJson.988 : {List U8, U64} = Struct {TotallyNotJson.241, TotallyNotJson.989};
ret TotallyNotJson.988;
in
let TotallyNotJson.996 : U64 = 1i64;
let TotallyNotJson.993 : Int1 = CallByName Num.24 TotallyNotJson.238 TotallyNotJson.996;
if TotallyNotJson.993 then
let TotallyNotJson.995 : I64 = 44i64;
let TotallyNotJson.994 : U8 = CallByName Num.127 TotallyNotJson.995;
let TotallyNotJson.991 : List U8 = CallByName List.4 TotallyNotJson.240 TotallyNotJson.994;
jump TotallyNotJson.992 TotallyNotJson.991;
else
jump TotallyNotJson.992 TotallyNotJson.240;
procedure Test.23 (Test.77, Test.78):
let Test.285 : Str = CallByName Test.19 Test.77;
let Test.262 : List Str = CallByName List.13 Test.78 Test.285;
let Test.261 : {List Str, {}} = CallByName Test.22 Test.262;
ret Test.261;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1099 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1099;
procedure Test.3 (Test.48, Test.49, Test.50):
let Test.283 : U8 = CallByName Num.127 Test.49;
let Test.280 : List U8 = CallByName List.4 Test.48 Test.283;
let Test.282 : Str = CallByName Num.96 Test.50;
let Test.281 : List U8 = CallByName Str.12 Test.282;
let Test.278 : List U8 = CallByName List.8 Test.280 Test.281;
let Test.279 : U8 = 32i64;
let Test.277 : List U8 = CallByName List.4 Test.278 Test.279;
ret Test.277;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1097 : U64 = 0i64;
let TotallyNotJson.1098 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1097, TotallyNotJson.1098};
let TotallyNotJson.1067 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1067;
let TotallyNotJson.1021 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1065 : Int1 = true;
let TotallyNotJson.1066 : Int1 = lowlevel Eq TotallyNotJson.1065 TotallyNotJson.1021;
if TotallyNotJson.1066 then
let TotallyNotJson.1031 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1032 : U64 = 2i64;
let TotallyNotJson.1030 : U64 = CallByName Num.19 TotallyNotJson.1031 TotallyNotJson.1032;
let TotallyNotJson.1027 : List U8 = CallByName List.68 TotallyNotJson.1030;
let TotallyNotJson.1029 : U8 = 34i64;
let TotallyNotJson.1028 : List U8 = Array [TotallyNotJson.1029];
let TotallyNotJson.1026 : List U8 = CallByName List.8 TotallyNotJson.1027 TotallyNotJson.1028;
let TotallyNotJson.1023 : List U8 = CallByName List.8 TotallyNotJson.1026 TotallyNotJson.153;
let TotallyNotJson.1025 : U8 = 34i64;
let TotallyNotJson.1024 : List U8 = Array [TotallyNotJson.1025];
let TotallyNotJson.1022 : List U8 = CallByName List.8 TotallyNotJson.1023 TotallyNotJson.1024;
ret TotallyNotJson.1022;
else
inc TotallyNotJson.153;
let TotallyNotJson.1064 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1063 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1064;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1063;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1063;
let TotallyNotJson.1061 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1062 : U64 = 120i64;
let TotallyNotJson.1059 : U64 = CallByName Num.21 TotallyNotJson.1061 TotallyNotJson.1062;
let TotallyNotJson.1060 : U64 = 100i64;
let TotallyNotJson.1058 : U64 = CallByName Num.137 TotallyNotJson.1059 TotallyNotJson.1060;
let TotallyNotJson.1055 : List U8 = CallByName List.68 TotallyNotJson.1058;
let TotallyNotJson.1057 : U8 = 34i64;
let TotallyNotJson.1056 : List U8 = Array [TotallyNotJson.1057];
let TotallyNotJson.1054 : List U8 = CallByName List.8 TotallyNotJson.1055 TotallyNotJson.1056;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1054 TotallyNotJson.179;
let TotallyNotJson.1037 : {} = Struct {};
let TotallyNotJson.1034 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1037;
let TotallyNotJson.1036 : U8 = 34i64;
let TotallyNotJson.1035 : List U8 = Array [TotallyNotJson.1036];
let TotallyNotJson.1033 : List U8 = CallByName List.8 TotallyNotJson.1034 TotallyNotJson.1035;
ret TotallyNotJson.1033;
procedure Test.56 (Test.57, Test.288, Test.55):
let Test.295 : I64 = 115i64;
let Test.296 : U64 = CallByName Str.36 Test.55;
let Test.293 : List U8 = CallByName Test.3 Test.57 Test.295 Test.296;
let Test.294 : List U8 = CallByName Str.12 Test.55;
let Test.291 : List U8 = CallByName List.8 Test.293 Test.294;
let Test.292 : U8 = 32i64;
let Test.290 : List U8 = CallByName List.4 Test.291 Test.292;
ret Test.290;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1040 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1040;
case 92:
let TotallyNotJson.1041 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1041;
case 47:
let TotallyNotJson.1042 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1042;
case 8:
let TotallyNotJson.1044 : U8 = 98i64;
let TotallyNotJson.1043 : List U8 = Array [92i64, TotallyNotJson.1044];
ret TotallyNotJson.1043;
case 12:
let TotallyNotJson.1046 : U8 = 102i64;
let TotallyNotJson.1045 : List U8 = Array [92i64, TotallyNotJson.1046];
ret TotallyNotJson.1045;
case 10:
let TotallyNotJson.1048 : U8 = 110i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 13:
let TotallyNotJson.1050 : U8 = 114i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 9:
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
default:
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1053;
procedure Test.60 (Test.61, Test.267, #Attr.12):
let Test.59 : {} = StructAtIndex 1 #Attr.12;
let Test.58 : List Str = StructAtIndex 0 #Attr.12;
let Test.275 : I64 = 108i64;
let Test.276 : U64 = CallByName List.6 Test.58;
let Test.62 : List U8 = CallByName Test.3 Test.61 Test.275 Test.276;
let Test.269 : List U8 = CallByName List.18 Test.58 Test.62 Test.59;
ret Test.269;
procedure TotallyNotJson.31 (TotallyNotJson.229, TotallyNotJson.230):
let TotallyNotJson.975 : {Str, List Str} = Struct {TotallyNotJson.229, TotallyNotJson.230};
let TotallyNotJson.974 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.975;
ret TotallyNotJson.974;
procedure Test.63 (Test.64, Test.65, Test.59):
let Test.273 : Str = CallByName Test.75 Test.65;
let Test.274 : {} = Struct {};
let Test.272 : List U8 = CallByName Encode.24 Test.64 Test.273 Test.274;
ret Test.272;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.75 (Test.76):
ret Test.76;
procedure Test.0 ():
let Test.13 : Str = "foo";
let Test.12 : Str = "foo";
let Test.1 : {Str, Str} = Struct {Test.12, Test.13};
let Test.11 : {} = CallByName TotallyNotJson.8;
let Test.10 : List U8 = CallByName Encode.26 Test.1 Test.11;
let Test.2 : [C {U64, U8}, C Str] = CallByName Str.9 Test.10;
let Test.7 : U8 = 1i64;
let Test.8 : U8 = GetTagId Test.2;
let Test.9 : Int1 = lowlevel Eq Test.7 Test.8;
if Test.9 then
let Test.4 : Str = UnionAtIndex (Id 1) (Index 0) Test.2;
ret Test.4;
let Test.260 : Str = "foo";
let Test.259 : Str = "foo";
let Test.209 : {Str, Str} = Struct {Test.259, Test.260};
let Test.257 : {} = CallByName Test.2;
let Test.256 : List U8 = CallByName Encode.26 Test.209 Test.257;
let Test.210 : [C {U64, U8}, C Str] = CallByName Str.9 Test.256;
let Test.253 : U8 = 1i64;
let Test.254 : U8 = GetTagId Test.210;
let Test.255 : Int1 = lowlevel Eq Test.253 Test.254;
if Test.255 then
let Test.212 : Str = UnionAtIndex (Id 1) (Index 0) Test.210;
ret Test.212;
else
dec Test.2;
let Test.6 : Str = "<bad>";
ret Test.6;
dec Test.210;
let Test.252 : Str = "<bad>";
ret Test.252;

View file

@ -17,7 +17,7 @@ procedure Test.4 (Test.5, #Attr.12):
let Test.16 : I64 = CallByName Num.19 Test.5 Test.17;
ret Test.16;
procedure Test.0 (#Derived_gen.2):
procedure Test.0 (#Derived_gen.0):
joinpoint Test.7 Test.1:
let Test.21 : I64 = 1i64;
let Test.9 : I64 = CallByName Num.19 Test.1 Test.21;
@ -33,4 +33,4 @@ procedure Test.0 (#Derived_gen.2):
ret Test.8;
in
jump Test.7 #Derived_gen.2;
jump Test.7 #Derived_gen.0;

View file

@ -1,823 +1,17 @@
procedure Bool.1 ():
let Bool.51 : Int1 = false;
ret Bool.51;
procedure Bool.12 (#Attr.2, #Attr.3):
let Bool.24 : Int1 = lowlevel NotEq #Attr.2 #Attr.3;
ret Bool.24;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
procedure Bool.7 (Bool.19, Bool.20):
let Bool.23 : Int1 = CallByName Bool.12 Bool.19 Bool.20;
ret Bool.23;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.42 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.42;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.54 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.54;
procedure Bool.2 ():
let Bool.50 : Int1 = true;
ret Bool.50;
procedure Bool.3 (#Attr.2, #Attr.3):
let Bool.33 : Int1 = lowlevel And #Attr.2 #Attr.3;
ret Bool.33;
procedure Bool.4 (#Attr.2, #Attr.3):
let Bool.53 : Int1 = lowlevel Or #Attr.2 #Attr.3;
ret Bool.53;
procedure Decode.24 (Decode.101):
ret Decode.101;
procedure Decode.25 (Decode.102, Decode.121, Decode.104):
let Decode.134 : {List U8, [C {}, C Str]} = CallByName TotallyNotJson.491 Decode.102 Decode.104;
ret Decode.134;
procedure Decode.26 (Decode.105, Decode.106):
let Decode.133 : {} = CallByName TotallyNotJson.59;
let Decode.132 : {List U8, [C {}, C Str]} = CallByName Decode.25 Decode.105 Decode.133 Decode.106;
ret Decode.132;
procedure Decode.27 (Decode.107, Decode.108):
let Decode.122 : {List U8, [C {}, C Str]} = CallByName Decode.26 Decode.107 Decode.108;
let Decode.110 : List U8 = StructAtIndex 0 Decode.122;
inc Decode.110;
let Decode.109 : [C {}, C Str] = StructAtIndex 1 Decode.122;
let Decode.125 : Int1 = CallByName List.1 Decode.110;
if Decode.125 then
dec Decode.110;
let Decode.129 : U8 = 1i64;
let Decode.130 : U8 = GetTagId Decode.109;
let Decode.131 : Int1 = lowlevel Eq Decode.129 Decode.130;
if Decode.131 then
let Decode.111 : Str = UnionAtIndex (Id 1) (Index 0) Decode.109;
let Decode.126 : [C [C List U8, C ], C Str] = TagId(1) Decode.111;
ret Decode.126;
else
dec Decode.109;
let Decode.128 : [C List U8, C ] = TagId(1) ;
let Decode.127 : [C [C List U8, C ], C Str] = TagId(0) Decode.128;
ret Decode.127;
else
dec Decode.109;
let Decode.124 : [C List U8, C ] = TagId(0) Decode.110;
let Decode.123 : [C [C List U8, C ], C Str] = TagId(0) Decode.124;
ret Decode.123;
procedure List.1 (List.107):
let List.628 : U64 = CallByName List.6 List.107;
dec List.107;
let List.629 : U64 = 0i64;
let List.627 : Int1 = CallByName Bool.11 List.628 List.629;
ret List.627;
procedure List.104 (List.488, List.489, List.490):
let List.637 : U64 = 0i64;
let List.638 : U64 = CallByName List.6 List.488;
let List.636 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName List.80 List.488 List.489 List.490 List.637 List.638;
ret List.636;
procedure List.2 (List.108, List.109):
let List.619 : U64 = CallByName List.6 List.108;
let List.616 : Int1 = CallByName Num.22 List.109 List.619;
if List.616 then
let List.618 : U8 = CallByName List.66 List.108 List.109;
dec List.108;
let List.617 : [C {}, C U8] = TagId(1) List.618;
ret List.617;
else
dec List.108;
let List.615 : {} = Struct {};
let List.614 : [C {}, C U8] = TagId(0) List.615;
ret List.614;
procedure List.26 (List.201, List.202, List.203):
let List.630 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName List.104 List.201 List.202 List.203;
let List.633 : U8 = 1i64;
let List.634 : U8 = GetTagId List.630;
let List.635 : Int1 = lowlevel Eq List.633 List.634;
if List.635 then
let List.204 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 1) (Index 0) List.630;
ret List.204;
else
let List.205 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 0) (Index 0) List.630;
ret List.205;
procedure List.38 (List.344, List.345):
let List.596 : U64 = CallByName List.6 List.344;
let List.346 : U64 = CallByName Num.77 List.596 List.345;
let List.595 : List U8 = CallByName List.43 List.344 List.346;
ret List.595;
procedure List.4 (List.124, List.125):
let List.606 : U64 = 1i64;
let List.605 : List U8 = CallByName List.70 List.124 List.606;
let List.604 : List U8 = CallByName List.71 List.605 List.125;
ret List.604;
procedure List.43 (List.342, List.343):
let List.586 : U64 = CallByName List.6 List.342;
let List.585 : U64 = CallByName Num.77 List.586 List.343;
let List.580 : {U64, U64} = Struct {List.343, List.585};
let List.579 : List U8 = CallByName List.49 List.342 List.580;
ret List.579;
procedure List.49 (List.420, List.421):
let List.624 : U64 = StructAtIndex 1 List.421;
let List.625 : U64 = StructAtIndex 0 List.421;
let List.623 : List U8 = CallByName List.72 List.420 List.624 List.625;
ret List.623;
procedure List.6 (#Attr.2):
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
procedure List.66 (#Attr.2, #Attr.3):
let List.612 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.612;
procedure List.70 (#Attr.2, #Attr.3):
let List.603 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.603;
procedure List.71 (#Attr.2, #Attr.3):
let List.601 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.601;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.584 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.584;
procedure List.8 (#Attr.2, #Attr.3):
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.80 (#Derived_gen.1, #Derived_gen.2, #Derived_gen.3, #Derived_gen.4, #Derived_gen.5):
joinpoint List.639 List.491 List.492 List.493 List.494 List.495:
let List.641 : Int1 = CallByName Num.22 List.494 List.495;
if List.641 then
let List.650 : U8 = CallByName List.66 List.491 List.494;
let List.642 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName TotallyNotJson.61 List.492 List.650;
let List.647 : U8 = 1i64;
let List.648 : U8 = GetTagId List.642;
let List.649 : Int1 = lowlevel Eq List.647 List.648;
if List.649 then
let List.496 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 1) (Index 0) List.642;
let List.645 : U64 = 1i64;
let List.644 : U64 = CallByName Num.51 List.494 List.645;
jump List.639 List.491 List.496 List.493 List.644 List.495;
else
dec List.491;
let List.497 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 0) (Index 0) List.642;
let List.646 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) List.497;
ret List.646;
else
dec List.491;
let List.640 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) List.492;
ret List.640;
in
jump List.639 #Derived_gen.1 #Derived_gen.2 #Derived_gen.3 #Derived_gen.4 #Derived_gen.5;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.282 : U8 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.282;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.291;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.294 : U8 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.294;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.316 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.316;
procedure Num.23 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumLte #Attr.2 #Attr.3;
ret Num.300;
procedure Num.25 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumGte #Attr.2 #Attr.3;
ret Num.306;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.317 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.317;
procedure Num.71 (#Attr.2, #Attr.3):
let Num.279 : U8 = lowlevel NumBitwiseOr #Attr.2 #Attr.3;
ret Num.279;
procedure Num.72 (#Attr.2, #Attr.3):
let Num.280 : U8 = lowlevel NumShiftLeftBy #Attr.2 #Attr.3;
ret Num.280;
procedure Num.77 (#Attr.2, #Attr.3):
let Num.313 : U64 = lowlevel NumSubSaturated #Attr.2 #Attr.3;
ret Num.313;
procedure Str.43 (#Attr.2):
let Str.239 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.239;
procedure Str.9 (Str.67):
let Str.68 : {U64, Str, Int1, U8} = CallByName Str.43 Str.67;
let Str.236 : Int1 = StructAtIndex 2 Str.68;
if Str.236 then
let Str.238 : Str = StructAtIndex 1 Str.68;
let Str.237 : [C {U64, U8}, C Str] = TagId(1) Str.238;
ret Str.237;
else
let Str.234 : U8 = StructAtIndex 3 Str.68;
let Str.235 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.7 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.7;
let Str.233 : {U64, U8} = Struct {Str.235, Str.234};
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure Test.3 ():
let Test.0 : List U8 = Array [82i64, 111i64, 99i64];
let Test.8 : {} = CallByName TotallyNotJson.8;
inc Test.0;
let Test.1 : [C [C List U8, C ], C Str] = CallByName Decode.27 Test.0 Test.8;
let Test.7 : Str = "Roc";
let Test.6 : [C [C List U8, C ], C Str] = TagId(1) Test.7;
let Test.5 : Int1 = CallByName Bool.11 Test.1 Test.6;
dec Test.7;
expect Test.5;
dec Test.1;
dec Test.0;
let Test.4 : {} = Struct {};
ret Test.4;
procedure TotallyNotJson.491 (TotallyNotJson.492, TotallyNotJson.976):
joinpoint TotallyNotJson.1260:
inc TotallyNotJson.492;
let TotallyNotJson.1129 : {List U8, List U8} = CallByName TotallyNotJson.60 TotallyNotJson.492;
let TotallyNotJson.496 : List U8 = StructAtIndex 0 TotallyNotJson.1129;
let TotallyNotJson.495 : List U8 = StructAtIndex 1 TotallyNotJson.1129;
inc TotallyNotJson.495;
let TotallyNotJson.1125 : Int1 = CallByName List.1 TotallyNotJson.495;
if TotallyNotJson.1125 then
dec TotallyNotJson.495;
dec TotallyNotJson.496;
let TotallyNotJson.1128 : {} = Struct {};
let TotallyNotJson.1127 : [C {}, C Str] = TagId(0) TotallyNotJson.1128;
let TotallyNotJson.1126 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.492, TotallyNotJson.1127};
ret TotallyNotJson.1126;
else
let TotallyNotJson.1123 : U64 = CallByName List.6 TotallyNotJson.495;
let TotallyNotJson.1124 : U64 = 2i64;
let TotallyNotJson.1121 : U64 = CallByName Num.77 TotallyNotJson.1123 TotallyNotJson.1124;
let TotallyNotJson.1122 : U64 = 1i64;
let TotallyNotJson.1120 : {U64, U64} = Struct {TotallyNotJson.1121, TotallyNotJson.1122};
let TotallyNotJson.995 : List U8 = CallByName List.49 TotallyNotJson.495 TotallyNotJson.1120;
let TotallyNotJson.996 : {} = Struct {};
let TotallyNotJson.991 : {List U8, List U8} = CallByName TotallyNotJson.500 TotallyNotJson.995;
let TotallyNotJson.992 : {} = Struct {};
let TotallyNotJson.990 : List U8 = CallByName TotallyNotJson.502 TotallyNotJson.991;
let TotallyNotJson.499 : [C {U64, U8}, C Str] = CallByName Str.9 TotallyNotJson.990;
let TotallyNotJson.987 : U8 = 1i64;
let TotallyNotJson.988 : U8 = GetTagId TotallyNotJson.499;
let TotallyNotJson.989 : Int1 = lowlevel Eq TotallyNotJson.987 TotallyNotJson.988;
if TotallyNotJson.989 then
dec TotallyNotJson.492;
let TotallyNotJson.503 : Str = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.499;
let TotallyNotJson.983 : [C {}, C Str] = TagId(1) TotallyNotJson.503;
let TotallyNotJson.982 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.496, TotallyNotJson.983};
ret TotallyNotJson.982;
else
dec TotallyNotJson.499;
dec TotallyNotJson.496;
let TotallyNotJson.986 : {} = Struct {};
let TotallyNotJson.985 : [C {}, C Str] = TagId(0) TotallyNotJson.986;
let TotallyNotJson.984 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.492, TotallyNotJson.985};
ret TotallyNotJson.984;
in
let TotallyNotJson.1258 : U64 = lowlevel ListLenUsize TotallyNotJson.492;
let TotallyNotJson.1259 : U64 = 4i64;
let TotallyNotJson.1265 : Int1 = lowlevel NumGte TotallyNotJson.1258 TotallyNotJson.1259;
if TotallyNotJson.1265 then
let TotallyNotJson.1255 : U64 = 3i64;
let TotallyNotJson.1256 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1255;
let TotallyNotJson.1257 : U8 = 108i64;
let TotallyNotJson.1264 : Int1 = lowlevel Eq TotallyNotJson.1257 TotallyNotJson.1256;
if TotallyNotJson.1264 then
let TotallyNotJson.1252 : U64 = 2i64;
let TotallyNotJson.1253 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1252;
let TotallyNotJson.1254 : U8 = 108i64;
let TotallyNotJson.1263 : Int1 = lowlevel Eq TotallyNotJson.1254 TotallyNotJson.1253;
if TotallyNotJson.1263 then
let TotallyNotJson.1249 : U64 = 1i64;
let TotallyNotJson.1250 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1249;
let TotallyNotJson.1251 : U8 = 117i64;
let TotallyNotJson.1262 : Int1 = lowlevel Eq TotallyNotJson.1251 TotallyNotJson.1250;
if TotallyNotJson.1262 then
let TotallyNotJson.1246 : U64 = 0i64;
let TotallyNotJson.1247 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1246;
let TotallyNotJson.1248 : U8 = 110i64;
let TotallyNotJson.1261 : Int1 = lowlevel Eq TotallyNotJson.1248 TotallyNotJson.1247;
if TotallyNotJson.1261 then
let TotallyNotJson.981 : U64 = 4i64;
let TotallyNotJson.978 : List U8 = CallByName List.38 TotallyNotJson.492 TotallyNotJson.981;
let TotallyNotJson.980 : Str = "null";
let TotallyNotJson.979 : [C {}, C Str] = TagId(1) TotallyNotJson.980;
let TotallyNotJson.977 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.978, TotallyNotJson.979};
ret TotallyNotJson.977;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
procedure TotallyNotJson.500 (TotallyNotJson.501):
let TotallyNotJson.1119 : List U8 = Array [];
let TotallyNotJson.998 : {List U8, List U8} = Struct {TotallyNotJson.501, TotallyNotJson.1119};
let TotallyNotJson.997 : {List U8, List U8} = CallByName TotallyNotJson.69 TotallyNotJson.998;
ret TotallyNotJson.997;
procedure TotallyNotJson.502 (TotallyNotJson.993):
let TotallyNotJson.994 : List U8 = StructAtIndex 1 TotallyNotJson.993;
let #Derived_gen.6 : List U8 = StructAtIndex 0 TotallyNotJson.993;
dec #Derived_gen.6;
ret TotallyNotJson.994;
procedure TotallyNotJson.59 ():
let TotallyNotJson.975 : {} = Struct {};
let TotallyNotJson.974 : {} = CallByName Decode.24 TotallyNotJson.975;
ret TotallyNotJson.974;
procedure TotallyNotJson.60 (TotallyNotJson.507):
let TotallyNotJson.1141 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(4) ;
let TotallyNotJson.1142 : {} = Struct {};
inc TotallyNotJson.507;
let TotallyNotJson.1130 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = CallByName List.26 TotallyNotJson.507 TotallyNotJson.1141 TotallyNotJson.1142;
let TotallyNotJson.1138 : U8 = 2i64;
let TotallyNotJson.1139 : U8 = GetTagId TotallyNotJson.1130;
let TotallyNotJson.1140 : Int1 = lowlevel Eq TotallyNotJson.1138 TotallyNotJson.1139;
if TotallyNotJson.1140 then
inc TotallyNotJson.507;
let TotallyNotJson.509 : U64 = UnionAtIndex (Id 2) (Index 0) TotallyNotJson.1130;
let TotallyNotJson.1132 : List U8 = CallByName List.38 TotallyNotJson.507 TotallyNotJson.509;
let TotallyNotJson.1135 : U64 = 0i64;
let TotallyNotJson.1134 : {U64, U64} = Struct {TotallyNotJson.509, TotallyNotJson.1135};
let TotallyNotJson.1133 : List U8 = CallByName List.49 TotallyNotJson.507 TotallyNotJson.1134;
let TotallyNotJson.1131 : {List U8, List U8} = Struct {TotallyNotJson.1132, TotallyNotJson.1133};
ret TotallyNotJson.1131;
else
let TotallyNotJson.1137 : List U8 = Array [];
let TotallyNotJson.1136 : {List U8, List U8} = Struct {TotallyNotJson.507, TotallyNotJson.1137};
ret TotallyNotJson.1136;
procedure TotallyNotJson.61 (TotallyNotJson.510, TotallyNotJson.511):
let TotallyNotJson.1143 : {[C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], U8} = Struct {TotallyNotJson.510, TotallyNotJson.511};
joinpoint TotallyNotJson.1186:
let TotallyNotJson.1184 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(3) ;
let TotallyNotJson.1183 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) TotallyNotJson.1184;
ret TotallyNotJson.1183;
in
let TotallyNotJson.1187 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.1245 : U8 = GetTagId TotallyNotJson.1187;
switch TotallyNotJson.1245:
case 4:
let TotallyNotJson.512 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1189 TotallyNotJson.1188:
if TotallyNotJson.1188 then
let TotallyNotJson.1146 : U64 = 1i64;
let TotallyNotJson.1145 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1146;
let TotallyNotJson.1144 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1145;
ret TotallyNotJson.1144;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1191 : U8 = 34i64;
let TotallyNotJson.1190 : Int1 = CallByName Bool.11 TotallyNotJson.512 TotallyNotJson.1191;
jump TotallyNotJson.1189 TotallyNotJson.1190;
case 0:
let TotallyNotJson.1202 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.515 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1202;
let TotallyNotJson.516 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1199 TotallyNotJson.1193:
if TotallyNotJson.1193 then
let TotallyNotJson.1150 : U64 = 1i64;
let TotallyNotJson.1149 : U64 = CallByName Num.19 TotallyNotJson.515 TotallyNotJson.1150;
let TotallyNotJson.1148 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(2) TotallyNotJson.1149;
let TotallyNotJson.1147 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) TotallyNotJson.1148;
ret TotallyNotJson.1147;
else
let TotallyNotJson.1198 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.519 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1198;
let TotallyNotJson.520 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1195 TotallyNotJson.1194:
if TotallyNotJson.1194 then
let TotallyNotJson.1154 : U64 = 1i64;
let TotallyNotJson.1153 : U64 = CallByName Num.19 TotallyNotJson.519 TotallyNotJson.1154;
let TotallyNotJson.1152 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(1) TotallyNotJson.1153;
let TotallyNotJson.1151 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1152;
ret TotallyNotJson.1151;
else
let TotallyNotJson.1185 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.523 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1185;
let TotallyNotJson.1158 : U64 = 1i64;
let TotallyNotJson.1157 : U64 = CallByName Num.19 TotallyNotJson.523 TotallyNotJson.1158;
let TotallyNotJson.1156 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1157;
let TotallyNotJson.1155 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1156;
ret TotallyNotJson.1155;
in
let TotallyNotJson.1197 : U8 = 92i64;
let TotallyNotJson.1196 : Int1 = CallByName Bool.11 TotallyNotJson.520 TotallyNotJson.1197;
jump TotallyNotJson.1195 TotallyNotJson.1196;
in
let TotallyNotJson.1201 : U8 = 34i64;
let TotallyNotJson.1200 : Int1 = CallByName Bool.11 TotallyNotJson.516 TotallyNotJson.1201;
jump TotallyNotJson.1199 TotallyNotJson.1200;
case 1:
let TotallyNotJson.1211 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.526 : U64 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1211;
let TotallyNotJson.527 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1209 TotallyNotJson.1203:
if TotallyNotJson.1203 then
let TotallyNotJson.1162 : U64 = 1i64;
let TotallyNotJson.1161 : U64 = CallByName Num.19 TotallyNotJson.526 TotallyNotJson.1162;
let TotallyNotJson.1160 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1161;
let TotallyNotJson.1159 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1160;
ret TotallyNotJson.1159;
else
let TotallyNotJson.1208 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.530 : U64 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1208;
let TotallyNotJson.531 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1205 TotallyNotJson.1204:
if TotallyNotJson.1204 then
let TotallyNotJson.1166 : U64 = 1i64;
let TotallyNotJson.1165 : U64 = CallByName Num.19 TotallyNotJson.530 TotallyNotJson.1166;
let TotallyNotJson.1164 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(5) TotallyNotJson.1165;
let TotallyNotJson.1163 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1164;
ret TotallyNotJson.1163;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1207 : U8 = 117i64;
let TotallyNotJson.1206 : Int1 = CallByName Bool.11 TotallyNotJson.531 TotallyNotJson.1207;
jump TotallyNotJson.1205 TotallyNotJson.1206;
in
let TotallyNotJson.1210 : Int1 = CallByName TotallyNotJson.62 TotallyNotJson.527;
jump TotallyNotJson.1209 TotallyNotJson.1210;
case 5:
let TotallyNotJson.1232 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.534 : U64 = UnionAtIndex (Id 5) (Index 0) TotallyNotJson.1232;
let TotallyNotJson.535 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1213 TotallyNotJson.1212:
if TotallyNotJson.1212 then
let TotallyNotJson.1170 : U64 = 1i64;
let TotallyNotJson.1169 : U64 = CallByName Num.19 TotallyNotJson.534 TotallyNotJson.1170;
let TotallyNotJson.1168 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(6) TotallyNotJson.1169;
let TotallyNotJson.1167 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1168;
ret TotallyNotJson.1167;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1214 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.535;
jump TotallyNotJson.1213 TotallyNotJson.1214;
case 6:
let TotallyNotJson.1236 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.538 : U64 = UnionAtIndex (Id 6) (Index 0) TotallyNotJson.1236;
let TotallyNotJson.539 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1234 TotallyNotJson.1233:
if TotallyNotJson.1233 then
let TotallyNotJson.1174 : U64 = 1i64;
let TotallyNotJson.1173 : U64 = CallByName Num.19 TotallyNotJson.538 TotallyNotJson.1174;
let TotallyNotJson.1172 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(7) TotallyNotJson.1173;
let TotallyNotJson.1171 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1172;
ret TotallyNotJson.1171;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1235 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.539;
jump TotallyNotJson.1234 TotallyNotJson.1235;
case 7:
let TotallyNotJson.1240 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.542 : U64 = UnionAtIndex (Id 7) (Index 0) TotallyNotJson.1240;
let TotallyNotJson.543 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1238 TotallyNotJson.1237:
if TotallyNotJson.1237 then
let TotallyNotJson.1178 : U64 = 1i64;
let TotallyNotJson.1177 : U64 = CallByName Num.19 TotallyNotJson.542 TotallyNotJson.1178;
let TotallyNotJson.1176 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(8) TotallyNotJson.1177;
let TotallyNotJson.1175 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1176;
ret TotallyNotJson.1175;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1239 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.543;
jump TotallyNotJson.1238 TotallyNotJson.1239;
case 8:
let TotallyNotJson.1244 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.546 : U64 = UnionAtIndex (Id 8) (Index 0) TotallyNotJson.1244;
let TotallyNotJson.547 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1242 TotallyNotJson.1241:
if TotallyNotJson.1241 then
let TotallyNotJson.1182 : U64 = 1i64;
let TotallyNotJson.1181 : U64 = CallByName Num.19 TotallyNotJson.546 TotallyNotJson.1182;
let TotallyNotJson.1180 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1181;
let TotallyNotJson.1179 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1180;
ret TotallyNotJson.1179;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1243 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.547;
jump TotallyNotJson.1242 TotallyNotJson.1243;
default:
jump TotallyNotJson.1186;
procedure TotallyNotJson.62 (TotallyNotJson.552):
switch TotallyNotJson.552:
case 34:
let TotallyNotJson.1087 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1087;
case 92:
let TotallyNotJson.1088 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1088;
case 47:
let TotallyNotJson.1089 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1089;
case 98:
let TotallyNotJson.1090 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1090;
case 102:
let TotallyNotJson.1091 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1091;
case 110:
let TotallyNotJson.1092 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1092;
case 114:
let TotallyNotJson.1093 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1093;
case 116:
let TotallyNotJson.1094 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1094;
default:
let TotallyNotJson.1095 : Int1 = CallByName Bool.1;
ret TotallyNotJson.1095;
procedure TotallyNotJson.63 (TotallyNotJson.553):
switch TotallyNotJson.553:
case 34:
let TotallyNotJson.1064 : U8 = 34i64;
ret TotallyNotJson.1064;
case 92:
let TotallyNotJson.1065 : U8 = 92i64;
ret TotallyNotJson.1065;
case 47:
let TotallyNotJson.1066 : U8 = 47i64;
ret TotallyNotJson.1066;
case 98:
let TotallyNotJson.1067 : U8 = 8i64;
ret TotallyNotJson.1067;
case 102:
let TotallyNotJson.1068 : U8 = 12i64;
ret TotallyNotJson.1068;
case 110:
let TotallyNotJson.1069 : U8 = 10i64;
ret TotallyNotJson.1069;
case 114:
let TotallyNotJson.1070 : U8 = 13i64;
ret TotallyNotJson.1070;
case 116:
let TotallyNotJson.1071 : U8 = 9i64;
ret TotallyNotJson.1071;
default:
ret TotallyNotJson.553;
procedure TotallyNotJson.64 (TotallyNotJson.554):
let TotallyNotJson.1231 : U8 = 48i64;
let TotallyNotJson.1228 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1231;
let TotallyNotJson.1230 : U8 = 57i64;
let TotallyNotJson.1229 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1230;
let TotallyNotJson.1216 : Int1 = CallByName Bool.3 TotallyNotJson.1228 TotallyNotJson.1229;
let TotallyNotJson.1227 : U8 = 97i64;
let TotallyNotJson.1224 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1227;
let TotallyNotJson.1226 : U8 = 102i64;
let TotallyNotJson.1225 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1226;
let TotallyNotJson.1218 : Int1 = CallByName Bool.3 TotallyNotJson.1224 TotallyNotJson.1225;
let TotallyNotJson.1223 : U8 = 65i64;
let TotallyNotJson.1220 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1223;
let TotallyNotJson.1222 : U8 = 70i64;
let TotallyNotJson.1221 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1222;
let TotallyNotJson.1219 : Int1 = CallByName Bool.3 TotallyNotJson.1220 TotallyNotJson.1221;
let TotallyNotJson.1217 : Int1 = CallByName Bool.4 TotallyNotJson.1218 TotallyNotJson.1219;
let TotallyNotJson.1215 : Int1 = CallByName Bool.4 TotallyNotJson.1216 TotallyNotJson.1217;
ret TotallyNotJson.1215;
procedure TotallyNotJson.65 (TotallyNotJson.555):
let TotallyNotJson.1043 : U8 = 48i64;
let TotallyNotJson.1040 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1043;
let TotallyNotJson.1042 : U8 = 57i64;
let TotallyNotJson.1041 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1042;
let TotallyNotJson.1037 : Int1 = CallByName Bool.3 TotallyNotJson.1040 TotallyNotJson.1041;
if TotallyNotJson.1037 then
let TotallyNotJson.1039 : U8 = 48i64;
let TotallyNotJson.1038 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1039;
ret TotallyNotJson.1038;
else
let TotallyNotJson.1036 : U8 = 97i64;
let TotallyNotJson.1033 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1036;
let TotallyNotJson.1035 : U8 = 102i64;
let TotallyNotJson.1034 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1035;
let TotallyNotJson.1028 : Int1 = CallByName Bool.3 TotallyNotJson.1033 TotallyNotJson.1034;
if TotallyNotJson.1028 then
let TotallyNotJson.1032 : U8 = 97i64;
let TotallyNotJson.1030 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1032;
let TotallyNotJson.1031 : U8 = 10i64;
let TotallyNotJson.1029 : U8 = CallByName Num.19 TotallyNotJson.1030 TotallyNotJson.1031;
ret TotallyNotJson.1029;
else
let TotallyNotJson.1027 : U8 = 65i64;
let TotallyNotJson.1024 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1027;
let TotallyNotJson.1026 : U8 = 70i64;
let TotallyNotJson.1025 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1026;
let TotallyNotJson.1019 : Int1 = CallByName Bool.3 TotallyNotJson.1024 TotallyNotJson.1025;
if TotallyNotJson.1019 then
let TotallyNotJson.1023 : U8 = 65i64;
let TotallyNotJson.1021 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1023;
let TotallyNotJson.1022 : U8 = 10i64;
let TotallyNotJson.1020 : U8 = CallByName Num.19 TotallyNotJson.1021 TotallyNotJson.1022;
ret TotallyNotJson.1020;
else
let TotallyNotJson.1018 : Str = "got an invalid hex char";
Crash TotallyNotJson.1018
procedure TotallyNotJson.66 (TotallyNotJson.556, TotallyNotJson.557):
let TotallyNotJson.1009 : U8 = 4i64;
let TotallyNotJson.1008 : U8 = CallByName Num.72 TotallyNotJson.556 TotallyNotJson.1009;
let TotallyNotJson.1007 : U8 = CallByName Num.71 TotallyNotJson.1008 TotallyNotJson.557;
ret TotallyNotJson.1007;
procedure TotallyNotJson.67 (TotallyNotJson.558, TotallyNotJson.559, TotallyNotJson.560, TotallyNotJson.561):
let TotallyNotJson.562 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.558;
let TotallyNotJson.563 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.559;
let TotallyNotJson.564 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.560;
let TotallyNotJson.565 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.561;
let TotallyNotJson.1016 : U8 = 0i64;
let TotallyNotJson.1013 : Int1 = CallByName Bool.11 TotallyNotJson.562 TotallyNotJson.1016;
let TotallyNotJson.1015 : U8 = 0i64;
let TotallyNotJson.1014 : Int1 = CallByName Bool.11 TotallyNotJson.563 TotallyNotJson.1015;
let TotallyNotJson.1010 : Int1 = CallByName Bool.3 TotallyNotJson.1013 TotallyNotJson.1014;
if TotallyNotJson.1010 then
let TotallyNotJson.1012 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.564 TotallyNotJson.565;
let TotallyNotJson.1011 : List U8 = Array [TotallyNotJson.1012];
ret TotallyNotJson.1011;
else
let TotallyNotJson.1005 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.562 TotallyNotJson.563;
let TotallyNotJson.1006 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.564 TotallyNotJson.565;
let TotallyNotJson.1004 : List U8 = Array [TotallyNotJson.1005, TotallyNotJson.1006];
ret TotallyNotJson.1004;
procedure TotallyNotJson.68 ():
let TotallyNotJson.1049 : U8 = 102i64;
let TotallyNotJson.1050 : U8 = 102i64;
let TotallyNotJson.1051 : U8 = 100i64;
let TotallyNotJson.1052 : U8 = 100i64;
let TotallyNotJson.1048 : List U8 = CallByName TotallyNotJson.67 TotallyNotJson.1049 TotallyNotJson.1050 TotallyNotJson.1051 TotallyNotJson.1052;
ret TotallyNotJson.1048;
procedure TotallyNotJson.69 (#Derived_gen.0):
joinpoint TotallyNotJson.999 TotallyNotJson.970:
let TotallyNotJson.566 : List U8 = StructAtIndex 0 TotallyNotJson.970;
inc 4 TotallyNotJson.566;
let TotallyNotJson.567 : List U8 = StructAtIndex 1 TotallyNotJson.970;
let TotallyNotJson.1118 : U64 = 0i64;
let TotallyNotJson.568 : [C {}, C U8] = CallByName List.2 TotallyNotJson.566 TotallyNotJson.1118;
let TotallyNotJson.1117 : U64 = 1i64;
let TotallyNotJson.569 : [C {}, C U8] = CallByName List.2 TotallyNotJson.566 TotallyNotJson.1117;
let TotallyNotJson.1116 : U64 = 2i64;
let TotallyNotJson.570 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1116;
let TotallyNotJson.1115 : U64 = 6i64;
let TotallyNotJson.571 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1115;
let TotallyNotJson.1000 : {[C {}, C U8], [C {}, C U8]} = Struct {TotallyNotJson.568, TotallyNotJson.569};
joinpoint TotallyNotJson.1080:
let TotallyNotJson.1079 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.582 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1079;
let TotallyNotJson.1077 : U64 = 1i64;
let TotallyNotJson.1075 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1077;
let TotallyNotJson.1076 : List U8 = CallByName List.4 TotallyNotJson.567 TotallyNotJson.582;
let TotallyNotJson.1074 : {List U8, List U8} = Struct {TotallyNotJson.1075, TotallyNotJson.1076};
jump TotallyNotJson.999 TotallyNotJson.1074;
in
let TotallyNotJson.1111 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.1112 : U8 = 1i64;
let TotallyNotJson.1113 : U8 = GetTagId TotallyNotJson.1111;
let TotallyNotJson.1114 : Int1 = lowlevel Eq TotallyNotJson.1112 TotallyNotJson.1113;
if TotallyNotJson.1114 then
let TotallyNotJson.1107 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.1108 : U8 = 1i64;
let TotallyNotJson.1109 : U8 = GetTagId TotallyNotJson.1107;
let TotallyNotJson.1110 : Int1 = lowlevel Eq TotallyNotJson.1108 TotallyNotJson.1109;
if TotallyNotJson.1110 then
let TotallyNotJson.1106 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.573 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1106;
let TotallyNotJson.1105 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.574 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1105;
joinpoint TotallyNotJson.1099 TotallyNotJson.1081:
if TotallyNotJson.1081 then
dec TotallyNotJson.566;
let TotallyNotJson.1057 : U64 = lowlevel ListLenUsize TotallyNotJson.570;
let TotallyNotJson.1058 : U64 = 4i64;
let TotallyNotJson.1059 : Int1 = lowlevel NumGte TotallyNotJson.1057 TotallyNotJson.1058;
if TotallyNotJson.1059 then
let TotallyNotJson.1056 : U64 = 0i64;
let TotallyNotJson.575 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1056;
let TotallyNotJson.1055 : U64 = 1i64;
let TotallyNotJson.576 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1055;
let TotallyNotJson.1054 : U64 = 2i64;
let TotallyNotJson.577 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1054;
let TotallyNotJson.1053 : U64 = 3i64;
let TotallyNotJson.578 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1053;
dec TotallyNotJson.570;
let TotallyNotJson.579 : List U8 = CallByName TotallyNotJson.67 TotallyNotJson.575 TotallyNotJson.576 TotallyNotJson.577 TotallyNotJson.578;
let TotallyNotJson.1003 : List U8 = CallByName List.8 TotallyNotJson.567 TotallyNotJson.579;
let TotallyNotJson.1002 : {List U8, List U8} = Struct {TotallyNotJson.571, TotallyNotJson.1003};
jump TotallyNotJson.999 TotallyNotJson.1002;
else
dec TotallyNotJson.571;
let TotallyNotJson.1047 : List U8 = CallByName TotallyNotJson.68;
let TotallyNotJson.1046 : List U8 = CallByName List.8 TotallyNotJson.567 TotallyNotJson.1047;
let TotallyNotJson.1045 : {List U8, List U8} = Struct {TotallyNotJson.570, TotallyNotJson.1046};
jump TotallyNotJson.999 TotallyNotJson.1045;
else
dec TotallyNotJson.571;
let TotallyNotJson.1098 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.580 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1098;
let TotallyNotJson.1097 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.581 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1097;
joinpoint TotallyNotJson.1083 TotallyNotJson.1082:
if TotallyNotJson.1082 then
dec TotallyNotJson.566;
let TotallyNotJson.1063 : U8 = CallByName TotallyNotJson.63 TotallyNotJson.581;
let TotallyNotJson.1062 : List U8 = CallByName List.4 TotallyNotJson.567 TotallyNotJson.1063;
let TotallyNotJson.1061 : {List U8, List U8} = Struct {TotallyNotJson.570, TotallyNotJson.1062};
jump TotallyNotJson.999 TotallyNotJson.1061;
else
dec TotallyNotJson.570;
jump TotallyNotJson.1080;
in
let TotallyNotJson.1096 : U8 = 92i64;
let TotallyNotJson.1085 : Int1 = CallByName Bool.11 TotallyNotJson.580 TotallyNotJson.1096;
let TotallyNotJson.1086 : Int1 = CallByName TotallyNotJson.62 TotallyNotJson.581;
let TotallyNotJson.1084 : Int1 = CallByName Bool.3 TotallyNotJson.1085 TotallyNotJson.1086;
jump TotallyNotJson.1083 TotallyNotJson.1084;
in
let TotallyNotJson.1104 : U8 = 92i64;
let TotallyNotJson.1101 : Int1 = CallByName Bool.11 TotallyNotJson.573 TotallyNotJson.1104;
let TotallyNotJson.1103 : U8 = 117i64;
let TotallyNotJson.1102 : Int1 = CallByName Bool.11 TotallyNotJson.574 TotallyNotJson.1103;
let TotallyNotJson.1100 : Int1 = CallByName Bool.3 TotallyNotJson.1101 TotallyNotJson.1102;
jump TotallyNotJson.1099 TotallyNotJson.1100;
else
dec TotallyNotJson.571;
dec TotallyNotJson.570;
jump TotallyNotJson.1080;
else
dec TotallyNotJson.571;
dec TotallyNotJson.570;
let TotallyNotJson.1078 : {List U8, List U8} = Struct {TotallyNotJson.566, TotallyNotJson.567};
ret TotallyNotJson.1078;
in
jump TotallyNotJson.999 #Derived_gen.0;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.6 ():
let Test.10 : Int1 = false;
let Test.0 : [C Int1, C Int1, C Int1] = TagId(2) Test.10;
let Test.9 : Int1 = false;
let Test.1 : [C Int1, C Int1, C Int1] = TagId(0) Test.9;
let Test.8 : Int1 = CallByName Bool.7 Test.0 Test.1;
expect Test.8;
let Test.7 : {} = Struct {};
ret Test.7;

View file

@ -1,197 +1,23 @@
procedure Bool.1 ():
let Bool.51 : Int1 = false;
ret Bool.51;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.23 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.23;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.42 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.42;
procedure Bool.11 (#Attr.2, #Attr.3):
let Bool.54 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.54;
procedure Bool.2 ():
let Bool.50 : Int1 = true;
ret Bool.50;
procedure Bool.3 (#Attr.2, #Attr.3):
let Bool.33 : Int1 = lowlevel And #Attr.2 #Attr.3;
ret Bool.33;
procedure Bool.4 (#Attr.2, #Attr.3):
let Bool.53 : Int1 = lowlevel Or #Attr.2 #Attr.3;
ret Bool.53;
let Bool.24 : Int1 = lowlevel Eq #Attr.2 #Attr.3;
ret Bool.24;
procedure Decode.24 (Decode.101):
ret Decode.101;
procedure Decode.25 (Decode.102, Decode.121, Decode.104):
let Decode.124 : {List U8, [C {}, C Str]} = CallByName TotallyNotJson.491 Decode.102 Decode.104;
let Decode.124 : {List U8, [C {}, C Str]} = CallByName Test.76 Decode.102 Decode.104;
ret Decode.124;
procedure Decode.26 (Decode.105, Decode.106):
let Decode.123 : {} = CallByName TotallyNotJson.59;
let Decode.123 : {} = CallByName Test.15;
let Decode.122 : {List U8, [C {}, C Str]} = CallByName Decode.25 Decode.105 Decode.123 Decode.106;
ret Decode.122;
procedure List.1 (List.107):
let List.624 : U64 = CallByName List.6 List.107;
dec List.107;
let List.625 : U64 = 0i64;
let List.623 : Int1 = CallByName Bool.11 List.624 List.625;
ret List.623;
procedure List.104 (List.488, List.489, List.490):
let List.633 : U64 = 0i64;
let List.634 : U64 = CallByName List.6 List.488;
let List.632 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName List.80 List.488 List.489 List.490 List.633 List.634;
ret List.632;
procedure List.2 (List.108, List.109):
let List.615 : U64 = CallByName List.6 List.108;
let List.612 : Int1 = CallByName Num.22 List.109 List.615;
if List.612 then
let List.614 : U8 = CallByName List.66 List.108 List.109;
dec List.108;
let List.613 : [C {}, C U8] = TagId(1) List.614;
ret List.613;
else
dec List.108;
let List.611 : {} = Struct {};
let List.610 : [C {}, C U8] = TagId(0) List.611;
ret List.610;
procedure List.26 (List.201, List.202, List.203):
let List.626 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName List.104 List.201 List.202 List.203;
let List.629 : U8 = 1i64;
let List.630 : U8 = GetTagId List.626;
let List.631 : Int1 = lowlevel Eq List.629 List.630;
if List.631 then
let List.204 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 1) (Index 0) List.626;
ret List.204;
else
let List.205 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 0) (Index 0) List.626;
ret List.205;
procedure List.38 (List.344, List.345):
let List.592 : U64 = CallByName List.6 List.344;
let List.346 : U64 = CallByName Num.77 List.592 List.345;
let List.591 : List U8 = CallByName List.43 List.344 List.346;
ret List.591;
procedure List.4 (List.124, List.125):
let List.602 : U64 = 1i64;
let List.601 : List U8 = CallByName List.70 List.124 List.602;
let List.600 : List U8 = CallByName List.71 List.601 List.125;
ret List.600;
procedure List.43 (List.342, List.343):
let List.582 : U64 = CallByName List.6 List.342;
let List.581 : U64 = CallByName Num.77 List.582 List.343;
let List.576 : {U64, U64} = Struct {List.343, List.581};
let List.575 : List U8 = CallByName List.49 List.342 List.576;
ret List.575;
procedure List.49 (List.420, List.421):
let List.620 : U64 = StructAtIndex 1 List.421;
let List.621 : U64 = StructAtIndex 0 List.421;
let List.619 : List U8 = CallByName List.72 List.420 List.620 List.621;
ret List.619;
procedure List.6 (#Attr.2):
let List.622 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.622;
procedure List.66 (#Attr.2, #Attr.3):
let List.608 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.608;
procedure List.70 (#Attr.2, #Attr.3):
let List.599 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.599;
procedure List.71 (#Attr.2, #Attr.3):
let List.597 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.597;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.580 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.580;
procedure List.8 (#Attr.2, #Attr.3):
let List.594 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.594;
procedure List.80 (#Derived_gen.0, #Derived_gen.1, #Derived_gen.2, #Derived_gen.3, #Derived_gen.4):
joinpoint List.635 List.491 List.492 List.493 List.494 List.495:
let List.637 : Int1 = CallByName Num.22 List.494 List.495;
if List.637 then
let List.646 : U8 = CallByName List.66 List.491 List.494;
let List.638 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = CallByName TotallyNotJson.61 List.492 List.646;
let List.643 : U8 = 1i64;
let List.644 : U8 = GetTagId List.638;
let List.645 : Int1 = lowlevel Eq List.643 List.644;
if List.645 then
let List.496 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 1) (Index 0) List.638;
let List.641 : U64 = 1i64;
let List.640 : U64 = CallByName Num.51 List.494 List.641;
jump List.635 List.491 List.496 List.493 List.640 List.495;
else
dec List.491;
let List.497 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = UnionAtIndex (Id 0) (Index 0) List.638;
let List.642 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) List.497;
ret List.642;
else
dec List.491;
let List.636 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) List.492;
ret List.636;
in
jump List.635 #Derived_gen.0 #Derived_gen.1 #Derived_gen.2 #Derived_gen.3 #Derived_gen.4;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.282 : U8 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.282;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.291;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.294 : U8 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.294;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.316 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.316;
procedure Num.23 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumLte #Attr.2 #Attr.3;
ret Num.300;
procedure Num.25 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumGte #Attr.2 #Attr.3;
ret Num.306;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.317 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.317;
procedure Num.71 (#Attr.2, #Attr.3):
let Num.279 : U8 = lowlevel NumBitwiseOr #Attr.2 #Attr.3;
ret Num.279;
procedure Num.72 (#Attr.2, #Attr.3):
let Num.280 : U8 = lowlevel NumShiftLeftBy #Attr.2 #Attr.3;
ret Num.280;
procedure Num.77 (#Attr.2, #Attr.3):
let Num.313 : U64 = lowlevel NumSubSaturated #Attr.2 #Attr.3;
ret Num.313;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.241;
@ -204,10 +30,6 @@ procedure Str.42 (#Attr.2):
let Str.240 : {I64, U8} = lowlevel StrToNum #Attr.2;
ret Str.240;
procedure Str.43 (#Attr.2):
let Str.249 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8 #Attr.2;
ret Str.249;
procedure Str.60 (Str.185):
let Str.186 : {I64, U8} = CallByName Str.42 Str.185;
dec Str.185;
@ -223,633 +45,59 @@ procedure Str.60 (Str.185):
let Str.233 : [C {}, C I64] = TagId(0) Str.234;
ret Str.233;
procedure Str.9 (Str.67):
let Str.68 : {U64, Str, Int1, U8} = CallByName Str.43 Str.67;
let Str.246 : Int1 = StructAtIndex 2 Str.68;
if Str.246 then
let Str.248 : Str = StructAtIndex 1 Str.68;
let Str.247 : [C {U64, U8}, C Str] = TagId(1) Str.248;
ret Str.247;
else
let Str.244 : U8 = StructAtIndex 3 Str.68;
let Str.245 : U64 = StructAtIndex 0 Str.68;
let #Derived_gen.7 : Str = StructAtIndex 1 Str.68;
dec #Derived_gen.7;
let Str.243 : {U64, U8} = Struct {Str.245, Str.244};
let Str.242 : [C {U64, U8}, C Str] = TagId(0) Str.243;
ret Str.242;
procedure Test.103 ():
let Test.101 : [C Str, C {List U8, I64}] = CallByName Test.19;
let Test.115 : List U8 = Array [];
let Test.116 : I64 = -1234i64;
let Test.114 : {List U8, I64} = Struct {Test.115, Test.116};
let Test.113 : [C Str, C {List U8, I64}] = TagId(1) Test.114;
let Test.112 : Int1 = CallByName Bool.11 Test.101 Test.113;
dec Test.114;
expect Test.112;
dec Test.101;
let Test.111 : {} = Struct {};
ret Test.111;
procedure Test.0 ():
let Test.37 : Str = "-1234";
let Test.35 : List U8 = CallByName Str.12 Test.37;
let Test.36 : {} = CallByName TotallyNotJson.8;
let Test.34 : {List U8, [C {}, C Str]} = CallByName Decode.26 Test.35 Test.36;
let Test.2 : List U8 = StructAtIndex 0 Test.34;
let Test.1 : [C {}, C Str] = StructAtIndex 1 Test.34;
let Test.31 : U8 = 1i64;
let Test.32 : U8 = GetTagId Test.1;
let Test.33 : Int1 = lowlevel Eq Test.31 Test.32;
if Test.33 then
let Test.3 : Str = UnionAtIndex (Id 1) (Index 0) Test.1;
let Test.19 : [C {}, C I64] = CallByName Str.27 Test.3;
let Test.25 : U8 = 1i64;
let Test.26 : U8 = GetTagId Test.19;
let Test.27 : Int1 = lowlevel Eq Test.25 Test.26;
if Test.27 then
let Test.4 : I64 = UnionAtIndex (Id 1) (Index 0) Test.19;
let Test.21 : {List U8, I64} = Struct {Test.2, Test.4};
let Test.20 : [C Str, C {List U8, I64}] = TagId(1) Test.21;
ret Test.20;
procedure Test.15 ():
let Test.137 : {} = Struct {};
let Test.136 : {} = CallByName Decode.24 Test.137;
ret Test.136;
procedure Test.19 ():
let Test.135 : Str = "-1234";
let Test.133 : List U8 = CallByName Str.12 Test.135;
let Test.134 : {} = Struct {};
let Test.132 : {List U8, [C {}, C Str]} = CallByName Decode.26 Test.133 Test.134;
let Test.93 : List U8 = StructAtIndex 0 Test.132;
let Test.92 : [C {}, C Str] = StructAtIndex 1 Test.132;
let Test.129 : U8 = 1i64;
let Test.130 : U8 = GetTagId Test.92;
let Test.131 : Int1 = lowlevel Eq Test.129 Test.130;
if Test.131 then
let Test.94 : Str = UnionAtIndex (Id 1) (Index 0) Test.92;
let Test.117 : [C {}, C I64] = CallByName Str.27 Test.94;
let Test.123 : U8 = 1i64;
let Test.124 : U8 = GetTagId Test.117;
let Test.125 : Int1 = lowlevel Eq Test.123 Test.124;
if Test.125 then
let Test.95 : I64 = UnionAtIndex (Id 1) (Index 0) Test.117;
let Test.119 : {List U8, I64} = Struct {Test.93, Test.95};
let Test.118 : [C Str, C {List U8, I64}] = TagId(1) Test.119;
ret Test.118;
else
dec Test.2;
let Test.24 : Str = "not a number";
let Test.22 : [C Str, C {List U8, I64}] = TagId(0) Test.24;
ret Test.22;
dec Test.93;
let Test.122 : Str = "not a number";
let Test.120 : [C Str, C {List U8, I64}] = TagId(0) Test.122;
ret Test.120;
else
dec Test.2;
dec Test.1;
let Test.30 : Str = "not a number";
let Test.28 : [C Str, C {List U8, I64}] = TagId(0) Test.30;
ret Test.28;
dec Test.92;
dec Test.93;
let Test.128 : Str = "not a number";
let Test.126 : [C Str, C {List U8, I64}] = TagId(0) Test.128;
ret Test.126;
procedure Test.12 ():
let Test.10 : [C Str, C {List U8, I64}] = CallByName Test.0;
let Test.17 : List U8 = Array [];
let Test.18 : I64 = -1234i64;
let Test.16 : {List U8, I64} = Struct {Test.17, Test.18};
let Test.15 : [C Str, C {List U8, I64}] = TagId(1) Test.16;
let Test.14 : Int1 = CallByName Bool.11 Test.10 Test.15;
dec Test.16;
expect Test.14;
dec Test.10;
let Test.13 : {} = Struct {};
ret Test.13;
procedure TotallyNotJson.491 (TotallyNotJson.492, TotallyNotJson.976):
joinpoint TotallyNotJson.1260:
inc TotallyNotJson.492;
let TotallyNotJson.1129 : {List U8, List U8} = CallByName TotallyNotJson.60 TotallyNotJson.492;
let TotallyNotJson.496 : List U8 = StructAtIndex 0 TotallyNotJson.1129;
let TotallyNotJson.495 : List U8 = StructAtIndex 1 TotallyNotJson.1129;
inc TotallyNotJson.495;
let TotallyNotJson.1125 : Int1 = CallByName List.1 TotallyNotJson.495;
if TotallyNotJson.1125 then
dec TotallyNotJson.495;
dec TotallyNotJson.496;
let TotallyNotJson.1128 : {} = Struct {};
let TotallyNotJson.1127 : [C {}, C Str] = TagId(0) TotallyNotJson.1128;
let TotallyNotJson.1126 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.492, TotallyNotJson.1127};
ret TotallyNotJson.1126;
else
let TotallyNotJson.1123 : U64 = CallByName List.6 TotallyNotJson.495;
let TotallyNotJson.1124 : U64 = 2i64;
let TotallyNotJson.1121 : U64 = CallByName Num.77 TotallyNotJson.1123 TotallyNotJson.1124;
let TotallyNotJson.1122 : U64 = 1i64;
let TotallyNotJson.1120 : {U64, U64} = Struct {TotallyNotJson.1121, TotallyNotJson.1122};
let TotallyNotJson.995 : List U8 = CallByName List.49 TotallyNotJson.495 TotallyNotJson.1120;
let TotallyNotJson.996 : {} = Struct {};
let TotallyNotJson.991 : {List U8, List U8} = CallByName TotallyNotJson.500 TotallyNotJson.995;
let TotallyNotJson.992 : {} = Struct {};
let TotallyNotJson.990 : List U8 = CallByName TotallyNotJson.502 TotallyNotJson.991;
let TotallyNotJson.499 : [C {U64, U8}, C Str] = CallByName Str.9 TotallyNotJson.990;
let TotallyNotJson.987 : U8 = 1i64;
let TotallyNotJson.988 : U8 = GetTagId TotallyNotJson.499;
let TotallyNotJson.989 : Int1 = lowlevel Eq TotallyNotJson.987 TotallyNotJson.988;
if TotallyNotJson.989 then
dec TotallyNotJson.492;
let TotallyNotJson.503 : Str = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.499;
let TotallyNotJson.983 : [C {}, C Str] = TagId(1) TotallyNotJson.503;
let TotallyNotJson.982 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.496, TotallyNotJson.983};
ret TotallyNotJson.982;
else
dec TotallyNotJson.499;
dec TotallyNotJson.496;
let TotallyNotJson.986 : {} = Struct {};
let TotallyNotJson.985 : [C {}, C Str] = TagId(0) TotallyNotJson.986;
let TotallyNotJson.984 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.492, TotallyNotJson.985};
ret TotallyNotJson.984;
in
let TotallyNotJson.1258 : U64 = lowlevel ListLenUsize TotallyNotJson.492;
let TotallyNotJson.1259 : U64 = 4i64;
let TotallyNotJson.1265 : Int1 = lowlevel NumGte TotallyNotJson.1258 TotallyNotJson.1259;
if TotallyNotJson.1265 then
let TotallyNotJson.1255 : U64 = 3i64;
let TotallyNotJson.1256 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1255;
let TotallyNotJson.1257 : U8 = 108i64;
let TotallyNotJson.1264 : Int1 = lowlevel Eq TotallyNotJson.1257 TotallyNotJson.1256;
if TotallyNotJson.1264 then
let TotallyNotJson.1252 : U64 = 2i64;
let TotallyNotJson.1253 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1252;
let TotallyNotJson.1254 : U8 = 108i64;
let TotallyNotJson.1263 : Int1 = lowlevel Eq TotallyNotJson.1254 TotallyNotJson.1253;
if TotallyNotJson.1263 then
let TotallyNotJson.1249 : U64 = 1i64;
let TotallyNotJson.1250 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1249;
let TotallyNotJson.1251 : U8 = 117i64;
let TotallyNotJson.1262 : Int1 = lowlevel Eq TotallyNotJson.1251 TotallyNotJson.1250;
if TotallyNotJson.1262 then
let TotallyNotJson.1246 : U64 = 0i64;
let TotallyNotJson.1247 : U8 = lowlevel ListGetUnsafe TotallyNotJson.492 TotallyNotJson.1246;
let TotallyNotJson.1248 : U8 = 110i64;
let TotallyNotJson.1261 : Int1 = lowlevel Eq TotallyNotJson.1248 TotallyNotJson.1247;
if TotallyNotJson.1261 then
let TotallyNotJson.981 : U64 = 4i64;
let TotallyNotJson.978 : List U8 = CallByName List.38 TotallyNotJson.492 TotallyNotJson.981;
let TotallyNotJson.980 : Str = "null";
let TotallyNotJson.979 : [C {}, C Str] = TagId(1) TotallyNotJson.980;
let TotallyNotJson.977 : {List U8, [C {}, C Str]} = Struct {TotallyNotJson.978, TotallyNotJson.979};
ret TotallyNotJson.977;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
else
jump TotallyNotJson.1260;
procedure TotallyNotJson.500 (TotallyNotJson.501):
let TotallyNotJson.1119 : List U8 = Array [];
let TotallyNotJson.998 : {List U8, List U8} = Struct {TotallyNotJson.501, TotallyNotJson.1119};
let TotallyNotJson.997 : {List U8, List U8} = CallByName TotallyNotJson.69 TotallyNotJson.998;
ret TotallyNotJson.997;
procedure TotallyNotJson.502 (TotallyNotJson.993):
let TotallyNotJson.994 : List U8 = StructAtIndex 1 TotallyNotJson.993;
let #Derived_gen.6 : List U8 = StructAtIndex 0 TotallyNotJson.993;
dec #Derived_gen.6;
ret TotallyNotJson.994;
procedure TotallyNotJson.59 ():
let TotallyNotJson.975 : {} = Struct {};
let TotallyNotJson.974 : {} = CallByName Decode.24 TotallyNotJson.975;
ret TotallyNotJson.974;
procedure TotallyNotJson.60 (TotallyNotJson.507):
let TotallyNotJson.1141 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(4) ;
let TotallyNotJson.1142 : {} = Struct {};
inc TotallyNotJson.507;
let TotallyNotJson.1130 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = CallByName List.26 TotallyNotJson.507 TotallyNotJson.1141 TotallyNotJson.1142;
let TotallyNotJson.1138 : U8 = 2i64;
let TotallyNotJson.1139 : U8 = GetTagId TotallyNotJson.1130;
let TotallyNotJson.1140 : Int1 = lowlevel Eq TotallyNotJson.1138 TotallyNotJson.1139;
if TotallyNotJson.1140 then
inc TotallyNotJson.507;
let TotallyNotJson.509 : U64 = UnionAtIndex (Id 2) (Index 0) TotallyNotJson.1130;
let TotallyNotJson.1132 : List U8 = CallByName List.38 TotallyNotJson.507 TotallyNotJson.509;
let TotallyNotJson.1135 : U64 = 0i64;
let TotallyNotJson.1134 : {U64, U64} = Struct {TotallyNotJson.509, TotallyNotJson.1135};
let TotallyNotJson.1133 : List U8 = CallByName List.49 TotallyNotJson.507 TotallyNotJson.1134;
let TotallyNotJson.1131 : {List U8, List U8} = Struct {TotallyNotJson.1132, TotallyNotJson.1133};
ret TotallyNotJson.1131;
else
let TotallyNotJson.1137 : List U8 = Array [];
let TotallyNotJson.1136 : {List U8, List U8} = Struct {TotallyNotJson.507, TotallyNotJson.1137};
ret TotallyNotJson.1136;
procedure TotallyNotJson.61 (TotallyNotJson.510, TotallyNotJson.511):
let TotallyNotJson.1143 : {[C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], U8} = Struct {TotallyNotJson.510, TotallyNotJson.511};
joinpoint TotallyNotJson.1186:
let TotallyNotJson.1184 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(3) ;
let TotallyNotJson.1183 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) TotallyNotJson.1184;
ret TotallyNotJson.1183;
in
let TotallyNotJson.1187 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.1245 : U8 = GetTagId TotallyNotJson.1187;
switch TotallyNotJson.1245:
case 4:
let TotallyNotJson.512 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1189 TotallyNotJson.1188:
if TotallyNotJson.1188 then
let TotallyNotJson.1146 : U64 = 1i64;
let TotallyNotJson.1145 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1146;
let TotallyNotJson.1144 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1145;
ret TotallyNotJson.1144;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1191 : U8 = 34i64;
let TotallyNotJson.1190 : Int1 = CallByName Bool.11 TotallyNotJson.512 TotallyNotJson.1191;
jump TotallyNotJson.1189 TotallyNotJson.1190;
case 0:
let TotallyNotJson.1202 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.515 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1202;
let TotallyNotJson.516 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1199 TotallyNotJson.1193:
if TotallyNotJson.1193 then
let TotallyNotJson.1150 : U64 = 1i64;
let TotallyNotJson.1149 : U64 = CallByName Num.19 TotallyNotJson.515 TotallyNotJson.1150;
let TotallyNotJson.1148 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(2) TotallyNotJson.1149;
let TotallyNotJson.1147 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(0) TotallyNotJson.1148;
ret TotallyNotJson.1147;
else
let TotallyNotJson.1198 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.519 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1198;
let TotallyNotJson.520 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1195 TotallyNotJson.1194:
if TotallyNotJson.1194 then
let TotallyNotJson.1154 : U64 = 1i64;
let TotallyNotJson.1153 : U64 = CallByName Num.19 TotallyNotJson.519 TotallyNotJson.1154;
let TotallyNotJson.1152 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(1) TotallyNotJson.1153;
let TotallyNotJson.1151 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1152;
ret TotallyNotJson.1151;
else
let TotallyNotJson.1185 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.523 : U64 = UnionAtIndex (Id 0) (Index 0) TotallyNotJson.1185;
let TotallyNotJson.1158 : U64 = 1i64;
let TotallyNotJson.1157 : U64 = CallByName Num.19 TotallyNotJson.523 TotallyNotJson.1158;
let TotallyNotJson.1156 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1157;
let TotallyNotJson.1155 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1156;
ret TotallyNotJson.1155;
in
let TotallyNotJson.1197 : U8 = 92i64;
let TotallyNotJson.1196 : Int1 = CallByName Bool.11 TotallyNotJson.520 TotallyNotJson.1197;
jump TotallyNotJson.1195 TotallyNotJson.1196;
in
let TotallyNotJson.1201 : U8 = 34i64;
let TotallyNotJson.1200 : Int1 = CallByName Bool.11 TotallyNotJson.516 TotallyNotJson.1201;
jump TotallyNotJson.1199 TotallyNotJson.1200;
case 1:
let TotallyNotJson.1211 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.526 : U64 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1211;
let TotallyNotJson.527 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1209 TotallyNotJson.1203:
if TotallyNotJson.1203 then
let TotallyNotJson.1162 : U64 = 1i64;
let TotallyNotJson.1161 : U64 = CallByName Num.19 TotallyNotJson.526 TotallyNotJson.1162;
let TotallyNotJson.1160 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1161;
let TotallyNotJson.1159 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1160;
ret TotallyNotJson.1159;
else
let TotallyNotJson.1208 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.530 : U64 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1208;
let TotallyNotJson.531 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1205 TotallyNotJson.1204:
if TotallyNotJson.1204 then
let TotallyNotJson.1166 : U64 = 1i64;
let TotallyNotJson.1165 : U64 = CallByName Num.19 TotallyNotJson.530 TotallyNotJson.1166;
let TotallyNotJson.1164 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(5) TotallyNotJson.1165;
let TotallyNotJson.1163 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1164;
ret TotallyNotJson.1163;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1207 : U8 = 117i64;
let TotallyNotJson.1206 : Int1 = CallByName Bool.11 TotallyNotJson.531 TotallyNotJson.1207;
jump TotallyNotJson.1205 TotallyNotJson.1206;
in
let TotallyNotJson.1210 : Int1 = CallByName TotallyNotJson.62 TotallyNotJson.527;
jump TotallyNotJson.1209 TotallyNotJson.1210;
case 5:
let TotallyNotJson.1232 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.534 : U64 = UnionAtIndex (Id 5) (Index 0) TotallyNotJson.1232;
let TotallyNotJson.535 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1213 TotallyNotJson.1212:
if TotallyNotJson.1212 then
let TotallyNotJson.1170 : U64 = 1i64;
let TotallyNotJson.1169 : U64 = CallByName Num.19 TotallyNotJson.534 TotallyNotJson.1170;
let TotallyNotJson.1168 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(6) TotallyNotJson.1169;
let TotallyNotJson.1167 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1168;
ret TotallyNotJson.1167;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1214 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.535;
jump TotallyNotJson.1213 TotallyNotJson.1214;
case 6:
let TotallyNotJson.1236 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.538 : U64 = UnionAtIndex (Id 6) (Index 0) TotallyNotJson.1236;
let TotallyNotJson.539 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1234 TotallyNotJson.1233:
if TotallyNotJson.1233 then
let TotallyNotJson.1174 : U64 = 1i64;
let TotallyNotJson.1173 : U64 = CallByName Num.19 TotallyNotJson.538 TotallyNotJson.1174;
let TotallyNotJson.1172 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(7) TotallyNotJson.1173;
let TotallyNotJson.1171 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1172;
ret TotallyNotJson.1171;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1235 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.539;
jump TotallyNotJson.1234 TotallyNotJson.1235;
case 7:
let TotallyNotJson.1240 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.542 : U64 = UnionAtIndex (Id 7) (Index 0) TotallyNotJson.1240;
let TotallyNotJson.543 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1238 TotallyNotJson.1237:
if TotallyNotJson.1237 then
let TotallyNotJson.1178 : U64 = 1i64;
let TotallyNotJson.1177 : U64 = CallByName Num.19 TotallyNotJson.542 TotallyNotJson.1178;
let TotallyNotJson.1176 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(8) TotallyNotJson.1177;
let TotallyNotJson.1175 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1176;
ret TotallyNotJson.1175;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1239 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.543;
jump TotallyNotJson.1238 TotallyNotJson.1239;
case 8:
let TotallyNotJson.1244 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = StructAtIndex 0 TotallyNotJson.1143;
let TotallyNotJson.546 : U64 = UnionAtIndex (Id 8) (Index 0) TotallyNotJson.1244;
let TotallyNotJson.547 : U8 = StructAtIndex 1 TotallyNotJson.1143;
joinpoint TotallyNotJson.1242 TotallyNotJson.1241:
if TotallyNotJson.1241 then
let TotallyNotJson.1182 : U64 = 1i64;
let TotallyNotJson.1181 : U64 = CallByName Num.19 TotallyNotJson.546 TotallyNotJson.1182;
let TotallyNotJson.1180 : [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64] = TagId(0) TotallyNotJson.1181;
let TotallyNotJson.1179 : [C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64], C [C U64, C U64, C U64, C , C , C U64, C U64, C U64, C U64]] = TagId(1) TotallyNotJson.1180;
ret TotallyNotJson.1179;
else
jump TotallyNotJson.1186;
in
let TotallyNotJson.1243 : Int1 = CallByName TotallyNotJson.64 TotallyNotJson.547;
jump TotallyNotJson.1242 TotallyNotJson.1243;
default:
jump TotallyNotJson.1186;
procedure TotallyNotJson.62 (TotallyNotJson.552):
switch TotallyNotJson.552:
case 34:
let TotallyNotJson.1087 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1087;
case 92:
let TotallyNotJson.1088 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1088;
case 47:
let TotallyNotJson.1089 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1089;
case 98:
let TotallyNotJson.1090 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1090;
case 102:
let TotallyNotJson.1091 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1091;
case 110:
let TotallyNotJson.1092 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1092;
case 114:
let TotallyNotJson.1093 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1093;
case 116:
let TotallyNotJson.1094 : Int1 = CallByName Bool.2;
ret TotallyNotJson.1094;
default:
let TotallyNotJson.1095 : Int1 = CallByName Bool.1;
ret TotallyNotJson.1095;
procedure TotallyNotJson.63 (TotallyNotJson.553):
switch TotallyNotJson.553:
case 34:
let TotallyNotJson.1064 : U8 = 34i64;
ret TotallyNotJson.1064;
case 92:
let TotallyNotJson.1065 : U8 = 92i64;
ret TotallyNotJson.1065;
case 47:
let TotallyNotJson.1066 : U8 = 47i64;
ret TotallyNotJson.1066;
case 98:
let TotallyNotJson.1067 : U8 = 8i64;
ret TotallyNotJson.1067;
case 102:
let TotallyNotJson.1068 : U8 = 12i64;
ret TotallyNotJson.1068;
case 110:
let TotallyNotJson.1069 : U8 = 10i64;
ret TotallyNotJson.1069;
case 114:
let TotallyNotJson.1070 : U8 = 13i64;
ret TotallyNotJson.1070;
case 116:
let TotallyNotJson.1071 : U8 = 9i64;
ret TotallyNotJson.1071;
default:
ret TotallyNotJson.553;
procedure TotallyNotJson.64 (TotallyNotJson.554):
let TotallyNotJson.1231 : U8 = 48i64;
let TotallyNotJson.1228 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1231;
let TotallyNotJson.1230 : U8 = 57i64;
let TotallyNotJson.1229 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1230;
let TotallyNotJson.1216 : Int1 = CallByName Bool.3 TotallyNotJson.1228 TotallyNotJson.1229;
let TotallyNotJson.1227 : U8 = 97i64;
let TotallyNotJson.1224 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1227;
let TotallyNotJson.1226 : U8 = 102i64;
let TotallyNotJson.1225 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1226;
let TotallyNotJson.1218 : Int1 = CallByName Bool.3 TotallyNotJson.1224 TotallyNotJson.1225;
let TotallyNotJson.1223 : U8 = 65i64;
let TotallyNotJson.1220 : Int1 = CallByName Num.25 TotallyNotJson.554 TotallyNotJson.1223;
let TotallyNotJson.1222 : U8 = 70i64;
let TotallyNotJson.1221 : Int1 = CallByName Num.23 TotallyNotJson.554 TotallyNotJson.1222;
let TotallyNotJson.1219 : Int1 = CallByName Bool.3 TotallyNotJson.1220 TotallyNotJson.1221;
let TotallyNotJson.1217 : Int1 = CallByName Bool.4 TotallyNotJson.1218 TotallyNotJson.1219;
let TotallyNotJson.1215 : Int1 = CallByName Bool.4 TotallyNotJson.1216 TotallyNotJson.1217;
ret TotallyNotJson.1215;
procedure TotallyNotJson.65 (TotallyNotJson.555):
let TotallyNotJson.1043 : U8 = 48i64;
let TotallyNotJson.1040 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1043;
let TotallyNotJson.1042 : U8 = 57i64;
let TotallyNotJson.1041 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1042;
let TotallyNotJson.1037 : Int1 = CallByName Bool.3 TotallyNotJson.1040 TotallyNotJson.1041;
if TotallyNotJson.1037 then
let TotallyNotJson.1039 : U8 = 48i64;
let TotallyNotJson.1038 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1039;
ret TotallyNotJson.1038;
else
let TotallyNotJson.1036 : U8 = 97i64;
let TotallyNotJson.1033 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1036;
let TotallyNotJson.1035 : U8 = 102i64;
let TotallyNotJson.1034 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1035;
let TotallyNotJson.1028 : Int1 = CallByName Bool.3 TotallyNotJson.1033 TotallyNotJson.1034;
if TotallyNotJson.1028 then
let TotallyNotJson.1032 : U8 = 97i64;
let TotallyNotJson.1030 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1032;
let TotallyNotJson.1031 : U8 = 10i64;
let TotallyNotJson.1029 : U8 = CallByName Num.19 TotallyNotJson.1030 TotallyNotJson.1031;
ret TotallyNotJson.1029;
else
let TotallyNotJson.1027 : U8 = 65i64;
let TotallyNotJson.1024 : Int1 = CallByName Num.25 TotallyNotJson.555 TotallyNotJson.1027;
let TotallyNotJson.1026 : U8 = 70i64;
let TotallyNotJson.1025 : Int1 = CallByName Num.23 TotallyNotJson.555 TotallyNotJson.1026;
let TotallyNotJson.1019 : Int1 = CallByName Bool.3 TotallyNotJson.1024 TotallyNotJson.1025;
if TotallyNotJson.1019 then
let TotallyNotJson.1023 : U8 = 65i64;
let TotallyNotJson.1021 : U8 = CallByName Num.20 TotallyNotJson.555 TotallyNotJson.1023;
let TotallyNotJson.1022 : U8 = 10i64;
let TotallyNotJson.1020 : U8 = CallByName Num.19 TotallyNotJson.1021 TotallyNotJson.1022;
ret TotallyNotJson.1020;
else
let TotallyNotJson.1018 : Str = "got an invalid hex char";
Crash TotallyNotJson.1018
procedure TotallyNotJson.66 (TotallyNotJson.556, TotallyNotJson.557):
let TotallyNotJson.1009 : U8 = 4i64;
let TotallyNotJson.1008 : U8 = CallByName Num.72 TotallyNotJson.556 TotallyNotJson.1009;
let TotallyNotJson.1007 : U8 = CallByName Num.71 TotallyNotJson.1008 TotallyNotJson.557;
ret TotallyNotJson.1007;
procedure TotallyNotJson.67 (TotallyNotJson.558, TotallyNotJson.559, TotallyNotJson.560, TotallyNotJson.561):
let TotallyNotJson.562 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.558;
let TotallyNotJson.563 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.559;
let TotallyNotJson.564 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.560;
let TotallyNotJson.565 : U8 = CallByName TotallyNotJson.65 TotallyNotJson.561;
let TotallyNotJson.1016 : U8 = 0i64;
let TotallyNotJson.1013 : Int1 = CallByName Bool.11 TotallyNotJson.562 TotallyNotJson.1016;
let TotallyNotJson.1015 : U8 = 0i64;
let TotallyNotJson.1014 : Int1 = CallByName Bool.11 TotallyNotJson.563 TotallyNotJson.1015;
let TotallyNotJson.1010 : Int1 = CallByName Bool.3 TotallyNotJson.1013 TotallyNotJson.1014;
if TotallyNotJson.1010 then
let TotallyNotJson.1012 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.564 TotallyNotJson.565;
let TotallyNotJson.1011 : List U8 = Array [TotallyNotJson.1012];
ret TotallyNotJson.1011;
else
let TotallyNotJson.1005 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.562 TotallyNotJson.563;
let TotallyNotJson.1006 : U8 = CallByName TotallyNotJson.66 TotallyNotJson.564 TotallyNotJson.565;
let TotallyNotJson.1004 : List U8 = Array [TotallyNotJson.1005, TotallyNotJson.1006];
ret TotallyNotJson.1004;
procedure TotallyNotJson.68 ():
let TotallyNotJson.1049 : U8 = 102i64;
let TotallyNotJson.1050 : U8 = 102i64;
let TotallyNotJson.1051 : U8 = 100i64;
let TotallyNotJson.1052 : U8 = 100i64;
let TotallyNotJson.1048 : List U8 = CallByName TotallyNotJson.67 TotallyNotJson.1049 TotallyNotJson.1050 TotallyNotJson.1051 TotallyNotJson.1052;
ret TotallyNotJson.1048;
procedure TotallyNotJson.69 (#Derived_gen.5):
joinpoint TotallyNotJson.999 TotallyNotJson.970:
let TotallyNotJson.566 : List U8 = StructAtIndex 0 TotallyNotJson.970;
inc 4 TotallyNotJson.566;
let TotallyNotJson.567 : List U8 = StructAtIndex 1 TotallyNotJson.970;
let TotallyNotJson.1118 : U64 = 0i64;
let TotallyNotJson.568 : [C {}, C U8] = CallByName List.2 TotallyNotJson.566 TotallyNotJson.1118;
let TotallyNotJson.1117 : U64 = 1i64;
let TotallyNotJson.569 : [C {}, C U8] = CallByName List.2 TotallyNotJson.566 TotallyNotJson.1117;
let TotallyNotJson.1116 : U64 = 2i64;
let TotallyNotJson.570 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1116;
let TotallyNotJson.1115 : U64 = 6i64;
let TotallyNotJson.571 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1115;
let TotallyNotJson.1000 : {[C {}, C U8], [C {}, C U8]} = Struct {TotallyNotJson.568, TotallyNotJson.569};
joinpoint TotallyNotJson.1080:
let TotallyNotJson.1079 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.582 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1079;
let TotallyNotJson.1077 : U64 = 1i64;
let TotallyNotJson.1075 : List U8 = CallByName List.38 TotallyNotJson.566 TotallyNotJson.1077;
let TotallyNotJson.1076 : List U8 = CallByName List.4 TotallyNotJson.567 TotallyNotJson.582;
let TotallyNotJson.1074 : {List U8, List U8} = Struct {TotallyNotJson.1075, TotallyNotJson.1076};
jump TotallyNotJson.999 TotallyNotJson.1074;
in
let TotallyNotJson.1111 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.1112 : U8 = 1i64;
let TotallyNotJson.1113 : U8 = GetTagId TotallyNotJson.1111;
let TotallyNotJson.1114 : Int1 = lowlevel Eq TotallyNotJson.1112 TotallyNotJson.1113;
if TotallyNotJson.1114 then
let TotallyNotJson.1107 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.1108 : U8 = 1i64;
let TotallyNotJson.1109 : U8 = GetTagId TotallyNotJson.1107;
let TotallyNotJson.1110 : Int1 = lowlevel Eq TotallyNotJson.1108 TotallyNotJson.1109;
if TotallyNotJson.1110 then
let TotallyNotJson.1106 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.573 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1106;
let TotallyNotJson.1105 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.574 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1105;
joinpoint TotallyNotJson.1099 TotallyNotJson.1081:
if TotallyNotJson.1081 then
dec TotallyNotJson.566;
let TotallyNotJson.1057 : U64 = lowlevel ListLenUsize TotallyNotJson.570;
let TotallyNotJson.1058 : U64 = 4i64;
let TotallyNotJson.1059 : Int1 = lowlevel NumGte TotallyNotJson.1057 TotallyNotJson.1058;
if TotallyNotJson.1059 then
let TotallyNotJson.1056 : U64 = 0i64;
let TotallyNotJson.575 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1056;
let TotallyNotJson.1055 : U64 = 1i64;
let TotallyNotJson.576 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1055;
let TotallyNotJson.1054 : U64 = 2i64;
let TotallyNotJson.577 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1054;
let TotallyNotJson.1053 : U64 = 3i64;
let TotallyNotJson.578 : U8 = lowlevel ListGetUnsafe TotallyNotJson.570 TotallyNotJson.1053;
dec TotallyNotJson.570;
let TotallyNotJson.579 : List U8 = CallByName TotallyNotJson.67 TotallyNotJson.575 TotallyNotJson.576 TotallyNotJson.577 TotallyNotJson.578;
let TotallyNotJson.1003 : List U8 = CallByName List.8 TotallyNotJson.567 TotallyNotJson.579;
let TotallyNotJson.1002 : {List U8, List U8} = Struct {TotallyNotJson.571, TotallyNotJson.1003};
jump TotallyNotJson.999 TotallyNotJson.1002;
else
dec TotallyNotJson.571;
let TotallyNotJson.1047 : List U8 = CallByName TotallyNotJson.68;
let TotallyNotJson.1046 : List U8 = CallByName List.8 TotallyNotJson.567 TotallyNotJson.1047;
let TotallyNotJson.1045 : {List U8, List U8} = Struct {TotallyNotJson.570, TotallyNotJson.1046};
jump TotallyNotJson.999 TotallyNotJson.1045;
else
dec TotallyNotJson.571;
let TotallyNotJson.1098 : [C {}, C U8] = StructAtIndex 0 TotallyNotJson.1000;
let TotallyNotJson.580 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1098;
let TotallyNotJson.1097 : [C {}, C U8] = StructAtIndex 1 TotallyNotJson.1000;
let TotallyNotJson.581 : U8 = UnionAtIndex (Id 1) (Index 0) TotallyNotJson.1097;
joinpoint TotallyNotJson.1083 TotallyNotJson.1082:
if TotallyNotJson.1082 then
dec TotallyNotJson.566;
let TotallyNotJson.1063 : U8 = CallByName TotallyNotJson.63 TotallyNotJson.581;
let TotallyNotJson.1062 : List U8 = CallByName List.4 TotallyNotJson.567 TotallyNotJson.1063;
let TotallyNotJson.1061 : {List U8, List U8} = Struct {TotallyNotJson.570, TotallyNotJson.1062};
jump TotallyNotJson.999 TotallyNotJson.1061;
else
dec TotallyNotJson.570;
jump TotallyNotJson.1080;
in
let TotallyNotJson.1096 : U8 = 92i64;
let TotallyNotJson.1085 : Int1 = CallByName Bool.11 TotallyNotJson.580 TotallyNotJson.1096;
let TotallyNotJson.1086 : Int1 = CallByName TotallyNotJson.62 TotallyNotJson.581;
let TotallyNotJson.1084 : Int1 = CallByName Bool.3 TotallyNotJson.1085 TotallyNotJson.1086;
jump TotallyNotJson.1083 TotallyNotJson.1084;
in
let TotallyNotJson.1104 : U8 = 92i64;
let TotallyNotJson.1101 : Int1 = CallByName Bool.11 TotallyNotJson.573 TotallyNotJson.1104;
let TotallyNotJson.1103 : U8 = 117i64;
let TotallyNotJson.1102 : Int1 = CallByName Bool.11 TotallyNotJson.574 TotallyNotJson.1103;
let TotallyNotJson.1100 : Int1 = CallByName Bool.3 TotallyNotJson.1101 TotallyNotJson.1102;
jump TotallyNotJson.1099 TotallyNotJson.1100;
else
dec TotallyNotJson.571;
dec TotallyNotJson.570;
jump TotallyNotJson.1080;
else
dec TotallyNotJson.571;
dec TotallyNotJson.570;
let TotallyNotJson.1078 : {List U8, List U8} = Struct {TotallyNotJson.566, TotallyNotJson.567};
ret TotallyNotJson.1078;
in
jump TotallyNotJson.999 #Derived_gen.5;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.76 (Test.77, Test.138):
let Test.141 : {} = Struct {};
let Test.140 : [C {}, C Str] = TagId(0) Test.141;
let Test.139 : {List U8, [C {}, C Str]} = Struct {Test.77, Test.140};
ret Test.139;

View file

@ -57,8 +57,8 @@ procedure Test.0 ():
else
let Test.22 : Str = "B";
let Test.23 : Int1 = lowlevel Eq Test.22 Test.12;
dec Test.12;
dec Test.22;
dec Test.12;
if Test.23 then
let Test.17 : [C U8, C U8, C ] = TagId(1) Test.2;
jump Test.13 Test.17;

View file

@ -20,9 +20,9 @@ procedure Test.0 ():
if Test.13 then
let Test.6 : {I64, Str} = CallByName Test.1;
let Test.5 : Int1 = CallByName Bool.11 Test.6 Test.4;
dec Test.6;
let #Derived_gen.0 : Str = StructAtIndex 1 Test.4;
dec #Derived_gen.0;
dec Test.6;
ret Test.5;
else
let #Derived_gen.1 : Str = StructAtIndex 1 Test.4;

View file

@ -6,10 +6,10 @@ procedure List.5 (#Attr.2, #Attr.3):
procedure Test.2 (Test.5):
let Test.6 : List [<rnnu>C List *self] = UnionAtIndex (Id 0) (Index 0) Test.5;
inc Test.6;
let #Derived_gen.1 : [<rnnu>C List *self] = Reset { symbol: Test.5, id: UpdateModeId { id: 0 } };
let #Derived_gen.2 : [<rnnu>C List *self] = Reset { symbol: Test.5, id: UpdateModeId { id: 1 } };
let Test.15 : {} = Struct {};
let Test.7 : List [<rnnu>C List *self] = CallByName List.5 Test.6 Test.15;
let Test.14 : [<rnnu>C List *self] = Reuse #Derived_gen.1 UpdateModeId { id: 0 } TagId(0) Test.7;
let Test.14 : [<rnnu>C List *self] = Reuse #Derived_gen.2 UpdateModeId { id: 1 } TagId(0) Test.7;
ret Test.14;
procedure Test.0 ():

View file

@ -10,7 +10,7 @@ procedure Num.21 (#Attr.2, #Attr.3):
let Num.279 : U8 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.279;
procedure Test.1 (#Derived_gen.2, #Derived_gen.3):
procedure Test.1 (#Derived_gen.0, #Derived_gen.1):
joinpoint Test.11 Test.2 Test.3:
let Test.26 : U8 = 0i64;
let Test.22 : Int1 = CallByName Bool.11 Test.2 Test.26;
@ -33,9 +33,9 @@ procedure Test.1 (#Derived_gen.2, #Derived_gen.3):
let Test.14 : [<rnu><null>, C *self U8] = TagId(0) Test.3 Test.2;
jump Test.11 Test.13 Test.14;
in
jump Test.11 #Derived_gen.2 #Derived_gen.3;
jump Test.11 #Derived_gen.0 #Derived_gen.1;
procedure Test.4 (#Derived_gen.0, #Derived_gen.1):
procedure Test.4 (#Derived_gen.2, #Derived_gen.3):
joinpoint Test.15 Test.5 #Attr.12:
let Test.20 : U8 = UnionAtIndex (Id 0) (Index 1) #Attr.12;
let Test.19 : [<rnu><null>, C *self U8] = UnionAtIndex (Id 0) (Index 0) #Attr.12;
@ -61,7 +61,7 @@ procedure Test.4 (#Derived_gen.0, #Derived_gen.1):
decref #Attr.12;
jump #Derived_gen.4;
in
jump Test.15 #Derived_gen.0 #Derived_gen.1;
jump Test.15 #Derived_gen.2 #Derived_gen.3;
procedure Test.6 (Test.7):
ret Test.7;

View file

@ -8,8 +8,8 @@ procedure Str.3 (#Attr.2, #Attr.3):
procedure Test.11 (Test.29, #Attr.12):
let Test.32 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12;
let #Derived_gen.11 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.11 then
let #Derived_gen.9 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.9 then
free #Attr.12;
ret Test.32;
else
@ -19,11 +19,11 @@ procedure Test.11 (Test.29, #Attr.12):
procedure Test.11 (Test.29, Test.10):
ret Test.10;
procedure Test.14 (#Derived_gen.0, #Derived_gen.1):
procedure Test.14 (#Derived_gen.7, #Derived_gen.8):
joinpoint Test.38 Test.37 #Attr.12:
let Test.46 : {} = UnionAtIndex (Id 1) (Index 1) #Attr.12;
let Test.45 : I64 = UnionAtIndex (Id 1) (Index 0) #Attr.12;
joinpoint #Derived_gen.9:
joinpoint #Derived_gen.10:
let Test.44 : {} = Struct {};
let Test.43 : {} = CallByName Test.11 Test.44 Test.46;
let Test.39 : [<r>C {}, C I64 {}] = CallByName Test.9 Test.43 Test.45;
@ -38,15 +38,15 @@ procedure Test.14 (#Derived_gen.0, #Derived_gen.1):
jump Test.38 Test.41 Test.39;
in
let #Derived_gen.10 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.10 then
let #Derived_gen.11 : Int1 = lowlevel RefCountIsUnique #Attr.12;
if #Derived_gen.11 then
free #Attr.12;
jump #Derived_gen.9;
jump #Derived_gen.10;
else
decref #Attr.12;
jump #Derived_gen.9;
jump #Derived_gen.10;
in
jump Test.38 #Derived_gen.0 #Derived_gen.1;
jump Test.38 #Derived_gen.7 #Derived_gen.8;
procedure Test.2 ():
let Test.6 : Str = "Hello";

View file

@ -23,7 +23,7 @@ procedure Test.2 (Test.9, Test.10):
let Test.29 : U64 = CallByName Test.3 Test.9;
ret Test.29;
else
joinpoint #Derived_gen.1:
joinpoint #Derived_gen.4:
let Test.13 : Str = UnionAtIndex (Id 0) (Index 0) Test.10;
let Test.14 : [<rnu><null>, C Str *self] = UnionAtIndex (Id 0) (Index 1) Test.10;
let Test.33 : U64 = CallByName Test.3 Test.12;
@ -36,15 +36,15 @@ procedure Test.2 (Test.9, Test.10):
else
ret Test.16;
in
let #Derived_gen.2 : Int1 = lowlevel RefCountIsUnique Test.9;
if #Derived_gen.2 then
let #Derived_gen.5 : Int1 = lowlevel RefCountIsUnique Test.9;
if #Derived_gen.5 then
dec Test.11;
free Test.9;
jump #Derived_gen.1;
jump #Derived_gen.4;
else
inc Test.12;
decref Test.9;
jump #Derived_gen.1;
jump #Derived_gen.4;
procedure Test.3 (Test.17):
let Test.26 : U8 = 1i64;
@ -55,22 +55,22 @@ procedure Test.3 (Test.17):
ret Test.22;
else
let Test.18 : [<rnu><null>, C Str *self] = UnionAtIndex (Id 0) (Index 1) Test.17;
joinpoint #Derived_gen.3:
joinpoint #Derived_gen.1:
let Test.24 : U64 = 1i64;
let Test.25 : U64 = CallByName Test.3 Test.18;
let Test.23 : U64 = CallByName Num.19 Test.24 Test.25;
ret Test.23;
in
let #Derived_gen.5 : Int1 = lowlevel RefCountIsUnique Test.17;
if #Derived_gen.5 then
let #Derived_gen.4 : Str = UnionAtIndex (Id 0) (Index 0) Test.17;
dec #Derived_gen.4;
let #Derived_gen.3 : Int1 = lowlevel RefCountIsUnique Test.17;
if #Derived_gen.3 then
let #Derived_gen.2 : Str = UnionAtIndex (Id 0) (Index 0) Test.17;
dec #Derived_gen.2;
free Test.17;
jump #Derived_gen.3;
jump #Derived_gen.1;
else
inc Test.18;
decref Test.17;
jump #Derived_gen.3;
jump #Derived_gen.1;
procedure Test.0 ():
let Test.5 : [<rnu><null>, C Str *self] = TagId(1) ;

View file

@ -12,483 +12,198 @@ procedure Encode.23 (Encode.98):
ret Encode.98;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.111 : List U8 = CallByName Test.5 Encode.99 Encode.101 Encode.107;
let Encode.111 : List U8 = CallByName Test.213 Encode.99 Encode.101 Encode.107;
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
let Encode.115 : List U8 = CallByName Test.63 Encode.99 Encode.101 Encode.107;
ret Encode.115;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.118 : List U8 = CallByName TotallyNotJson.150 Encode.99 Encode.101 Encode.107;
ret Encode.118;
let Encode.116 : List U8 = CallByName Test.59 Encode.99 Encode.101 Encode.107;
ret Encode.116;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
let Encode.110 : {Str, Str} = CallByName Test.2 Encode.105;
let Encode.110 : {Str, Str} = CallByName Test.49 Encode.105;
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.104 (List.488, List.489, List.490):
let List.657 : U64 = 0i64;
let List.658 : U64 = CallByName List.6 List.488;
let List.656 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.488 List.489 List.490 List.657 List.658;
ret List.656;
procedure List.18 (List.160, List.161, List.162):
let List.601 : U64 = 0i64;
let List.602 : U64 = CallByName List.6 List.160;
let List.600 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.601 List.602;
procedure List.13 (#Attr.2, #Attr.3):
let List.600 : List Str = lowlevel ListPrepend #Attr.2 #Attr.3;
ret List.600;
procedure List.18 (List.160, List.161, List.162):
let List.613 : U64 = 0i64;
let List.614 : U64 = CallByName List.6 List.160;
let List.612 : List U8 = CallByName List.92 List.160 List.161 List.162 List.613 List.614;
ret List.612;
procedure List.26 (List.201, List.202, List.203):
let List.650 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.104 List.201 List.202 List.203;
let List.653 : U8 = 1i64;
let List.654 : U8 = GetTagId List.650;
let List.655 : Int1 = lowlevel Eq List.653 List.654;
if List.655 then
let List.204 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.650;
ret List.204;
else
let List.205 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.650;
ret List.205;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.4 (List.124, List.125):
let List.599 : U64 = 1i64;
let List.598 : List U8 = CallByName List.70 List.124 List.599;
let List.597 : List U8 = CallByName List.71 List.598 List.125;
ret List.597;
procedure List.49 (List.420, List.421):
let List.641 : U64 = StructAtIndex 1 List.421;
let List.642 : U64 = StructAtIndex 0 List.421;
let List.640 : List U8 = CallByName List.72 List.420 List.641 List.642;
ret List.640;
procedure List.52 (List.435, List.436):
let List.437 : U64 = CallByName List.6 List.435;
joinpoint List.648 List.438:
let List.646 : U64 = 0i64;
let List.645 : {U64, U64} = Struct {List.438, List.646};
inc List.435;
let List.439 : List U8 = CallByName List.49 List.435 List.645;
let List.644 : U64 = CallByName Num.75 List.437 List.438;
let List.639 : {U64, U64} = Struct {List.644, List.438};
let List.440 : List U8 = CallByName List.49 List.435 List.639;
let List.638 : {List U8, List U8} = Struct {List.439, List.440};
ret List.638;
in
let List.649 : Int1 = CallByName Num.24 List.437 List.436;
if List.649 then
jump List.648 List.436;
else
jump List.648 List.437;
let List.596 : U64 = 1i64;
let List.595 : List U8 = CallByName List.70 List.124 List.596;
let List.594 : List U8 = CallByName List.71 List.595 List.125;
ret List.594;
procedure List.6 (#Attr.2):
let List.624 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.624;
procedure List.6 (#Attr.2):
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.66 (#Attr.2, #Attr.3):
let List.610 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.610;
procedure List.66 (#Attr.2, #Attr.3):
let List.622 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.622;
procedure List.68 (#Attr.2):
let List.637 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.637;
let List.584 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.70 (#Attr.2, #Attr.3):
let List.578 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.578;
let List.590 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.590;
procedure List.71 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.576;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.643 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.643;
let List.588 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.588;
procedure List.8 (#Attr.2, #Attr.3):
let List.635 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.635;
let List.598 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.598;
procedure List.80 (#Derived_gen.8, #Derived_gen.9, #Derived_gen.10, #Derived_gen.11, #Derived_gen.12):
joinpoint List.659 List.491 List.492 List.493 List.494 List.495:
let List.661 : Int1 = CallByName Num.22 List.494 List.495;
if List.661 then
let List.670 : U8 = CallByName List.66 List.491 List.494;
let List.662 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.492 List.670;
let List.667 : U8 = 1i64;
let List.668 : U8 = GetTagId List.662;
let List.669 : Int1 = lowlevel Eq List.667 List.668;
if List.669 then
let List.496 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.662;
let List.665 : U64 = 1i64;
let List.664 : U64 = CallByName Num.51 List.494 List.665;
jump List.659 List.491 List.496 List.493 List.664 List.495;
else
dec List.491;
let List.497 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.662;
let List.666 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.497;
ret List.666;
else
dec List.491;
let List.660 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.492;
ret List.660;
in
jump List.659 #Derived_gen.8 #Derived_gen.9 #Derived_gen.10 #Derived_gen.11 #Derived_gen.12;
procedure List.92 (#Derived_gen.16, #Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20):
joinpoint List.615 List.163 List.164 List.165 List.166 List.167:
let List.617 : Int1 = CallByName Num.22 List.166 List.167;
if List.617 then
let List.621 : U8 = CallByName List.66 List.163 List.166;
let List.168 : List U8 = CallByName TotallyNotJson.183 List.164 List.621;
let List.620 : U64 = 1i64;
let List.619 : U64 = CallByName Num.51 List.166 List.620;
jump List.615 List.163 List.168 List.165 List.619 List.167;
procedure List.92 (#Derived_gen.0, #Derived_gen.1, #Derived_gen.2, #Derived_gen.3, #Derived_gen.4):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : Str = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.66 List.164 List.583 List.165;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.615 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20;
procedure List.92 (#Derived_gen.3, #Derived_gen.4, #Derived_gen.5, #Derived_gen.6, #Derived_gen.7):
joinpoint List.603 List.163 List.164 List.165 List.166 List.167:
let List.605 : Int1 = CallByName Num.22 List.166 List.167;
if List.605 then
let List.609 : Str = CallByName List.66 List.163 List.166;
inc List.609;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.233 List.164 List.609;
let List.608 : U64 = 1i64;
let List.607 : U64 = CallByName Num.51 List.166 List.608;
jump List.603 List.163 List.168 List.165 List.607 List.167;
else
dec List.163;
ret List.164;
in
jump List.603 #Derived_gen.3 #Derived_gen.4 #Derived_gen.5 #Derived_gen.6 #Derived_gen.7;
jump List.577 #Derived_gen.0 #Derived_gen.1 #Derived_gen.2 #Derived_gen.3 #Derived_gen.4;
procedure Num.127 (#Attr.2):
let Num.286 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.286;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.291;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.287;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.292 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.292;
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.298 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.298;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.300;
let Num.282 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.282;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.295 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.295;
let Num.281 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.281;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.299;
procedure Num.96 (#Attr.2):
let Num.279 : Str = lowlevel NumToStr #Attr.2;
ret Num.279;
procedure Str.12 (#Attr.2):
let Str.233 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.233;
procedure Test.2 (Test.10):
let Test.15 : {Str, Str} = CallByName Encode.23 Test.10;
ret Test.15;
procedure Str.36 (#Attr.2):
let Str.234 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.234;
procedure Test.20 (Test.58):
let Test.295 : Str = CallByName Encode.23 Test.58;
ret Test.295;
procedure Test.21 (Test.61, Test.62):
let Test.275 : {List Str, {}} = Struct {Test.61, Test.62};
let Test.274 : {List Str, {}} = CallByName Encode.23 Test.275;
ret Test.274;
procedure Test.213 (Test.214, Test.215, Test.212):
joinpoint Test.267 Test.216:
let Test.265 : List U8 = CallByName Encode.24 Test.214 Test.216 Test.215;
ret Test.265;
in
let Test.308 : Int1 = CallByName Bool.2;
if Test.308 then
let Test.309 : Str = "A";
let Test.312 : Str = StructAtIndex 0 Test.212;
let #Derived_gen.17 : Str = StructAtIndex 1 Test.212;
dec #Derived_gen.17;
let Test.311 : Str = CallByName Test.20 Test.312;
let Test.310 : List Str = Array [Test.311];
let Test.266 : {List Str, {}} = CallByName Test.24 Test.309 Test.310;
jump Test.267 Test.266;
else
let Test.268 : Str = "B";
let Test.307 : Str = StructAtIndex 1 Test.212;
let #Derived_gen.18 : Str = StructAtIndex 0 Test.212;
dec #Derived_gen.18;
let Test.306 : Str = CallByName Test.20 Test.307;
let Test.269 : List Str = Array [Test.306];
let Test.266 : {List Str, {}} = CallByName Test.24 Test.268 Test.269;
jump Test.267 Test.266;
procedure Test.23 (Test.77):
let Test.273 : {} = Struct {};
let Test.272 : {List Str, {}} = CallByName Test.21 Test.77 Test.273;
ret Test.272;
procedure Test.24 (Test.80, Test.81):
let Test.294 : Str = CallByName Test.20 Test.80;
let Test.271 : List Str = CallByName List.13 Test.81 Test.294;
let Test.270 : {List Str, {}} = CallByName Test.23 Test.271;
ret Test.270;
procedure Test.3 ():
let Test.9 : Str = "";
inc Test.9;
let Test.14 : {Str, Str} = Struct {Test.9, Test.9};
ret Test.14;
let Test.260 : {} = Struct {};
ret Test.260;
procedure Test.5 (Test.6, Test.7, Test.4):
joinpoint Test.20 Test.8:
let Test.18 : List U8 = CallByName Encode.24 Test.6 Test.8 Test.7;
ret Test.18;
in
let Test.25 : Int1 = CallByName Bool.2;
if Test.25 then
let Test.26 : Str = "A";
let Test.29 : Str = StructAtIndex 0 Test.4;
let #Derived_gen.24 : Str = StructAtIndex 1 Test.4;
dec #Derived_gen.24;
let Test.28 : Str = CallByName TotallyNotJson.25 Test.29;
let Test.27 : List Str = Array [Test.28];
let Test.19 : {Str, List Str} = CallByName TotallyNotJson.31 Test.26 Test.27;
jump Test.20 Test.19;
else
let Test.21 : Str = "B";
let Test.24 : Str = StructAtIndex 1 Test.4;
let #Derived_gen.25 : Str = StructAtIndex 0 Test.4;
dec #Derived_gen.25;
let Test.23 : Str = CallByName TotallyNotJson.25 Test.24;
let Test.22 : List Str = Array [Test.23];
let Test.19 : {Str, List Str} = CallByName TotallyNotJson.31 Test.21 Test.22;
jump Test.20 Test.19;
procedure Test.4 (Test.51, Test.52, Test.53):
let Test.292 : U8 = CallByName Num.127 Test.52;
let Test.289 : List U8 = CallByName List.4 Test.51 Test.292;
let Test.291 : Str = CallByName Num.96 Test.53;
let Test.290 : List U8 = CallByName Str.12 Test.291;
let Test.287 : List U8 = CallByName List.8 Test.289 Test.290;
let Test.288 : U8 = 32i64;
let Test.286 : List U8 = CallByName List.4 Test.287 Test.288;
ret Test.286;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1020, TotallyNotJson.149):
let TotallyNotJson.1023 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1022 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1023;
ret TotallyNotJson.1022;
procedure Test.49 (Test.255):
let Test.262 : {Str, Str} = CallByName Encode.23 Test.255;
ret Test.262;
procedure TotallyNotJson.157 (TotallyNotJson.1071, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1071;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1071;
switch TotallyNotJson.160:
case 34:
let TotallyNotJson.1074 : Int1 = false;
let TotallyNotJson.1073 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1074};
let TotallyNotJson.1072 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1073;
ret TotallyNotJson.1072;
case 92:
let TotallyNotJson.1077 : Int1 = false;
let TotallyNotJson.1076 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1077};
let TotallyNotJson.1075 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1076;
ret TotallyNotJson.1075;
case 47:
let TotallyNotJson.1080 : Int1 = false;
let TotallyNotJson.1079 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1080};
let TotallyNotJson.1078 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1079;
ret TotallyNotJson.1078;
case 8:
let TotallyNotJson.1083 : Int1 = false;
let TotallyNotJson.1082 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1083};
let TotallyNotJson.1081 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1082;
ret TotallyNotJson.1081;
case 12:
let TotallyNotJson.1086 : Int1 = false;
let TotallyNotJson.1085 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1086};
let TotallyNotJson.1084 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1085;
ret TotallyNotJson.1084;
case 10:
let TotallyNotJson.1089 : Int1 = false;
let TotallyNotJson.1088 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1089};
let TotallyNotJson.1087 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1088;
ret TotallyNotJson.1087;
case 13:
let TotallyNotJson.1092 : Int1 = false;
let TotallyNotJson.1091 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1092};
let TotallyNotJson.1090 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1091;
ret TotallyNotJson.1090;
case 9:
let TotallyNotJson.1095 : Int1 = false;
let TotallyNotJson.1094 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1095};
let TotallyNotJson.1093 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1094;
ret TotallyNotJson.1093;
default:
let TotallyNotJson.1099 : U64 = 1i64;
let TotallyNotJson.1098 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1099;
let TotallyNotJson.1097 : {U64, Int1} = Struct {TotallyNotJson.1098, TotallyNotJson.159};
let TotallyNotJson.1096 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1097;
ret TotallyNotJson.1096;
procedure Test.50 ():
let Test.217 : Str = "";
inc Test.217;
let Test.261 : {Str, Str} = Struct {Test.217, Test.217};
ret Test.261;
procedure TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1042 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1041 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1042;
ret TotallyNotJson.1041;
procedure Test.59 (Test.60, Test.297, Test.58):
let Test.304 : I64 = 115i64;
let Test.305 : U64 = CallByName Str.36 Test.58;
let Test.302 : List U8 = CallByName Test.4 Test.60 Test.304 Test.305;
let Test.303 : List U8 = CallByName Str.12 Test.58;
let Test.300 : List U8 = CallByName List.8 Test.302 Test.303;
let Test.301 : U8 = 32i64;
let Test.299 : List U8 = CallByName List.4 Test.300 Test.301;
ret Test.299;
procedure TotallyNotJson.231 (TotallyNotJson.232, TotallyNotJson.976, #Attr.12):
let TotallyNotJson.230 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.229 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1014 : I64 = 123i64;
let TotallyNotJson.1013 : U8 = CallByName Num.127 TotallyNotJson.1014;
let TotallyNotJson.1010 : List U8 = CallByName List.4 TotallyNotJson.232 TotallyNotJson.1013;
let TotallyNotJson.1012 : I64 = 34i64;
let TotallyNotJson.1011 : U8 = CallByName Num.127 TotallyNotJson.1012;
let TotallyNotJson.1008 : List U8 = CallByName List.4 TotallyNotJson.1010 TotallyNotJson.1011;
let TotallyNotJson.1009 : List U8 = CallByName Str.12 TotallyNotJson.229;
let TotallyNotJson.1005 : List U8 = CallByName List.8 TotallyNotJson.1008 TotallyNotJson.1009;
let TotallyNotJson.1007 : I64 = 34i64;
let TotallyNotJson.1006 : U8 = CallByName Num.127 TotallyNotJson.1007;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 58i64;
let TotallyNotJson.1003 : U8 = CallByName Num.127 TotallyNotJson.1004;
let TotallyNotJson.999 : List U8 = CallByName List.4 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 91i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.234 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : U64 = CallByName List.6 TotallyNotJson.230;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.234, TotallyNotJson.998};
let TotallyNotJson.987 : {} = Struct {};
let TotallyNotJson.985 : {List U8, U64} = CallByName List.18 TotallyNotJson.230 TotallyNotJson.986 TotallyNotJson.987;
let TotallyNotJson.236 : List U8 = StructAtIndex 0 TotallyNotJson.985;
let TotallyNotJson.984 : I64 = 93i64;
let TotallyNotJson.983 : U8 = CallByName Num.127 TotallyNotJson.984;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.236 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.979 : List U8 = CallByName List.4 TotallyNotJson.980 TotallyNotJson.981;
ret TotallyNotJson.979;
procedure Test.63 (Test.64, Test.276, #Attr.12):
let Test.62 : {} = StructAtIndex 1 #Attr.12;
let Test.61 : List Str = StructAtIndex 0 #Attr.12;
let Test.284 : I64 = 108i64;
let Test.285 : U64 = CallByName List.6 Test.61;
let Test.65 : List U8 = CallByName Test.4 Test.64 Test.284 Test.285;
let Test.278 : List U8 = CallByName List.18 Test.61 Test.65 Test.62;
ret Test.278;
procedure TotallyNotJson.233 (TotallyNotJson.978, TotallyNotJson.239):
let TotallyNotJson.237 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.238 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.997 : {} = Struct {};
let TotallyNotJson.240 : List U8 = CallByName Encode.24 TotallyNotJson.237 TotallyNotJson.239 TotallyNotJson.997;
joinpoint TotallyNotJson.992 TotallyNotJson.241:
let TotallyNotJson.990 : U64 = 1i64;
let TotallyNotJson.989 : U64 = CallByName Num.20 TotallyNotJson.238 TotallyNotJson.990;
let TotallyNotJson.988 : {List U8, U64} = Struct {TotallyNotJson.241, TotallyNotJson.989};
ret TotallyNotJson.988;
in
let TotallyNotJson.996 : U64 = 1i64;
let TotallyNotJson.993 : Int1 = CallByName Num.24 TotallyNotJson.238 TotallyNotJson.996;
if TotallyNotJson.993 then
let TotallyNotJson.995 : I64 = 44i64;
let TotallyNotJson.994 : U8 = CallByName Num.127 TotallyNotJson.995;
let TotallyNotJson.991 : List U8 = CallByName List.4 TotallyNotJson.240 TotallyNotJson.994;
jump TotallyNotJson.992 TotallyNotJson.991;
else
jump TotallyNotJson.992 TotallyNotJson.240;
procedure Test.66 (Test.67, Test.68, Test.62):
let Test.282 : Str = CallByName Test.78 Test.68;
let Test.283 : {} = Struct {};
let Test.281 : List U8 = CallByName Encode.24 Test.67 Test.282 Test.283;
ret Test.281;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1102 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1102;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1100 : U64 = 0i64;
let TotallyNotJson.1101 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1100, TotallyNotJson.1101};
let TotallyNotJson.1070 : {} = Struct {};
inc TotallyNotJson.153;
let TotallyNotJson.155 : {U64, Int1} = CallByName List.26 TotallyNotJson.153 TotallyNotJson.154 TotallyNotJson.1070;
let TotallyNotJson.1024 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1068 : Int1 = true;
let TotallyNotJson.1069 : Int1 = lowlevel Eq TotallyNotJson.1068 TotallyNotJson.1024;
if TotallyNotJson.1069 then
let TotallyNotJson.1034 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1035 : U64 = 2i64;
let TotallyNotJson.1033 : U64 = CallByName Num.19 TotallyNotJson.1034 TotallyNotJson.1035;
let TotallyNotJson.1030 : List U8 = CallByName List.68 TotallyNotJson.1033;
let TotallyNotJson.1032 : U8 = 34i64;
let TotallyNotJson.1031 : List U8 = Array [TotallyNotJson.1032];
let TotallyNotJson.1029 : List U8 = CallByName List.8 TotallyNotJson.1030 TotallyNotJson.1031;
let TotallyNotJson.1026 : List U8 = CallByName List.8 TotallyNotJson.1029 TotallyNotJson.153;
let TotallyNotJson.1028 : U8 = 34i64;
let TotallyNotJson.1027 : List U8 = Array [TotallyNotJson.1028];
let TotallyNotJson.1025 : List U8 = CallByName List.8 TotallyNotJson.1026 TotallyNotJson.1027;
ret TotallyNotJson.1025;
else
inc TotallyNotJson.153;
let TotallyNotJson.1067 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1066 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1067;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1066;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1066;
let TotallyNotJson.1064 : U64 = CallByName List.6 TotallyNotJson.153;
dec TotallyNotJson.153;
let TotallyNotJson.1065 : U64 = 120i64;
let TotallyNotJson.1062 : U64 = CallByName Num.21 TotallyNotJson.1064 TotallyNotJson.1065;
let TotallyNotJson.1063 : U64 = 100i64;
let TotallyNotJson.1061 : U64 = CallByName Num.137 TotallyNotJson.1062 TotallyNotJson.1063;
let TotallyNotJson.1058 : List U8 = CallByName List.68 TotallyNotJson.1061;
let TotallyNotJson.1060 : U8 = 34i64;
let TotallyNotJson.1059 : List U8 = Array [TotallyNotJson.1060];
let TotallyNotJson.1057 : List U8 = CallByName List.8 TotallyNotJson.1058 TotallyNotJson.1059;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1057 TotallyNotJson.179;
let TotallyNotJson.1040 : {} = Struct {};
let TotallyNotJson.1037 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1040;
let TotallyNotJson.1039 : U8 = 34i64;
let TotallyNotJson.1038 : List U8 = Array [TotallyNotJson.1039];
let TotallyNotJson.1036 : List U8 = CallByName List.8 TotallyNotJson.1037 TotallyNotJson.1038;
ret TotallyNotJson.1036;
procedure TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1043 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1043;
case 92:
let TotallyNotJson.1044 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1044;
case 47:
let TotallyNotJson.1045 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1045;
case 8:
let TotallyNotJson.1047 : U8 = 98i64;
let TotallyNotJson.1046 : List U8 = Array [92i64, TotallyNotJson.1047];
ret TotallyNotJson.1046;
case 12:
let TotallyNotJson.1049 : U8 = 102i64;
let TotallyNotJson.1048 : List U8 = Array [92i64, TotallyNotJson.1049];
ret TotallyNotJson.1048;
case 10:
let TotallyNotJson.1051 : U8 = 110i64;
let TotallyNotJson.1050 : List U8 = Array [92i64, TotallyNotJson.1051];
ret TotallyNotJson.1050;
case 13:
let TotallyNotJson.1053 : U8 = 114i64;
let TotallyNotJson.1052 : List U8 = Array [92i64, TotallyNotJson.1053];
ret TotallyNotJson.1052;
case 9:
let TotallyNotJson.1055 : U8 = 114i64;
let TotallyNotJson.1054 : List U8 = Array [92i64, TotallyNotJson.1055];
ret TotallyNotJson.1054;
default:
let TotallyNotJson.1056 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1056;
procedure TotallyNotJson.31 (TotallyNotJson.229, TotallyNotJson.230):
let TotallyNotJson.1016 : {Str, List Str} = Struct {TotallyNotJson.229, TotallyNotJson.230};
let TotallyNotJson.1015 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.1016;
ret TotallyNotJson.1015;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.78 (Test.79):
ret Test.79;
procedure Test.0 ():
let Test.12 : {Str, Str} = CallByName Test.3;
let Test.13 : {} = CallByName TotallyNotJson.8;
let Test.11 : List U8 = CallByName Encode.26 Test.12 Test.13;
ret Test.11;
let Test.258 : {Str, Str} = CallByName Test.50;
let Test.259 : {} = CallByName Test.3;
let Test.257 : List U8 = CallByName Encode.26 Test.258 Test.259;
ret Test.257;

View file

@ -1,6 +1,6 @@
procedure #Derived.0 (#Derived.1):
let #Derived_gen.11 : [C {}, C {}] = TagId(0) #Derived.1;
let #Derived_gen.10 : [C {}, C {}] = CallByName Encode.23 #Derived_gen.11;
let #Derived_gen.11 : [C {}, C {}, C Str] = TagId(0) #Derived.1;
let #Derived_gen.10 : [C {}, C {}, C Str] = CallByName Encode.23 #Derived_gen.11;
ret #Derived_gen.10;
procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
@ -10,13 +10,13 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
ret #Derived_gen.13;
in
let #Derived_gen.17 : Str = "A";
let #Derived_gen.18 : List [] = Array [];
let #Derived_gen.16 : {Str, List []} = CallByName TotallyNotJson.31 #Derived_gen.17 #Derived_gen.18;
let #Derived_gen.18 : List Str = Array [];
let #Derived_gen.16 : {List Str, {}} = CallByName Test.24 #Derived_gen.17 #Derived_gen.18;
jump #Derived_gen.15 #Derived_gen.16;
procedure #Derived.5 (#Derived.6):
let #Derived_gen.1 : [C {}, C {}] = TagId(1) #Derived.6;
let #Derived_gen.0 : [C {}, C {}] = CallByName Encode.23 #Derived_gen.1;
let #Derived_gen.1 : [C {}, C {}, C Str] = TagId(1) #Derived.6;
let #Derived_gen.0 : [C {}, C {}, C Str] = CallByName Encode.23 #Derived_gen.1;
ret #Derived_gen.0;
procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12):
@ -26,8 +26,8 @@ procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12):
ret #Derived_gen.3;
in
let #Derived_gen.7 : Str = "B";
let #Derived_gen.8 : List [] = Array [];
let #Derived_gen.6 : {Str, List []} = CallByName TotallyNotJson.31 #Derived_gen.7 #Derived_gen.8;
let #Derived_gen.8 : List Str = Array [];
let #Derived_gen.6 : {List Str, {}} = CallByName Test.24 #Derived_gen.7 #Derived_gen.8;
jump #Derived_gen.5 #Derived_gen.6;
procedure Bool.2 ():
@ -46,18 +46,16 @@ procedure Encode.23 (Encode.98):
procedure Encode.23 (Encode.98):
ret Encode.98;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
dec Encode.99;
let Encode.125 : Str = "a Lambda Set is empty. Most likely there is a type error in your program.";
Crash Encode.125
procedure Encode.23 (Encode.98):
ret Encode.98;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.111 : List U8 = CallByName Test.5 Encode.99 Encode.101 Encode.107;
let Encode.111 : List U8 = CallByName Test.213 Encode.99 Encode.101 Encode.107;
ret Encode.111;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
let Encode.115 : List U8 = CallByName Test.63 Encode.99 Encode.101 Encode.107;
ret Encode.115;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.117 : U8 = GetTagId Encode.107;
@ -66,276 +64,284 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.116 : List U8 = CallByName #Derived.2 Encode.99 Encode.101 Encode.107;
ret Encode.116;
default:
case 1:
let Encode.116 : List U8 = CallByName #Derived.7 Encode.99 Encode.101 Encode.107;
ret Encode.116;
default:
let Encode.116 : List U8 = CallByName Test.59 Encode.99 Encode.101 Encode.107;
ret Encode.116;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.121 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
let Encode.121 : List U8 = CallByName Test.63 Encode.99 Encode.101 Encode.107;
ret Encode.121;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.124 : List U8 = CallByName Test.59 Encode.99 Encode.101 Encode.107;
ret Encode.124;
procedure Encode.26 (Encode.105, Encode.106):
let Encode.109 : List U8 = Array [];
let Encode.110 : {{}, {}} = CallByName Test.2 Encode.105;
let Encode.110 : {{}, {}} = CallByName Test.49 Encode.105;
let Encode.108 : List U8 = CallByName Encode.24 Encode.109 Encode.110 Encode.106;
ret Encode.108;
procedure List.18 (List.160, List.161, List.162):
let List.601 : U64 = 0i64;
let List.602 : U64 = CallByName List.6 List.160;
let List.600 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.601 List.602;
procedure List.13 (#Attr.2, #Attr.3):
let List.600 : List [C {}, C {}, C Str] = lowlevel ListPrepend #Attr.2 #Attr.3;
ret List.600;
procedure List.13 (#Attr.2, #Attr.3):
let List.628 : List Str = lowlevel ListPrepend #Attr.2 #Attr.3;
ret List.628;
procedure List.18 (List.160, List.161, List.162):
let List.641 : U64 = 0i64;
let List.642 : U64 = CallByName List.6 List.160;
let List.640 : {List U8, U64} = CallByName List.92 List.160 List.161 List.162 List.641 List.642;
ret List.640;
let List.575 : U64 = 0i64;
let List.576 : U64 = CallByName List.6 List.160;
let List.574 : List U8 = CallByName List.92 List.160 List.161 List.162 List.575 List.576;
ret List.574;
procedure List.18 (List.160, List.161, List.162):
let List.602 : U64 = 0i64;
let List.603 : U64 = CallByName List.6 List.160;
let List.601 : List U8 = CallByName List.92 List.160 List.161 List.162 List.602 List.603;
ret List.601;
procedure List.4 (List.124, List.125):
let List.639 : U64 = 1i64;
let List.638 : List U8 = CallByName List.70 List.124 List.639;
let List.637 : List U8 = CallByName List.71 List.638 List.125;
ret List.637;
let List.623 : U64 = 1i64;
let List.622 : List U8 = CallByName List.70 List.124 List.623;
let List.621 : List U8 = CallByName List.71 List.622 List.125;
ret List.621;
procedure List.6 (#Attr.2):
let List.612 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.612;
let List.599 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.599;
procedure List.6 (#Attr.2):
let List.652 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.652;
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
procedure List.66 (#Attr.2, #Attr.3):
let List.610 : [C {}, C {}] = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.610;
let List.584 : [C {}, C {}, C Str] = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.584;
procedure List.66 (#Attr.2, #Attr.3):
let List.650 : [] = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.650;
let List.611 : Str = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.611;
procedure List.70 (#Attr.2, #Attr.3):
let List.618 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.618;
let List.617 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.617;
procedure List.71 (#Attr.2, #Attr.3):
let List.616 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.616;
let List.615 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.615;
procedure List.8 (#Attr.2, #Attr.3):
let List.653 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.653;
let List.625 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.625;
procedure List.92 (#Derived_gen.20, #Derived_gen.21, #Derived_gen.22, #Derived_gen.23, #Derived_gen.24):
joinpoint List.603 List.163 List.164 List.165 List.166 List.167:
let List.605 : Int1 = CallByName Num.22 List.166 List.167;
if List.605 then
let List.609 : [C {}, C {}] = CallByName List.66 List.163 List.166;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.233 List.164 List.609;
let List.608 : U64 = 1i64;
let List.607 : U64 = CallByName Num.51 List.166 List.608;
jump List.603 List.163 List.168 List.165 List.607 List.167;
procedure List.92 (#Derived_gen.29, #Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_gen.33):
joinpoint List.577 List.163 List.164 List.165 List.166 List.167:
let List.579 : Int1 = CallByName Num.22 List.166 List.167;
if List.579 then
let List.583 : [C {}, C {}, C Str] = CallByName List.66 List.163 List.166;
inc List.583;
let List.168 : List U8 = CallByName Test.66 List.164 List.583 List.165;
let List.582 : U64 = 1i64;
let List.581 : U64 = CallByName Num.51 List.166 List.582;
jump List.577 List.163 List.168 List.165 List.581 List.167;
else
dec List.163;
ret List.164;
in
jump List.603 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22 #Derived_gen.23 #Derived_gen.24;
jump List.577 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33;
procedure List.92 (#Derived_gen.40, #Derived_gen.41, #Derived_gen.42, #Derived_gen.43, #Derived_gen.44):
joinpoint List.643 List.163 List.164 List.165 List.166 List.167:
let List.645 : Int1 = CallByName Num.22 List.166 List.167;
if List.645 then
let List.649 : [] = CallByName List.66 List.163 List.166;
let List.168 : {List U8, U64} = CallByName TotallyNotJson.233 List.164 List.649;
let List.648 : U64 = 1i64;
let List.647 : U64 = CallByName Num.51 List.166 List.648;
jump List.643 List.163 List.168 List.165 List.647 List.167;
procedure List.92 (#Derived_gen.52, #Derived_gen.53, #Derived_gen.54, #Derived_gen.55, #Derived_gen.56):
joinpoint List.604 List.163 List.164 List.165 List.166 List.167:
let List.606 : Int1 = CallByName Num.22 List.166 List.167;
if List.606 then
let List.610 : Str = CallByName List.66 List.163 List.166;
inc List.610;
let List.168 : List U8 = CallByName Test.66 List.164 List.610 List.165;
let List.609 : U64 = 1i64;
let List.608 : U64 = CallByName Num.51 List.166 List.609;
jump List.604 List.163 List.168 List.165 List.608 List.167;
else
dec List.163;
ret List.164;
in
jump List.643 #Derived_gen.40 #Derived_gen.41 #Derived_gen.42 #Derived_gen.43 #Derived_gen.44;
jump List.604 #Derived_gen.52 #Derived_gen.53 #Derived_gen.54 #Derived_gen.55 #Derived_gen.56;
procedure Num.127 (#Attr.2):
let Num.298 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.298;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.299;
let Num.284 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.284;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.302 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.302;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.300 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.300;
let Num.286 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.286;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.301 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.301;
let Num.285 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.285;
procedure Num.96 (#Attr.2):
let Num.283 : Str = lowlevel NumToStr #Attr.2;
ret Num.283;
procedure Str.12 (#Attr.2):
let Str.233 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.233;
let Str.236 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.236;
procedure Test.2 (Test.11):
let Test.18 : {{}, {}} = CallByName Encode.23 Test.11;
ret Test.18;
procedure Str.36 (#Attr.2):
let Str.237 : U64 = lowlevel StrCountUtf8Bytes #Attr.2;
ret Str.237;
procedure Test.20 (Test.58):
let Test.299 : [C {}, C {}, C Str] = TagId(2) Test.58;
let Test.298 : [C {}, C {}, C Str] = CallByName Encode.23 Test.299;
ret Test.298;
procedure Test.20 (Test.58):
let Test.342 : Str = CallByName Encode.23 Test.58;
ret Test.342;
procedure Test.21 (Test.61, Test.62):
let Test.278 : {List [C {}, C {}, C Str], {}} = Struct {Test.61, Test.62};
let Test.277 : {List [C {}, C {}, C Str], {}} = CallByName Encode.23 Test.278;
ret Test.277;
procedure Test.21 (Test.61, Test.62):
let Test.322 : {List Str, {}} = Struct {Test.61, Test.62};
let Test.321 : {List Str, {}} = CallByName Encode.23 Test.322;
ret Test.321;
procedure Test.213 (Test.214, Test.215, Test.212):
joinpoint Test.270 Test.216:
let Test.268 : List U8 = CallByName Encode.24 Test.214 Test.216 Test.215;
ret Test.268;
in
let Test.312 : Int1 = CallByName Bool.2;
if Test.312 then
let Test.313 : Str = "A";
let Test.316 : {} = StructAtIndex 0 Test.212;
let Test.315 : [C {}, C {}, C Str] = CallByName #Derived.0 Test.316;
let Test.314 : List [C {}, C {}, C Str] = Array [Test.315];
let Test.269 : {List [C {}, C {}, C Str], {}} = CallByName Test.24 Test.313 Test.314;
jump Test.270 Test.269;
else
let Test.271 : Str = "B";
let Test.311 : {} = StructAtIndex 1 Test.212;
let Test.310 : [C {}, C {}, C Str] = CallByName #Derived.5 Test.311;
let Test.272 : List [C {}, C {}, C Str] = Array [Test.310];
let Test.269 : {List [C {}, C {}, C Str], {}} = CallByName Test.24 Test.271 Test.272;
jump Test.270 Test.269;
procedure Test.23 (Test.77):
let Test.276 : {} = Struct {};
let Test.275 : {List [C {}, C {}, C Str], {}} = CallByName Test.21 Test.77 Test.276;
ret Test.275;
procedure Test.23 (Test.77):
let Test.320 : {} = Struct {};
let Test.319 : {List Str, {}} = CallByName Test.21 Test.77 Test.320;
ret Test.319;
procedure Test.24 (Test.80, Test.81):
let Test.297 : [C {}, C {}, C Str] = CallByName Test.20 Test.80;
let Test.274 : List [C {}, C {}, C Str] = CallByName List.13 Test.81 Test.297;
let Test.273 : {List [C {}, C {}, C Str], {}} = CallByName Test.23 Test.274;
ret Test.273;
procedure Test.24 (Test.80, Test.81):
let Test.355 : Str = CallByName Test.20 Test.80;
let Test.354 : List Str = CallByName List.13 Test.81 Test.355;
let Test.353 : {List Str, {}} = CallByName Test.23 Test.354;
ret Test.353;
procedure Test.3 ():
let Test.16 : {} = Struct {};
let Test.17 : {} = Struct {};
let Test.15 : {{}, {}} = Struct {Test.16, Test.17};
ret Test.15;
let Test.261 : {} = Struct {};
ret Test.261;
procedure Test.5 (Test.6, Test.7, Test.4):
joinpoint Test.23 Test.8:
let Test.21 : List U8 = CallByName Encode.24 Test.6 Test.8 Test.7;
ret Test.21;
in
let Test.28 : Int1 = CallByName Bool.2;
if Test.28 then
let Test.29 : Str = "A";
let Test.32 : {} = StructAtIndex 0 Test.4;
let Test.31 : [C {}, C {}] = CallByName #Derived.0 Test.32;
let Test.30 : List [C {}, C {}] = Array [Test.31];
let Test.22 : {Str, List [C {}, C {}]} = CallByName TotallyNotJson.31 Test.29 Test.30;
jump Test.23 Test.22;
else
let Test.24 : Str = "B";
let Test.27 : {} = StructAtIndex 1 Test.4;
let Test.26 : [C {}, C {}] = CallByName #Derived.5 Test.27;
let Test.25 : List [C {}, C {}] = Array [Test.26];
let Test.22 : {Str, List [C {}, C {}]} = CallByName TotallyNotJson.31 Test.24 Test.25;
jump Test.23 Test.22;
procedure Test.4 (Test.51, Test.52, Test.53):
let Test.339 : U8 = CallByName Num.127 Test.52;
let Test.336 : List U8 = CallByName List.4 Test.51 Test.339;
let Test.338 : Str = CallByName Num.96 Test.53;
let Test.337 : List U8 = CallByName Str.12 Test.338;
let Test.334 : List U8 = CallByName List.8 Test.336 Test.337;
let Test.335 : U8 = 32i64;
let Test.333 : List U8 = CallByName List.4 Test.334 Test.335;
ret Test.333;
procedure TotallyNotJson.231 (TotallyNotJson.232, TotallyNotJson.976, #Attr.12):
let TotallyNotJson.230 : List [C {}, C {}] = StructAtIndex 1 #Attr.12;
let TotallyNotJson.229 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1014 : I64 = 123i64;
let TotallyNotJson.1013 : U8 = CallByName Num.127 TotallyNotJson.1014;
let TotallyNotJson.1010 : List U8 = CallByName List.4 TotallyNotJson.232 TotallyNotJson.1013;
let TotallyNotJson.1012 : I64 = 34i64;
let TotallyNotJson.1011 : U8 = CallByName Num.127 TotallyNotJson.1012;
let TotallyNotJson.1008 : List U8 = CallByName List.4 TotallyNotJson.1010 TotallyNotJson.1011;
let TotallyNotJson.1009 : List U8 = CallByName Str.12 TotallyNotJson.229;
let TotallyNotJson.1005 : List U8 = CallByName List.8 TotallyNotJson.1008 TotallyNotJson.1009;
let TotallyNotJson.1007 : I64 = 34i64;
let TotallyNotJson.1006 : U8 = CallByName Num.127 TotallyNotJson.1007;
let TotallyNotJson.1002 : List U8 = CallByName List.4 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 58i64;
let TotallyNotJson.1003 : U8 = CallByName Num.127 TotallyNotJson.1004;
let TotallyNotJson.999 : List U8 = CallByName List.4 TotallyNotJson.1002 TotallyNotJson.1003;
let TotallyNotJson.1001 : I64 = 91i64;
let TotallyNotJson.1000 : U8 = CallByName Num.127 TotallyNotJson.1001;
let TotallyNotJson.234 : List U8 = CallByName List.4 TotallyNotJson.999 TotallyNotJson.1000;
let TotallyNotJson.998 : U64 = CallByName List.6 TotallyNotJson.230;
let TotallyNotJson.986 : {List U8, U64} = Struct {TotallyNotJson.234, TotallyNotJson.998};
let TotallyNotJson.987 : {} = Struct {};
let TotallyNotJson.985 : {List U8, U64} = CallByName List.18 TotallyNotJson.230 TotallyNotJson.986 TotallyNotJson.987;
let TotallyNotJson.236 : List U8 = StructAtIndex 0 TotallyNotJson.985;
let TotallyNotJson.984 : I64 = 93i64;
let TotallyNotJson.983 : U8 = CallByName Num.127 TotallyNotJson.984;
let TotallyNotJson.980 : List U8 = CallByName List.4 TotallyNotJson.236 TotallyNotJson.983;
let TotallyNotJson.982 : I64 = 125i64;
let TotallyNotJson.981 : U8 = CallByName Num.127 TotallyNotJson.982;
let TotallyNotJson.979 : List U8 = CallByName List.4 TotallyNotJson.980 TotallyNotJson.981;
ret TotallyNotJson.979;
procedure Test.49 (Test.256):
let Test.265 : {{}, {}} = CallByName Encode.23 Test.256;
ret Test.265;
procedure TotallyNotJson.231 (TotallyNotJson.232, TotallyNotJson.976, #Attr.12):
let TotallyNotJson.230 : List [] = StructAtIndex 1 #Attr.12;
let TotallyNotJson.229 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1057 : I64 = 123i64;
let TotallyNotJson.1056 : U8 = CallByName Num.127 TotallyNotJson.1057;
let TotallyNotJson.1053 : List U8 = CallByName List.4 TotallyNotJson.232 TotallyNotJson.1056;
let TotallyNotJson.1055 : I64 = 34i64;
let TotallyNotJson.1054 : U8 = CallByName Num.127 TotallyNotJson.1055;
let TotallyNotJson.1051 : List U8 = CallByName List.4 TotallyNotJson.1053 TotallyNotJson.1054;
let TotallyNotJson.1052 : List U8 = CallByName Str.12 TotallyNotJson.229;
let TotallyNotJson.1048 : List U8 = CallByName List.8 TotallyNotJson.1051 TotallyNotJson.1052;
let TotallyNotJson.1050 : I64 = 34i64;
let TotallyNotJson.1049 : U8 = CallByName Num.127 TotallyNotJson.1050;
let TotallyNotJson.1045 : List U8 = CallByName List.4 TotallyNotJson.1048 TotallyNotJson.1049;
let TotallyNotJson.1047 : I64 = 58i64;
let TotallyNotJson.1046 : U8 = CallByName Num.127 TotallyNotJson.1047;
let TotallyNotJson.1042 : List U8 = CallByName List.4 TotallyNotJson.1045 TotallyNotJson.1046;
let TotallyNotJson.1044 : I64 = 91i64;
let TotallyNotJson.1043 : U8 = CallByName Num.127 TotallyNotJson.1044;
let TotallyNotJson.234 : List U8 = CallByName List.4 TotallyNotJson.1042 TotallyNotJson.1043;
let TotallyNotJson.1041 : U64 = CallByName List.6 TotallyNotJson.230;
let TotallyNotJson.1029 : {List U8, U64} = Struct {TotallyNotJson.234, TotallyNotJson.1041};
let TotallyNotJson.1030 : {} = Struct {};
let TotallyNotJson.1028 : {List U8, U64} = CallByName List.18 TotallyNotJson.230 TotallyNotJson.1029 TotallyNotJson.1030;
let TotallyNotJson.236 : List U8 = StructAtIndex 0 TotallyNotJson.1028;
let TotallyNotJson.1027 : I64 = 93i64;
let TotallyNotJson.1026 : U8 = CallByName Num.127 TotallyNotJson.1027;
let TotallyNotJson.1023 : List U8 = CallByName List.4 TotallyNotJson.236 TotallyNotJson.1026;
let TotallyNotJson.1025 : I64 = 125i64;
let TotallyNotJson.1024 : U8 = CallByName Num.127 TotallyNotJson.1025;
let TotallyNotJson.1022 : List U8 = CallByName List.4 TotallyNotJson.1023 TotallyNotJson.1024;
ret TotallyNotJson.1022;
procedure Test.50 ():
let Test.263 : {} = Struct {};
let Test.264 : {} = Struct {};
let Test.262 : {{}, {}} = Struct {Test.263, Test.264};
ret Test.262;
procedure TotallyNotJson.233 (TotallyNotJson.978, TotallyNotJson.239):
let TotallyNotJson.237 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.238 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.1040 : {} = Struct {};
let TotallyNotJson.240 : List U8 = CallByName Encode.24 TotallyNotJson.237 TotallyNotJson.239 TotallyNotJson.1040;
joinpoint TotallyNotJson.1035 TotallyNotJson.241:
let TotallyNotJson.1033 : U64 = 1i64;
let TotallyNotJson.1032 : U64 = CallByName Num.20 TotallyNotJson.238 TotallyNotJson.1033;
let TotallyNotJson.1031 : {List U8, U64} = Struct {TotallyNotJson.241, TotallyNotJson.1032};
ret TotallyNotJson.1031;
in
let TotallyNotJson.1039 : U64 = 1i64;
let TotallyNotJson.1036 : Int1 = CallByName Num.24 TotallyNotJson.238 TotallyNotJson.1039;
if TotallyNotJson.1036 then
let TotallyNotJson.1038 : I64 = 44i64;
let TotallyNotJson.1037 : U8 = CallByName Num.127 TotallyNotJson.1038;
let TotallyNotJson.1034 : List U8 = CallByName List.4 TotallyNotJson.240 TotallyNotJson.1037;
jump TotallyNotJson.1035 TotallyNotJson.1034;
else
jump TotallyNotJson.1035 TotallyNotJson.240;
procedure Test.59 (Test.60, Test.300, #Attr.12):
let Test.309 : Str = UnionAtIndex (Id 2) (Index 0) #Attr.12;
let Test.307 : I64 = 115i64;
let Test.308 : U64 = CallByName Str.36 Test.309;
let Test.305 : List U8 = CallByName Test.4 Test.60 Test.307 Test.308;
let Test.306 : List U8 = CallByName Str.12 Test.309;
let Test.303 : List U8 = CallByName List.8 Test.305 Test.306;
let Test.304 : U8 = 32i64;
let Test.302 : List U8 = CallByName List.4 Test.303 Test.304;
ret Test.302;
procedure TotallyNotJson.233 (TotallyNotJson.978, TotallyNotJson.239):
let TotallyNotJson.237 : List U8 = StructAtIndex 0 TotallyNotJson.978;
let TotallyNotJson.238 : U64 = StructAtIndex 1 TotallyNotJson.978;
let TotallyNotJson.997 : {} = Struct {};
let TotallyNotJson.240 : List U8 = CallByName Encode.24 TotallyNotJson.237 TotallyNotJson.239 TotallyNotJson.997;
joinpoint TotallyNotJson.992 TotallyNotJson.241:
let TotallyNotJson.990 : U64 = 1i64;
let TotallyNotJson.989 : U64 = CallByName Num.20 TotallyNotJson.238 TotallyNotJson.990;
let TotallyNotJson.988 : {List U8, U64} = Struct {TotallyNotJson.241, TotallyNotJson.989};
ret TotallyNotJson.988;
in
let TotallyNotJson.996 : U64 = 1i64;
let TotallyNotJson.993 : Int1 = CallByName Num.24 TotallyNotJson.238 TotallyNotJson.996;
if TotallyNotJson.993 then
let TotallyNotJson.995 : I64 = 44i64;
let TotallyNotJson.994 : U8 = CallByName Num.127 TotallyNotJson.995;
let TotallyNotJson.991 : List U8 = CallByName List.4 TotallyNotJson.240 TotallyNotJson.994;
jump TotallyNotJson.992 TotallyNotJson.991;
else
jump TotallyNotJson.992 TotallyNotJson.240;
procedure Test.59 (Test.60, Test.300, Test.58):
let Test.351 : I64 = 115i64;
let Test.352 : U64 = CallByName Str.36 Test.58;
let Test.349 : List U8 = CallByName Test.4 Test.60 Test.351 Test.352;
let Test.350 : List U8 = CallByName Str.12 Test.58;
let Test.347 : List U8 = CallByName List.8 Test.349 Test.350;
let Test.348 : U8 = 32i64;
let Test.346 : List U8 = CallByName List.4 Test.347 Test.348;
ret Test.346;
procedure TotallyNotJson.31 (TotallyNotJson.229, TotallyNotJson.230):
let TotallyNotJson.1016 : {Str, List [C {}, C {}]} = Struct {TotallyNotJson.229, TotallyNotJson.230};
let TotallyNotJson.1015 : {Str, List [C {}, C {}]} = CallByName Encode.23 TotallyNotJson.1016;
ret TotallyNotJson.1015;
procedure Test.63 (Test.64, Test.279, #Attr.12):
let Test.62 : {} = StructAtIndex 1 #Attr.12;
let Test.61 : List Str = StructAtIndex 0 #Attr.12;
let Test.331 : I64 = 108i64;
let Test.332 : U64 = CallByName List.6 Test.61;
let Test.65 : List U8 = CallByName Test.4 Test.64 Test.331 Test.332;
let Test.325 : List U8 = CallByName List.18 Test.61 Test.65 Test.62;
ret Test.325;
procedure TotallyNotJson.31 (TotallyNotJson.229, TotallyNotJson.230):
let TotallyNotJson.1059 : {Str, List []} = Struct {TotallyNotJson.229, TotallyNotJson.230};
let TotallyNotJson.1058 : {Str, List []} = CallByName Encode.23 TotallyNotJson.1059;
ret TotallyNotJson.1058;
procedure Test.63 (Test.64, Test.279, #Attr.12):
let Test.62 : {} = StructAtIndex 1 #Attr.12;
let Test.61 : List [C {}, C {}, C Str] = StructAtIndex 0 #Attr.12;
let Test.287 : I64 = 108i64;
let Test.288 : U64 = CallByName List.6 Test.61;
let Test.65 : List U8 = CallByName Test.4 Test.64 Test.287 Test.288;
let Test.281 : List U8 = CallByName List.18 Test.61 Test.65 Test.62;
ret Test.281;
procedure TotallyNotJson.8 ():
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.66 (Test.67, Test.68, Test.62):
let Test.285 : [C {}, C {}, C Str] = CallByName Test.78 Test.68;
let Test.286 : {} = Struct {};
let Test.284 : List U8 = CallByName Encode.24 Test.67 Test.285 Test.286;
ret Test.284;
procedure Test.66 (Test.67, Test.68, Test.62):
let Test.329 : Str = CallByName Test.78 Test.68;
let Test.330 : {} = Struct {};
let Test.328 : List U8 = CallByName Encode.24 Test.67 Test.329 Test.330;
ret Test.328;
procedure Test.78 (Test.79):
ret Test.79;
procedure Test.78 (Test.79):
ret Test.79;
procedure Test.0 ():
let Test.13 : {{}, {}} = CallByName Test.3;
let Test.14 : {} = CallByName TotallyNotJson.8;
let Test.12 : List U8 = CallByName Encode.26 Test.13 Test.14;
ret Test.12;
let Test.259 : {{}, {}} = CallByName Test.50;
let Test.260 : {} = CallByName Test.3;
let Test.258 : List U8 = CallByName Encode.26 Test.259 Test.260;
ret Test.258;

View file

@ -5,15 +5,13 @@
// we actually want to compare against the literal float bits
#![allow(clippy::float_cmp)]
#[macro_use]
extern crate indoc;
/// Used in the with_larger_debug_stack() function, for tests that otherwise
/// run out of stack space in debug builds (but don't in --release builds)
#[allow(dead_code)]
const EXPANDED_STACK_SIZE: usize = 8 * 1024 * 1024;
use bumpalo::Bump;
use indoc::{formatdoc, indoc};
use roc_collections::all::MutMap;
use roc_load::ExecutionMode;
use roc_load::FunctionKind;
@ -25,10 +23,59 @@ use roc_module::symbol::Symbol;
use roc_mono::ir::Proc;
use roc_mono::ir::ProcLayout;
use roc_mono::layout::STLayoutInterner;
use roc_test_utils::TAG_LEN_ENCODER_FMT;
use test_mono_macros::*;
const TARGET: roc_target::Target = roc_target::Target::LinuxX64;
/// err decoder is a trivial implementation of a decoder which only returns an error
/// useful when you need a decoder implementation, but want minimal code generation
pub const ERR_DECODER_FMT: &str = r#"
ErrDecoder := {} implements [
DecoderFormatting {
u8: decodeU8,
u16: decodeU16,
u32: decodeU32,
u64: decodeU64,
u128: decodeU128,
i8: decodeI8,
i16: decodeI16,
i32: decodeI32,
i64: decodeI64,
i128: decodeI128,
f32: decodeF32,
f64: decodeF64,
dec: decodeDec,
bool: decodeBool,
string: decodeString,
list: decodeList,
record: decodeRecord,
tuple: decodeTuple,
},
]
decodeU8 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeU16 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeU32 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeU64 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeU128 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeI8 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeI16 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeI32 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeI64 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeI128 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeF32 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeF64 = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeDec = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeBool = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeString = Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeList : Decoder elem ErrDecoder -> Decoder (List elem) ErrDecoder
decodeList = \_ -> Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeRecord : state, (state, Str -> [Keep (Decoder state ErrDecoder), Skip]), (state, ErrDecoder -> Result val DecodeError) -> Decoder val ErrDecoder
decodeRecord = \_, _, _ -> Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
decodeTuple : state, (state, U64 -> [Next (Decoder state ErrDecoder), TooLong]), (state -> Result val DecodeError) -> Decoder val ErrDecoder
decodeTuple = \_, _, _ -> Decode.custom \rest, @ErrDecoder {} -> { result: Err TooShort, rest }
"#;
/// Without this, some tests pass in `cargo test --release` but fail without
/// the --release flag because they run out of stack space. This increases
/// stack size for debug builds only, while leaving the stack space at the default
@ -1522,20 +1569,22 @@ fn list_sort_asc() {
#[mono_test]
#[ignore]
fn encode_custom_type() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
HelloWorld := {}
toEncoder = \@HelloWorld {} ->
{TAG_LEN_ENCODER_FMT}
HelloWorld := {{}}
toEncoder = \@HelloWorld {{}} ->
Encode.custom \bytes, fmt ->
bytes
|> Encode.appendWith (Encode.string "Hello, World!\n") fmt
main =
result = Str.fromUtf8 (Encode.toBytes (@HelloWorld {}) TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes (@HelloWorld {{}}) tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1545,14 +1594,16 @@ fn encode_custom_type() {
#[mono_test]
fn encode_derived_string() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
result = Str.fromUtf8 (Encode.toBytes "abc" TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes "abc" tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1563,14 +1614,16 @@ fn encode_derived_string() {
#[mono_test]
#[ignore = "TODO"]
fn encode_derived_record() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
result = Str.fromUtf8 (Encode.toBytes {a: "a"} TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes {{a: "a"}} tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1905,14 +1958,16 @@ fn instantiate_annotated_as_recursive_alias_multiple_polymorphic_expr() {
#[mono_test(large_stack = "true")]
fn encode_derived_record_one_field_string() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
result = Str.fromUtf8 (Encode.toBytes {a: "foo"} TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes {{a: "foo"}} tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1922,14 +1977,16 @@ fn encode_derived_record_one_field_string() {
#[mono_test(large_stack = "true")]
fn encode_derived_record_two_field_strings() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
result = Str.fromUtf8 (Encode.toBytes {a: "foo", b: "bar"} TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes {{a: "foo", b: "bar"}} tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1939,14 +1996,16 @@ fn encode_derived_record_two_field_strings() {
#[mono_test(large_stack = "true")]
fn encode_derived_nested_record_string() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
result = Str.fromUtf8 (Encode.toBytes {a: {b: "bar"}} TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes {{a: {{b: "bar"}}}} tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1956,16 +2015,18 @@ fn encode_derived_nested_record_string() {
#[mono_test]
fn encode_derived_tag_one_field_string() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
x : [A Str]
x = A "foo"
result = Str.fromUtf8 (Encode.toBytes x TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes x tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -1997,16 +2058,18 @@ fn polymorphic_expression_unification() {
#[mono_test]
fn encode_derived_tag_two_payloads_string() {
indoc!(
&formatdoc!(
r#"
app "test"
imports [Encode.{ toEncoder }, TotallyNotJson]
imports [Encode.{{ toEncoder }}]
provides [main] to "./platform"
{TAG_LEN_ENCODER_FMT}
main =
x : [A Str Str]
x = A "foo" "foo"
result = Str.fromUtf8 (Encode.toBytes x TotallyNotJson.json)
result = Str.fromUtf8 (Encode.toBytes x tagLenFmt)
when result is
Ok s -> s
_ -> "<bad>"
@ -2271,14 +2334,18 @@ fn issue_4705() {
#[mono_test(mode = "test", large_stack = "true")]
fn issue_4749() {
indoc!(
&formatdoc!(
r#"
interface Test exposes [] imports [TotallyNotJson]
interface Test exposes [] imports []
expect
input = [82, 111, 99]
got = Decode.fromBytes input TotallyNotJson.json
got == Ok "Roc"
got : [Y [Y1, Y2], Z [Z1, Z2]]_
got = Z Z1
t : [A [A1, A2]]_
t = A A1
got != t
"#
)
}
@ -2485,18 +2552,20 @@ fn function_specialization_information_in_lambda_set_thunk_independent_defs() {
#[mono_test(mode = "test", large_stack = "true")]
fn issue_4772_weakened_monomorphic_destructure() {
indoc!(
&formatdoc!(
r#"
interface Test exposes [] imports [TotallyNotJson]
interface Test exposes [] imports []
{ERR_DECODER_FMT}
getNumber =
{ result, rest } = Decode.fromBytesPartial (Str.toUtf8 "-1234") TotallyNotJson.json
{{ result, rest }} = Decode.fromBytesPartial (Str.toUtf8 "-1234") (@ErrDecoder {{}})
when result is
Ok val ->
when Str.toI64 val is
Ok number ->
Ok {val : number, input : rest}
Ok {{val : number, input : rest}}
Err InvalidNumStr ->
Err (ParsingFailure "not a number")
@ -2505,7 +2574,7 @@ fn issue_4772_weakened_monomorphic_destructure() {
expect
result = getNumber
result == Ok {val : -1234i64, input : []}
result == Ok {{val : -1234i64, input : []}}
"#
)
}
@ -2682,11 +2751,13 @@ fn unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unifica
// be, because they in fact represent to different specializations of needed encoders. In
// particular, the lambda set `[[] + [A]:toEncoder:1 + [B]:toEncoder:1]` must be preserved,
// rather than collapsing to `[[] + [A, B]:toEncoder:1]`.
indoc!(
&formatdoc!(
r#"
app "test" imports [TotallyNotJson] provides [main] to "./platform"
app "test" imports [] provides [main] to "./platform"
Q a b := { a: a, b: b } implements [Encoding {toEncoder: toEncoderQ}]
{TAG_LEN_ENCODER_FMT}
Q a b := {{ a: a, b: b }} implements [Encoding {{toEncoder: toEncoderQ}}]
toEncoderQ =
\@Q t -> Encode.custom \bytes, fmt ->
@ -2696,10 +2767,10 @@ fn unspecialized_lambda_set_unification_keeps_all_concrete_types_without_unifica
Encode.appendWith bytes f fmt
accessor = @Q {a : A, b: B}
accessor = @Q {{a : A, b: B}}
main =
Encode.toBytes accessor TotallyNotJson.json
Encode.toBytes accessor tagLenFmt
"#
)
}
@ -2720,11 +2791,13 @@ fn unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_ty
// such, the lambda set `[[] + Str:toEncoder:1]` should be produced during compaction, rather
// than staying as the expanded `[[] + Str:toEncoder:1 + Str:toEncoder:1]` after the types of
// `t.a` and `t.b` are filled in.
indoc!(
&formatdoc!(
r#"
app "test" imports [TotallyNotJson] provides [main] to "./platform"
app "test" imports [] provides [main] to "./platform"
Q a b := { a: a, b: b } implements [Encoding {toEncoder: toEncoderQ}]
{TAG_LEN_ENCODER_FMT}
Q a b := {{ a: a, b: b }} implements [Encoding {{toEncoder: toEncoderQ}}]
toEncoderQ =
\@Q t -> Encode.custom \bytes, fmt ->
@ -2736,10 +2809,10 @@ fn unspecialized_lambda_set_unification_does_not_duplicate_identical_concrete_ty
accessor =
x = ""
@Q {a : x, b: x}
@Q {{a : x, b: x}}
main =
Encode.toBytes accessor TotallyNotJson.json
Encode.toBytes accessor tagLenFmt
"#
)
}

View file

@ -1,4 +1,5 @@
main =
a! "Bar"
x = B.b! "Foo"
c! x

View file

@ -18,28 +18,24 @@ Defs {
@0-4 Identifier {
ident: "main",
},
@0-49 SpaceBefore(
@12-49 SpaceBefore(
Defs(
Defs {
tags: [
Index(2147483648),
Index(2147483649),
Index(2147483650),
],
regions: [
@14-21,
@26-39,
@45-49,
],
space_before: [
Slice(start = 0, length = 0),
Slice(start = 0, length = 1),
Slice(start = 1, length = 0),
],
space_after: [
Slice(start = 0, length = 0),
Slice(start = 1, length = 0),
Slice(start = 1, length = 0),
],
spaces: [
Newline,
@ -85,32 +81,29 @@ Defs {
Space,
),
),
Stmt(
@45-49 SpaceBefore(
Apply(
@45-46 TaskAwaitBang(
Var {
module_name: "",
ident: "c",
},
),
[
@48-49 Var {
module_name: "",
ident: "x",
},
],
Space,
),
[
Newline,
Newline,
],
),
),
],
},
EmptyDefsFinal,
@45-49 SpaceBefore(
Apply(
@45-46 TaskAwaitBang(
Var {
module_name: "",
ident: "c",
},
),
[
@48-49 Var {
module_name: "",
ident: "x",
},
],
Space,
),
[
Newline,
Newline,
],
),
),
[
Newline,

View file

@ -64,7 +64,7 @@ Full {
@88-92 Identifier {
ident: "main",
},
@88-202 SpaceBefore(
@100-202 SpaceBefore(
BinOps(
[
(

View file

@ -1,18 +0,0 @@
app "test"
imports [TotallyNotJson]
provides [main] to "./platform"
HelloWorld := {} implements [Encoding {toEncoder}]
toEncoder = \@HelloWorld {} ->
Encode.custom \bytes, fmt ->
bytes
|> Encode.appendWith (Encode.string "Hello, World!\n") fmt
f =
when Str.fromUtf8 (Encode.toBytes (@HelloWorld {}) TotallyNotJson.json) is
Ok s -> s
_ -> "<bad>"
main = f
# ^ Str

View file

@ -0,0 +1,66 @@
app "test"
imports []
provides [main] to "./platform"
OnlyStrEncoder := {} implements [Encode.EncoderFormatting {
u8: encodeU8,
u16: encodeU16,
u32: encodeU32,
u64: encodeU64,
u128: encodeU128,
i8: encodeI8,
i16: encodeI16,
i32: encodeI32,
i64: encodeI64,
i128: encodeI128,
f32: encodeF32,
f64: encodeF64,
dec: encodeDec,
bool: encodeBool,
string: encodeString,
list: encodeList,
record: encodeRecord,
tuple: encodeTuple,
tag: encodeTag,
}]
encodeNothing = Encode.custom \bytes, @OnlyStrEncoder {} -> bytes
encodeU8 = \_n -> encodeNothing
encodeU16 = \_n -> encodeNothing
encodeU32 = \_n -> encodeNothing
encodeU64 = \_n -> encodeNothing
encodeU128 = \_n -> encodeNothing
encodeI8 = \_n -> encodeNothing
encodeI16 = \_n -> encodeNothing
encodeI32 = \_n -> encodeNothing
encodeI64 = \_n -> encodeNothing
encodeI128 = \_n -> encodeNothing
encodeF32 = \_n -> encodeNothing
encodeF64 = \_n -> encodeNothing
encodeDec = \_n -> encodeNothing
encodeBool = \_b -> encodeNothing
encodeString = \str -> Encode.custom \bytes, @OnlyStrEncoder {} -> List.concat bytes (Str.toUtf8 str)
encodeList : List elem, (elem -> Encoder OnlyStrEncoder) -> Encoder OnlyStrEncoder
encodeList = \_lst, _encodeElem -> encodeNothing
encodeRecord : List {key: Str, value: Encoder OnlyStrEncoder} -> Encoder OnlyStrEncoder
encodeRecord = \_fields -> encodeNothing
encodeTuple : List (Encoder OnlyStrEncoder) -> Encoder OnlyStrEncoder
encodeTuple = \_elems -> encodeNothing
encodeTag : Str, List (Encoder OnlyStrEncoder) -> Encoder OnlyStrEncoder
encodeTag = \_name, _payload -> encodeNothing
HelloWorld := {} implements [Encoding {toEncoder}]
toEncoder = \@HelloWorld {} ->
Encode.custom \bytes, fmt ->
bytes
|> Encode.appendWith (Encode.string "Hello, World!\n") fmt
f =
when Str.fromUtf8 (Encode.toBytes (@HelloWorld {}) (@OnlyStrEncoder {})) is
Ok s -> s
_ -> "<bad>"
main = f
# ^ Str