Merge branch 'main' into rust-1-76-0-upgrade

This commit is contained in:
Anton-4 2024-04-16 13:33:27 +02:00 committed by GitHub
commit 1a5e065055
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
249 changed files with 7985 additions and 4219 deletions

View file

@ -11,7 +11,7 @@ env:
# use .tar.gz for quick testing
ARCHIVE_FORMAT: .tar.br
# Make a new basic-cli git tag and set it here before starting this workflow
RELEASE_TAG: 0.7.1
RELEASE_TAG: 0.9.0
jobs:
prepare:
@ -38,6 +38,10 @@ jobs:
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_arm64-latest.tar.gz
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_x86_64-latest.tar.gz
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_apple_silicon-latest.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_x86_64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_arm64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_x86_64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_apple_silicon-TESTING.tar.gz
- name: Save roc_nightly archives
uses: actions/upload-artifact@v4

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
# this cancels workflows currently in progress if you start a new one
@ -18,10 +18,16 @@ jobs:
steps:
- uses: actions/checkout@v4
# get latest nightly releases
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_x86_64-latest.tar.gz
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_arm64-latest.tar.gz
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_x86_64-latest.tar.gz
- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_apple_silicon-latest.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_x86_64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-linux_arm64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_x86_64-TESTING.tar.gz
#- run: curl -fOL https://github.com/roc-lang/roc/releases/download/nightly/roc_nightly-macos_apple_silicon-TESTING.tar.gz
- name: Save roc_nightly archives
uses: actions/upload-artifact@v4

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: '0 9 * * *'

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: '0 9 * * *'

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: '0 9 * * *'

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: "0 9 * * *" # 9=9am utc+0

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: '0 9 * * *'

View file

@ -1,5 +1,5 @@
on:
# pull_request:
#pull_request:
workflow_dispatch:
schedule:
- cron: '0 9 * * *'

21
Cargo.lock generated
View file

@ -40,9 +40,9 @@ dependencies = [
[[package]]
name = "aligned"
version = "0.4.1"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80a21b9440a626c7fc8573a9e3d3a06b75c7c97754c2949bc7857b90353ca655"
checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923"
dependencies = [
"as-slice",
]
@ -2329,6 +2329,7 @@ dependencies = [
"roc_problem",
"roc_region",
"roc_serialize",
"roc_test_utils",
"roc_types",
"static_assertions",
"ven_pretty",
@ -2531,6 +2532,7 @@ version = "0.0.1"
dependencies = [
"bumpalo",
"roc_collections",
"roc_error_macros",
"roc_module",
"roc_parse",
"roc_region",
@ -2743,7 +2745,7 @@ dependencies = [
"roc_solve",
"roc_solve_problem",
"roc_target",
"roc_test_utils",
"roc_test_utils_dir",
"roc_types",
"ven_pretty",
]
@ -2778,7 +2780,7 @@ dependencies = [
"roc_solve",
"roc_solve_problem",
"roc_target",
"roc_test_utils",
"roc_test_utils_dir",
"roc_tracing",
"roc_types",
"roc_unify",
@ -3129,6 +3131,12 @@ name = "roc_test_utils"
version = "0.0.1"
dependencies = [
"pretty_assertions",
]
[[package]]
name = "roc_test_utils_dir"
version = "0.0.1"
dependencies = [
"remove_dir_all 0.8.2",
]
@ -3867,6 +3875,7 @@ dependencies = [
"roc_parse",
"roc_region",
"roc_test_utils",
"roc_test_utils_dir",
"walkdir",
]
@ -4086,9 +4095,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
version = "0.1.39"
version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
"pin-project-lite",
"tracing-attributes",

View file

@ -17,6 +17,7 @@ members = [
"crates/repl_expect",
"crates/roc_std",
"crates/test_utils",
"crates/test_utils_dir",
"crates/valgrind",
"crates/tracing",
"crates/utils/*",
@ -158,7 +159,7 @@ tar = "0.4.38"
target-lexicon = "0.12.6"
tempfile = "=3.2.0"
threadpool = "1.8.1"
tracing = { version = "0.1.37", features = ["release_max_level_off"] }
tracing = { version = "0.1.40", features = ["release_max_level_off"] }
tracing-appender = "0.2.2"
tracing-subscriber = { version = "0.3.16", features = ["env-filter"] }
unicode-segmentation = "1.10.1"

View file

@ -948,7 +948,7 @@ mod cli_run {
This roc file can print its own source code. The source is:
app "ingested-file"
packages { pf: "https://github.com/roc-lang/basic-cli/releases/download/0.8.1/x8URkvfyi9I0QhmVG98roKBUs_AZRkLFwFJVJ3942YA.tar.br" }
packages { pf: "https://github.com/roc-lang/basic-cli/releases/download/0.9.0/oKWkaruh2zXxin_xfsYsCJobH1tO8_JvNkFzDwwzNUQ.tar.br" }
imports [
pf.Stdout,
"ingested-file.roc" as ownCode : Str,

View file

@ -103,7 +103,7 @@ DecoderFormatting implements
## `Skip` if the field is not a part of the decoded record.
##
## `finalizer` should produce the record value from the decoded `state`.
record : state, (state, Str -> [Keep (Decoder state fmt), Skip]), (state -> Result val DecodeError) -> Decoder val fmt where fmt implements DecoderFormatting
record : state, (state, Str -> [Keep (Decoder state fmt), Skip]), (state, fmt -> Result val DecodeError) -> Decoder val fmt where fmt implements DecoderFormatting
## `tuple state stepElem finalizer` decodes a tuple element-by-element.
##

View file

@ -232,14 +232,20 @@ escapedByteToJson = \b ->
encodeList = \lst, encodeElem ->
Encode.custom \bytes, @Json {} ->
writeList = \{ buffer, elemsLeft }, elem ->
bufferWithElem = appendWith buffer (encodeElem elem) (@Json {})
bufferWithSuffix =
if elemsLeft > 1 then
List.append bufferWithElem (Num.toU8 ',')
else
bufferWithElem
beforeBufferLen = buffer |> List.len
{ buffer: bufferWithSuffix, elemsLeft: elemsLeft - 1 }
bufferWithElem = appendWith buffer (encodeElem elem) (@Json {})
# If our encoder returned [] we just skip the elem
if bufferWithElem |> List.len == beforeBufferLen then
{ buffer: bufferWithElem, elemsLeft: elemsLeft - 1 }
else
bufferWithSuffix =
if elemsLeft > 1 then
List.append bufferWithElem (Num.toU8 ',')
else
bufferWithElem
{ buffer: bufferWithSuffix, elemsLeft: elemsLeft - 1 }
head = List.append bytes (Num.toU8 '[')
{ buffer: withList } = List.walk lst { buffer: head, elemsLeft: List.len lst } writeList
@ -249,21 +255,27 @@ encodeList = \lst, encodeElem ->
encodeRecord = \fields ->
Encode.custom \bytes, @Json {} ->
writeRecord = \{ buffer, fieldsLeft }, { key, value } ->
fieldName = key
bufferWithKeyValue =
List.append buffer (Num.toU8 '"')
|> List.concat (Str.toUtf8 fieldName)
|> List.append (Num.toU8 '"')
|> List.append (Num.toU8 ':') # Note we need to encode using the json config here
|> appendWith value (@Json {})
bufferWithSuffix =
if fieldsLeft > 1 then
List.append bufferWithKeyValue (Num.toU8 ',')
else
bufferWithKeyValue
fieldValue = [] |> appendWith value (json)
# If our encoder returned [] we just skip the field
if fieldValue == [] then
{ buffer, fieldsLeft: fieldsLeft - 1 }
else
fieldName = key
bufferWithKeyValue =
List.append buffer (Num.toU8 '"')
|> List.concat (Str.toUtf8 fieldName)
|> List.append (Num.toU8 '"')
|> List.append (Num.toU8 ':') # Note we need to encode using the json config here
|> List.concat fieldValue
{ buffer: bufferWithSuffix, fieldsLeft: fieldsLeft - 1 }
bufferWithSuffix =
if fieldsLeft > 1 then
List.append bufferWithKeyValue (Num.toU8 ',')
else
bufferWithKeyValue
{ buffer: bufferWithSuffix, fieldsLeft: fieldsLeft - 1 }
bytesHead = List.append bytes (Num.toU8 '{')
{ buffer: bytesWithRecord } = List.walk fields { buffer: bytesHead, fieldsLeft: List.len fields } writeRecord
@ -273,16 +285,21 @@ encodeRecord = \fields ->
encodeTuple = \elems ->
Encode.custom \bytes, @Json {} ->
writeTuple = \{ buffer, elemsLeft }, elemEncoder ->
bufferWithElem =
appendWith buffer elemEncoder (@Json {})
beforeBufferLen = buffer |> List.len
bufferWithSuffix =
if elemsLeft > 1 then
List.append bufferWithElem (Num.toU8 ',')
else
bufferWithElem
bufferWithElem = appendWith buffer (elemEncoder) (@Json {})
{ buffer: bufferWithSuffix, elemsLeft: elemsLeft - 1 }
# If our encoder returned [] we just skip the elem
if bufferWithElem |> List.len == beforeBufferLen then
{ buffer: bufferWithElem, elemsLeft: elemsLeft - 1 }
else
bufferWithSuffix =
if elemsLeft > 1 then
List.append bufferWithElem (Num.toU8 ',')
else
bufferWithElem
{ buffer: bufferWithSuffix, elemsLeft: elemsLeft - 1 }
bytesHead = List.append bytes (Num.toU8 '[')
{ buffer: bytesWithRecord } = List.walk elems { buffer: bytesHead, elemsLeft: List.len elems } writeTuple
@ -1273,7 +1290,7 @@ decodeRecord = \initialState, stepField, finalizer -> Decode.custom \bytes, @Jso
rest = List.dropFirst bytesAfterValue n
# Build final record from decoded fields and values
when finalizer updatedRecord is
when finalizer updatedRecord json is
Ok val -> { result: Ok val, rest }
Err e -> { result: Err e, rest }

View file

@ -17,6 +17,7 @@ roc_problem = { path = "../problem" }
roc_region = { path = "../region" }
roc_serialize = { path = "../serialize" }
roc_types = { path = "../types" }
roc_test_utils = { path = "../../test_utils" }
ven_pretty = { path = "../../vendor/pretty" }

View file

@ -748,9 +748,10 @@ fn can_annotation_help(
for loc_var in *loc_vars {
let var = match loc_var.value {
Pattern::Identifier(name) if name.chars().next().unwrap().is_lowercase() => {
name
}
Pattern::Identifier {
ident: name,
suffixed: _,
} if name.chars().next().unwrap().is_lowercase() => name,
_ => unreachable!("I thought this was validated during parsing"),
};
let var_name = Lowercase::from(var);

View file

@ -547,7 +547,11 @@ fn canonicalize_claimed_ability_impl<'a>(
}
AssignedField::RequiredValue(label, _spaces, value) => {
let impl_ident = match value.value {
ast::Expr::Var { module_name, ident } => {
ast::Expr::Var {
module_name,
ident,
suffixed: _,
} => {
if module_name.is_empty() {
ident
} else {
@ -2570,9 +2574,10 @@ fn to_pending_alias_or_opaque<'a>(
for loc_var in vars.iter() {
match loc_var.value {
ast::Pattern::Identifier(name)
if name.chars().next().unwrap().is_lowercase() =>
{
ast::Pattern::Identifier {
ident: name,
suffixed: _,
} if name.chars().next().unwrap().is_lowercase() => {
let lowercase = Lowercase::from(name);
can_rigids.push(Loc {
value: lowercase,
@ -2874,6 +2879,8 @@ fn to_pending_value_def<'a>(
condition,
preceding_comment: *preceding_comment,
}),
Stmt(_) => internal_error!("a Stmt was not desugared correctly, should have been converted to a Body(...) in desguar"),
}
}

View file

@ -23,9 +23,13 @@ fn to_encoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
let opaque_ref = alloc_pat(ast::Pattern::OpaqueRef(at_opaque));
let opaque_apply_pattern = ast::Pattern::Apply(
opaque_ref,
&*env
.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(payload))]),
&*env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: payload,
suffixed: 0,
},
)]),
);
// Encode.toEncoder payload
@ -33,10 +37,12 @@ fn to_encoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Encode",
ident: "toEncoder",
suffixed: 0,
}),
&*env.arena.alloc([&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: payload,
suffixed: 0,
})]),
roc_module::called_via::CalledVia::Space,
));
@ -61,19 +67,23 @@ fn decoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Decode",
ident: "decodeWith",
suffixed: 0,
}),
env.arena.alloc([
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: bytes,
suffixed: 0,
}),
alloc_expr(ast::Expr::Var {
module_name: "Decode",
ident: "decoder",
suffixed: 0,
}),
alloc_expr(ast::Expr::Var {
module_name: "",
ident: fmt,
suffixed: 0,
}),
]),
CalledVia::Space,
@ -84,6 +94,7 @@ fn decoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Decode",
ident: "mapResult",
suffixed: 0,
}),
env.arena.alloc([
&*alloc_expr(call_decode_with),
@ -96,8 +107,20 @@ fn decoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
// Decode.mapResult (Decode.decodeWith bytes Decode.decoder fmt) @Opaq
let custom_closure = ast::Expr::Closure(
env.arena.alloc([
Loc::at(DERIVED_REGION, ast::Pattern::Identifier(bytes)),
Loc::at(DERIVED_REGION, ast::Pattern::Identifier(fmt)),
Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: bytes,
suffixed: 0,
},
),
Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: fmt,
suffixed: 0,
},
),
]),
alloc_expr(call_map_result),
);
@ -107,6 +130,7 @@ fn decoder<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Decode",
ident: "custom",
suffixed: 0,
}),
env.arena.alloc([&*alloc_expr(custom_closure)]),
CalledVia::Space,
@ -127,9 +151,13 @@ fn hash<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
let opaque_ref = alloc_pat(ast::Pattern::OpaqueRef(at_opaque));
let opaque_apply_pattern = ast::Pattern::Apply(
opaque_ref,
&*env
.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(payload))]),
&*env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: payload,
suffixed: 0,
},
)]),
);
// Hash.hash hasher payload
@ -137,15 +165,18 @@ fn hash<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Hash",
ident: "hash",
suffixed: 0,
}),
&*env.arena.alloc([
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: hasher,
suffixed: 0,
}),
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: payload,
suffixed: 0,
}),
]),
roc_module::called_via::CalledVia::Space,
@ -154,7 +185,13 @@ fn hash<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
// \hasher, @Opaq payload -> Hash.hash hasher payload
ast::Expr::Closure(
env.arena.alloc([
Loc::at(DERIVED_REGION, ast::Pattern::Identifier(hasher)),
Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: hasher,
suffixed: 0,
},
),
Loc::at(DERIVED_REGION, opaque_apply_pattern),
]),
call_member,
@ -172,16 +209,24 @@ fn is_eq<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
// \@Opaq payload1
let opaque1 = ast::Pattern::Apply(
opaque_ref,
&*env
.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(payload1))]),
&*env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: payload1,
suffixed: 0,
},
)]),
);
// \@Opaq payload2
let opaque2 = ast::Pattern::Apply(
opaque_ref,
&*env
.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(payload2))]),
&*env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: payload2,
suffixed: 0,
},
)]),
);
// Bool.isEq payload1 payload2
@ -189,15 +234,18 @@ fn is_eq<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Bool",
ident: "isEq",
suffixed: 0,
}),
&*env.arena.alloc([
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: payload1,
suffixed: 0,
}),
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: payload2,
suffixed: 0,
}),
]),
roc_module::called_via::CalledVia::Space,
@ -224,9 +272,13 @@ fn to_inspector<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
let opaque_ref = alloc_pat(ast::Pattern::OpaqueRef(at_opaque));
let opaque_apply_pattern = ast::Pattern::Apply(
opaque_ref,
&*env
.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(payload))]),
&*env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: payload,
suffixed: 0,
},
)]),
);
// Inspect.toInspector payload
@ -234,10 +286,12 @@ fn to_inspector<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Inspect",
ident: "toInspector",
suffixed: 0,
}),
&*env.arena.alloc([&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: payload,
suffixed: 0,
})]),
roc_module::called_via::CalledVia::Space,
));
@ -252,6 +306,7 @@ fn to_inspector<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Inspect",
ident: "tag",
suffixed: 0,
}),
&*env.arena.alloc([&*opaque_name, &*to_inspector_list]),
roc_module::called_via::CalledVia::Space,
@ -264,20 +319,27 @@ fn to_inspector<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Inspect",
ident: "apply",
suffixed: 0,
}),
&*env.arena.alloc([
&*opaque_inspector,
&*alloc_expr(ast::Expr::Var {
module_name: "",
ident: fmt,
suffixed: 0,
}),
]),
roc_module::called_via::CalledVia::Space,
));
let custom_closure = alloc_expr(ast::Expr::Closure(
env.arena
.alloc([Loc::at(DERIVED_REGION, ast::Pattern::Identifier(fmt))]),
env.arena.alloc([Loc::at(
DERIVED_REGION,
ast::Pattern::Identifier {
ident: fmt,
suffixed: 0,
},
)]),
apply_opaque_inspector,
));
@ -286,6 +348,7 @@ fn to_inspector<'a>(env: &mut Env<'a>, at_opaque: &'a str) -> ast::Expr<'a> {
alloc_expr(ast::Expr::Var {
module_name: "Inspect",
ident: "custom",
suffixed: 0,
}),
env.arena.alloc([&*custom_closure]),
CalledVia::Space,

View file

@ -1,5 +1,6 @@
#![allow(clippy::manual_map)]
use crate::suffixed::{apply_task_await, unwrap_suffixed_expression, EUnwrapped};
use bumpalo::collections::Vec;
use bumpalo::Bump;
use roc_error_macros::internal_error;
@ -56,7 +57,11 @@ fn new_op_call_expr<'a>(
let args = arena.alloc([left, right]);
let loc_expr = arena.alloc(Loc {
value: Expr::Var { module_name, ident },
value: Expr::Var {
module_name,
ident,
suffixed: 0,
},
region: loc_op.region,
});
@ -92,9 +97,10 @@ fn desugar_value_def<'a>(
ann_pattern,
ann_type,
comment: *comment,
body_pattern,
body_pattern: desugar_loc_pattern(arena, body_pattern, src, line_info, module_path),
body_expr: desugar_expr(arena, body_expr, src, line_info, module_path),
},
Dbg {
condition,
preceding_comment,
@ -128,6 +134,18 @@ fn desugar_value_def<'a>(
preceding_comment: *preceding_comment,
}
}
Stmt(stmt_expr) => {
// desugar into a Body({}, stmt_expr)
let loc_pattern = arena.alloc(Loc::at(
stmt_expr.region,
Pattern::RecordDestructure(Collection::empty()),
));
Body(
loc_pattern,
desugar_expr(arena, stmt_expr, src, line_info, module_path),
)
}
}
}
@ -137,227 +155,119 @@ pub fn desugar_defs_node_values<'a>(
src: &'a str,
line_info: &mut Option<LineInfo>,
module_path: &str,
top_level_def: bool,
) {
for value_def in defs.value_defs.iter_mut() {
*value_def = desugar_value_def(arena, arena.alloc(*value_def), src, line_info, module_path);
}
}
fn desugar_defs_node_suffixed<'a>(
arena: &'a Bump,
loc_expr: &'a Loc<Expr<'a>>,
) -> &'a Loc<Expr<'a>> {
match loc_expr.value {
Defs(defs, loc_ret) => {
match defs.search_suffixed_defs() {
None => loc_expr,
Some((tag_index, value_index)) => {
if defs.value_defs.len() == 1 {
// We have only one value_def and it must be Suffixed
// replace Defs with an Apply(Task.await) and Closure of loc_return
debug_assert!(
value_index == 0,
"we have only one value_def and so it must be Suffixed "
);
// Unwrap Suffixed def within Apply, and the pattern so we can use in the call to Task.await
let (suffixed_sub_apply_loc, pattern) = unwrap_suffixed_def_and_pattern(
arena,
loc_expr.region,
defs.value_defs[0],
);
// Create Closure for the result of the recursion,
// use the pattern from our Suffixed Def as closure argument
let closure_expr = Closure(arena.alloc([*pattern]), loc_ret);
// Apply arguments to Task.await, first is the unwrapped Suffix expr second is the Closure
let mut task_await_apply_args: Vec<&'a Loc<Expr<'a>>> = Vec::new_in(arena);
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, suffixed_sub_apply_loc)));
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, closure_expr)));
arena.alloc(Loc::at(
loc_expr.region,
Apply(
arena.alloc(Loc {
region: loc_expr.region,
value: Var {
module_name: ModuleName::TASK,
ident: "await",
},
}),
arena.alloc(task_await_apply_args),
CalledVia::BangSuffix,
),
))
} else if value_index == 0 {
// We have a Suffixed in first index, and also other nodes in Defs
// pop the first Suffixed and recurse on Defs (without first) to handle any other Suffixed
// the result will be wrapped in an Apply(Task.await) and Closure
debug_assert!(
defs.value_defs.len() > 1,
"we know we have other Defs that will need to be considered"
);
// Unwrap Suffixed def within Apply, and the pattern so we can use in the call to Task.await
let (suffixed_sub_apply_loc, pattern) = unwrap_suffixed_def_and_pattern(
arena,
loc_expr.region,
defs.value_defs[0],
);
// Get a mutable copy of the defs
let mut copied_defs = defs.clone();
// Remove the suffixed def
copied_defs.remove_value_def(tag_index);
// Recurse using new Defs to get new expression
let new_loc_expr = desugar_defs_node_suffixed(
arena,
arena.alloc(Loc::at(
loc_expr.region,
Defs(arena.alloc(copied_defs), loc_ret),
)),
);
// Create Closure for the result of the recursion,
// use the pattern from our Suffixed Def as closure argument
let closure_expr = Closure(arena.alloc([*pattern]), new_loc_expr);
// Apply arguments to Task.await, first is the unwrapped Suffix expr second is the Closure
let mut task_await_apply_args: Vec<&'a Loc<Expr<'a>>> = Vec::new_in(arena);
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, suffixed_sub_apply_loc)));
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, closure_expr)));
arena.alloc(Loc::at(
loc_expr.region,
Apply(
arena.alloc(Loc {
region: loc_expr.region,
value: Var {
module_name: ModuleName::TASK,
ident: "await",
},
}),
arena.alloc(task_await_apply_args),
CalledVia::BangSuffix,
),
))
} else {
// The first Suffixed is in the middle of our Defs
// We will keep the defs before the Suffixed in our Defs node
// We take the defs after the Suffixed and create a new Defs node using the current loc_return
// Then recurse on the new Defs node, wrap the result in an Apply(Task.await) and Closure,
// which will become the new loc_return
let (before, after) = {
let values = defs.split_values_either_side_of(tag_index);
(values.before, values.after)
};
// If there are no defs after, then just use loc_ret as we dont need a Defs node
let defs_after_suffixed_desugared = {
if !after.is_empty() {
desugar_defs_node_suffixed(
arena,
arena.alloc(Loc::at(
loc_expr.region,
Defs(arena.alloc(after), loc_ret),
)),
)
} else {
loc_ret
}
};
// Unwrap Suffixed def within Apply, and the pattern so we can use in the call to Task.await
let (suffixed_sub_apply_loc, pattern) = unwrap_suffixed_def_and_pattern(
arena,
loc_expr.region,
defs.value_defs[value_index],
);
// Create Closure for the result of the recursion,
// use the pattern from our Suffixed Def as closure argument
let closure_expr =
Closure(arena.alloc([*pattern]), defs_after_suffixed_desugared);
// Apply arguments to Task.await, first is the unwrapped Suffix expr second is the Closure
let mut task_await_apply_args: Vec<&'a Loc<Expr<'a>>> = Vec::new_in(arena);
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, suffixed_sub_apply_loc)));
task_await_apply_args
.push(arena.alloc(Loc::at(loc_expr.region, closure_expr)));
let new_loc_return = arena.alloc(Loc::at(
loc_expr.region,
Apply(
arena.alloc(Loc {
region: loc_expr.region,
value: Var {
module_name: ModuleName::TASK,
ident: "await",
},
}),
arena.alloc(task_await_apply_args),
CalledVia::BangSuffix,
),
));
arena.alloc(Loc::at(
loc_expr.region,
Defs(arena.alloc(before), new_loc_return),
))
}
}
}
// `desugar_defs_node_values` is called recursively in `desugar_expr` and we
// only we only want to unwrap suffixed nodes if they are a top level def.
//
// check here first so we only unwrap the expressions once, and after they have
// been desugared
if top_level_def {
for value_def in defs.value_defs.iter_mut() {
*value_def = desugar_value_def_suffixed(arena, *value_def);
}
_ => unreachable!(
"should only be passed a Defs node as it is called from within desugar_expr for Defs"
),
}
}
// Unwrap Suffixed def within Apply, and the pattern so we can use in the call to Task.await
fn unwrap_suffixed_def_and_pattern<'a>(
arena: &'a Bump,
region: Region,
value_def: ValueDef<'a>,
) -> (
roc_parse::ast::Expr<'a>,
&'a Loc<roc_parse::ast::Pattern<'a>>,
) {
/// For each top-level ValueDef in our module, we will unwrap any suffixed
/// expressions
///
/// e.g. `say! "hi"` desugars to `Task.await (say "hi") -> \{} -> ...`
pub fn desugar_value_def_suffixed<'a>(arena: &'a Bump, value_def: ValueDef<'a>) -> ValueDef<'a> {
use ValueDef::*;
match value_def {
ValueDef::Body(pattern, suffixed_expression) => match suffixed_expression.value {
// The Suffixed has arguments applied e.g. `Stdout.line! "Hello World"`
Apply(sub_loc, suffixed_args, called_via) => match sub_loc.value {
Suffixed(sub_expr) => (
Apply(
arena.alloc(Loc::at(region, *sub_expr)),
suffixed_args,
called_via,
),
pattern,
Body(loc_pattern, loc_expr) => {
// note called_from_def is passed as `false` as this is a top_level_def
match unwrap_suffixed_expression(arena, loc_expr, None) {
Ok(new_expr) => Body(loc_pattern, new_expr),
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
let ok_wrapped_return = arena.alloc(Loc::at(
loc_expr.region,
Expr::Apply(
arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name: ModuleName::TASK,
ident: "ok",
suffixed: 0,
},
)),
arena.alloc([sub_new]),
CalledVia::BangSuffix,
),
));
Body(
loc_pattern,
apply_task_await(
arena,
loc_expr.region,
sub_arg,
sub_pat,
ok_wrapped_return,
),
)
}
Err(..) => Body(
loc_pattern,
arena.alloc(Loc::at(loc_expr.region, MalformedSuffixed(loc_expr))),
),
_ => unreachable!("should have a suffixed Apply inside Body def"),
},
// The Suffixed has NIL arguments applied e.g. `Stdin.line!`
Suffixed(sub_expr) => (*sub_expr, pattern),
_ => {
unreachable!("should have a suffixed Apply inside Body def")
}
},
_ => unreachable!("should have a suffixed Body def"),
}
ann @ Annotation(_, _) => ann,
AnnotatedBody {
ann_pattern,
ann_type,
comment,
body_pattern,
body_expr,
} => {
// note called_from_def is passed as `false` as this is a top_level_def
match unwrap_suffixed_expression(arena, body_expr, None) {
Ok(new_expr) => AnnotatedBody {
ann_pattern,
ann_type,
comment,
body_pattern,
body_expr: new_expr,
},
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => AnnotatedBody {
ann_pattern,
ann_type,
comment,
body_pattern,
body_expr: apply_task_await(arena, body_expr.region, sub_arg, sub_pat, sub_new),
},
Err(..) => AnnotatedBody {
ann_pattern,
ann_type,
comment,
body_pattern,
body_expr: arena.alloc(Loc::at(body_expr.region, MalformedSuffixed(body_expr))),
},
}
}
// TODO support desugaring of Dbg, Expect, and ExpectFx
Dbg { .. } | Expect { .. } | ExpectFx { .. } => value_def,
Stmt(..) => {
internal_error!(
"this should have been desugared into a Body(..) before this call in desugar_expr"
)
}
}
}
@ -380,6 +290,7 @@ pub fn desugar_expr<'a>(
| Underscore { .. }
| MalformedIdent(_, _)
| MalformedClosure
| MalformedSuffixed(..)
| PrecedenceConflict { .. }
| MultipleRecordBuilders { .. }
| UnappliedRecordBuilder { .. }
@ -581,14 +492,10 @@ pub fn desugar_expr<'a>(
),
Defs(defs, loc_ret) => {
let mut defs = (*defs).clone();
desugar_defs_node_values(arena, &mut defs, src, line_info, module_path);
desugar_defs_node_values(arena, &mut defs, src, line_info, module_path, false);
let loc_ret = desugar_expr(arena, loc_ret, src, line_info, module_path);
// Desugar any Suffixed nodes
desugar_defs_node_suffixed(
arena,
arena.alloc(Loc::at(loc_expr.region, Defs(arena.alloc(defs), loc_ret))),
)
arena.alloc(Loc::at(loc_expr.region, Defs(arena.alloc(defs), loc_ret)))
}
Apply(loc_fn, loc_args, called_via) => {
let mut desugared_args = Vec::with_capacity_in(loc_args.len(), arena);
@ -699,10 +606,12 @@ pub fn desugar_expr<'a>(
Negate => Var {
module_name: ModuleName::NUM,
ident: "neg",
suffixed: 0,
},
Not => Var {
module_name: ModuleName::BOOL,
ident: "not",
suffixed: 0,
},
};
let loc_fn_var = arena.alloc(Loc { region, value });
@ -800,6 +709,7 @@ pub fn desugar_expr<'a>(
let inspect_fn = Var {
module_name: ModuleName::INSPECT,
ident: "toStr",
suffixed: 0,
};
let loc_inspect_fn_var = arena.alloc(Loc {
value: inspect_fn,
@ -839,31 +749,32 @@ pub fn desugar_expr<'a>(
region: loc_expr.region,
})
}
LowLevelDbg(_, _, _) => unreachable!("Only exists after desugaring"),
Suffixed(expr) => {
// Rewrite `Suffixed(BinOps([args...], Var(...)))` to `BinOps([args...], Suffixed(Var(...)))`
// This is to handle cases like e.g. `"Hello" |> line!`
if let BinOps(args, sub_expr) = expr {
return desugar_expr(
arena,
// 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,
BinOps(
args,
arena.alloc(Loc::at(sub_expr.region, Suffixed(&sub_expr.value))),
),
Expr::Var {
module_name: ModuleName::TASK,
ident: "ok",
suffixed: 0,
},
)),
src,
line_info,
module_path,
);
}
// Suffixed are also desugared in Defs
// Any nodes that don't get desugared will be caught by canonicalize_expr
// and we can handle those cases as required
loc_expr
arena.alloc(apply_args),
CalledVia::BangSuffix,
),
))
}
// note this only exists after desugaring
LowLevelDbg(_, _, _) => loc_expr,
}
}
@ -949,6 +860,7 @@ fn desugar_field<'a>(
value: Var {
module_name: "",
ident: loc_str.value,
suffixed: 0,
},
region: loc_str.region,
};
@ -1009,7 +921,7 @@ fn desugar_pattern<'a>(
use roc_parse::ast::Pattern::*;
match pattern {
Identifier(_)
Identifier { .. }
| Tag(_)
| OpaqueRef(_)
| NumLiteral(_)
@ -1129,6 +1041,7 @@ fn record_builder_arg<'a>(
value: Expr::Var {
module_name: "",
ident: arena.alloc("#".to_owned() + label.value),
suffixed: 0,
},
});
@ -1168,7 +1081,10 @@ fn record_builder_arg<'a>(
for label in apply_field_names.iter().rev() {
let name = arena.alloc("#".to_owned() + label.value);
let ident = roc_parse::ast::Pattern::Identifier(name);
let ident = roc_parse::ast::Pattern::Identifier {
ident: name,
suffixed: 0,
};
let arg_pattern = arena.alloc(Loc {
value: ident,

View file

@ -623,6 +623,9 @@ 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);
@ -1016,9 +1019,11 @@ pub fn canonicalize_expr<'a>(
(expr, output)
}
}
ast::Expr::Var { module_name, ident } => {
canonicalize_var_lookup(env, var_store, scope, module_name, ident, region)
}
ast::Expr::Var {
module_name,
ident,
suffixed: _, // TODO should we use suffixed here?
} => canonicalize_var_lookup(env, var_store, scope, module_name, ident, region),
ast::Expr::Underscore(name) => {
// we parse underscores, but they are not valid expression syntax
@ -1375,6 +1380,10 @@ pub fn canonicalize_expr<'a>(
(RuntimeError(problem), Output::default())
}
ast::Expr::MalformedSuffixed(..) => {
use roc_problem::can::RuntimeError::*;
(RuntimeError(MalformedSuffixed(region)), Output::default())
}
ast::Expr::MultipleRecordBuilders(sub_expr) => {
use roc_problem::can::RuntimeError::*;
@ -1441,12 +1450,6 @@ pub fn canonicalize_expr<'a>(
bad_expr
);
}
bad_expr @ ast::Expr::Suffixed(_) => {
internal_error!(
"A suffixed expression did not get desugared somehow: {:#?}",
bad_expr
);
}
};
// At the end, diff used_idents and defined_idents to see which were unused.
@ -2427,7 +2430,8 @@ pub fn is_valid_interpolation(expr: &ast::Expr<'_>) -> bool {
| ast::Expr::IngestedFile(_, _)
| ast::Expr::SpaceBefore(_, _)
| ast::Expr::Str(StrLiteral::Block(_))
| ast::Expr::SpaceAfter(_, _) => false,
| ast::Expr::SpaceAfter(_, _)
| ast::Expr::EmptyDefsFinal => false,
// These can contain subexpressions, so we need to recursively check those
ast::Expr::Str(StrLiteral::Line(segments)) => {
segments.iter().all(|segment| match segment {
@ -2453,6 +2457,7 @@ pub fn is_valid_interpolation(expr: &ast::Expr<'_>) -> bool {
.iter()
.all(|loc_field| is_valid_interpolation(&loc_field.value)),
ast::Expr::MultipleRecordBuilders(loc_expr)
| ast::Expr::MalformedSuffixed(loc_expr)
| ast::Expr::UnappliedRecordBuilder(loc_expr)
| ast::Expr::PrecedenceConflict(PrecedenceConflict { expr: loc_expr, .. })
| ast::Expr::UnaryOp(loc_expr, _)
@ -2512,7 +2517,6 @@ pub fn is_valid_interpolation(expr: &ast::Expr<'_>) -> bool {
ast::RecordBuilderField::SpaceBefore(_, _)
| ast::RecordBuilderField::SpaceAfter(_, _) => false,
}),
ast::Expr::Suffixed(_) => todo!(),
}
}

View file

@ -25,6 +25,7 @@ pub mod pattern;
pub mod procedure;
pub mod scope;
pub mod string;
pub mod suffixed;
pub mod traverse;
pub use derive::DERIVED_REGION;

View file

@ -312,7 +312,8 @@ pub fn canonicalize_module_defs<'a>(
// visited a BinOp node we'd recursively try to apply this to each of its nested
// operators, and then again on *their* nested operators, ultimately applying the
// rules multiple times unnecessarily.
crate::desugar::desugar_defs_node_values(arena, loc_defs, src, &mut None, module_path);
crate::desugar::desugar_defs_node_values(arena, loc_defs, src, &mut None, module_path, true);
let mut rigid_variables = RigidVariables::default();

View file

@ -265,7 +265,10 @@ pub fn canonicalize_def_header_pattern<'a>(
match pattern {
// Identifiers that shadow ability members may appear (and may only appear) at the header of a def.
Identifier(name) => {
Identifier {
ident: name,
suffixed: _,
} => {
match scope.introduce_or_shadow_ability_member(
pending_abilities_in_scope,
(*name).into(),
@ -373,12 +376,13 @@ pub fn canonicalize_pattern<'a>(
use PatternType::*;
let can_pattern = match pattern {
Identifier(name) => {
match canonicalize_pattern_symbol(env, scope, output, region, permit_shadows, name) {
Ok(symbol) => Pattern::Identifier(symbol),
Err(pattern) => pattern,
}
}
Identifier {
ident: name,
suffixed: _,
} => match canonicalize_pattern_symbol(env, scope, output, region, permit_shadows, name) {
Ok(symbol) => Pattern::Identifier(symbol),
Err(pattern) => pattern,
},
Underscore(name) => {
// An underscored identifier can't be used, but we'll still add it to the scope
// for better error messages if someone tries to use it.
@ -628,7 +632,10 @@ pub fn canonicalize_pattern<'a>(
for loc_pattern in patterns.iter() {
match loc_pattern.value {
Identifier(label) => {
Identifier {
ident: label,
suffixed: _,
} => {
match scope.introduce(label.into(), region) {
Ok(symbol) => {
output.references.insert_bound(symbol);

View file

@ -0,0 +1,830 @@
#![allow(clippy::manual_map)]
use bumpalo::collections::Vec;
use bumpalo::Bump;
use roc_error_macros::internal_error;
use roc_module::called_via::CalledVia;
use roc_module::ident::ModuleName;
use roc_parse::ast::Expr::{self, *};
use roc_parse::ast::{is_loc_expr_suffixed, Pattern, ValueDef};
use roc_region::all::{Loc, Region};
use std::cell::Cell;
thread_local! {
// we use a thread_local here so that tests consistently give the same pattern
static SUFFIXED_ANSWER_COUNTER: Cell<usize> = Cell::new(0);
}
/// Provide an intermediate answer expression and pattern when unwrapping a
/// (sub) expression
///
/// e.g. `x = foo (bar!)` unwraps to `x = Task.await (bar) \#!a0 -> foo #!a0`
fn next_suffixed_answer_pattern(arena: &Bump) -> (Expr, Pattern) {
// Use the thread-local counter
SUFFIXED_ANSWER_COUNTER.with(|counter| {
let count = counter.get();
counter.set(count + 1);
let answer_ident = arena.alloc(format!("#!a{}", count));
(
Expr::Var {
module_name: "",
ident: answer_ident,
suffixed: 0,
},
Pattern::Identifier {
ident: answer_ident.as_str(),
suffixed: 0,
},
)
})
}
#[derive(Debug)]
pub enum EUnwrapped<'a> {
UnwrappedDefExpr(&'a Loc<Expr<'a>>),
UnwrappedSubExpr {
/// the unwrapped expression argument for Task.await
sub_arg: &'a Loc<Expr<'a>>,
/// the pattern for the closure
sub_pat: &'a Loc<Pattern<'a>>,
/// the expression to replace the unwrapped
sub_new: &'a Loc<Expr<'a>>,
},
Malformed,
}
fn init_unwrapped_err<'a>(
arena: &'a Bump,
unwrapped_expr: &'a Loc<Expr<'a>>,
maybe_def_pat: Option<&'a Loc<Pattern<'a>>>,
) -> Result<&'a Loc<Expr<'a>>, EUnwrapped<'a>> {
match maybe_def_pat {
Some(..) => {
// we have a def pattern, so no need to generate a new pattern
// as this should only be created in the first call from a def
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_expr))
}
None => {
let (answer_var, answer_pat) = next_suffixed_answer_pattern(arena);
let sub_new = arena.alloc(Loc::at(unwrapped_expr.region, answer_var));
let sub_pat = arena.alloc(Loc::at(unwrapped_expr.region, answer_pat));
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: unwrapped_expr,
sub_pat,
sub_new,
})
}
}
}
/// Descend through the AST and unwrap each suffixed expression
/// when an expression is unwrapped, we apply a `Task.await` and
/// then descend through the AST again until there are no more suffixed
/// expressions, or we hit an error
pub fn unwrap_suffixed_expression<'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>> {
let unwrapped_expression = {
match loc_expr.value {
Expr::Var {
module_name,
ident,
suffixed,
} => {
match suffixed {
0 => Ok(loc_expr),
1 => {
let unwrapped_var = arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name,
ident,
suffixed: suffixed.saturating_sub(1),
},
));
init_unwrapped_err(arena, unwrapped_var, maybe_def_pat)
}
_ => {
let unwrapped_var = arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name,
ident,
suffixed: 0,
},
));
// we generate an intermediate pattern `#!a0` etc
// so we dont unwrap the definition pattern
let (mut answer_var, answer_pat) = next_suffixed_answer_pattern(arena);
// we transfer the suffix from the Var to the intermediate answer Var
// as that will need to be unwrapped in a future call
if let Expr::Var {
module_name: "",
ident: answer_ident,
suffixed: 0,
} = answer_var
{
answer_var = Expr::Var {
module_name: "",
ident: answer_ident,
suffixed: suffixed.saturating_sub(1),
}
} else {
internal_error!("expected a suffixed Var to be generated");
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg: unwrapped_var,
sub_pat: arena.alloc(Loc::at(unwrapped_var.region, answer_pat)),
sub_new: arena.alloc(Loc::at(unwrapped_var.region, answer_var)),
})
}
}
}
Expr::Defs(..) => unwrap_suffixed_expression_defs_help(arena, loc_expr, maybe_def_pat),
Expr::Apply(..) => {
unwrap_suffixed_expression_apply_help(arena, loc_expr, maybe_def_pat)
}
Expr::When(..) => unwrap_suffixed_expression_when_help(arena, loc_expr, maybe_def_pat),
Expr::If(..) => {
unwrap_suffixed_expression_if_then_else_help(arena, loc_expr, maybe_def_pat)
}
Expr::Closure(..) => {
unwrap_suffixed_expression_closure_help(arena, loc_expr, maybe_def_pat)
}
Expr::ParensAround(..) => {
unwrap_suffixed_expression_parens_help(arena, loc_expr, maybe_def_pat)
}
Expr::SpaceBefore(..) | Expr::SpaceAfter(..) => {
internal_error!(
"SpaceBefore and SpaceAfter should have been removed in desugar_expr"
)
}
Expr::BinOps(..) => {
internal_error!("BinOps should have been desugared in desugar_expr")
}
// we only need to unwrap some expressions, leave the rest as is
_ => Ok(loc_expr),
}
};
// KEEP THIS HERE FOR DEBUGGING
// USEFUL TO SEE THE UNWRAPPING
// OF AST NODES AS THEY DESCEND
// dbg!(&loc_expr, &unwrapped_expression);
unwrapped_expression
}
pub fn unwrap_suffixed_expression_parens_help<'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 {
Expr::ParensAround(sub_loc_expr) => {
// note we use `None` here as we always want to generate a new pattern from child expressions
match unwrap_suffixed_expression(arena, arena.alloc(Loc::at_zero(*sub_loc_expr)), None)
{
Ok(new_expr) => {
let new_parens = arena.alloc(Loc::at(
loc_expr.region,
ParensAround(arena.alloc(new_expr.value)),
));
Ok(new_parens)
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
internal_error!("unreachable, child expressions from ParensAround should generate UnwrappedSubExpr instead");
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
let new_parens = arena.alloc(Loc::at(
loc_expr.region,
ParensAround(arena.alloc(sub_new.value)),
));
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new: new_parens,
})
}
Err(err) => Err(err),
}
}
_ => internal_error!("unreachable, expected a ParensAround node to be passed into unwrap_suffixed_expression_parens_help"),
}
}
pub fn unwrap_suffixed_expression_closure_help<'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 {
Expr::Closure(closure_args, closure_loc_ret) => {
// Check to make sure that arguments are not suffixed
let suffixed_arg_count = closure_args
.iter()
.filter(|loc_pat| loc_pat.value.is_suffixed())
.count();
if suffixed_arg_count > 0 {
debug_assert!(false,"closure arguments should not be suffixed");
return Err(EUnwrapped::Malformed);
}
// note we use `None` here as we don't want to pass a DefExpr up and
// unwrap the definition pattern for the closure
match unwrap_suffixed_expression(arena, closure_loc_ret, None) {
Ok(unwrapped_expr) => {
let new_closure = arena.alloc(Loc::at(loc_expr.region, Expr::Closure(closure_args, unwrapped_expr)));
Ok(new_closure)
}
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
let new_closure_loc_ret = apply_task_await(arena, loc_expr.region, sub_arg, sub_pat, sub_new);
let new_closure = arena.alloc(Loc::at(loc_expr.region, Expr::Closure(closure_args, new_closure_loc_ret)));
Ok(new_closure)
}
Err(err) => {
debug_assert!(false,"the closure Defs was malformd, got {:#?}", err);
Err(EUnwrapped::Malformed)
}
}
}
_ => internal_error!("unreachable, expected a Closure node to be passed into unwrap_suffixed_expression_closure_help"),
}
}
pub fn unwrap_suffixed_expression_apply_help<'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 {
Expr::Apply(function, apply_args, called_via) => {
// Any suffixed arguments will be innermost, therefore we unwrap those first
let local_args = arena.alloc_slice_copy(apply_args);
for (_, arg) in local_args.iter_mut().enumerate() {
match unwrap_suffixed_expression(arena, arg, maybe_def_pat) {
Ok(new_arg) => {
*arg = new_arg;
}
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_arg)) => {
*arg = unwrapped_arg;
let new_apply = arena.alloc(Loc::at(loc_expr.region, Apply(function, local_args, called_via)));
return Err(EUnwrapped::UnwrappedDefExpr(new_apply));
}
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new: new_arg }) => {
*arg = new_arg;
let new_apply = arena.alloc(Loc::at(loc_expr.region, Apply(function, local_args, called_via)));
return Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new: new_apply});
}
Err(err) => return Err(err),
}
}
// special case for when our Apply function is a suffixed Var (but not multiple suffixed)
if let Expr::Var { module_name, ident, suffixed } = function.value {
if suffixed == 1 {
let unwrapped_function = arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name,
ident,
suffixed: suffixed - 1,
},
));
let new_apply = arena.alloc(Loc::at(loc_expr.region, Expr::Apply(unwrapped_function, local_args, called_via)));
return init_unwrapped_err(arena, new_apply, maybe_def_pat);
}
}
// function is another expression
match unwrap_suffixed_expression(arena, function, maybe_def_pat) {
Ok(new_function) => {
let new_apply = arena.alloc(Loc::at(loc_expr.region, Expr::Apply(new_function, local_args, called_via)));
Ok(new_apply)
}
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_function)) => {
let new_apply = arena.alloc(Loc::at(loc_expr.region, Expr::Apply(unwrapped_function, local_args, called_via)));
Err(EUnwrapped::UnwrappedDefExpr(new_apply))
}
Err(EUnwrapped::UnwrappedSubExpr { sub_arg: unwrapped_function, sub_pat, sub_new }) => {
let new_apply = arena.alloc(Loc::at(loc_expr.region, Expr::Apply(sub_new, local_args, called_via)));
Err(EUnwrapped::UnwrappedSubExpr { sub_arg: unwrapped_function, sub_pat, sub_new:new_apply})
}
Err(err) => Err(err)
}
}
_ => internal_error!("unreachable, expected an Apply node to be passed into unwrap_suffixed_expression_apply_help"),
}
}
/// Unwrap if-then-else statements
pub fn unwrap_suffixed_expression_if_then_else_help<'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 {
Expr::If(if_thens, final_else_branch) => {
for (index, if_then) in if_thens.iter().enumerate() {
let (current_if_then_statement, current_if_then_expression) = if_then;
// unwrap suffixed (innermost) expressions e.g. `if true then doThing! then ...`
if is_loc_expr_suffixed(current_if_then_expression) {
// split if_thens around the current index
let (before, after) = roc_parse::ast::split_around(if_thens, index);
match unwrap_suffixed_expression(arena, current_if_then_expression, None) {
Ok(unwrapped_expression) => {
let mut new_if_thens = Vec::new_in(arena);
new_if_thens.extend(before);
new_if_thens.push((*current_if_then_statement, *unwrapped_expression));
new_if_thens.extend(after);
let new_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(
arena.alloc_slice_copy(new_if_thens.as_slice()),
final_else_branch,
),
));
return unwrap_suffixed_expression(arena, new_if, maybe_def_pat);
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
internal_error!("unexpected, unwrapped if-then-else Def expr should have intermediate answer as `None` was passed as pattern");
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
let ok_wrapped_return = arena.alloc(Loc::at(
loc_expr.region,
Expr::Apply(
arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name: ModuleName::TASK,
ident: "ok",
suffixed: 0,
},
)),
arena.alloc([sub_new]),
CalledVia::BangSuffix,
),
));
let unwrapped_expression = apply_task_await(
arena,
sub_arg.region,
sub_arg,
sub_pat,
ok_wrapped_return,
);
let mut new_if_thens = Vec::new_in(arena);
new_if_thens.extend(before);
new_if_thens.push((*current_if_then_statement, *unwrapped_expression));
new_if_thens.extend(after);
let new_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(
arena.alloc_slice_copy(new_if_thens.as_slice()),
final_else_branch,
),
));
return unwrap_suffixed_expression(arena, new_if, maybe_def_pat);
}
Err(EUnwrapped::Malformed) => return Err(EUnwrapped::Malformed),
}
}
// unwrap suffixed statements e.g. `if isThing! then ...`
// note we want to split and nest if-then's so we only run Task's
// that are required
if is_loc_expr_suffixed(current_if_then_statement) {
// split if_thens around the current index
let (before, after) = roc_parse::ast::split_around(if_thens, index);
match unwrap_suffixed_expression(arena, current_if_then_statement, None) {
Ok(unwrapped_statement) => {
let mut new_if_thens = Vec::new_in(arena);
new_if_thens.push((*unwrapped_statement, *current_if_then_expression));
new_if_thens.extend(after);
let new_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(
arena.alloc_slice_copy(new_if_thens.as_slice()),
final_else_branch,
),
));
return unwrap_suffixed_expression(arena, new_if, maybe_def_pat);
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
internal_error!("unexpected, unwrapped if-then-else Def expr should have intermediate answer as `None` was passed as pattern");
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
if before.is_empty() {
let mut new_if_thens = Vec::new_in(arena);
new_if_thens.extend(before);
new_if_thens.push((*sub_new, *current_if_then_expression));
new_if_thens.extend(after);
let new_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(
arena.alloc_slice_copy(new_if_thens.as_slice()),
final_else_branch,
),
));
let unwrapped_if_then = apply_task_await(
arena,
sub_arg.region,
sub_arg,
sub_pat,
new_if,
);
return unwrap_suffixed_expression(
arena,
unwrapped_if_then,
maybe_def_pat,
);
} else {
let mut after_if_thens = Vec::new_in(arena);
after_if_thens.push((*sub_new, *current_if_then_expression));
after_if_thens.extend(after);
let after_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(
arena.alloc_slice_copy(after_if_thens.as_slice()),
final_else_branch,
),
));
let after_if_then = apply_task_await(
arena,
sub_arg.region,
sub_arg,
sub_pat,
after_if,
);
let before_if_then = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(before, after_if_then),
));
return unwrap_suffixed_expression(
arena,
before_if_then,
maybe_def_pat,
);
}
}
Err(EUnwrapped::Malformed) => return Err(EUnwrapped::Malformed),
}
}
}
// check the final_else_branch
match unwrap_suffixed_expression(arena, final_else_branch, None) {
Ok(unwrapped_final_else) => {
return Ok(arena.alloc(Loc::at(
loc_expr.region,
Expr::If(if_thens, unwrapped_final_else),
)));
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
internal_error!("unexpected, unwrapped if-then-else Def expr should have intermediate answer as `None` was passed as pattern");
}
Err(EUnwrapped::UnwrappedSubExpr {
sub_arg,
sub_pat,
sub_new,
}) => {
let ok_wrapped_return = arena.alloc(Loc::at(
loc_expr.region,
Expr::Apply(
arena.alloc(Loc::at(
loc_expr.region,
Expr::Var {
module_name: ModuleName::TASK,
ident: "ok",
suffixed: 0,
},
)),
arena.alloc([sub_new]),
CalledVia::BangSuffix,
),
));
let unwrapped_final_else = apply_task_await(
arena,
sub_arg.region,
sub_arg,
sub_pat,
ok_wrapped_return,
);
let new_if = arena.alloc(Loc::at(
loc_expr.region,
Expr::If(if_thens, unwrapped_final_else),
));
return unwrap_suffixed_expression(arena, new_if, maybe_def_pat);
}
Err(EUnwrapped::Malformed) => Err(EUnwrapped::Malformed),
}
}
_ => internal_error!("unreachable, expected an If expression to desugar"),
}
}
pub fn unwrap_suffixed_expression_when_help<'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>> {
Ok(loc_expr)
}
pub fn unwrap_suffixed_expression_defs_help<'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 {
Expr::Defs(defs, loc_ret) => {
let mut local_defs = defs.clone();
let tags = local_defs.tags.clone();
// try an unwrap each def, if none can be unwrapped, then try to unwrap the loc_ret
for (tag_index, type_or_value_def_index) in tags.iter().enumerate() {
use ValueDef::*;
let mut current_value_def = match type_or_value_def_index.split() {
Ok(..) => {
// ignore type definitions
continue;
},
Err(value_index) => *local_defs.value_defs.get(value_index.index()).unwrap(),
};
let maybe_suffixed_value_def = match current_value_def {
Annotation(..) | Dbg{..} | Expect{..} | ExpectFx{..} | Stmt(..) => None,
AnnotatedBody { body_pattern, body_expr, .. } => Some((body_pattern, body_expr)),
Body (def_pattern, def_expr, .. ) => Some((def_pattern, def_expr)),
};
match maybe_suffixed_value_def {
None => {
// We can't unwrap this def type, continue
},
Some((def_pattern, def_expr)) => {
match unwrap_suffixed_expression(arena, def_expr, Some(def_pattern)) {
Ok(unwrapped_def) => {
current_value_def.replace_expr(unwrapped_def);
local_defs.replace_with_value_def(tag_index, current_value_def, def_expr.region);
}
Err(EUnwrapped::UnwrappedDefExpr(unwrapped_expr)) => {
let split_defs = local_defs.split_defs_around(tag_index);
let before_empty = split_defs.before.is_empty();
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) {
Ok(next_expr) => next_expr,
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
apply_task_await(arena,def_expr.region,sub_arg,sub_pat,sub_new)
}
Err(EUnwrapped::UnwrappedDefExpr(..)) | Err(EUnwrapped::Malformed) => {
// TODO handle case when we have maybe_def_pat so can return an unwrapped up
return Err(EUnwrapped::Malformed);
},
};
return unwrap_suffixed_expression(arena, apply_task_await(arena,def_expr.region,unwrapped_expr,def_pattern,next_expr), maybe_def_pat);
} else if before_empty {
// NIL before, SOME after -> FIRST DEF
let new_defs = arena.alloc(Loc::at(def_expr.region, Defs(arena.alloc(split_defs.after), loc_ret)));
let next_expr = match unwrap_suffixed_expression(arena,new_defs,maybe_def_pat){
Ok(next_expr) => next_expr,
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
apply_task_await(arena, def_expr.region, sub_arg, sub_pat, sub_new)
}
Err(EUnwrapped::UnwrappedDefExpr(..)) | Err(EUnwrapped::Malformed) => {
// TODO handle case when we have maybe_def_pat so can return an unwrapped up
return Err(EUnwrapped::Malformed);
},
};
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){
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)));
return unwrap_suffixed_expression(arena, new_defs, maybe_def_pat);
},
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
let new_loc_ret = apply_task_await(arena,def_expr.region,sub_arg,sub_pat,sub_new);
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)));
return unwrap_suffixed_expression(arena, new_defs, maybe_def_pat);
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
// TODO confirm this is correct with test case
return Err(EUnwrapped::Malformed);
}
Err(EUnwrapped::Malformed) => {
return Err(EUnwrapped::Malformed);
},
}
} else {
// SOME before, SOME after -> MIDDLE DEF
let after_defs = arena.alloc(Loc::at(def_expr.region, Defs(arena.alloc(split_defs.after), loc_ret)));
match unwrap_suffixed_expression(arena,after_defs,maybe_def_pat){
Ok(new_loc_ret) => {
let applied_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_await)));
return unwrap_suffixed_expression(arena, new_defs, maybe_def_pat);
},
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
let new_loc_ret = apply_task_await(arena, def_expr.region, sub_arg, sub_pat, sub_new);
let applied_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_await)));
return unwrap_suffixed_expression(arena, new_defs, maybe_def_pat);
}
Err(EUnwrapped::UnwrappedDefExpr(..)) | Err(EUnwrapped::Malformed) => {
// TODO handle case when we have maybe_def_pat so can return an unwrapped up
return Err(EUnwrapped::Malformed);
},
};
}
}
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
let new_body_def = ValueDef::Body(def_pattern, sub_new);
local_defs.replace_with_value_def(tag_index,new_body_def, sub_new.region);
let new_defs_expr = arena.alloc(Loc::at(def_expr.region,Defs(arena.alloc(local_defs), loc_ret)));
let replaced_def = apply_task_await(arena,def_expr.region,sub_arg,sub_pat,new_defs_expr);
return unwrap_suffixed_expression(arena,replaced_def,maybe_def_pat);
}
Err(err) => return Err(err)
}
}
}
}
// try to unwrap the loc_ret
match unwrap_suffixed_expression(arena,loc_ret,maybe_def_pat){
Ok(new_loc_ret) => {
Ok(arena.alloc(Loc::at(loc_expr.region,Defs(arena.alloc(local_defs), new_loc_ret))))
},
Err(EUnwrapped::UnwrappedSubExpr { sub_arg, sub_pat, sub_new }) => {
let new_loc_ret = apply_task_await(arena, loc_expr.region,sub_arg,sub_pat,sub_new);
let new_defs = arena.alloc(Loc::at(loc_expr.region,Defs(arena.alloc(local_defs), new_loc_ret)));
unwrap_suffixed_expression(arena, new_defs, maybe_def_pat)
}
Err(EUnwrapped::UnwrappedDefExpr(..)) => {
// TODO confirm this is correct with test case
Err(EUnwrapped::Malformed)
}
Err(EUnwrapped::Malformed) => {
Err(EUnwrapped::Malformed)
},
}
},
_ => internal_error!("unreachable, expected a Defs node to be passed into unwrap_suffixed_expression_defs_help"),
}
}
/// Helper for `Task.await (loc_arg) \loc_pat -> loc_new`
pub fn apply_task_await<'a>(
arena: &'a Bump,
region: Region,
loc_arg: &'a Loc<Expr<'a>>,
loc_pat: &'a Loc<Pattern<'a>>,
loc_new: &'a Loc<Expr<'a>>,
) -> &'a Loc<Expr<'a>> {
// If the pattern and the new are the same then we don't need to unwrap anything
// e.g. `Task.await foo \{} -> Task.ok {}` is the same as `foo`
if is_pattern_empty_record(loc_pat) && is_expr_task_ok(loc_new) {
return loc_arg;
}
let mut task_await_apply_args: Vec<&'a Loc<Expr<'a>>> = Vec::new_in(arena);
// apply the unwrapped suffixed expression
task_await_apply_args.push(loc_arg);
// apply the closure
let mut closure_pattern = Vec::new_in(arena);
closure_pattern.push(*loc_pat);
task_await_apply_args.push(arena.alloc(Loc::at(
region,
Closure(arena.alloc_slice_copy(closure_pattern.as_slice()), loc_new),
)));
arena.alloc(Loc::at(
region,
Apply(
arena.alloc(Loc {
region,
value: Var {
module_name: ModuleName::TASK,
ident: "await",
suffixed: 0,
},
}),
arena.alloc(task_await_apply_args),
CalledVia::BangSuffix,
),
))
}
fn is_pattern_empty_record<'a>(loc_pat: &'a Loc<Pattern<'a>>) -> bool {
match loc_pat.value {
Pattern::RecordDestructure(collection) => collection.is_empty(),
_ => false,
}
}
fn is_expr_task_ok<'a>(loc_expr: &'a Loc<Expr<'a>>) -> bool {
match loc_expr.value {
Expr::Apply(function, arguments, _) => {
let is_task_ok = match function.value {
Var {
module_name, ident, ..
} => module_name == ModuleName::TASK && ident == "ok",
_ => false,
};
let is_arg_empty_record = arguments
.first()
.map(|arg_loc_expr| match arg_loc_expr.value {
Expr::Record(collection) => collection.is_empty(),
_ => false,
})
.unwrap_or(false);
is_task_ok && is_arg_empty_record
}
_ => false,
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,16 @@
use roc_can::{abilities::SpecializationLambdaSets, module::ExposedByModule};
use roc_can::{
abilities::SpecializationLambdaSets,
expr::{Expr, WhenBranch, WhenBranchPattern},
module::ExposedByModule,
pattern::Pattern,
};
use roc_checkmate::with_checkmate;
use roc_error_macros::internal_error;
use roc_module::symbol::{IdentIds, Symbol};
use roc_region::all::Loc;
use roc_solve_schema::UnificationMode;
use roc_types::{
subs::{instantiate_rigids, Subs, Variable},
subs::{instantiate_rigids, RedundantMark, Subs, Variable},
types::Polarity,
};
@ -202,3 +208,42 @@ pub(crate) enum ExtensionKind {
Record,
TagUnion,
}
/// Ok a -> Ok a
/// A `when ... is` branch that matches `Ok a` and returns `Ok a`
pub(crate) fn ok_to_ok_branch(
pattern_var: Variable,
result_var: Variable,
field_var: Variable,
symbol: &Symbol,
env: &mut Env<'_>,
) -> WhenBranch {
WhenBranch {
patterns: vec![WhenBranchPattern {
pattern: Loc::at_zero(Pattern::AppliedTag {
whole_var: pattern_var,
ext_var: Variable::EMPTY_TAG_UNION,
tag_name: "Ok".into(),
arguments: vec![(field_var, Loc::at_zero(Pattern::Identifier(*symbol)))],
}),
degenerate: false,
}],
value: Loc::at_zero(Expr::Tag {
tag_union_var: result_var,
ext_var: env.new_ext_var(ExtensionKind::TagUnion),
name: "Ok".into(),
arguments: vec![(field_var, Loc::at_zero(Expr::Var(*symbol, field_var)))],
}),
guard: None,
redundant: RedundantMark::known_non_redundant(),
}
}
/// `[]`
/// Creates an empty list of the type provided.
pub(crate) fn empty_list(var: Variable) -> Expr {
Expr::List {
elem_var: var,
loc_elems: vec![],
}
}

View file

@ -12,5 +12,6 @@ roc_collections = { path = "../collections" }
roc_module = { path = "../module" }
roc_parse = { path = "../parse" }
roc_region = { path = "../region" }
roc_error_macros = { path = "../../error_macros" }
bumpalo.workspace = true

View file

@ -196,10 +196,11 @@ impl<'a> Formattable for ValueDef<'a> {
Expect { condition, .. } => condition.is_multiline(),
ExpectFx { condition, .. } => condition.is_multiline(),
Dbg { condition, .. } => condition.is_multiline(),
Stmt(loc_expr) => loc_expr.is_multiline(),
}
}
fn format_with_options(&self, buf: &mut Buf, _parens: Parens, newlines: Newlines, indent: u16) {
fn format_with_options(&self, buf: &mut Buf, parens: Parens, newlines: Newlines, indent: u16) {
use roc_parse::ast::ValueDef::*;
match self {
Annotation(loc_pattern, loc_annotation) => {
@ -238,6 +239,7 @@ impl<'a> Formattable for ValueDef<'a> {
buf.newline();
fmt_body(buf, &body_pattern.value, &body_expr.value, indent);
}
Stmt(loc_expr) => loc_expr.format_with_options(buf, parens, newlines, indent),
}
}
}
@ -357,9 +359,19 @@ pub fn fmt_defs(buf: &mut Buf, defs: &Defs, indent: u16) {
}
pub fn fmt_body<'a>(buf: &mut Buf, pattern: &'a Pattern<'a>, body: &'a Expr<'a>, indent: u16) {
pattern.format_with_options(buf, Parens::InApply, Newlines::No, indent);
buf.indent(indent);
buf.push_str(" =");
// Check if this is an assignment into the unit value
let is_unit_assignment = if let Pattern::RecordDestructure(collection) = pattern {
collection.is_empty()
} else {
false
};
// Don't format the `{} =` for defs with this pattern
if !is_unit_assignment {
pattern.format_with_options(buf, Parens::InApply, Newlines::No, indent);
buf.indent(indent);
buf.push_str(" =");
}
if body.is_multiline() {
match body {

View file

@ -9,8 +9,8 @@ use crate::spaces::{
use crate::Buf;
use roc_module::called_via::{self, BinOp};
use roc_parse::ast::{
AssignedField, Base, Collection, CommentOrNewline, Expr, ExtractSpaces, Pattern,
RecordBuilderField, WhenBranch,
is_loc_expr_suffixed, AssignedField, Base, Collection, CommentOrNewline, Expr, ExtractSpaces,
Pattern, RecordBuilderField, WhenBranch,
};
use roc_parse::ast::{StrLiteral, StrSegment};
use roc_parse::ident::Accessor;
@ -31,6 +31,8 @@ impl<'a> Formattable for Expr<'a> {
true
}
MalformedSuffixed(loc_expr) => loc_expr.is_multiline(),
// These expressions never have newlines
Float(..)
| Num(..)
@ -46,6 +48,7 @@ impl<'a> Formattable for Expr<'a> {
| Tag(_)
| OpaqueRef(_)
| IngestedFile(_, _)
| EmptyDefsFinal
| Crash => false,
// These expressions always have newlines
@ -107,7 +110,6 @@ impl<'a> Formattable for Expr<'a> {
Tuple(fields) => is_collection_multiline(fields),
RecordUpdate { fields, .. } => is_collection_multiline(fields),
RecordBuilder(fields) => is_collection_multiline(fields),
Suffixed(subexpr) => subexpr.is_multiline(),
}
}
@ -168,7 +170,11 @@ impl<'a> Formattable for Expr<'a> {
Str(literal) => {
fmt_str_literal(buf, *literal, indent);
}
Var { module_name, ident } => {
Var {
module_name,
ident,
suffixed,
} => {
buf.indent(indent);
if !module_name.is_empty() {
buf.push_str(module_name);
@ -176,6 +182,11 @@ impl<'a> Formattable for Expr<'a> {
}
buf.push_str(ident);
let count: u8 = *suffixed;
for _ in 0..count {
buf.push('!');
}
}
Underscore(name) => {
buf.indent(indent);
@ -417,6 +428,9 @@ impl<'a> Formattable for Expr<'a> {
indent,
);
}
EmptyDefsFinal => {
// no need to print anything
}
_ => {
buf.ensure_ends_with_newline();
buf.indent(indent);
@ -433,6 +447,9 @@ 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);
}
@ -495,28 +512,74 @@ impl<'a> Formattable for Expr<'a> {
}
}
RecordAccess(expr, key) => {
expr.format_with_options(buf, Parens::InApply, Newlines::Yes, indent);
// Check for any `!` suffixes and format these at the end of expression
let (expr_to_format, suffix_count) = if let Var {
module_name,
ident,
suffixed,
} = expr
{
(
Var {
module_name,
ident,
suffixed: 0,
},
suffixed,
)
} else {
(**expr, &0u8)
};
expr_to_format.format_with_options(buf, Parens::InApply, Newlines::Yes, indent);
buf.push('.');
buf.push_str(key);
for _ in 0..*suffix_count {
buf.push('!');
}
}
TupleAccess(expr, key) => {
expr.format_with_options(buf, Parens::InApply, Newlines::Yes, indent);
// Check for any `!` suffixes and format these at the end of expression
let (expr_to_format, suffix_count) = if let Var {
module_name,
ident,
suffixed,
} = expr
{
(
Var {
module_name,
ident,
suffixed: 0,
},
suffixed,
)
} else {
(**expr, &0u8)
};
expr_to_format.format_with_options(buf, Parens::InApply, Newlines::Yes, indent);
buf.push('.');
buf.push_str(key);
for _ in 0..*suffix_count {
buf.push('!');
}
}
MalformedIdent(str, _) => {
buf.indent(indent);
buf.push_str(str)
}
MalformedSuffixed(loc_expr) => {
buf.indent(indent);
loc_expr.format_with_options(buf, parens, newlines, indent);
}
MalformedClosure => {}
PrecedenceConflict { .. } => {}
MultipleRecordBuilders { .. } => {}
UnappliedRecordBuilder { .. } => {}
IngestedFile(_, _) => {}
Suffixed(sub_expr) => {
sub_expr.format_with_options(buf, parens, newlines, indent);
buf.push('!');
}
}
}
}
@ -726,14 +789,32 @@ fn fmt_binops<'a>(
|| loc_right_side.value.is_multiline()
|| lefts.iter().any(|(expr, _)| expr.value.is_multiline());
let is_any_lefts_suffixed = lefts.iter().any(|(left, _)| is_loc_expr_suffixed(left));
let is_right_suffixed = is_loc_expr_suffixed(loc_right_side);
let is_any_suffixed = is_any_lefts_suffixed || is_right_suffixed;
let mut is_first = false;
let mut adjusted_indent = indent;
if is_any_suffixed {
// we only want to indent the remaining lines if this is a suffixed expression.
is_first = true;
}
for (loc_left_side, loc_binop) in lefts {
let binop = loc_binop.value;
loc_left_side.format_with_options(buf, Parens::InOperator, Newlines::No, indent);
loc_left_side.format_with_options(buf, Parens::InOperator, Newlines::No, adjusted_indent);
if is_first {
// indent the remaining lines, but only if the expression is suffixed.
is_first = false;
adjusted_indent = indent + 4;
}
if is_multiline {
buf.ensure_ends_with_newline();
buf.indent(indent);
buf.indent(adjusted_indent);
} else {
buf.spaces(1);
}
@ -743,7 +824,7 @@ fn fmt_binops<'a>(
buf.spaces(1);
}
loc_right_side.format_with_options(buf, Parens::InOperator, Newlines::Yes, indent);
loc_right_side.format_with_options(buf, Parens::InOperator, Newlines::Yes, adjusted_indent);
}
fn format_spaces(buf: &mut Buf, spaces: &[CommentOrNewline], newlines: Newlines, indent: u16) {

View file

@ -64,7 +64,7 @@ impl<'a> Formattable for Pattern<'a> {
}
},
Pattern::Identifier(_)
Pattern::Identifier { .. }
| Pattern::Tag(_)
| Pattern::OpaqueRef(_)
| Pattern::Apply(_, _)
@ -88,9 +88,16 @@ impl<'a> Formattable for Pattern<'a> {
use self::Pattern::*;
match self {
Identifier(string) => {
Identifier {
ident: string,
suffixed,
} => {
buf.indent(indent);
buf.push_str(string)
buf.push_str(string);
for _ in 0..*suffixed {
buf.push('!');
}
}
Tag(name) | OpaqueRef(name) => {
buf.indent(indent);
@ -270,13 +277,21 @@ impl<'a> Formattable for Pattern<'a> {
buf.indent(indent);
buf.push_str(string);
}
QualifiedIdentifier { module_name, ident } => {
QualifiedIdentifier {
module_name,
ident,
suffixed,
} => {
buf.indent(indent);
if !module_name.is_empty() {
buf.push_str(module_name);
buf.push('.');
}
for _ in 0..*suffixed {
buf.push('!');
}
buf.push_str(ident);
}
}

View file

@ -567,6 +567,7 @@ impl<'a> RemoveSpaces<'a> for ValueDef<'a> {
condition: arena.alloc(condition.remove_spaces(arena)),
preceding_comment: Region::zero(),
},
Stmt(loc_expr) => Stmt(arena.alloc(loc_expr.remove_spaces(arena))),
}
}
}
@ -668,6 +669,7 @@ 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 {
@ -692,7 +694,15 @@ impl<'a> RemoveSpaces<'a> for Expr<'a> {
Expr::Record(a) => Expr::Record(a.remove_spaces(arena)),
Expr::RecordBuilder(a) => Expr::RecordBuilder(a.remove_spaces(arena)),
Expr::Tuple(a) => Expr::Tuple(a.remove_spaces(arena)),
Expr::Var { module_name, ident } => Expr::Var { module_name, ident },
Expr::Var {
module_name,
ident,
suffixed,
} => Expr::Var {
module_name,
ident,
suffixed,
},
Expr::Underscore(a) => Expr::Underscore(a),
Expr::Tag(a) => Expr::Tag(a),
Expr::OpaqueRef(a) => Expr::OpaqueRef(a),
@ -755,13 +765,13 @@ impl<'a> RemoveSpaces<'a> for Expr<'a> {
}
Expr::MalformedIdent(a, b) => Expr::MalformedIdent(a, remove_spaces_bad_ident(b)),
Expr::MalformedClosure => Expr::MalformedClosure,
Expr::MalformedSuffixed(a) => Expr::MalformedSuffixed(a),
Expr::PrecedenceConflict(a) => Expr::PrecedenceConflict(a),
Expr::MultipleRecordBuilders(a) => Expr::MultipleRecordBuilders(a),
Expr::UnappliedRecordBuilder(a) => Expr::UnappliedRecordBuilder(a),
Expr::SpaceBefore(a, _) => a.remove_spaces(arena),
Expr::SpaceAfter(a, _) => a.remove_spaces(arena),
Expr::SingleQuote(a) => Expr::Num(a),
Expr::Suffixed(a) => a.remove_spaces(arena),
}
}
}
@ -792,7 +802,7 @@ fn remove_spaces_bad_ident(ident: BadIdent) -> BadIdent {
impl<'a> RemoveSpaces<'a> for Pattern<'a> {
fn remove_spaces(&self, arena: &'a Bump) -> Self {
match *self {
Pattern::Identifier(a) => Pattern::Identifier(a),
Pattern::Identifier { ident, suffixed } => Pattern::Identifier { ident, suffixed },
Pattern::Tag(a) => Pattern::Tag(a),
Pattern::OpaqueRef(a) => Pattern::OpaqueRef(a),
Pattern::Apply(a, b) => Pattern::Apply(
@ -825,9 +835,15 @@ impl<'a> RemoveSpaces<'a> for Pattern<'a> {
Pattern::Underscore(a) => Pattern::Underscore(a),
Pattern::Malformed(a) => Pattern::Malformed(a),
Pattern::MalformedIdent(a, b) => Pattern::MalformedIdent(a, remove_spaces_bad_ident(b)),
Pattern::QualifiedIdentifier { module_name, ident } => {
Pattern::QualifiedIdentifier { module_name, ident }
}
Pattern::QualifiedIdentifier {
module_name,
ident,
suffixed,
} => Pattern::QualifiedIdentifier {
module_name,
ident,
suffixed,
},
Pattern::SpaceBefore(a, _) => a.remove_spaces(arena),
Pattern::SpaceAfter(a, _) => a.remove_spaces(arena),
Pattern::SingleQuote(a) => Pattern::SingleQuote(a),

View file

@ -40,7 +40,7 @@ roc_problem = { path = "../problem" }
roc_region = { path = "../region" }
roc_solve_problem = { path = "../solve_problem" }
ven_pretty = { path = "../../vendor/pretty" }
roc_test_utils = { path = "../../test_utils" }
roc_test_utils_dir = { path = "../../test_utils_dir" }
indoc.workspace = true
insta.workspace = true

View file

@ -28,6 +28,7 @@ mod test_reporting {
use roc_reporting::report::{RocDocAllocator, RocDocBuilder};
use roc_solve::FunctionKind;
use roc_solve_problem::TypeError;
use roc_test_utils_dir::TmpDir;
use roc_types::subs::Subs;
use std::path::PathBuf;
@ -115,7 +116,7 @@ mod test_reporting {
// We can't have all tests use "tmp" because tests run in parallel,
// so append the test name to the tmp path.
let tmp = format!("tmp/{subdir}");
let dir = roc_test_utils::TmpDir::new(&tmp);
let dir = TmpDir::new(&tmp);
let filename = PathBuf::from("Test.roc");
let file_path = dir.path().join(filename);
@ -4767,33 +4768,38 @@ mod test_reporting {
"
);
test_report!(
def_missing_final_expression,
indoc!(
r"
f : Foo.foo
"
),
@r#"
MISSING FINAL EXPRESSION in tmp/def_missing_final_expression/Test.roc
// TODO investigate this test. It was disabled in https://github.com/roc-lang/roc/pull/6634
// as the way Defs without final expressions are handled. The changes probably shouldn't have
// changed this error report. The exact same test_syntax test for this has not changed, so
// we know the parser is parsing thesame thing. Therefore the way the AST is desugared must be
// the cause of the change in error report.
// test_report!(
// def_missing_final_expression,
// indoc!(
// r"
// f : Foo.foo
// "
// ),
// @r#"
// ── MISSING FINAL EXPRESSION in tmp/def_missing_final_expression/Test.roc ───────
I am partway through parsing a definition, but I got stuck here:
// I am partway through parsing a definition, but I got stuck here:
1 app "test" provides [main] to "./platform"
2
3 main =
4 f : Foo.foo
^
// 1│ app "test" provides [main] to "./platform"
// 2│
// 3│ main =
// 4│ f : Foo.foo
// ^
This definition is missing a final expression. A nested definition
must be followed by either another definition, or an expression
// This definition is missing a final expression. A nested definition
// must be followed by either another definition, or an expression
x = 4
y = 2
// x = 4
// y = 2
x + y
"#
);
// x + y
// "#
// );
test_report!(
expression_indentation_end,

View file

@ -40,7 +40,7 @@ parking_lot.workspace = true
tempfile.workspace = true
[dev-dependencies]
roc_test_utils = { path = "../../test_utils" }
roc_test_utils_dir = { path = "../../test_utils_dir" }
indoc.workspace = true
maplit.workspace = true

View file

@ -212,7 +212,11 @@ fn generate_entry_docs(
match either_index.split() {
Err(value_index) => match &defs.value_defs[value_index.index()] {
ValueDef::Annotation(loc_pattern, loc_ann) => {
if let Pattern::Identifier(identifier) = loc_pattern.value {
if let Pattern::Identifier {
ident: identifier,
suffixed: _,
} = loc_pattern.value
{
// Check if this module exposes the def
if let Some(ident_id) = ident_ids.get_id(identifier) {
let name = identifier.to_string();
@ -233,7 +237,11 @@ fn generate_entry_docs(
ann_type,
..
} => {
if let Pattern::Identifier(identifier) = ann_pattern.value {
if let Pattern::Identifier {
ident: identifier,
suffixed: _,
} = ann_pattern.value
{
// Check if this module exposes the def
if let Some(ident_id) = ident_ids.get_id(identifier) {
let doc_def = DocDef {
@ -249,7 +257,11 @@ fn generate_entry_docs(
}
ValueDef::Body(pattern, _) => {
if let Pattern::Identifier(identifier) = pattern.value {
if let Pattern::Identifier {
ident: identifier,
suffixed: _,
} = pattern.value
{
// Check if this module exposes the def
if let Some(ident_id) = ident_ids.get_id(identifier) {
let doc_def = DocDef {
@ -275,6 +287,25 @@ fn generate_entry_docs(
ValueDef::ExpectFx { .. } => {
// Don't generate docs for `expect-fx`s
}
ValueDef::Stmt(loc_expr) => {
if let roc_parse::ast::Expr::Var {
ident: identifier, ..
} = loc_expr.value
{
// Check if this module exposes the def
if let Some(ident_id) = ident_ids.get_id(identifier) {
let doc_def = DocDef {
name: identifier.to_string(),
type_annotation: TypeAnnotation::NoTypeAnn,
type_vars: Vec::new(),
symbol: Symbol::new(home, ident_id),
docs,
};
doc_entries.push(DocEntry::DocDef(doc_def));
}
}
}
},
Ok(type_index) => match &defs.type_defs[type_index.index()] {
@ -285,7 +316,11 @@ fn generate_entry_docs(
let mut type_vars = Vec::new();
for var in vars.iter() {
if let Pattern::Identifier(ident_name) = var.value {
if let Pattern::Identifier {
ident: ident_name,
suffixed: _,
} = var.value
{
type_vars.push(ident_name.to_string());
}
}
@ -319,7 +354,11 @@ fn generate_entry_docs(
let mut type_vars = Vec::new();
for var in vars.iter() {
if let Pattern::Identifier(ident_name) = var.value {
if let Pattern::Identifier {
ident: ident_name,
suffixed: _,
} = var.value
{
type_vars.push(ident_name.to_string());
}
}
@ -343,7 +382,11 @@ fn generate_entry_docs(
let mut type_vars = Vec::new();
for var in vars.iter() {
if let Pattern::Identifier(ident_name) = var.value {
if let Pattern::Identifier {
ident: ident_name,
suffixed: _,
} = var.value
{
type_vars.push(ident_name.to_string());
}
}
@ -605,7 +648,7 @@ fn type_to_docs(in_func_type_ann: bool, type_annotation: ast::TypeAnnotation) ->
.vars
.iter()
.filter_map(|loc_pattern| match loc_pattern.value {
ast::Pattern::Identifier(ident) => Some(ident.to_string()),
ast::Pattern::Identifier { ident, suffixed: _ } => Some(ident.to_string()),
_ => None,
})
.collect(),

View file

@ -5647,7 +5647,15 @@ fn value_def_from_imports<'a>(
);
};
let typed_ident = typed_ident.extract_spaces().item;
let ident = arena.alloc(typed_ident.ident.map_owned(Pattern::Identifier));
let Loc { region, value } = typed_ident.ident;
let ident = arena.alloc(Loc::at(
region,
Pattern::Identifier {
ident: value,
suffixed: 0,
},
));
let ann_type = arena.alloc(typed_ident.ann);
Some(ValueDef::AnnotatedBody {
ann_pattern: ident,

View file

@ -32,6 +32,7 @@ use roc_reporting::report::{can_problem, DEFAULT_PALETTE};
use roc_reporting::report::{strip_colors, RenderTarget};
use roc_solve::FunctionKind;
use roc_target::Target;
use roc_test_utils_dir::TmpDir;
use roc_types::pretty_print::name_and_print_var;
use roc_types::pretty_print::DebugPrint;
use std::collections::HashMap;
@ -153,7 +154,7 @@ fn multiple_modules_help<'a>(
// We can't have all tests use "tmp" because tests run in parallel,
// so append the test name to the tmp path.
let tmp = format!("tmp/{subdir}");
let dir = roc_test_utils::TmpDir::new(&tmp);
let dir = TmpDir::new(&tmp);
let app_module = files.pop().unwrap();
@ -1279,7 +1280,7 @@ fn roc_file_no_extension() {
indoc!(
r#"
app "helloWorld"
packages { pf: "https://github.com/roc-lang/basic-cli/releases/download/0.8.1/x8URkvfyi9I0QhmVG98roKBUs_AZRkLFwFJVJ3942YA.tar.br" }
packages { pf: "https://github.com/roc-lang/basic-cli/releases/download/0.9.0/oKWkaruh2zXxin_xfsYsCJobH1tO8_JvNkFzDwwzNUQ.tar.br" }
imports [pf.Stdout]
provides [main] to pf

View file

@ -415,7 +415,7 @@ fn eq_tag_union_help<'a>(
};
//
// combine all the statments
// combine all the statements
//
let compare_values = tag_id_a_stmt(root.arena.alloc(
//

View file

@ -7,6 +7,7 @@ use crate::parser::ESingleQuote;
use bumpalo::collections::{String, Vec};
use bumpalo::Bump;
use roc_collections::soa::{EitherIndex, Index, Slice};
use roc_error_macros::internal_error;
use roc_module::called_via::{BinOp, CalledVia, UnaryOp};
use roc_region::all::{Loc, Position, Region};
@ -267,9 +268,6 @@ pub enum Expr<'a> {
// Collection Literals
List(Collection<'a, &'a Loc<Expr<'a>>>),
/// An expression followed by `!``
Suffixed(&'a Expr<'a>),
RecordUpdate {
update: &'a Loc<Expr<'a>>,
fields: Collection<'a, Loc<AssignedField<'a, Expr<'a>>>>,
@ -289,6 +287,7 @@ pub enum Expr<'a> {
Var {
module_name: &'a str, // module_name will only be filled if the original Roc code stated something like `5 + SomeModule.myVar`, module_name will be blank if it was `5 + myVar`
ident: &'a str,
suffixed: u8, // how many `!` suffixes, for example `doTheThing!!` executes a Task that returns a Task
},
Underscore(&'a str),
@ -306,6 +305,11 @@ pub enum Expr<'a> {
Closure(&'a [Loc<Pattern<'a>>], &'a Loc<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>>),
@ -341,6 +345,7 @@ pub enum Expr<'a> {
// Problems
MalformedIdent(&'a str, crate::ident::BadIdent),
MalformedClosure,
MalformedSuffixed(&'a Loc<Expr<'a>>),
// Both operators were non-associative, e.g. (True == False == False).
// We should tell the author to disambiguate by grouping them with parens.
PrecedenceConflict(&'a PrecedenceConflict<'a>),
@ -348,6 +353,110 @@ pub enum Expr<'a> {
UnappliedRecordBuilder(&'a Loc<Expr<'a>>),
}
impl Expr<'_> {
pub fn increment_var_suffix(&mut self, count: u8) {
match self {
Expr::Var { suffixed, .. } => {
*suffixed += count;
}
_ => {
internal_error!("increment_var_suffix called on non-Var expression");
}
}
}
pub fn get_region_spanning_binops(&self) -> Region {
match self {
Expr::BinOps(firsts, last) => {
let mut region = last.region;
for (loc_expr, _) in firsts.iter() {
region = Region::span_across(&loc_expr.region, &region);
}
region
}
_ => internal_error!("other expr types not supported"),
}
}
}
pub fn split_loc_exprs_around<'a>(
items: &'a [&Loc<Expr<'a>>],
index: usize,
) -> (&'a [&'a Loc<Expr<'a>>], &'a [&'a Loc<Expr<'a>>]) {
let (before, rest) = items.split_at(index);
let after = &rest[1..]; // Skip the index element
(before, after)
}
pub fn is_loc_expr_suffixed(loc_expr: &Loc<Expr>) -> bool {
match loc_expr.value.extract_spaces().item {
// expression without arguments, `read!`
Expr::Var { suffixed, .. } => suffixed > 0,
// expression with arguments, `line! "Foo"`
Expr::Apply(sub_loc_expr, apply_args, _) => {
let is_function_suffixed = is_loc_expr_suffixed(sub_loc_expr);
let any_args_suffixed = apply_args.iter().any(|arg| is_loc_expr_suffixed(arg));
any_args_suffixed || is_function_suffixed
}
// expression in a pipeline, `"hi" |> say!`
Expr::BinOps(firsts, last) => {
let is_expr_suffixed = is_loc_expr_suffixed(last);
let any_chain_suffixed = firsts
.iter()
.any(|(chain_loc_expr, _)| is_loc_expr_suffixed(chain_loc_expr));
is_expr_suffixed || any_chain_suffixed
}
// expression in a if-then-else, `if isOk! then "ok" else doSomething!`
Expr::If(if_thens, final_else) => {
let any_if_thens_suffixed = if_thens.iter().any(|(if_then, else_expr)| {
is_loc_expr_suffixed(if_then) || is_loc_expr_suffixed(else_expr)
});
is_loc_expr_suffixed(final_else) || any_if_thens_suffixed
}
// expression in parens `(read!)`
Expr::ParensAround(sub_loc_expr) => {
is_loc_expr_suffixed(&Loc::at(loc_expr.region, *sub_loc_expr))
}
// expression in a closure
Expr::Closure(_, sub_loc_expr) => is_loc_expr_suffixed(sub_loc_expr),
// expressions inside a Defs
// note we ignore the final expression as it should not be suffixed
Expr::Defs(defs, _) => {
let any_defs_suffixed = defs.tags.iter().any(|tag| match tag.split() {
Ok(_) => false,
Err(value_index) => match defs.value_defs[value_index.index()] {
ValueDef::Body(_, loc_expr) => is_loc_expr_suffixed(loc_expr),
ValueDef::AnnotatedBody { body_expr, .. } => is_loc_expr_suffixed(body_expr),
_ => false,
},
});
any_defs_suffixed
}
_ => false,
}
}
pub fn split_around<T>(items: &[T], target: usize) -> (&[T], &[T]) {
let (before, rest) = items.split_at(target);
let after = &rest[1..];
(before, after)
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct PrecedenceConflict<'a> {
pub whole_region: Region,
@ -458,6 +567,18 @@ pub enum ValueDef<'a> {
condition: &'a Loc<Expr<'a>>,
preceding_comment: Region,
},
Stmt(&'a Loc<Expr<'a>>),
}
impl<'a> ValueDef<'a> {
pub fn replace_expr(&mut self, new_expr: &'a Loc<Expr<'a>>) {
match self {
ValueDef::Body(_, expr) => *expr = new_expr,
ValueDef::AnnotatedBody { body_expr, .. } => *body_expr = new_expr,
_ => internal_error!("replacing expr in unsupported ValueDef"),
}
}
}
#[derive(Debug, Clone, PartialEq, Default)]
@ -487,6 +608,16 @@ impl<'a> Defs<'a> {
})
}
pub fn list_value_defs(&self) -> impl Iterator<Item = (usize, &ValueDef<'a>)> {
self.tags
.iter()
.enumerate()
.filter_map(|(tag_index, tag)| match tag.split() {
Ok(_) => None,
Err(value_index) => Some((tag_index, &self.value_defs[value_index.index()])),
})
}
pub fn last(&self) -> Option<Result<&TypeDef<'a>, &ValueDef<'a>>> {
self.tags.last().map(|tag| match tag.split() {
Ok(type_index) => Ok(&self.type_defs[type_index.index()]),
@ -494,6 +625,47 @@ 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())),
});
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_loc_expr_suffixed(loc_expr) => {
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_loc_expr_suffixed(loc_expr) => {
let mut new_defs = self.clone();
new_defs.remove_value_def(tag_index);
return Some((new_defs, loc_expr));
}
_ => {}
}
}
None
}
pub fn remove_value_def(&mut self, index: usize) {
match self
.tags
@ -567,6 +739,7 @@ impl<'a> Defs<'a> {
self.push_def_help(tag, region, spaces_before, spaces_after)
}
/// Replace the `value_def` at the given index
pub fn replace_with_value_def(
&mut self,
index: usize,
@ -592,51 +765,81 @@ impl<'a> Defs<'a> {
self.push_def_help(tag, region, spaces_before, spaces_after)
}
// Find the first definition that is a Apply Suffixed
// We need the tag_index so we can use it to remove the value
// We need the value index to know if it is the first
pub fn search_suffixed_defs(&self) -> Option<(usize, usize)> {
for (tag_index, tag) in self.tags.iter().enumerate() {
if let Err(value_index) = tag.split() {
let index = value_index.index();
/// Split the defs around a given target index
///
/// This is useful for unwrapping suffixed `!`
pub fn split_defs_around(&self, target: usize) -> SplitDefsAround<'a> {
let mut before = Defs::default();
let mut after = Defs::default();
if let ValueDef::Body(_, expr) = &self.value_defs[index] {
// The Suffixed has arguments applied e.g. `Stdout.line! "Hello World"`
if let Expr::Apply(sub_expr, _, _) = expr.value {
if let Expr::Suffixed(_) = sub_expr.value {
return Some((tag_index, index));
for (tag_index, tag) in self.tags.iter().enumerate() {
let region = self.regions[tag_index];
let space_before = {
let start = self.space_before[tag_index].start();
let len = self.space_before[tag_index].len();
&self.spaces[start..(start + len)]
};
let space_after = {
let start = self.space_after[tag_index].start();
let len = self.space_after[tag_index].len();
&self.spaces[start..(start + len)]
};
match tag.split() {
Ok(type_def_index) => {
let type_def = self.type_defs[type_def_index.index()];
match tag_index.cmp(&target) {
std::cmp::Ordering::Less => {
// before
let type_def_index = Index::push_new(&mut before.type_defs, type_def);
let tag = EitherIndex::from_left(type_def_index);
before.push_def_help(tag, region, space_before, space_after);
}
std::cmp::Ordering::Greater => {
// after
let type_def_index = Index::push_new(&mut after.type_defs, type_def);
let tag = EitherIndex::from_left(type_def_index);
after.push_def_help(tag, region, space_before, space_after);
}
std::cmp::Ordering::Equal => {
// target, do nothing
}
}
}
Err(value_def_index) => {
let value_def = self.value_defs[value_def_index.index()];
// The Suffixed has NO arguments applied e.g. `Stdin.line!`
if let Expr::Suffixed(_) = expr.value {
return Some((tag_index, index));
match tag_index.cmp(&target) {
std::cmp::Ordering::Less => {
// before
let new_value_def_index =
Index::push_new(&mut before.value_defs, value_def);
let tag = EitherIndex::from_right(new_value_def_index);
before.push_def_help(tag, region, space_before, space_after);
}
std::cmp::Ordering::Greater => {
// after
let new_value_def_index =
Index::push_new(&mut after.value_defs, value_def);
let tag = EitherIndex::from_right(new_value_def_index);
after.push_def_help(tag, region, space_before, space_after);
}
std::cmp::Ordering::Equal => {
// target, do nothing
}
}
}
}
}
None
}
// For desugaring Suffixed Defs we need to split the defs around the Suffixed value
pub fn split_values_either_side_of(&self, index: usize) -> SplitDefsAround {
let mut before = self.clone();
let mut after = self.clone();
before.tags = self.tags[0..index].to_vec();
if index >= self.tags.len() {
after.tags = self.tags.clone();
after.tags.clear();
} else {
after.tags = self.tags[(index + 1)..].to_vec();
}
SplitDefsAround { before, after }
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct SplitDefsAround<'a> {
pub before: Defs<'a>,
pub after: Defs<'a>,
@ -871,7 +1074,15 @@ impl<'a> PatternAs<'a> {
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Pattern<'a> {
// Identifier
Identifier(&'a str),
Identifier {
ident: &'a str,
suffixed: u8,
},
QualifiedIdentifier {
module_name: &'a str,
ident: &'a str,
suffixed: u8,
},
Tag(&'a str),
@ -923,10 +1134,6 @@ pub enum Pattern<'a> {
// Malformed
Malformed(&'a str),
MalformedIdent(&'a str, crate::ident::BadIdent),
QualifiedIdentifier {
module_name: &'a str,
ident: &'a str,
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -992,11 +1199,22 @@ impl<'a> Pattern<'a> {
// { x, y } : { x : Int, y ? Bool }
// { x, y ? False } = rec
OptionalField(x, _) => match other {
Identifier(y) | OptionalField(y, _) => x == y,
Identifier {
ident: y,
suffixed: 0,
}
| OptionalField(y, _) => x == y,
_ => false,
},
Identifier(x) => match other {
Identifier(y) | OptionalField(y, _) => x == y,
Identifier {
ident: x,
suffixed: a,
} => match other {
Identifier {
ident: y,
suffixed: b,
} => x == y && a == b,
OptionalField(y, _) => x == y,
_ => false,
},
NumLiteral(x) => {
@ -1057,13 +1275,15 @@ impl<'a> Pattern<'a> {
QualifiedIdentifier {
module_name: a,
ident: x,
suffixed: i,
} => {
if let QualifiedIdentifier {
module_name: b,
ident: y,
suffixed: j,
} = other
{
a == b && x == y
a == b && x == y && i == j
} else {
false
}
@ -1128,6 +1348,15 @@ impl<'a> Pattern<'a> {
}
}
}
// used to check if a pattern is suffixed to report as an error
pub fn is_suffixed(&self) -> bool {
match self {
Pattern::Identifier { suffixed, .. } => *suffixed > 0,
Pattern::QualifiedIdentifier { suffixed, .. } => *suffixed > 0,
_ => false,
}
}
}
#[derive(Copy, Clone)]
pub struct Collection<'a, T> {
@ -1384,11 +1613,13 @@ impl<'a> Expr<'a> {
pub const REPL_OPAQUE_FUNCTION: Self = Expr::Var {
module_name: "",
ident: "<function>",
suffixed: 0,
};
pub const REPL_RUNTIME_CRASH: Self = Expr::Var {
module_name: "",
ident: "*",
suffixed: 0,
};
pub fn loc_ref(&'a self, region: Region) -> Loc<&'a Self> {
@ -1617,6 +1848,7 @@ impl<'a> Malformed for Expr<'a> {
OpaqueRef(_) |
SingleQuote(_) | // This is just a &str - not a bunch of segments
IngestedFile(_, _) |
EmptyDefsFinal |
Crash => false,
Str(inner) => inner.is_malformed(),
@ -1650,10 +1882,10 @@ impl<'a> Malformed for Expr<'a> {
MalformedIdent(_, _) |
MalformedClosure |
MalformedSuffixed(..) |
PrecedenceConflict(_) |
MultipleRecordBuilders(_) |
UnappliedRecordBuilder(_) => true,
Suffixed(expr) => expr.is_malformed(),
}
}
}
@ -1748,7 +1980,7 @@ impl<'a> Malformed for Pattern<'a> {
use Pattern::*;
match self {
Identifier(_) |
Identifier{ .. } |
Tag(_) |
OpaqueRef(_) => false,
Apply(func, args) => func.is_malformed() || args.iter().any(|arg| arg.is_malformed()),
@ -1888,6 +2120,7 @@ impl<'a> Malformed for ValueDef<'a> {
condition,
preceding_comment: _,
} => condition.is_malformed(),
ValueDef::Stmt(loc_expr) => loc_expr.is_malformed(),
}
}
}

View file

@ -197,12 +197,17 @@ where
)
}
pub fn check_indent<'a, E>(indent_problem: fn(Position) -> E) -> impl Parser<'a, (), E>
pub fn check_indent<'a, E>(
indent_problem: fn(Position) -> E,
inside_suffixed_statement: bool,
) -> impl Parser<'a, (), E>
where
E: 'a,
{
let extra_spaces = if inside_suffixed_statement { 1 } else { 0 };
move |_, state: State<'a>, min_indent: u32| {
if state.column() >= min_indent {
if state.column() >= (min_indent + extra_spaces) {
Ok((NoProgress, (), state))
} else {
Err((NoProgress, indent_problem(state.pos())))

View file

@ -1,7 +1,7 @@
use crate::ast::{
AssignedField, Collection, CommentOrNewline, Defs, Expr, ExtractSpaces, Implements,
ImplementsAbilities, Pattern, RecordBuilderField, Spaceable, Spaces, TypeAnnotation, TypeDef,
TypeHeader, ValueDef,
is_loc_expr_suffixed, AssignedField, Collection, CommentOrNewline, Defs, Expr, ExtractSpaces,
Implements, ImplementsAbilities, Pattern, RecordBuilderField, Spaceable, Spaces,
TypeAnnotation, TypeDef, TypeHeader, ValueDef,
};
use crate::blankspace::{
space0_after_e, space0_around_e_no_after_indent_check, space0_around_ee, space0_before_e,
@ -67,6 +67,20 @@ pub struct ExprParseOptions {
///
/// > Just foo if foo == 2 -> ...
pub check_for_arrow: bool,
/// Check for a suffixed expression, if we find one then
/// subsequent parsing for this expression should have an increased
/// indent, this is so we can distinguish between the end of the
/// statement and the next expression.
pub suffixed_found: bool,
}
impl ExprParseOptions {
pub fn set_suffixed_found(&self) -> Self {
let mut new = *self;
new.suffixed_found = true;
new
}
}
pub fn expr_help<'a>() -> impl Parser<'a, Expr<'a>, EExpr<'a>> {
@ -323,24 +337,18 @@ fn expr_start<'a>(options: ExprParseOptions) -> impl Parser<'a, Loc<Expr<'a>>, E
fn expr_operator_chain<'a>(options: ExprParseOptions) -> impl Parser<'a, Expr<'a>, EExpr<'a>> {
line_min_indent(move |arena, state: State<'a>, min_indent: u32| {
let (_, expr, state) = loc_possibly_negative_or_negated_term(options)
.parse(arena, state, min_indent)
.map(|(progress, expr, state)| {
// If the next thing after the expression is a `!`, then it's Suffixed
if state.bytes().starts_with(b"!") {
(
progress,
Loc::at(expr.region, Expr::Suffixed(arena.alloc(expr.value))),
state.advance(1),
)
} else {
(progress, expr, state)
}
})?;
let (_, expr, state) =
loc_possibly_negative_or_negated_term(options).parse(arena, state, min_indent)?;
let initial_state = state.clone();
let end = state.pos();
let new_options = if is_loc_expr_suffixed(&expr) {
options.set_suffixed_found()
} else {
options
};
match space0_e(EExpr::IndentEnd).parse(arena, state.clone(), min_indent) {
Err((_, _)) => Ok((MadeProgress, expr.value, state)),
Ok((_, spaces_before_op, state)) => {
@ -352,7 +360,31 @@ fn expr_operator_chain<'a>(options: ExprParseOptions) -> impl Parser<'a, Expr<'a
end,
};
parse_expr_end(min_indent, options, expr_state, arena, state, initial_state)
match parse_expr_end(
min_indent,
new_options,
expr_state,
arena,
state,
initial_state,
) {
Err(err) => Err(err),
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_loc_expr_suffixed(&Loc::at_zero(expr)) {
let def_region = Region::new(end, new_state.pos());
let value_def = ValueDef::Stmt(arena.alloc(Loc::at(def_region, expr)));
let mut defs = Defs::default();
defs.push_value_def(value_def, def_region, &[], &[]);
return parse_defs_expr(options, min_indent, defs, arena, new_state);
} else {
Ok((progress, expr, new_state))
}
}
}
}
}
})
@ -412,6 +444,7 @@ impl<'a> ExprState<'a> {
} else if !self.expr.value.is_tag()
&& !self.expr.value.is_opaque()
&& !self.arguments.is_empty()
&& !is_loc_expr_suffixed(&self.expr)
{
let region = Region::across_all(self.arguments.iter().map(|v| &v.region));
@ -625,8 +658,26 @@ pub fn parse_single_def<'a>(
}
}
Err((MadeProgress, _)) => {
// a hacky way to get expression-based error messages. TODO fix this
Ok((NoProgress, None, initial))
// Try to parse as a Statement
match parse_statement_inside_def(
arena,
initial.clone(),
min_indent,
options,
start,
spaces_before_current_start,
// TODO including spaces_before_current here doubles things up
&[],
|_, loc_def_expr| -> ValueDef<'a> { ValueDef::Stmt(arena.alloc(loc_def_expr)) },
) {
Ok((_, Some(single_def), state)) => match single_def.type_or_value {
Either::Second(ValueDef::Stmt(loc_expr)) if is_loc_expr_suffixed(loc_expr) => {
Ok((MadeProgress, Some(single_def), state))
}
_ => Ok((NoProgress, None, initial)), // a hacky way to get expression-based error messages. TODO fix this
},
_ => Ok((NoProgress, None, initial)), // a hacky way to get expression-based error messages. TODO fix this
}
}
Ok((_, loc_pattern, state)) => {
// First let's check whether this is an ability definition.
@ -668,185 +719,291 @@ pub fn parse_single_def<'a>(
}
}
// Otherwise, this is a def or alias.
match operator().parse(arena, state, min_indent) {
Ok((_, BinOp::Assignment, state)) => {
let parse_def_expr = space0_before_e(
increment_min_indent(expr_start(options)),
EExpr::IndentEnd,
);
// This may be a def or alias.
let operator_result = operator().parse(arena, state.clone(), min_indent);
let (_, loc_def_expr, state) =
parse_def_expr.parse(arena, state, min_indent)?;
let value_def =
ValueDef::Body(arena.alloc(loc_pattern), &*arena.alloc(loc_def_expr));
let region = Region::span_across(&loc_pattern.region, &loc_def_expr.region);
if let Ok((_, BinOp::Assignment, operator_result_state)) = operator_result {
return parse_single_def_assignment(
options,
// to support statements we have to increase the indent here so that we can parse a child def
// within a def and still continue to parse the final expression for this def
// e.g.
// main =
// Stdout.line! "Bar"
// a=Stdout.line! "Foo"
// Task.ok {}
&operator_result_state.line_indent() + 1,
arena,
operator_result_state,
loc_pattern,
spaces_before_current,
);
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
Ok((_, BinOp::IsAliasType, state)) => {
// the increment_min_indent here is probably _wrong_, since alias_signature_with_space_before does
// that internally.
// TODO: re-evaluate this
let parser = increment_min_indent(alias_signature_with_space_before());
let (_, ann_type, state) = parser.parse(arena, state, min_indent)?;
let region = Region::span_across(&loc_pattern.region, &ann_type.region);
if let Ok((_, BinOp::IsAliasType, state)) = operator_result {
// the increment_min_indent here is probably _wrong_, since alias_signature_with_space_before does
// that internally.
// TODO: re-evaluate this
let parser = increment_min_indent(alias_signature_with_space_before());
let (_, ann_type, state) = parser.parse(arena, state, min_indent)?;
let region = Region::span_across(&loc_pattern.region, &ann_type.region);
match &loc_pattern.value.extract_spaces().item {
Pattern::Apply(
Loc {
value: Pattern::Tag(name),
..
},
alias_arguments,
) => {
let name = Loc::at(loc_pattern.region, *name);
let header = TypeHeader {
name,
vars: alias_arguments,
};
match &loc_pattern.value.extract_spaces().item {
Pattern::Apply(
Loc {
value: Pattern::Tag(name),
..
},
alias_arguments,
) => {
let name = Loc::at(loc_pattern.region, *name);
let header = TypeHeader {
name,
vars: alias_arguments,
};
let type_def = TypeDef::Alias {
header,
ann: ann_type,
};
let type_def = TypeDef::Alias {
header,
ann: ann_type,
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
Pattern::Tag(name) => {
let name = Loc::at(loc_pattern.region, *name);
let pattern_arguments: &'a [Loc<Pattern<'a>>] = &[];
let header = TypeHeader {
name,
vars: pattern_arguments,
};
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
Pattern::Tag(name) => {
let name = Loc::at(loc_pattern.region, *name);
let pattern_arguments: &'a [Loc<Pattern<'a>>] = &[];
let header = TypeHeader {
name,
vars: pattern_arguments,
};
let type_def = TypeDef::Alias {
header,
ann: ann_type,
};
let type_def = TypeDef::Alias {
header,
ann: ann_type,
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
_ => {
let value_def = ValueDef::Annotation(loc_pattern, ann_type);
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
_ => {
let value_def = ValueDef::Annotation(loc_pattern, ann_type);
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
}
Ok((_, BinOp::IsOpaqueType, state)) => {
let (_, (signature, derived), state) =
opaque_signature_with_space_before().parse(arena, state, min_indent + 1)?;
let region = Region::span_across(&loc_pattern.region, &signature.region);
};
match &loc_pattern.value.extract_spaces().item {
Pattern::Apply(
Loc {
value: Pattern::Tag(name),
..
},
alias_arguments,
) => {
let name = Loc::at(loc_pattern.region, *name);
let header = TypeHeader {
name,
vars: alias_arguments,
};
if let Ok((_, BinOp::IsOpaqueType, state)) = operator_result {
let (_, (signature, derived), state) =
opaque_signature_with_space_before().parse(arena, state, min_indent + 1)?;
let region = Region::span_across(&loc_pattern.region, &signature.region);
let type_def = TypeDef::Opaque {
header,
typ: signature,
derived,
};
match &loc_pattern.value.extract_spaces().item {
Pattern::Apply(
Loc {
value: Pattern::Tag(name),
..
},
alias_arguments,
) => {
let name = Loc::at(loc_pattern.region, *name);
let header = TypeHeader {
name,
vars: alias_arguments,
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
Pattern::Tag(name) => {
let name = Loc::at(loc_pattern.region, *name);
let pattern_arguments: &'a [Loc<Pattern<'a>>] = &[];
let header = TypeHeader {
name,
vars: pattern_arguments,
};
let type_def = TypeDef::Opaque {
header,
typ: signature,
derived,
};
let type_def = TypeDef::Opaque {
header,
typ: signature,
derived,
};
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
Pattern::Tag(name) => {
let name = Loc::at(loc_pattern.region, *name);
let pattern_arguments: &'a [Loc<Pattern<'a>>] = &[];
let header = TypeHeader {
name,
vars: pattern_arguments,
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
_ => {
let value_def = ValueDef::Annotation(loc_pattern, signature);
let type_def = TypeDef::Opaque {
header,
typ: signature,
derived,
};
Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
state,
))
}
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::First(type_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
_ => {
let value_def = ValueDef::Annotation(loc_pattern, signature);
return Ok((
MadeProgress,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
state,
));
}
}
_ => Ok((MadeProgress, None, initial)),
};
// Otherwise try to re-parse as a Statement
match parse_statement_inside_def(
arena,
initial.clone(),
min_indent,
options,
start,
spaces_before_current_start,
// TODO figure out why including spaces_before_current here doubles things up
&[],
|_, loc_def_expr| -> ValueDef<'a> { ValueDef::Stmt(arena.alloc(loc_def_expr)) },
) {
Ok((_, Some(single_def), state)) => match single_def.type_or_value {
Either::Second(ValueDef::Stmt(loc_expr)) if is_loc_expr_suffixed(loc_expr) => {
Ok((MadeProgress, Some(single_def), state))
}
_ => Ok((NoProgress, None, initial)),
},
_ => Ok((NoProgress, None, initial)),
}
}
}
}
pub fn parse_single_def_assignment<'a>(
options: ExprParseOptions,
min_indent: u32,
arena: &'a Bump,
initial_state: State<'a>,
def_loc_pattern: Loc<Pattern<'a>>,
spaces_before_current: &'a [CommentOrNewline<'a>],
) -> ParseResult<'a, Option<SingleDef<'a>>, EExpr<'a>> {
// Try and parse the expression
let parse_def_expr =
space0_before_e(increment_min_indent(expr_start(options)), EExpr::IndentEnd);
let (progress_after_first, first_loc_expr, state_after_first_expression) =
parse_def_expr.parse(arena, initial_state, min_indent)?;
let region = Region::span_across(&def_loc_pattern.region, &first_loc_expr.region);
// If the expression is actually a suffixed statement, then we need to continue
// to parse the rest of the expression
if crate::ast::is_loc_expr_suffixed(&first_loc_expr) {
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),
spaces_before_current,
&[],
);
// Try to parse the rest of the expression as multiple defs, which may contain sub-assignments
match parse_defs_expr(
options,
min_indent,
defs.clone(),
arena,
state_after_first_expression.clone(),
) {
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((
progress_after_rest_of_def,
Some(SingleDef {
type_or_value: Either::Second(value_def),
region,
spaces_before: spaces_before_current,
}),
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,
}),
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,
}),
state_after_first_expression,
))
}
/// e.g. Things that can be on their own line in a def, e.g. `expect`, `expect-fx`, or `dbg`
#[allow(clippy::too_many_arguments)]
fn parse_statement_inside_def<'a>(
@ -880,6 +1037,7 @@ fn parse_statement_inside_def<'a>(
}
let preceding_comment = Region::new(spaces_before_current_start, start);
let value_def = get_value_def(preceding_comment, loc_def_expr);
Ok((
@ -962,6 +1120,9 @@ fn parse_defs_end<'a>(
let mut global_state = state;
loop {
// keep a copy in the event we get an EExpr::DefMissingFinalExpr
let state_before = global_state.clone();
let state = global_state;
global_state = match parse_single_def(options, min_indent, arena, state) {
@ -1041,11 +1202,16 @@ fn parse_defs_end<'a>(
next_state
}
Ok((progress, None, s)) => return Ok((progress, defs, s)),
Err((MadeProgress, EExpr::DefMissingFinalExpr(..)))
| Err((MadeProgress, EExpr::DefMissingFinalExpr2(..))) => {
return Ok((MadeProgress, defs, state_before))
}
Err((progress, err)) => return Err((progress, err)),
};
}
}
#[derive(Debug)]
pub struct SingleDef<'a> {
pub type_or_value: Either<TypeDef<'a>, ValueDef<'a>>,
pub region: Region,
@ -1067,18 +1233,50 @@ fn parse_defs_expr<'a>(
match parse_final_expr.parse(arena, state.clone(), min_indent) {
Err((_, fail)) => {
return Err((
// 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));
}
return Ok((
MadeProgress,
Expr::Defs(
arena.alloc(local_defs),
arena.alloc(Loc::at_zero(Expr::EmptyDefsFinal)),
),
state,
));
}
Err((
MadeProgress,
EExpr::DefMissingFinalExpr2(arena.alloc(fail), state.pos()),
));
}
Ok((_, loc_ret, state)) => {
return Ok((
MadeProgress,
Expr::Defs(arena.alloc(def_state), arena.alloc(loc_ret)),
state,
));
))
}
Ok((_, loc_ret, state)) => Ok((
MadeProgress,
Expr::Defs(arena.alloc(def_state), arena.alloc(loc_ret)),
state,
)),
}
}
}
@ -1635,8 +1833,51 @@ fn parse_expr_operator<'a>(
expr_state.end = new_end;
expr_state.spaces_after = spaces;
// TODO new start?
parse_expr_end(min_indent, options, expr_state, arena, state, initial_state)
let new_options = if is_loc_expr_suffixed(&new_expr) {
options.set_suffixed_found()
} else {
options
};
match parse_expr_end(
min_indent,
new_options,
expr_state,
arena,
state,
initial_state,
) {
Ok((progress, expr, state)) => {
if let Expr::BinOps(..) = expr {
let def_region = expr.get_region_spanning_binops();
let mut new_expr = Loc::at(def_region, expr);
if is_loc_expr_suffixed(&new_expr) {
// We have parsed a statement such as `"hello" |> line!`
// put the spaces from after the operator in front of the call
if !spaces_after_operator.is_empty() {
new_expr = arena.alloc(expr).with_spaces_before(
spaces_after_operator,
def_region,
);
}
let value_def = ValueDef::Stmt(arena.alloc(new_expr));
let mut defs = Defs::default();
defs.push_value_def(value_def, def_region, &[], &[]);
return parse_defs_expr(
options, min_indent, defs, arena, state,
);
}
}
// else return the parsed expression
Ok((progress, expr, state))
}
Err(err) => Err(err),
}
}
}
}
@ -1656,7 +1897,7 @@ fn parse_expr_end<'a>(
initial_state: State<'a>,
) -> ParseResult<'a, Expr<'a>, EExpr<'a>> {
let parser = skip_first!(
crate::blankspace::check_indent(EExpr::IndentEnd),
crate::blankspace::check_indent(EExpr::IndentEnd, options.suffixed_found),
loc_term_or_underscore(options)
);
@ -1669,6 +1910,7 @@ fn parse_expr_end<'a>(
Expr::Var {
module_name: "",
ident: crate::keyword::IMPLEMENTS,
..
},
..
},
@ -1717,6 +1959,12 @@ fn parse_expr_end<'a>(
Ok((_, mut arg, state)) => {
let new_end = state.pos();
let new_options = if is_loc_expr_suffixed(&arg) {
options.set_suffixed_found()
} else {
options
};
// now that we have `function arg1 ... <spaces> argn`, attach the spaces to the `argn`
if !expr_state.spaces_after.is_empty() {
arg = arena
@ -1741,7 +1989,14 @@ fn parse_expr_end<'a>(
expr_state.end = new_end;
expr_state.spaces_after = new_spaces;
parse_expr_end(min_indent, options, expr_state, arena, state, initial_state)
parse_expr_end(
min_indent,
new_options,
expr_state,
arena,
state,
initial_state,
)
}
}
}
@ -1857,6 +2112,7 @@ pub fn loc_expr<'a>(accept_multi_backpassing: bool) -> impl Parser<'a, Loc<Expr<
expr_start(ExprParseOptions {
accept_multi_backpassing,
check_for_arrow: true,
suffixed_found: false,
})
}
@ -1891,11 +2147,19 @@ fn expr_to_pattern_help<'a>(arena: &'a Bump, expr: &Expr<'a>) -> Result<Pattern<
}
let mut pat = match expr.item {
Expr::Var { module_name, ident } => {
Expr::Var {
module_name,
ident,
suffixed,
} => {
if module_name.is_empty() {
Pattern::Identifier(ident)
Pattern::Identifier { ident, suffixed }
} else {
Pattern::QualifiedIdentifier { module_name, ident }
Pattern::QualifiedIdentifier {
module_name,
ident,
suffixed,
}
}
}
Expr::Underscore(opt_name) => Pattern::Underscore(opt_name),
@ -1923,7 +2187,8 @@ fn expr_to_pattern_help<'a>(arena: &'a Bump, expr: &Expr<'a>) -> Result<Pattern<
Expr::SpaceBefore(..)
| Expr::SpaceAfter(..)
| Expr::ParensAround(..)
| Expr::RecordBuilder(..) => unreachable!(),
| Expr::RecordBuilder(..)
| Expr::EmptyDefsFinal => unreachable!(),
Expr::Record(fields) => {
let patterns = fields.map_items_result(arena, |loc_assigned_field| {
@ -1969,6 +2234,7 @@ fn expr_to_pattern_help<'a>(arena: &'a Bump, expr: &Expr<'a>) -> Result<Pattern<
| Expr::Dbg(_, _)
| Expr::LowLevelDbg(_, _, _)
| Expr::MalformedClosure
| Expr::MalformedSuffixed(..)
| Expr::PrecedenceConflict { .. }
| Expr::MultipleRecordBuilders { .. }
| Expr::UnappliedRecordBuilder { .. }
@ -1979,7 +2245,6 @@ fn expr_to_pattern_help<'a>(arena: &'a Bump, expr: &Expr<'a>) -> Result<Pattern<
Expr::Str(string) => Pattern::StrLiteral(string),
Expr::SingleQuote(string) => Pattern::SingleQuote(string),
Expr::MalformedIdent(string, problem) => Pattern::MalformedIdent(string, problem),
Expr::Suffixed(_) => todo!(),
};
// Now we re-add the spaces
@ -2029,7 +2294,10 @@ fn assigned_expr_field_to_pattern_help<'a>(
)
}
}
AssignedField::LabelOnly(name) => Pattern::Identifier(name.value),
AssignedField::LabelOnly(name) => Pattern::Identifier {
ident: name.value,
suffixed: 0,
},
AssignedField::SpaceBefore(nested, spaces) => Pattern::SpaceBefore(
arena.alloc(assigned_expr_field_to_pattern_help(arena, nested)?),
spaces,
@ -2052,6 +2320,7 @@ pub fn toplevel_defs<'a>() -> impl Parser<'a, Defs<'a>, EExpr<'a>> {
let options = ExprParseOptions {
accept_multi_backpassing: true,
check_for_arrow: true,
suffixed_found: false,
};
let mut output = Defs::default();
@ -2530,10 +2799,11 @@ fn ident_to_expr<'a>(arena: &'a Bump, src: Ident<'a>) -> Expr<'a> {
// The first value in the iterator is the variable name,
// e.g. `foo` in `foo.bar.baz`
let mut answer = match iter.next() {
Some(Accessor::RecordField(ident)) if suffixed => {
Expr::Suffixed(arena.alloc(Expr::Var { module_name, ident }))
}
Some(Accessor::RecordField(ident)) => Expr::Var { module_name, ident },
Some(Accessor::RecordField(ident)) => Expr::Var {
module_name,
ident,
suffixed,
},
Some(Accessor::TupleIndex(_)) => {
// TODO: make this state impossible to represent in Ident::Access,
// by splitting out parts[0] into a separate field with a type of `&'a str`,

View file

@ -42,7 +42,7 @@ pub enum Ident<'a> {
Access {
module_name: &'a str,
parts: &'a [Accessor<'a>],
suffixed: bool,
suffixed: u8,
},
/// `.foo { foo: 42 }` or `.1 (1, 2, 3)`
AccessorFunction(Accessor<'a>),
@ -194,7 +194,9 @@ pub fn parse_ident<'a>(
Ok((width, ident)) => {
let state = advance_state!(state, width as usize)?;
if let Ident::Access {
module_name, parts, ..
module_name,
parts,
suffixed,
} = ident
{
if module_name.is_empty() {
@ -206,21 +208,16 @@ pub fn parse_ident<'a>(
}
}
}
}
// Parse a suffixed `!` expression
if state.bytes().starts_with(b"!") {
if let Ident::Access {
module_name, parts, ..
} = ident
{
let new_ident = Ident::Access {
return Ok((
MadeProgress,
Ident::Access {
module_name,
parts,
suffixed: true,
};
return Ok((MadeProgress, new_ident, state.advance(1)));
}
suffixed,
},
state,
));
}
Ok((MadeProgress, ident, state))
@ -531,10 +528,22 @@ fn chomp_identifier_chain<'a>(
chomped += width as usize;
// Parse any `!` suffixes
let mut suffixed = 0;
while let Ok((ch, width)) = char::from_utf8_slice_start(&buffer[chomped..]) {
if ch == '!' {
suffixed += 1;
chomped += width;
} else {
// we're done
break;
}
}
let ident = Ident::Access {
module_name,
parts: parts.into_bump_slice(),
suffixed: false,
suffixed,
};
Ok((chomped as u32, ident))
@ -563,15 +572,30 @@ fn chomp_identifier_chain<'a>(
} else if first_is_uppercase {
// just one segment, starting with an uppercase letter; that's a tag
let value = unsafe { std::str::from_utf8_unchecked(&buffer[..chomped]) };
Ok((chomped as u32, Ident::Tag(value)))
} else {
// just one segment, starting with a lowercase letter; that's a normal identifier
let value = unsafe { std::str::from_utf8_unchecked(&buffer[..chomped]) };
// Parse any `!` suffixes
let mut suffixed = 0;
while let Ok((ch, width)) = char::from_utf8_slice_start(&buffer[chomped..]) {
if ch == '!' {
suffixed += 1;
chomped += width;
} else {
// we're done
break;
}
}
let ident = Ident::Access {
module_name: "",
parts: arena.alloc([Accessor::RecordField(value)]),
suffixed: false,
suffixed,
};
Ok((chomped as u32, ident))
}
}

View file

@ -12,6 +12,7 @@ use crate::string_literal::StrLikeLiteral;
use bumpalo::collections::string::String;
use bumpalo::collections::Vec;
use bumpalo::Bump;
use roc_error_macros::internal_error;
use roc_region::all::{Loc, Region};
/// Different patterns are supported in different circumstances.
@ -49,6 +50,14 @@ pub fn loc_pattern_help<'a>() -> impl Parser<'a, Loc<Pattern<'a>>, EPattern<'a>>
let pattern_state = state.clone();
// Return early with the suffixed statement
match pattern.value {
Pattern::Identifier { suffixed, .. } if suffixed > 0 => {
return Ok((MadeProgress, pattern, pattern_state))
}
_ => {}
}
let (pattern_spaces, state) =
match space0_e(EPattern::AsKeyword).parse(arena, state, min_indent) {
Err(_) => return Ok((MadeProgress, pattern, pattern_state)),
@ -138,7 +147,15 @@ fn loc_tag_pattern_arg<'a>(
let Loc { region, value } = loc_pat;
if stop_on_has_kw && matches!(value, Pattern::Identifier(crate::keyword::IMPLEMENTS)) {
if stop_on_has_kw
&& matches!(
value,
Pattern::Identifier {
ident: crate::keyword::IMPLEMENTS,
..
}
)
{
Err((NoProgress, EPattern::End(original_state.pos())))
} else {
Ok((
@ -160,7 +177,10 @@ pub fn loc_implements_parser<'a>() -> impl Parser<'a, Loc<Implements<'a>>, EPatt
|_arena, state, progress, pattern| {
if matches!(
pattern.value,
Pattern::Identifier(crate::keyword::IMPLEMENTS)
Pattern::Identifier {
ident: crate::keyword::IMPLEMENTS,
..
}
) {
Ok((
progress,
@ -385,6 +405,46 @@ fn loc_ident_pattern_help<'a>(
Ok((MadeProgress, loc_pat, state))
}
}
// Parse a statement that begins with a suffixed identifier, e.g. `Stdout.line! "Hello"`
Ident::Access {
module_name,
parts,
suffixed,
..
} if suffixed > 0 => {
if module_name.is_empty() && parts.len() == 1 {
if let Accessor::RecordField(var) = &parts[0] {
Ok((
MadeProgress,
Loc {
region: loc_ident.region,
value: Pattern::Identifier {
ident: var,
suffixed,
},
},
state,
))
} else {
internal_error!("unexpected suffixed TupleIndex");
}
} else if let Accessor::RecordField(var) = &parts[0] {
return Ok((
MadeProgress,
Loc {
region: loc_ident.region,
value: Pattern::QualifiedIdentifier {
module_name,
ident: var,
suffixed,
},
},
state,
));
} else {
internal_error!("unexpected suffixed TupleIndex");
}
}
Ident::Access {
module_name, parts, ..
} => {
@ -403,7 +463,10 @@ fn loc_ident_pattern_help<'a>(
MadeProgress,
Loc {
region: loc_ident.region,
value: Pattern::Identifier(var),
value: Pattern::Identifier {
ident: var,
suffixed: 0,
},
},
state,
));
@ -564,9 +627,18 @@ fn record_pattern_field<'a>() -> impl Parser<'a, Loc<Pattern<'a>>, PRecord<'a>>
None => {
let Loc { value, region } = loc_label;
let value = if !spaces.is_empty() {
Pattern::SpaceAfter(arena.alloc(Pattern::Identifier(value)), spaces)
Pattern::SpaceAfter(
arena.alloc(Pattern::Identifier {
ident: value,
suffixed: 0,
}),
spaces,
)
} else {
Pattern::Identifier(value)
Pattern::Identifier {
ident: value,
suffixed: 0,
}
};
Ok((MadeProgress, Loc::at(region, value), state))

View file

@ -70,7 +70,13 @@ fn check_type_alias<'a>(
var_names.reserve(vars.len());
for var in vars {
if let TypeAnnotation::BoundVariable(v) = var.value {
var_names.push(Loc::at(var.region, Pattern::Identifier(v)));
var_names.push(Loc::at(
var.region,
Pattern::Identifier {
ident: v,
suffixed: 0,
},
));
} else {
return Err(ETypeInlineAlias::ArgumentNotLowercase(var.region.start()));
}

View file

@ -175,6 +175,7 @@ mod test_parse {
let expr = arena.alloc(Var {
module_name: "",
ident: "name",
suffixed: 0,
});
bumpalo::vec![in arena;
@ -191,6 +192,7 @@ mod test_parse {
let expr = arena.alloc(Var {
module_name: "",
ident: "name",
suffixed: 0,
});
bumpalo::vec![in arena;
@ -236,6 +238,7 @@ mod test_parse {
let expr = arena.alloc(Var {
module_name: "",
ident: "name",
suffixed: 0,
});
bumpalo::vec![in arena;
@ -251,11 +254,13 @@ mod test_parse {
let expr1 = arena.alloc(Var {
module_name: "",
ident: "name",
suffixed: 0,
});
let expr2 = arena.alloc(Var {
module_name: "",
ident: "project",
suffixed: 0,
});
bumpalo::vec![in arena;
@ -276,11 +281,13 @@ mod test_parse {
let expr1 = arena.alloc(Var {
module_name: "",
ident: "name",
suffixed: 0,
});
let expr2 = arena.alloc(Var {
module_name: "",
ident: "project",
suffixed: 0,
});
bumpalo::vec![in arena;

View file

@ -356,6 +356,7 @@ impl Problem {
| Problem::RuntimeError(RuntimeError::MalformedIdentifier(_, _, region))
| Problem::RuntimeError(RuntimeError::MalformedTypeName(_, region))
| Problem::RuntimeError(RuntimeError::MalformedClosure(region))
| Problem::RuntimeError(RuntimeError::MalformedSuffixed(region))
| Problem::RuntimeError(RuntimeError::InvalidRecordUpdate { region })
| Problem::RuntimeError(RuntimeError::InvalidFloat(_, region, _))
| Problem::RuntimeError(RuntimeError::InvalidInt(_, _, region, _))
@ -612,6 +613,8 @@ pub enum RuntimeError {
MultipleRecordBuilders(Region),
UnappliedRecordBuilder(Region),
MalformedSuffixed(Region),
}
impl RuntimeError {
@ -645,6 +648,7 @@ impl RuntimeError {
| RuntimeError::MalformedIdentifier(_, _, region)
| RuntimeError::MalformedTypeName(_, region)
| RuntimeError::MalformedClosure(region)
| RuntimeError::MalformedSuffixed(region)
| RuntimeError::InvalidRecordUpdate { region }
| RuntimeError::InvalidFloat(_, region, _)
| RuntimeError::InvalidInt(_, _, region, _)

View file

@ -125,12 +125,12 @@ fn record_2_fields() {
assert_snapshot!(golden, @r###"
# derived for { first : Str, second : Str }
# Decoder { first : val, second : val1 } fmt where fmt implements DecoderFormatting, val implements Decoding, val1 implements Decoding
# List U8, fmt -[[custom(22)]]-> { rest : List U8, result : [Err [TooShort], Ok { first : val, second : val1 }] } where fmt implements DecoderFormatting, val implements Decoding, val1 implements Decoding
# List U8, fmt -[[custom(25)]]-> { rest : List U8, result : [Err [TooShort], Ok { first : val, second : val1 }] } where fmt implements DecoderFormatting, val implements Decoding, val1 implements Decoding
# Specialization lambda sets:
# @<1>: [[custom(22)]]
# @<1>: [[custom(25)]]
#Derived.decoder_{first,second} =
custom
\#Derived.bytes3, #Derived.fmt3 ->
\#Derived.bytes3, #Derived.fmt4 ->
decodeWith
#Derived.bytes3
(record
@ -139,8 +139,8 @@ fn record_2_fields() {
when #Derived.field is
"first" ->
Keep (custom
\#Derived.bytes, #Derived.fmt ->
when decodeWith #Derived.bytes decoder #Derived.fmt is
\#Derived.bytes, #Derived.fmt2 ->
when decodeWith #Derived.bytes decoder #Derived.fmt2 is
#Derived.rec ->
{
result: when #Derived.rec.result is
@ -151,8 +151,8 @@ fn record_2_fields() {
})
"second" ->
Keep (custom
\#Derived.bytes2, #Derived.fmt2 ->
when decodeWith #Derived.bytes2 decoder #Derived.fmt2 is
\#Derived.bytes2, #Derived.fmt3 ->
when decodeWith #Derived.bytes2 decoder #Derived.fmt3 is
#Derived.rec2 ->
{
result: when #Derived.rec2.result is
@ -162,15 +162,23 @@ fn record_2_fields() {
rest: #Derived.rec2.rest
})
_ -> Skip
\#Derived.stateRecord ->
when #Derived.stateRecord.first is
\#Derived.stateRecord, #Derived.fmt ->
when when #Derived.stateRecord.first is
Ok #Derived.first -> Ok #Derived.first
Err (NoField) ->
when decodeWith [] decoder #Derived.fmt is
#Derived.decRec2 -> #Derived.decRec2.result is
Ok #Derived.first ->
when #Derived.stateRecord.second is
when when #Derived.stateRecord.second is
Ok #Derived.second -> Ok #Derived.second
Err (NoField) ->
when decodeWith [] decoder #Derived.fmt is
#Derived.decRec -> #Derived.decRec.result is
Ok #Derived.second ->
Ok { second: #Derived.second, first: #Derived.first }
_ -> Err TooShort
_ -> Err TooShort)
#Derived.fmt3
#Derived.fmt4
"###
)
})

View file

@ -24,6 +24,10 @@ procedure #Derived.7 (#Derived.8, #Derived.9, #Derived.6):
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;
@ -44,7 +48,7 @@ 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.201 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -52,7 +56,7 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
ret Encode.115;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.117 : List U8 = CallByName TotallyNotJson.201 Encode.99 Encode.101 Encode.107;
let Encode.117 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
ret Encode.117;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -66,10 +70,10 @@ procedure Encode.26 (Encode.105, Encode.106):
ret Encode.108;
procedure List.103 (List.487, List.488, List.489):
let List.683 : U64 = 0i64;
let List.684 : U64 = CallByName List.6 List.487;
let List.682 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.683 List.684;
ret List.682;
let List.685 : U64 = 0i64;
let List.686 : U64 = CallByName List.6 List.487;
let List.684 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.685 List.686;
ret List.684;
procedure List.18 (List.159, List.160, List.161):
let List.593 : U64 = 0i64;
@ -78,137 +82,137 @@ procedure List.18 (List.159, List.160, List.161):
ret List.592;
procedure List.18 (List.159, List.160, List.161):
let List.627 : U64 = 0i64;
let List.628 : U64 = CallByName List.6 List.159;
let List.626 : {List U8, U64} = CallByName List.91 List.159 List.160 List.161 List.627 List.628;
ret List.626;
let List.628 : U64 = 0i64;
let List.629 : U64 = CallByName List.6 List.159;
let List.627 : {List U8, U64} = CallByName List.91 List.159 List.160 List.161 List.628 List.629;
ret List.627;
procedure List.18 (List.159, List.160, List.161):
let List.639 : U64 = 0i64;
let List.640 : U64 = CallByName List.6 List.159;
let List.638 : List U8 = CallByName List.91 List.159 List.160 List.161 List.639 List.640;
ret List.638;
let List.640 : U64 = 0i64;
let List.641 : U64 = CallByName List.6 List.159;
let List.639 : List U8 = CallByName List.91 List.159 List.160 List.161 List.640 List.641;
ret List.639;
procedure List.26 (List.200, List.201, List.202):
let List.676 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.679 : U8 = 1i64;
let List.680 : U8 = GetTagId List.676;
let List.681 : Int1 = lowlevel Eq List.679 List.680;
if List.681 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.676;
let List.678 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.681 : U8 = 1i64;
let List.682 : U8 = GetTagId List.678;
let List.683 : Int1 = lowlevel Eq List.681 List.682;
if List.683 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.678;
ret List.203;
else
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.676;
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.678;
ret List.204;
procedure List.4 (List.123, List.124):
let List.625 : U64 = 1i64;
let List.624 : List U8 = CallByName List.70 List.123 List.625;
let List.623 : List U8 = CallByName List.71 List.624 List.124;
ret List.623;
let List.626 : U64 = 1i64;
let List.625 : List U8 = CallByName List.70 List.123 List.626;
let List.624 : List U8 = CallByName List.71 List.625 List.124;
ret List.624;
procedure List.49 (List.419, List.420):
let List.667 : U64 = StructAtIndex 1 List.420;
let List.668 : U64 = StructAtIndex 0 List.420;
let List.666 : List U8 = CallByName List.72 List.419 List.667 List.668;
ret List.666;
let List.669 : U64 = StructAtIndex 1 List.420;
let List.670 : U64 = StructAtIndex 0 List.420;
let List.668 : List U8 = CallByName List.72 List.419 List.669 List.670;
ret List.668;
procedure List.52 (List.434, List.435):
let List.436 : U64 = CallByName List.6 List.434;
joinpoint List.674 List.437:
let List.672 : U64 = 0i64;
let List.671 : {U64, U64} = Struct {List.437, List.672};
joinpoint List.676 List.437:
let List.674 : U64 = 0i64;
let List.673 : {U64, U64} = Struct {List.437, List.674};
inc List.434;
let List.438 : List U8 = CallByName List.49 List.434 List.671;
let List.670 : U64 = CallByName Num.75 List.436 List.437;
let List.665 : {U64, U64} = Struct {List.670, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.665;
let List.664 : {List U8, List U8} = Struct {List.438, List.439};
ret List.664;
let List.438 : List U8 = CallByName List.49 List.434 List.673;
let List.672 : U64 = CallByName Num.75 List.436 List.437;
let List.667 : {U64, U64} = Struct {List.672, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.667;
let List.666 : {List U8, List U8} = Struct {List.438, List.439};
ret List.666;
in
let List.675 : Int1 = CallByName Num.24 List.436 List.435;
if List.675 then
jump List.674 List.435;
let List.677 : Int1 = CallByName Num.24 List.436 List.435;
if List.677 then
jump List.676 List.435;
else
jump List.674 List.436;
jump List.676 List.436;
procedure List.6 (#Attr.2):
let List.605 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.605;
procedure List.6 (#Attr.2):
let List.659 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.659;
let List.606 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.606;
procedure List.6 (#Attr.2):
let List.661 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.661;
procedure List.6 (#Attr.2):
let List.663 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.663;
procedure List.66 (#Attr.2, #Attr.3):
let List.602 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.602;
procedure List.66 (#Attr.2, #Attr.3):
let List.636 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.636;
let List.637 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.637;
procedure List.66 (#Attr.2, #Attr.3):
let List.648 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.648;
let List.649 : U8 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.649;
procedure List.68 (#Attr.2):
let List.663 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.663;
let List.665 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.665;
procedure List.70 (#Attr.2, #Attr.3):
let List.610 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.610;
let List.611 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.611;
procedure List.71 (#Attr.2, #Attr.3):
let List.608 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.608;
let List.609 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.609;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.669 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.669;
let List.671 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.671;
procedure List.8 (#Attr.2, #Attr.3):
let List.658 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.658;
let List.660 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.660;
procedure List.80 (#Derived_gen.31, #Derived_gen.32, #Derived_gen.33, #Derived_gen.34, #Derived_gen.35):
joinpoint List.685 List.490 List.491 List.492 List.493 List.494:
let List.687 : Int1 = CallByName Num.22 List.493 List.494;
if List.687 then
let List.696 : U8 = CallByName List.66 List.490 List.493;
let List.688 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.696;
let List.693 : U8 = 1i64;
let List.694 : U8 = GetTagId List.688;
let List.695 : Int1 = lowlevel Eq List.693 List.694;
if List.695 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.688;
let List.691 : U64 = 1i64;
let List.690 : U64 = CallByName Num.51 List.493 List.691;
jump List.685 List.490 List.495 List.492 List.690 List.494;
procedure List.80 (#Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_gen.30):
joinpoint List.687 List.490 List.491 List.492 List.493 List.494:
let List.689 : Int1 = CallByName Num.22 List.493 List.494;
if List.689 then
let List.698 : U8 = CallByName List.66 List.490 List.493;
let List.690 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.698;
let List.695 : U8 = 1i64;
let List.696 : U8 = GetTagId List.690;
let List.697 : Int1 = lowlevel Eq List.695 List.696;
if List.697 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.690;
let List.693 : U64 = 1i64;
let List.692 : U64 = CallByName Num.51 List.493 List.693;
jump List.687 List.490 List.495 List.492 List.692 List.494;
else
dec List.490;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.688;
let List.692 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.692;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.690;
let List.694 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.694;
else
dec List.490;
let List.686 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.686;
let List.688 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.688;
in
jump List.685 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33 #Derived_gen.34 #Derived_gen.35;
jump List.687 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30;
procedure List.91 (#Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_gen.26, #Derived_gen.27):
procedure List.91 (#Derived_gen.31, #Derived_gen.32, #Derived_gen.33, #Derived_gen.34, #Derived_gen.35):
joinpoint List.595 List.162 List.163 List.164 List.165 List.166:
let List.597 : Int1 = CallByName Num.22 List.165 List.166;
if List.597 then
let List.601 : {Str, Str} = CallByName List.66 List.162 List.165;
inc List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.203 List.163 List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.204 List.163 List.601;
let List.600 : U64 = 1i64;
let List.599 : U64 = CallByName Num.51 List.165 List.600;
jump List.595 List.162 List.167 List.164 List.599 List.166;
@ -216,74 +220,74 @@ procedure List.91 (#Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_g
dec List.162;
ret List.163;
in
jump List.595 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27;
jump List.595 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33 #Derived_gen.34 #Derived_gen.35;
procedure List.91 (#Derived_gen.39, #Derived_gen.40, #Derived_gen.41, #Derived_gen.42, #Derived_gen.43):
joinpoint List.641 List.162 List.163 List.164 List.165 List.166:
let List.643 : Int1 = CallByName Num.22 List.165 List.166;
if List.643 then
let List.647 : U8 = CallByName List.66 List.162 List.165;
let List.167 : List U8 = CallByName TotallyNotJson.183 List.163 List.647;
let List.646 : U64 = 1i64;
let List.645 : U64 = CallByName Num.51 List.165 List.646;
jump List.641 List.162 List.167 List.164 List.645 List.166;
procedure List.91 (#Derived_gen.36, #Derived_gen.37, #Derived_gen.38, #Derived_gen.39, #Derived_gen.40):
joinpoint List.642 List.162 List.163 List.164 List.165 List.166:
let List.644 : Int1 = CallByName Num.22 List.165 List.166;
if List.644 then
let List.648 : U8 = CallByName List.66 List.162 List.165;
let List.167 : List U8 = CallByName TotallyNotJson.183 List.163 List.648;
let List.647 : U64 = 1i64;
let List.646 : U64 = CallByName Num.51 List.165 List.647;
jump List.642 List.162 List.167 List.164 List.646 List.166;
else
dec List.162;
ret List.163;
in
jump List.641 #Derived_gen.39 #Derived_gen.40 #Derived_gen.41 #Derived_gen.42 #Derived_gen.43;
jump List.642 #Derived_gen.36 #Derived_gen.37 #Derived_gen.38 #Derived_gen.39 #Derived_gen.40;
procedure List.91 (#Derived_gen.47, #Derived_gen.48, #Derived_gen.49, #Derived_gen.50, #Derived_gen.51):
joinpoint List.629 List.162 List.163 List.164 List.165 List.166:
let List.631 : Int1 = CallByName Num.22 List.165 List.166;
if List.631 then
let List.635 : {Str, Str} = CallByName List.66 List.162 List.165;
inc List.635;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.203 List.163 List.635;
let List.634 : U64 = 1i64;
let List.633 : U64 = CallByName Num.51 List.165 List.634;
jump List.629 List.162 List.167 List.164 List.633 List.166;
procedure List.91 (#Derived_gen.50, #Derived_gen.51, #Derived_gen.52, #Derived_gen.53, #Derived_gen.54):
joinpoint List.630 List.162 List.163 List.164 List.165 List.166:
let List.632 : Int1 = CallByName Num.22 List.165 List.166;
if List.632 then
let List.636 : {Str, Str} = CallByName List.66 List.162 List.165;
inc List.636;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.204 List.163 List.636;
let List.635 : U64 = 1i64;
let List.634 : U64 = CallByName Num.51 List.165 List.635;
jump List.630 List.162 List.167 List.164 List.634 List.166;
else
dec List.162;
ret List.163;
in
jump List.629 #Derived_gen.47 #Derived_gen.48 #Derived_gen.49 #Derived_gen.50 #Derived_gen.51;
jump List.630 #Derived_gen.50 #Derived_gen.51 #Derived_gen.52 #Derived_gen.53 #Derived_gen.54;
procedure Num.127 (#Attr.2):
let Num.290 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.290;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.295 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.295;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.294 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.294;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.291 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
let Num.291 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.291;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.296 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.297 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.297;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.296 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.296;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.302 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.302;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.293 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.293;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.304 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.298 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.298;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.304 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.304;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.306;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.299;
let Num.301 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.301;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.303 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.303;
let Num.305 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.305;
procedure Str.12 (#Attr.2):
let Str.242 : List U8 = lowlevel StrToUtf8 #Attr.2;
@ -309,279 +313,305 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1043, TotallyNotJson.149):
let TotallyNotJson.1046 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1045 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1046;
ret TotallyNotJson.1045;
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 TotallyNotJson.157 (TotallyNotJson.1094, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1094;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1094;
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.1097 : Int1 = false;
let TotallyNotJson.1096 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1097};
let TotallyNotJson.1095 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1096;
ret TotallyNotJson.1095;
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.1100 : Int1 = false;
let TotallyNotJson.1099 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1100};
let TotallyNotJson.1098 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1099;
ret TotallyNotJson.1098;
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.1103 : Int1 = false;
let TotallyNotJson.1102 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1103};
let TotallyNotJson.1101 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1102;
ret TotallyNotJson.1101;
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.1106 : Int1 = false;
let TotallyNotJson.1105 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1106};
let TotallyNotJson.1104 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1105;
ret TotallyNotJson.1104;
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.1109 : Int1 = false;
let TotallyNotJson.1108 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1109};
let TotallyNotJson.1107 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1108;
ret TotallyNotJson.1107;
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.1112 : Int1 = false;
let TotallyNotJson.1111 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1112};
let TotallyNotJson.1110 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1111;
ret TotallyNotJson.1110;
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.1115 : Int1 = false;
let TotallyNotJson.1114 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1115};
let TotallyNotJson.1113 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1114;
ret TotallyNotJson.1113;
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.1118 : Int1 = false;
let TotallyNotJson.1117 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1118};
let TotallyNotJson.1116 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1117;
ret TotallyNotJson.1116;
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.1122 : U64 = 1i64;
let TotallyNotJson.1121 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1122;
let TotallyNotJson.1120 : {U64, Int1} = Struct {TotallyNotJson.1121, TotallyNotJson.159};
let TotallyNotJson.1119 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1120;
ret TotallyNotJson.1119;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1065 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1064 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1065;
ret TotallyNotJson.1064;
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 TotallyNotJson.201 (TotallyNotJson.202, TotallyNotJson.973, TotallyNotJson.200):
let TotallyNotJson.1006 : I64 = 123i64;
let TotallyNotJson.1005 : U8 = CallByName Num.127 TotallyNotJson.1006;
let TotallyNotJson.204 : List U8 = CallByName List.4 TotallyNotJson.202 TotallyNotJson.1005;
let TotallyNotJson.1004 : U64 = CallByName List.6 TotallyNotJson.200;
let TotallyNotJson.981 : {List U8, U64} = Struct {TotallyNotJson.204, TotallyNotJson.1004};
let TotallyNotJson.982 : {} = Struct {};
let TotallyNotJson.980 : {List U8, U64} = CallByName List.18 TotallyNotJson.200 TotallyNotJson.981 TotallyNotJson.982;
let TotallyNotJson.206 : List U8 = StructAtIndex 0 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.206 TotallyNotJson.978;
ret TotallyNotJson.977;
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 TotallyNotJson.201 (TotallyNotJson.202, TotallyNotJson.973, TotallyNotJson.200):
let TotallyNotJson.1040 : I64 = 123i64;
let TotallyNotJson.1039 : U8 = CallByName Num.127 TotallyNotJson.1040;
let TotallyNotJson.204 : List U8 = CallByName List.4 TotallyNotJson.202 TotallyNotJson.1039;
let TotallyNotJson.1038 : U64 = CallByName List.6 TotallyNotJson.200;
let TotallyNotJson.1015 : {List U8, U64} = Struct {TotallyNotJson.204, TotallyNotJson.1038};
let TotallyNotJson.1016 : {} = Struct {};
let TotallyNotJson.1014 : {List U8, U64} = CallByName List.18 TotallyNotJson.200 TotallyNotJson.1015 TotallyNotJson.1016;
let TotallyNotJson.206 : List U8 = StructAtIndex 0 TotallyNotJson.1014;
let TotallyNotJson.1013 : I64 = 125i64;
let TotallyNotJson.1012 : U8 = CallByName Num.127 TotallyNotJson.1013;
let TotallyNotJson.1011 : List U8 = CallByName List.4 TotallyNotJson.206 TotallyNotJson.1012;
ret TotallyNotJson.1011;
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 TotallyNotJson.203 (TotallyNotJson.975, TotallyNotJson.976):
let TotallyNotJson.209 : Str = StructAtIndex 0 TotallyNotJson.976;
let TotallyNotJson.210 : Str = StructAtIndex 1 TotallyNotJson.976;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.208 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.1003 : I64 = 34i64;
let TotallyNotJson.1002 : U8 = CallByName Num.127 TotallyNotJson.1003;
let TotallyNotJson.1000 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.1002;
let TotallyNotJson.1001 : List U8 = CallByName Str.12 TotallyNotJson.209;
let TotallyNotJson.997 : List U8 = CallByName List.8 TotallyNotJson.1000 TotallyNotJson.1001;
let TotallyNotJson.999 : I64 = 34i64;
let TotallyNotJson.998 : U8 = CallByName Num.127 TotallyNotJson.999;
let TotallyNotJson.994 : List U8 = CallByName List.4 TotallyNotJson.997 TotallyNotJson.998;
let TotallyNotJson.996 : I64 = 58i64;
let TotallyNotJson.995 : U8 = CallByName Num.127 TotallyNotJson.996;
let TotallyNotJson.992 : List U8 = CallByName List.4 TotallyNotJson.994 TotallyNotJson.995;
let TotallyNotJson.993 : {} = Struct {};
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.992 TotallyNotJson.210 TotallyNotJson.993;
joinpoint TotallyNotJson.987 TotallyNotJson.213:
let TotallyNotJson.985 : U64 = 1i64;
let TotallyNotJson.984 : U64 = CallByName Num.20 TotallyNotJson.208 TotallyNotJson.985;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.213, TotallyNotJson.984};
ret TotallyNotJson.983;
in
let TotallyNotJson.991 : U64 = 1i64;
let TotallyNotJson.988 : Int1 = CallByName Num.24 TotallyNotJson.208 TotallyNotJson.991;
if TotallyNotJson.988 then
let TotallyNotJson.990 : I64 = 44i64;
let TotallyNotJson.989 : U8 = CallByName Num.127 TotallyNotJson.990;
let TotallyNotJson.986 : List U8 = CallByName List.4 TotallyNotJson.212 TotallyNotJson.989;
jump TotallyNotJson.987 TotallyNotJson.986;
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
jump TotallyNotJson.987 TotallyNotJson.212;
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 TotallyNotJson.203 (TotallyNotJson.975, TotallyNotJson.976):
let TotallyNotJson.209 : Str = StructAtIndex 0 TotallyNotJson.976;
let TotallyNotJson.210 : Str = StructAtIndex 1 TotallyNotJson.976;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.208 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.1037 : I64 = 34i64;
let TotallyNotJson.1036 : U8 = CallByName Num.127 TotallyNotJson.1037;
let TotallyNotJson.1034 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.1036;
let TotallyNotJson.1035 : List U8 = CallByName Str.12 TotallyNotJson.209;
let TotallyNotJson.1031 : List U8 = CallByName List.8 TotallyNotJson.1034 TotallyNotJson.1035;
let TotallyNotJson.1033 : I64 = 34i64;
let TotallyNotJson.1032 : U8 = CallByName Num.127 TotallyNotJson.1033;
let TotallyNotJson.1028 : List U8 = CallByName List.4 TotallyNotJson.1031 TotallyNotJson.1032;
let TotallyNotJson.1030 : I64 = 58i64;
let TotallyNotJson.1029 : U8 = CallByName Num.127 TotallyNotJson.1030;
let TotallyNotJson.1026 : List U8 = CallByName List.4 TotallyNotJson.1028 TotallyNotJson.1029;
let TotallyNotJson.1027 : {} = Struct {};
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.1026 TotallyNotJson.210 TotallyNotJson.1027;
joinpoint TotallyNotJson.1021 TotallyNotJson.213:
let TotallyNotJson.1019 : U64 = 1i64;
let TotallyNotJson.1018 : U64 = CallByName Num.20 TotallyNotJson.208 TotallyNotJson.1019;
let TotallyNotJson.1017 : {List U8, U64} = Struct {TotallyNotJson.213, TotallyNotJson.1018};
ret TotallyNotJson.1017;
in
let TotallyNotJson.1025 : U64 = 1i64;
let TotallyNotJson.1022 : Int1 = CallByName Num.24 TotallyNotJson.208 TotallyNotJson.1025;
if TotallyNotJson.1022 then
let TotallyNotJson.1024 : I64 = 44i64;
let TotallyNotJson.1023 : U8 = CallByName Num.127 TotallyNotJson.1024;
let TotallyNotJson.1020 : List U8 = CallByName List.4 TotallyNotJson.212 TotallyNotJson.1023;
jump TotallyNotJson.1021 TotallyNotJson.1020;
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
jump TotallyNotJson.1021 TotallyNotJson.212;
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 TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1041 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1041;
let TotallyNotJson.1058 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1058;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1123 : U64 = 0i64;
let TotallyNotJson.1124 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1123, TotallyNotJson.1124};
let TotallyNotJson.1093 : {} = Struct {};
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.1093;
let TotallyNotJson.1047 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1091 : Int1 = true;
let TotallyNotJson.1092 : Int1 = lowlevel Eq TotallyNotJson.1091 TotallyNotJson.1047;
if TotallyNotJson.1092 then
let TotallyNotJson.1057 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1058 : U64 = 2i64;
let TotallyNotJson.1056 : U64 = CallByName Num.19 TotallyNotJson.1057 TotallyNotJson.1058;
let TotallyNotJson.1053 : List U8 = CallByName List.68 TotallyNotJson.1056;
let TotallyNotJson.1055 : U8 = 34i64;
let TotallyNotJson.1054 : List U8 = Array [TotallyNotJson.1055];
let TotallyNotJson.1052 : List U8 = CallByName List.8 TotallyNotJson.1053 TotallyNotJson.1054;
let TotallyNotJson.1049 : List U8 = CallByName List.8 TotallyNotJson.1052 TotallyNotJson.153;
let TotallyNotJson.1051 : U8 = 34i64;
let TotallyNotJson.1050 : List U8 = Array [TotallyNotJson.1051];
let TotallyNotJson.1048 : List U8 = CallByName List.8 TotallyNotJson.1049 TotallyNotJson.1050;
ret TotallyNotJson.1048;
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.1090 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1089 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1090;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1089;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1089;
let TotallyNotJson.1087 : U64 = CallByName List.6 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.1088 : U64 = 120i64;
let TotallyNotJson.1085 : U64 = CallByName Num.21 TotallyNotJson.1087 TotallyNotJson.1088;
let TotallyNotJson.1086 : U64 = 100i64;
let TotallyNotJson.1084 : U64 = CallByName Num.137 TotallyNotJson.1085 TotallyNotJson.1086;
let TotallyNotJson.1081 : List U8 = CallByName List.68 TotallyNotJson.1084;
let TotallyNotJson.1083 : U8 = 34i64;
let TotallyNotJson.1082 : List U8 = Array [TotallyNotJson.1083];
let TotallyNotJson.1080 : List U8 = CallByName List.8 TotallyNotJson.1081 TotallyNotJson.1082;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1080 TotallyNotJson.179;
let TotallyNotJson.1063 : {} = Struct {};
let TotallyNotJson.1060 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1063;
let TotallyNotJson.1062 : U8 = 34i64;
let TotallyNotJson.1061 : List U8 = Array [TotallyNotJson.1062];
let TotallyNotJson.1059 : List U8 = CallByName List.8 TotallyNotJson.1060 TotallyNotJson.1061;
ret TotallyNotJson.1059;
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 TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1066 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1066;
let TotallyNotJson.1083 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1083;
case 92:
let TotallyNotJson.1067 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1067;
let TotallyNotJson.1084 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1084;
case 47:
let TotallyNotJson.1068 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1068;
let TotallyNotJson.1085 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1085;
case 8:
let TotallyNotJson.1070 : U8 = 98i64;
let TotallyNotJson.1069 : List U8 = Array [92i64, TotallyNotJson.1070];
ret TotallyNotJson.1069;
let TotallyNotJson.1087 : U8 = 98i64;
let TotallyNotJson.1086 : List U8 = Array [92i64, TotallyNotJson.1087];
ret TotallyNotJson.1086;
case 12:
let TotallyNotJson.1072 : U8 = 102i64;
let TotallyNotJson.1071 : List U8 = Array [92i64, TotallyNotJson.1072];
ret TotallyNotJson.1071;
let TotallyNotJson.1089 : U8 = 102i64;
let TotallyNotJson.1088 : List U8 = Array [92i64, TotallyNotJson.1089];
ret TotallyNotJson.1088;
case 10:
let TotallyNotJson.1074 : U8 = 110i64;
let TotallyNotJson.1073 : List U8 = Array [92i64, TotallyNotJson.1074];
ret TotallyNotJson.1073;
let TotallyNotJson.1091 : U8 = 110i64;
let TotallyNotJson.1090 : List U8 = Array [92i64, TotallyNotJson.1091];
ret TotallyNotJson.1090;
case 13:
let TotallyNotJson.1076 : U8 = 114i64;
let TotallyNotJson.1075 : List U8 = Array [92i64, TotallyNotJson.1076];
ret TotallyNotJson.1075;
let TotallyNotJson.1093 : U8 = 114i64;
let TotallyNotJson.1092 : List U8 = Array [92i64, TotallyNotJson.1093];
ret TotallyNotJson.1092;
case 9:
let TotallyNotJson.1078 : U8 = 114i64;
let TotallyNotJson.1077 : List U8 = Array [92i64, TotallyNotJson.1078];
ret TotallyNotJson.1077;
let TotallyNotJson.1095 : U8 = 114i64;
let TotallyNotJson.1094 : List U8 = Array [92i64, TotallyNotJson.1095];
ret TotallyNotJson.1094;
default:
let TotallyNotJson.1079 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1079;
let TotallyNotJson.1096 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1096;
procedure TotallyNotJson.29 (TotallyNotJson.200):
let TotallyNotJson.1007 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.200;
ret TotallyNotJson.1007;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.1017 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.1017;
procedure TotallyNotJson.29 (TotallyNotJson.200):
let TotallyNotJson.971 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.200;
ret TotallyNotJson.971;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.1054 : {} = Struct {};
ret TotallyNotJson.1054;
procedure Test.0 ():
let Test.12 : Str = "bar";

View file

@ -11,6 +11,10 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Derived.1):
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;
@ -25,7 +29,7 @@ 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.201 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -39,10 +43,10 @@ procedure Encode.26 (Encode.105, Encode.106):
ret Encode.108;
procedure List.103 (List.487, List.488, List.489):
let List.649 : U64 = 0i64;
let List.650 : U64 = CallByName List.6 List.487;
let List.648 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.649 List.650;
ret List.648;
let List.650 : U64 = 0i64;
let List.651 : U64 = CallByName List.6 List.487;
let List.649 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.650 List.651;
ret List.649;
procedure List.18 (List.159, List.160, List.161):
let List.593 : U64 = 0i64;
@ -57,15 +61,15 @@ procedure List.18 (List.159, List.160, List.161):
ret List.604;
procedure List.26 (List.200, List.201, List.202):
let List.642 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.645 : U8 = 1i64;
let List.646 : U8 = GetTagId List.642;
let List.647 : Int1 = lowlevel Eq List.645 List.646;
if List.647 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.642;
let List.643 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.646 : U8 = 1i64;
let List.647 : U8 = GetTagId List.643;
let List.648 : Int1 = lowlevel Eq List.646 List.647;
if List.648 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.643;
ret List.203;
else
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.642;
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.643;
ret List.204;
procedure List.4 (List.123, List.124):
@ -75,37 +79,37 @@ procedure List.4 (List.123, List.124):
ret List.589;
procedure List.49 (List.419, List.420):
let List.633 : U64 = StructAtIndex 1 List.420;
let List.634 : U64 = StructAtIndex 0 List.420;
let List.632 : List U8 = CallByName List.72 List.419 List.633 List.634;
ret List.632;
let List.634 : U64 = StructAtIndex 1 List.420;
let List.635 : U64 = StructAtIndex 0 List.420;
let List.633 : List U8 = CallByName List.72 List.419 List.634 List.635;
ret List.633;
procedure List.52 (List.434, List.435):
let List.436 : U64 = CallByName List.6 List.434;
joinpoint List.640 List.437:
let List.638 : U64 = 0i64;
let List.637 : {U64, U64} = Struct {List.437, List.638};
joinpoint List.641 List.437:
let List.639 : U64 = 0i64;
let List.638 : {U64, U64} = Struct {List.437, List.639};
inc List.434;
let List.438 : List U8 = CallByName List.49 List.434 List.637;
let List.636 : U64 = CallByName Num.75 List.436 List.437;
let List.631 : {U64, U64} = Struct {List.636, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.631;
let List.630 : {List U8, List U8} = Struct {List.438, List.439};
ret List.630;
let List.438 : List U8 = CallByName List.49 List.434 List.638;
let List.637 : U64 = CallByName Num.75 List.436 List.437;
let List.632 : {U64, U64} = Struct {List.637, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.632;
let List.631 : {List U8, List U8} = Struct {List.438, List.439};
ret List.631;
in
let List.641 : Int1 = CallByName Num.24 List.436 List.435;
if List.641 then
jump List.640 List.435;
let List.642 : Int1 = CallByName Num.24 List.436 List.435;
if List.642 then
jump List.641 List.435;
else
jump List.640 List.436;
jump List.641 List.436;
procedure List.6 (#Attr.2):
let List.625 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.625;
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
procedure List.6 (#Attr.2):
let List.627 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.627;
let List.628 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.628;
procedure List.66 (#Attr.2, #Attr.3):
let List.602 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
@ -116,8 +120,8 @@ procedure List.66 (#Attr.2, #Attr.3):
ret List.614;
procedure List.68 (#Attr.2):
let List.629 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.629;
let List.630 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.630;
procedure List.70 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
@ -128,40 +132,40 @@ procedure List.71 (#Attr.2, #Attr.3):
ret List.574;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.635 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.635;
let List.636 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.636;
procedure List.8 (#Attr.2, #Attr.3):
let List.624 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.624;
let List.625 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.625;
procedure List.80 (#Derived_gen.16, #Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20):
joinpoint List.651 List.490 List.491 List.492 List.493 List.494:
let List.653 : Int1 = CallByName Num.22 List.493 List.494;
if List.653 then
let List.662 : U8 = CallByName List.66 List.490 List.493;
let List.654 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.662;
let List.659 : U8 = 1i64;
let List.660 : U8 = GetTagId List.654;
let List.661 : Int1 = lowlevel Eq List.659 List.660;
if List.661 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.654;
let List.657 : U64 = 1i64;
let List.656 : U64 = CallByName Num.51 List.493 List.657;
jump List.651 List.490 List.495 List.492 List.656 List.494;
procedure List.80 (#Derived_gen.18, #Derived_gen.19, #Derived_gen.20, #Derived_gen.21, #Derived_gen.22):
joinpoint List.652 List.490 List.491 List.492 List.493 List.494:
let List.654 : Int1 = CallByName Num.22 List.493 List.494;
if List.654 then
let List.663 : U8 = CallByName List.66 List.490 List.493;
let List.655 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.663;
let List.660 : U8 = 1i64;
let List.661 : U8 = GetTagId List.655;
let List.662 : Int1 = lowlevel Eq List.660 List.661;
if List.662 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.655;
let List.658 : U64 = 1i64;
let List.657 : U64 = CallByName Num.51 List.493 List.658;
jump List.652 List.490 List.495 List.492 List.657 List.494;
else
dec List.490;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.654;
let List.658 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.658;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.655;
let List.659 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.659;
else
dec List.490;
let List.652 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.652;
let List.653 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.653;
in
jump List.651 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20;
jump List.652 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22;
procedure List.91 (#Derived_gen.21, #Derived_gen.22, #Derived_gen.23, #Derived_gen.24, #Derived_gen.25):
procedure List.91 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
joinpoint List.607 List.162 List.163 List.164 List.165 List.166:
let List.609 : Int1 = CallByName Num.22 List.165 List.166;
if List.609 then
@ -174,15 +178,15 @@ procedure List.91 (#Derived_gen.21, #Derived_gen.22, #Derived_gen.23, #Derived_g
dec List.162;
ret List.163;
in
jump List.607 #Derived_gen.21 #Derived_gen.22 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25;
jump List.607 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
procedure List.91 (#Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_gen.30):
procedure List.91 (#Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_gen.26, #Derived_gen.27):
joinpoint List.595 List.162 List.163 List.164 List.165 List.166:
let List.597 : Int1 = CallByName Num.22 List.165 List.166;
if List.597 then
let List.601 : {Str, Str} = CallByName List.66 List.162 List.165;
inc List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.203 List.163 List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.204 List.163 List.601;
let List.600 : U64 = 1i64;
let List.599 : U64 = CallByName Num.51 List.165 List.600;
jump List.595 List.162 List.167 List.164 List.599 List.166;
@ -190,43 +194,43 @@ procedure List.91 (#Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_g
dec List.162;
ret List.163;
in
jump List.595 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30;
jump List.595 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27;
procedure Num.127 (#Attr.2):
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.285 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.285;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.284 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.284;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.281 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.281;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.286 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
let Num.286 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.286;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.285 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.285;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.282 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.282;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.287;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.292 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.292;
let Num.293 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.293;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.294 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.294;
let Num.295 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.295;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.289;
let Num.290 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.290;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.293 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.293;
let Num.294 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.294;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
@ -252,227 +256,240 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1009, TotallyNotJson.149):
let TotallyNotJson.1012 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1011 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1012;
ret TotallyNotJson.1011;
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 TotallyNotJson.157 (TotallyNotJson.1060, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1060;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1060;
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.1063 : Int1 = false;
let TotallyNotJson.1062 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1063};
let TotallyNotJson.1061 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1062;
ret TotallyNotJson.1061;
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.1066 : Int1 = false;
let TotallyNotJson.1065 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1066};
let TotallyNotJson.1064 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1065;
ret TotallyNotJson.1064;
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.1069 : Int1 = false;
let TotallyNotJson.1068 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1069};
let TotallyNotJson.1067 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1068;
ret TotallyNotJson.1067;
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.1072 : Int1 = false;
let TotallyNotJson.1071 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1072};
let TotallyNotJson.1070 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1071;
ret TotallyNotJson.1070;
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.1075 : Int1 = false;
let TotallyNotJson.1074 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1075};
let TotallyNotJson.1073 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1074;
ret TotallyNotJson.1073;
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.1078 : Int1 = false;
let TotallyNotJson.1077 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1078};
let TotallyNotJson.1076 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1077;
ret TotallyNotJson.1076;
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.1081 : Int1 = false;
let TotallyNotJson.1080 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1081};
let TotallyNotJson.1079 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1080;
ret TotallyNotJson.1079;
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.1084 : Int1 = false;
let TotallyNotJson.1083 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1084};
let TotallyNotJson.1082 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1083;
ret TotallyNotJson.1082;
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.1088 : U64 = 1i64;
let TotallyNotJson.1087 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1088;
let TotallyNotJson.1086 : {U64, Int1} = Struct {TotallyNotJson.1087, TotallyNotJson.159};
let TotallyNotJson.1085 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1086;
ret TotallyNotJson.1085;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1031 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1030 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1031;
ret TotallyNotJson.1030;
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 TotallyNotJson.201 (TotallyNotJson.202, TotallyNotJson.973, TotallyNotJson.200):
let TotallyNotJson.1006 : I64 = 123i64;
let TotallyNotJson.1005 : U8 = CallByName Num.127 TotallyNotJson.1006;
let TotallyNotJson.204 : List U8 = CallByName List.4 TotallyNotJson.202 TotallyNotJson.1005;
let TotallyNotJson.1004 : U64 = CallByName List.6 TotallyNotJson.200;
let TotallyNotJson.981 : {List U8, U64} = Struct {TotallyNotJson.204, TotallyNotJson.1004};
let TotallyNotJson.982 : {} = Struct {};
let TotallyNotJson.980 : {List U8, U64} = CallByName List.18 TotallyNotJson.200 TotallyNotJson.981 TotallyNotJson.982;
let TotallyNotJson.206 : List U8 = StructAtIndex 0 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.206 TotallyNotJson.978;
ret TotallyNotJson.977;
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 TotallyNotJson.203 (TotallyNotJson.975, TotallyNotJson.976):
let TotallyNotJson.209 : Str = StructAtIndex 0 TotallyNotJson.976;
let TotallyNotJson.210 : Str = StructAtIndex 1 TotallyNotJson.976;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.208 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.1003 : I64 = 34i64;
let TotallyNotJson.1002 : U8 = CallByName Num.127 TotallyNotJson.1003;
let TotallyNotJson.1000 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.1002;
let TotallyNotJson.1001 : List U8 = CallByName Str.12 TotallyNotJson.209;
let TotallyNotJson.997 : List U8 = CallByName List.8 TotallyNotJson.1000 TotallyNotJson.1001;
let TotallyNotJson.999 : I64 = 34i64;
let TotallyNotJson.998 : U8 = CallByName Num.127 TotallyNotJson.999;
let TotallyNotJson.994 : List U8 = CallByName List.4 TotallyNotJson.997 TotallyNotJson.998;
let TotallyNotJson.996 : I64 = 58i64;
let TotallyNotJson.995 : U8 = CallByName Num.127 TotallyNotJson.996;
let TotallyNotJson.992 : List U8 = CallByName List.4 TotallyNotJson.994 TotallyNotJson.995;
let TotallyNotJson.993 : {} = Struct {};
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.992 TotallyNotJson.210 TotallyNotJson.993;
joinpoint TotallyNotJson.987 TotallyNotJson.213:
let TotallyNotJson.985 : U64 = 1i64;
let TotallyNotJson.984 : U64 = CallByName Num.20 TotallyNotJson.208 TotallyNotJson.985;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.213, TotallyNotJson.984};
ret TotallyNotJson.983;
in
let TotallyNotJson.991 : U64 = 1i64;
let TotallyNotJson.988 : Int1 = CallByName Num.24 TotallyNotJson.208 TotallyNotJson.991;
if TotallyNotJson.988 then
let TotallyNotJson.990 : I64 = 44i64;
let TotallyNotJson.989 : U8 = CallByName Num.127 TotallyNotJson.990;
let TotallyNotJson.986 : List U8 = CallByName List.4 TotallyNotJson.212 TotallyNotJson.989;
jump TotallyNotJson.987 TotallyNotJson.986;
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
jump TotallyNotJson.987 TotallyNotJson.212;
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 TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1007 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1007;
let TotallyNotJson.1017 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1017;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1089 : U64 = 0i64;
let TotallyNotJson.1090 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1089, TotallyNotJson.1090};
let TotallyNotJson.1059 : {} = Struct {};
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.1059;
let TotallyNotJson.1013 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1057 : Int1 = true;
let TotallyNotJson.1058 : Int1 = lowlevel Eq TotallyNotJson.1057 TotallyNotJson.1013;
if TotallyNotJson.1058 then
let TotallyNotJson.1023 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1024 : U64 = 2i64;
let TotallyNotJson.1022 : U64 = CallByName Num.19 TotallyNotJson.1023 TotallyNotJson.1024;
let TotallyNotJson.1019 : List U8 = CallByName List.68 TotallyNotJson.1022;
let TotallyNotJson.1021 : U8 = 34i64;
let TotallyNotJson.1020 : List U8 = Array [TotallyNotJson.1021];
let TotallyNotJson.1018 : List U8 = CallByName List.8 TotallyNotJson.1019 TotallyNotJson.1020;
let TotallyNotJson.1015 : List U8 = CallByName List.8 TotallyNotJson.1018 TotallyNotJson.153;
let TotallyNotJson.1017 : U8 = 34i64;
let TotallyNotJson.1016 : List U8 = Array [TotallyNotJson.1017];
let TotallyNotJson.1014 : List U8 = CallByName List.8 TotallyNotJson.1015 TotallyNotJson.1016;
ret TotallyNotJson.1014;
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.1056 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1055 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1056;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1055;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1055;
let TotallyNotJson.1053 : U64 = CallByName List.6 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.1054 : U64 = 120i64;
let TotallyNotJson.1051 : U64 = CallByName Num.21 TotallyNotJson.1053 TotallyNotJson.1054;
let TotallyNotJson.1052 : U64 = 100i64;
let TotallyNotJson.1050 : U64 = CallByName Num.137 TotallyNotJson.1051 TotallyNotJson.1052;
let TotallyNotJson.1047 : List U8 = CallByName List.68 TotallyNotJson.1050;
let TotallyNotJson.1049 : U8 = 34i64;
let TotallyNotJson.1048 : List U8 = Array [TotallyNotJson.1049];
let TotallyNotJson.1046 : List U8 = CallByName List.8 TotallyNotJson.1047 TotallyNotJson.1048;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1046 TotallyNotJson.179;
let TotallyNotJson.1029 : {} = Struct {};
let TotallyNotJson.1026 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1029;
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;
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.1032 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1032;
let TotallyNotJson.1042 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1042;
case 92:
let TotallyNotJson.1033 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1033;
case 47:
let TotallyNotJson.1034 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1034;
case 8:
let TotallyNotJson.1036 : U8 = 98i64;
let TotallyNotJson.1035 : List U8 = Array [92i64, TotallyNotJson.1036];
ret TotallyNotJson.1035;
case 12:
let TotallyNotJson.1038 : U8 = 102i64;
let TotallyNotJson.1037 : List U8 = Array [92i64, TotallyNotJson.1038];
ret TotallyNotJson.1037;
case 10:
let TotallyNotJson.1040 : U8 = 110i64;
let TotallyNotJson.1039 : List U8 = Array [92i64, TotallyNotJson.1040];
ret TotallyNotJson.1039;
case 13:
let TotallyNotJson.1042 : U8 = 114i64;
let TotallyNotJson.1041 : List U8 = Array [92i64, TotallyNotJson.1042];
ret TotallyNotJson.1041;
case 9:
let TotallyNotJson.1044 : U8 = 114i64;
let TotallyNotJson.1043 : List U8 = Array [92i64, TotallyNotJson.1044];
let TotallyNotJson.1043 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1043;
default:
let TotallyNotJson.1045 : List U8 = Array [TotallyNotJson.186];
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.200):
let TotallyNotJson.971 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.200;
ret TotallyNotJson.971;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.1013 : {} = Struct {};
ret TotallyNotJson.1013;
procedure Test.0 ():
let Test.11 : Str = "foo";

View file

@ -18,6 +18,10 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Derived.1):
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;
@ -32,7 +36,7 @@ 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.201 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.202 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -46,10 +50,10 @@ procedure Encode.26 (Encode.105, Encode.106):
ret Encode.108;
procedure List.103 (List.487, List.488, List.489):
let List.649 : U64 = 0i64;
let List.650 : U64 = CallByName List.6 List.487;
let List.648 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.649 List.650;
ret List.648;
let List.650 : U64 = 0i64;
let List.651 : U64 = CallByName List.6 List.487;
let List.649 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.80 List.487 List.488 List.489 List.650 List.651;
ret List.649;
procedure List.18 (List.159, List.160, List.161):
let List.593 : U64 = 0i64;
@ -64,15 +68,15 @@ procedure List.18 (List.159, List.160, List.161):
ret List.604;
procedure List.26 (List.200, List.201, List.202):
let List.642 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.645 : U8 = 1i64;
let List.646 : U8 = GetTagId List.642;
let List.647 : Int1 = lowlevel Eq List.645 List.646;
if List.647 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.642;
let List.643 : [C {U64, Int1}, C {U64, Int1}] = CallByName List.103 List.200 List.201 List.202;
let List.646 : U8 = 1i64;
let List.647 : U8 = GetTagId List.643;
let List.648 : Int1 = lowlevel Eq List.646 List.647;
if List.648 then
let List.203 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.643;
ret List.203;
else
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.642;
let List.204 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.643;
ret List.204;
procedure List.4 (List.123, List.124):
@ -82,37 +86,37 @@ procedure List.4 (List.123, List.124):
ret List.589;
procedure List.49 (List.419, List.420):
let List.633 : U64 = StructAtIndex 1 List.420;
let List.634 : U64 = StructAtIndex 0 List.420;
let List.632 : List U8 = CallByName List.72 List.419 List.633 List.634;
ret List.632;
let List.634 : U64 = StructAtIndex 1 List.420;
let List.635 : U64 = StructAtIndex 0 List.420;
let List.633 : List U8 = CallByName List.72 List.419 List.634 List.635;
ret List.633;
procedure List.52 (List.434, List.435):
let List.436 : U64 = CallByName List.6 List.434;
joinpoint List.640 List.437:
let List.638 : U64 = 0i64;
let List.637 : {U64, U64} = Struct {List.437, List.638};
joinpoint List.641 List.437:
let List.639 : U64 = 0i64;
let List.638 : {U64, U64} = Struct {List.437, List.639};
inc List.434;
let List.438 : List U8 = CallByName List.49 List.434 List.637;
let List.636 : U64 = CallByName Num.75 List.436 List.437;
let List.631 : {U64, U64} = Struct {List.636, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.631;
let List.630 : {List U8, List U8} = Struct {List.438, List.439};
ret List.630;
let List.438 : List U8 = CallByName List.49 List.434 List.638;
let List.637 : U64 = CallByName Num.75 List.436 List.437;
let List.632 : {U64, U64} = Struct {List.637, List.437};
let List.439 : List U8 = CallByName List.49 List.434 List.632;
let List.631 : {List U8, List U8} = Struct {List.438, List.439};
ret List.631;
in
let List.641 : Int1 = CallByName Num.24 List.436 List.435;
if List.641 then
jump List.640 List.435;
let List.642 : Int1 = CallByName Num.24 List.436 List.435;
if List.642 then
jump List.641 List.435;
else
jump List.640 List.436;
jump List.641 List.436;
procedure List.6 (#Attr.2):
let List.625 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.625;
let List.626 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.626;
procedure List.6 (#Attr.2):
let List.627 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.627;
let List.628 : U64 = lowlevel ListLenU64 #Attr.2;
ret List.628;
procedure List.66 (#Attr.2, #Attr.3):
let List.602 : {Str, Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
@ -123,8 +127,8 @@ procedure List.66 (#Attr.2, #Attr.3):
ret List.614;
procedure List.68 (#Attr.2):
let List.629 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.629;
let List.630 : List U8 = lowlevel ListWithCapacity #Attr.2;
ret List.630;
procedure List.70 (#Attr.2, #Attr.3):
let List.576 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
@ -135,40 +139,40 @@ procedure List.71 (#Attr.2, #Attr.3):
ret List.574;
procedure List.72 (#Attr.2, #Attr.3, #Attr.4):
let List.635 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.635;
let List.636 : List U8 = lowlevel ListSublist #Attr.2 #Attr.3 #Attr.4;
ret List.636;
procedure List.8 (#Attr.2, #Attr.3):
let List.624 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.624;
let List.625 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.625;
procedure List.80 (#Derived_gen.20, #Derived_gen.21, #Derived_gen.22, #Derived_gen.23, #Derived_gen.24):
joinpoint List.651 List.490 List.491 List.492 List.493 List.494:
let List.653 : Int1 = CallByName Num.22 List.493 List.494;
if List.653 then
let List.662 : U8 = CallByName List.66 List.490 List.493;
let List.654 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.662;
let List.659 : U8 = 1i64;
let List.660 : U8 = GetTagId List.654;
let List.661 : Int1 = lowlevel Eq List.659 List.660;
if List.661 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.654;
let List.657 : U64 = 1i64;
let List.656 : U64 = CallByName Num.51 List.493 List.657;
jump List.651 List.490 List.495 List.492 List.656 List.494;
procedure List.80 (#Derived_gen.22, #Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_gen.26):
joinpoint List.652 List.490 List.491 List.492 List.493 List.494:
let List.654 : Int1 = CallByName Num.22 List.493 List.494;
if List.654 then
let List.663 : U8 = CallByName List.66 List.490 List.493;
let List.655 : [C {U64, Int1}, C {U64, Int1}] = CallByName TotallyNotJson.157 List.491 List.663;
let List.660 : U8 = 1i64;
let List.661 : U8 = GetTagId List.655;
let List.662 : Int1 = lowlevel Eq List.660 List.661;
if List.662 then
let List.495 : {U64, Int1} = UnionAtIndex (Id 1) (Index 0) List.655;
let List.658 : U64 = 1i64;
let List.657 : U64 = CallByName Num.51 List.493 List.658;
jump List.652 List.490 List.495 List.492 List.657 List.494;
else
dec List.490;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.654;
let List.658 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.658;
let List.496 : {U64, Int1} = UnionAtIndex (Id 0) (Index 0) List.655;
let List.659 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) List.496;
ret List.659;
else
dec List.490;
let List.652 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.652;
let List.653 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.653;
in
jump List.651 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22 #Derived_gen.23 #Derived_gen.24;
jump List.652 #Derived_gen.22 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26;
procedure List.91 (#Derived_gen.25, #Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_gen.29):
procedure List.91 (#Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20, #Derived_gen.21):
joinpoint List.607 List.162 List.163 List.164 List.165 List.166:
let List.609 : Int1 = CallByName Num.22 List.165 List.166;
if List.609 then
@ -181,15 +185,15 @@ procedure List.91 (#Derived_gen.25, #Derived_gen.26, #Derived_gen.27, #Derived_g
dec List.162;
ret List.163;
in
jump List.607 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29;
jump List.607 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21;
procedure List.91 (#Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_gen.33, #Derived_gen.34):
procedure List.91 (#Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_gen.30, #Derived_gen.31):
joinpoint List.595 List.162 List.163 List.164 List.165 List.166:
let List.597 : Int1 = CallByName Num.22 List.165 List.166;
if List.597 then
let List.601 : {Str, Str} = CallByName List.66 List.162 List.165;
inc List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.203 List.163 List.601;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.204 List.163 List.601;
let List.600 : U64 = 1i64;
let List.599 : U64 = CallByName Num.51 List.165 List.600;
jump List.595 List.162 List.167 List.164 List.599 List.166;
@ -197,43 +201,43 @@ procedure List.91 (#Derived_gen.30, #Derived_gen.31, #Derived_gen.32, #Derived_g
dec List.162;
ret List.163;
in
jump List.595 #Derived_gen.30 #Derived_gen.31 #Derived_gen.32 #Derived_gen.33 #Derived_gen.34;
jump List.595 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31;
procedure Num.127 (#Attr.2):
let Num.280 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.280;
procedure Num.137 (#Attr.2, #Attr.3):
let Num.285 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.285;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.284 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.284;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.281 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.281;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.286 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
let Num.286 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.286;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.285 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.285;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.282 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.282;
procedure Num.21 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.287;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.292 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.292;
let Num.293 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.293;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.294 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.294;
let Num.295 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.295;
procedure Num.51 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.289;
let Num.290 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3;
ret Num.290;
procedure Num.75 (#Attr.2, #Attr.3):
let Num.293 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.293;
let Num.294 : U64 = lowlevel NumSubWrap #Attr.2 #Attr.3;
ret Num.294;
procedure Str.12 (#Attr.2):
let Str.241 : List U8 = lowlevel StrToUtf8 #Attr.2;
@ -259,227 +263,240 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1009, TotallyNotJson.149):
let TotallyNotJson.1012 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1011 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1012;
ret TotallyNotJson.1011;
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 TotallyNotJson.157 (TotallyNotJson.1060, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1060;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1060;
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.1063 : Int1 = false;
let TotallyNotJson.1062 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1063};
let TotallyNotJson.1061 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1062;
ret TotallyNotJson.1061;
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.1066 : Int1 = false;
let TotallyNotJson.1065 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1066};
let TotallyNotJson.1064 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1065;
ret TotallyNotJson.1064;
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.1069 : Int1 = false;
let TotallyNotJson.1068 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1069};
let TotallyNotJson.1067 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1068;
ret TotallyNotJson.1067;
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.1072 : Int1 = false;
let TotallyNotJson.1071 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1072};
let TotallyNotJson.1070 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1071;
ret TotallyNotJson.1070;
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.1075 : Int1 = false;
let TotallyNotJson.1074 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1075};
let TotallyNotJson.1073 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1074;
ret TotallyNotJson.1073;
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.1078 : Int1 = false;
let TotallyNotJson.1077 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1078};
let TotallyNotJson.1076 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1077;
ret TotallyNotJson.1076;
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.1081 : Int1 = false;
let TotallyNotJson.1080 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1081};
let TotallyNotJson.1079 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1080;
ret TotallyNotJson.1079;
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.1084 : Int1 = false;
let TotallyNotJson.1083 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1084};
let TotallyNotJson.1082 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1083;
ret TotallyNotJson.1082;
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.1088 : U64 = 1i64;
let TotallyNotJson.1087 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1088;
let TotallyNotJson.1086 : {U64, Int1} = Struct {TotallyNotJson.1087, TotallyNotJson.159};
let TotallyNotJson.1085 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1086;
ret TotallyNotJson.1085;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1031 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1030 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1031;
ret TotallyNotJson.1030;
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 TotallyNotJson.201 (TotallyNotJson.202, TotallyNotJson.973, TotallyNotJson.200):
let TotallyNotJson.1006 : I64 = 123i64;
let TotallyNotJson.1005 : U8 = CallByName Num.127 TotallyNotJson.1006;
let TotallyNotJson.204 : List U8 = CallByName List.4 TotallyNotJson.202 TotallyNotJson.1005;
let TotallyNotJson.1004 : U64 = CallByName List.6 TotallyNotJson.200;
let TotallyNotJson.981 : {List U8, U64} = Struct {TotallyNotJson.204, TotallyNotJson.1004};
let TotallyNotJson.982 : {} = Struct {};
let TotallyNotJson.980 : {List U8, U64} = CallByName List.18 TotallyNotJson.200 TotallyNotJson.981 TotallyNotJson.982;
let TotallyNotJson.206 : List U8 = StructAtIndex 0 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.206 TotallyNotJson.978;
ret TotallyNotJson.977;
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 TotallyNotJson.203 (TotallyNotJson.975, TotallyNotJson.976):
let TotallyNotJson.209 : Str = StructAtIndex 0 TotallyNotJson.976;
let TotallyNotJson.210 : Str = StructAtIndex 1 TotallyNotJson.976;
let TotallyNotJson.207 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.208 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.1003 : I64 = 34i64;
let TotallyNotJson.1002 : U8 = CallByName Num.127 TotallyNotJson.1003;
let TotallyNotJson.1000 : List U8 = CallByName List.4 TotallyNotJson.207 TotallyNotJson.1002;
let TotallyNotJson.1001 : List U8 = CallByName Str.12 TotallyNotJson.209;
let TotallyNotJson.997 : List U8 = CallByName List.8 TotallyNotJson.1000 TotallyNotJson.1001;
let TotallyNotJson.999 : I64 = 34i64;
let TotallyNotJson.998 : U8 = CallByName Num.127 TotallyNotJson.999;
let TotallyNotJson.994 : List U8 = CallByName List.4 TotallyNotJson.997 TotallyNotJson.998;
let TotallyNotJson.996 : I64 = 58i64;
let TotallyNotJson.995 : U8 = CallByName Num.127 TotallyNotJson.996;
let TotallyNotJson.992 : List U8 = CallByName List.4 TotallyNotJson.994 TotallyNotJson.995;
let TotallyNotJson.993 : {} = Struct {};
let TotallyNotJson.212 : List U8 = CallByName Encode.24 TotallyNotJson.992 TotallyNotJson.210 TotallyNotJson.993;
joinpoint TotallyNotJson.987 TotallyNotJson.213:
let TotallyNotJson.985 : U64 = 1i64;
let TotallyNotJson.984 : U64 = CallByName Num.20 TotallyNotJson.208 TotallyNotJson.985;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.213, TotallyNotJson.984};
ret TotallyNotJson.983;
in
let TotallyNotJson.991 : U64 = 1i64;
let TotallyNotJson.988 : Int1 = CallByName Num.24 TotallyNotJson.208 TotallyNotJson.991;
if TotallyNotJson.988 then
let TotallyNotJson.990 : I64 = 44i64;
let TotallyNotJson.989 : U8 = CallByName Num.127 TotallyNotJson.990;
let TotallyNotJson.986 : List U8 = CallByName List.4 TotallyNotJson.212 TotallyNotJson.989;
jump TotallyNotJson.987 TotallyNotJson.986;
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
jump TotallyNotJson.987 TotallyNotJson.212;
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 TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1091 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1091;
let TotallyNotJson.1101 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1101;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1089 : U64 = 0i64;
let TotallyNotJson.1090 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1089, TotallyNotJson.1090};
let TotallyNotJson.1059 : {} = Struct {};
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.1059;
let TotallyNotJson.1013 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1057 : Int1 = true;
let TotallyNotJson.1058 : Int1 = lowlevel Eq TotallyNotJson.1057 TotallyNotJson.1013;
if TotallyNotJson.1058 then
let TotallyNotJson.1023 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1024 : U64 = 2i64;
let TotallyNotJson.1022 : U64 = CallByName Num.19 TotallyNotJson.1023 TotallyNotJson.1024;
let TotallyNotJson.1019 : List U8 = CallByName List.68 TotallyNotJson.1022;
let TotallyNotJson.1021 : U8 = 34i64;
let TotallyNotJson.1020 : List U8 = Array [TotallyNotJson.1021];
let TotallyNotJson.1018 : List U8 = CallByName List.8 TotallyNotJson.1019 TotallyNotJson.1020;
let TotallyNotJson.1015 : List U8 = CallByName List.8 TotallyNotJson.1018 TotallyNotJson.153;
let TotallyNotJson.1017 : U8 = 34i64;
let TotallyNotJson.1016 : List U8 = Array [TotallyNotJson.1017];
let TotallyNotJson.1014 : List U8 = CallByName List.8 TotallyNotJson.1015 TotallyNotJson.1016;
ret TotallyNotJson.1014;
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.1056 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1055 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1056;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1055;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1055;
let TotallyNotJson.1053 : U64 = CallByName List.6 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.1054 : U64 = 120i64;
let TotallyNotJson.1051 : U64 = CallByName Num.21 TotallyNotJson.1053 TotallyNotJson.1054;
let TotallyNotJson.1052 : U64 = 100i64;
let TotallyNotJson.1050 : U64 = CallByName Num.137 TotallyNotJson.1051 TotallyNotJson.1052;
let TotallyNotJson.1047 : List U8 = CallByName List.68 TotallyNotJson.1050;
let TotallyNotJson.1049 : U8 = 34i64;
let TotallyNotJson.1048 : List U8 = Array [TotallyNotJson.1049];
let TotallyNotJson.1046 : List U8 = CallByName List.8 TotallyNotJson.1047 TotallyNotJson.1048;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1046 TotallyNotJson.179;
let TotallyNotJson.1029 : {} = Struct {};
let TotallyNotJson.1026 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1029;
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;
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.1032 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1032;
let TotallyNotJson.1042 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1042;
case 92:
let TotallyNotJson.1033 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1033;
case 47:
let TotallyNotJson.1034 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1034;
case 8:
let TotallyNotJson.1036 : U8 = 98i64;
let TotallyNotJson.1035 : List U8 = Array [92i64, TotallyNotJson.1036];
ret TotallyNotJson.1035;
case 12:
let TotallyNotJson.1038 : U8 = 102i64;
let TotallyNotJson.1037 : List U8 = Array [92i64, TotallyNotJson.1038];
ret TotallyNotJson.1037;
case 10:
let TotallyNotJson.1040 : U8 = 110i64;
let TotallyNotJson.1039 : List U8 = Array [92i64, TotallyNotJson.1040];
ret TotallyNotJson.1039;
case 13:
let TotallyNotJson.1042 : U8 = 114i64;
let TotallyNotJson.1041 : List U8 = Array [92i64, TotallyNotJson.1042];
ret TotallyNotJson.1041;
case 9:
let TotallyNotJson.1044 : U8 = 114i64;
let TotallyNotJson.1043 : List U8 = Array [92i64, TotallyNotJson.1044];
let TotallyNotJson.1043 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1043;
default:
let TotallyNotJson.1045 : List U8 = Array [TotallyNotJson.186];
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.200):
let TotallyNotJson.971 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.200;
ret TotallyNotJson.971;
procedure TotallyNotJson.29 (TotallyNotJson.201):
let TotallyNotJson.974 : List {Str, Str} = CallByName Encode.23 TotallyNotJson.201;
ret TotallyNotJson.974;
procedure TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.1013 : {} = Struct {};
ret TotallyNotJson.1013;
procedure Test.0 ():
let Test.11 : Str = "foo";

View file

@ -173,175 +173,175 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.973, TotallyNotJson.149):
let TotallyNotJson.976 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.975 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.976;
ret TotallyNotJson.975;
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 TotallyNotJson.157 (TotallyNotJson.1024, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1024;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1024;
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.1027 : Int1 = false;
let TotallyNotJson.1026 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1027};
let TotallyNotJson.1025 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1026;
ret TotallyNotJson.1025;
case 92:
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 47:
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 8:
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 12:
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 10:
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 13:
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 9:
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;
default:
let TotallyNotJson.1052 : U64 = 1i64;
let TotallyNotJson.1051 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1052;
let TotallyNotJson.1050 : {U64, Int1} = Struct {TotallyNotJson.1051, TotallyNotJson.159};
let TotallyNotJson.1049 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1050;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.995 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.994 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.995;
ret TotallyNotJson.994;
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 TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.971 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.971;
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.1053 : U64 = 0i64;
let TotallyNotJson.1054 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1053, TotallyNotJson.1054};
let TotallyNotJson.1023 : {} = Struct {};
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.1023;
let TotallyNotJson.977 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1021 : Int1 = true;
let TotallyNotJson.1022 : Int1 = lowlevel Eq TotallyNotJson.1021 TotallyNotJson.977;
if TotallyNotJson.1022 then
let TotallyNotJson.987 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.988 : U64 = 2i64;
let TotallyNotJson.986 : U64 = CallByName Num.19 TotallyNotJson.987 TotallyNotJson.988;
let TotallyNotJson.983 : List U8 = CallByName List.68 TotallyNotJson.986;
let TotallyNotJson.985 : U8 = 34i64;
let TotallyNotJson.984 : List U8 = Array [TotallyNotJson.985];
let TotallyNotJson.982 : List U8 = CallByName List.8 TotallyNotJson.983 TotallyNotJson.984;
let TotallyNotJson.979 : List U8 = CallByName List.8 TotallyNotJson.982 TotallyNotJson.153;
let TotallyNotJson.981 : U8 = 34i64;
let TotallyNotJson.980 : List U8 = Array [TotallyNotJson.981];
let TotallyNotJson.978 : List U8 = CallByName List.8 TotallyNotJson.979 TotallyNotJson.980;
ret TotallyNotJson.978;
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.1020 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1019 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1020;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1019;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1019;
let TotallyNotJson.1017 : U64 = CallByName List.6 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.1018 : U64 = 120i64;
let TotallyNotJson.1015 : U64 = CallByName Num.21 TotallyNotJson.1017 TotallyNotJson.1018;
let TotallyNotJson.1016 : U64 = 100i64;
let TotallyNotJson.1014 : U64 = CallByName Num.137 TotallyNotJson.1015 TotallyNotJson.1016;
let TotallyNotJson.1011 : List U8 = CallByName List.68 TotallyNotJson.1014;
let TotallyNotJson.1013 : U8 = 34i64;
let TotallyNotJson.1012 : List U8 = Array [TotallyNotJson.1013];
let TotallyNotJson.1010 : List U8 = CallByName List.8 TotallyNotJson.1011 TotallyNotJson.1012;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1010 TotallyNotJson.179;
let TotallyNotJson.993 : {} = Struct {};
let TotallyNotJson.990 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.993;
let TotallyNotJson.992 : U8 = 34i64;
let TotallyNotJson.991 : List U8 = Array [TotallyNotJson.992];
let TotallyNotJson.989 : List U8 = CallByName List.8 TotallyNotJson.990 TotallyNotJson.991;
ret TotallyNotJson.989;
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.996 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.996;
case 92:
let TotallyNotJson.997 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.997;
case 47:
let TotallyNotJson.998 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.998;
case 8:
let TotallyNotJson.1000 : U8 = 98i64;
let TotallyNotJson.999 : List U8 = Array [92i64, TotallyNotJson.1000];
let TotallyNotJson.999 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.999;
case 12:
let TotallyNotJson.1002 : U8 = 102i64;
let TotallyNotJson.1001 : List U8 = Array [92i64, TotallyNotJson.1002];
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.1004 : U8 = 110i64;
let TotallyNotJson.1003 : List U8 = Array [92i64, TotallyNotJson.1004];
ret TotallyNotJson.1003;
let TotallyNotJson.1007 : U8 = 110i64;
let TotallyNotJson.1006 : List U8 = Array [92i64, TotallyNotJson.1007];
ret TotallyNotJson.1006;
case 13:
let TotallyNotJson.1006 : U8 = 114i64;
let TotallyNotJson.1005 : List U8 = Array [92i64, TotallyNotJson.1006];
ret TotallyNotJson.1005;
let TotallyNotJson.1009 : U8 = 114i64;
let TotallyNotJson.1008 : List U8 = Array [92i64, TotallyNotJson.1009];
ret TotallyNotJson.1008;
case 9:
let TotallyNotJson.1008 : U8 = 114i64;
let TotallyNotJson.1007 : List U8 = Array [92i64, TotallyNotJson.1008];
ret TotallyNotJson.1007;
let TotallyNotJson.1011 : U8 = 114i64;
let TotallyNotJson.1010 : List U8 = Array [92i64, TotallyNotJson.1011];
ret TotallyNotJson.1010;
default:
let TotallyNotJson.1009 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1009;
let TotallyNotJson.1012 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1012;
procedure TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.0 ():
let Test.9 : Str = "abc";

View file

@ -27,7 +27,7 @@ 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.228 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -169,7 +169,7 @@ procedure List.91 (#Derived_gen.10, #Derived_gen.11, #Derived_gen.12, #Derived_g
if List.603 then
let List.607 : Str = CallByName List.66 List.162 List.165;
inc List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.230 List.163 List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.233 List.163 List.607;
let List.606 : U64 = 1i64;
let List.605 : U64 = CallByName Num.51 List.165 List.606;
jump List.601 List.162 List.167 List.164 List.605 List.166;
@ -254,234 +254,234 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1014, TotallyNotJson.149):
let TotallyNotJson.1017 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1016 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1017;
ret TotallyNotJson.1016;
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 TotallyNotJson.157 (TotallyNotJson.1065, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1065;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1065;
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.1068 : Int1 = false;
let TotallyNotJson.1067 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1068};
let TotallyNotJson.1066 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1067;
ret TotallyNotJson.1066;
case 92:
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 47:
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 8:
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 12:
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 10:
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 13:
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 9:
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;
default:
let TotallyNotJson.1093 : U64 = 1i64;
let TotallyNotJson.1092 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1093;
let TotallyNotJson.1091 : {U64, Int1} = Struct {TotallyNotJson.1092, TotallyNotJson.159};
let TotallyNotJson.1090 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1091;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1036 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1035 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1036;
ret TotallyNotJson.1035;
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 TotallyNotJson.228 (TotallyNotJson.229, TotallyNotJson.973, #Attr.12):
let TotallyNotJson.227 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.226 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1011 : I64 = 123i64;
let TotallyNotJson.1010 : U8 = CallByName Num.127 TotallyNotJson.1011;
let TotallyNotJson.1007 : List U8 = CallByName List.4 TotallyNotJson.229 TotallyNotJson.1010;
let TotallyNotJson.1009 : I64 = 34i64;
let TotallyNotJson.1008 : U8 = CallByName Num.127 TotallyNotJson.1009;
let TotallyNotJson.1005 : List U8 = CallByName List.4 TotallyNotJson.1007 TotallyNotJson.1008;
let TotallyNotJson.1006 : List U8 = CallByName Str.12 TotallyNotJson.226;
let TotallyNotJson.1002 : List U8 = CallByName List.8 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 34i64;
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 = 58i64;
let TotallyNotJson.1001 : I64 = 91i64;
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 = 91i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.231 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.995 : U64 = CallByName List.6 TotallyNotJson.227;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.231, TotallyNotJson.995};
let TotallyNotJson.984 : {} = Struct {};
let TotallyNotJson.982 : {List U8, U64} = CallByName List.18 TotallyNotJson.227 TotallyNotJson.983 TotallyNotJson.984;
let TotallyNotJson.233 : List U8 = StructAtIndex 0 TotallyNotJson.982;
let TotallyNotJson.981 : I64 = 93i64;
let TotallyNotJson.980 : U8 = CallByName Num.127 TotallyNotJson.981;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.233 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.976 : List U8 = CallByName List.4 TotallyNotJson.977 TotallyNotJson.978;
ret TotallyNotJson.976;
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 TotallyNotJson.230 (TotallyNotJson.975, TotallyNotJson.236):
let TotallyNotJson.234 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.235 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.994 : {} = Struct {};
let TotallyNotJson.237 : List U8 = CallByName Encode.24 TotallyNotJson.234 TotallyNotJson.236 TotallyNotJson.994;
joinpoint TotallyNotJson.989 TotallyNotJson.238:
let TotallyNotJson.987 : U64 = 1i64;
let TotallyNotJson.986 : U64 = CallByName Num.20 TotallyNotJson.235 TotallyNotJson.987;
let TotallyNotJson.985 : {List U8, U64} = Struct {TotallyNotJson.238, TotallyNotJson.986};
ret TotallyNotJson.985;
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.993 : U64 = 1i64;
let TotallyNotJson.990 : Int1 = CallByName Num.24 TotallyNotJson.235 TotallyNotJson.993;
if TotallyNotJson.990 then
let TotallyNotJson.992 : I64 = 44i64;
let TotallyNotJson.991 : U8 = CallByName Num.127 TotallyNotJson.992;
let TotallyNotJson.988 : List U8 = CallByName List.4 TotallyNotJson.237 TotallyNotJson.991;
jump TotallyNotJson.989 TotallyNotJson.988;
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.989 TotallyNotJson.237;
jump TotallyNotJson.992 TotallyNotJson.240;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1012 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1012;
let TotallyNotJson.1015 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1015;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1094 : U64 = 0i64;
let TotallyNotJson.1095 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1094, TotallyNotJson.1095};
let TotallyNotJson.1064 : {} = Struct {};
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.1064;
let TotallyNotJson.1018 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1062 : Int1 = true;
let TotallyNotJson.1063 : Int1 = lowlevel Eq TotallyNotJson.1062 TotallyNotJson.1018;
if TotallyNotJson.1063 then
let TotallyNotJson.1028 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1029 : U64 = 2i64;
let TotallyNotJson.1027 : U64 = CallByName Num.19 TotallyNotJson.1028 TotallyNotJson.1029;
let TotallyNotJson.1024 : List U8 = CallByName List.68 TotallyNotJson.1027;
let TotallyNotJson.1026 : U8 = 34i64;
let TotallyNotJson.1025 : List U8 = Array [TotallyNotJson.1026];
let TotallyNotJson.1023 : List U8 = CallByName List.8 TotallyNotJson.1024 TotallyNotJson.1025;
let TotallyNotJson.1020 : List U8 = CallByName List.8 TotallyNotJson.1023 TotallyNotJson.153;
let TotallyNotJson.1022 : U8 = 34i64;
let TotallyNotJson.1021 : List U8 = Array [TotallyNotJson.1022];
let TotallyNotJson.1019 : List U8 = CallByName List.8 TotallyNotJson.1020 TotallyNotJson.1021;
ret TotallyNotJson.1019;
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.1061 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1060 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1061;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1060;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1060;
let TotallyNotJson.1058 : U64 = CallByName List.6 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.1059 : U64 = 120i64;
let TotallyNotJson.1056 : U64 = CallByName Num.21 TotallyNotJson.1058 TotallyNotJson.1059;
let TotallyNotJson.1057 : U64 = 100i64;
let TotallyNotJson.1055 : U64 = CallByName Num.137 TotallyNotJson.1056 TotallyNotJson.1057;
let TotallyNotJson.1052 : List U8 = CallByName List.68 TotallyNotJson.1055;
let TotallyNotJson.1054 : U8 = 34i64;
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.1054];
let TotallyNotJson.1051 : List U8 = CallByName List.8 TotallyNotJson.1052 TotallyNotJson.1053;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1051 TotallyNotJson.179;
let TotallyNotJson.1034 : {} = Struct {};
let TotallyNotJson.1031 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1034;
let TotallyNotJson.1033 : U8 = 34i64;
let TotallyNotJson.1032 : List U8 = Array [TotallyNotJson.1033];
let TotallyNotJson.1030 : List U8 = CallByName List.8 TotallyNotJson.1031 TotallyNotJson.1032;
ret TotallyNotJson.1030;
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 TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1037 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1037;
case 92:
let TotallyNotJson.1038 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1038;
case 47:
let TotallyNotJson.1039 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1039;
case 8:
let TotallyNotJson.1041 : U8 = 98i64;
let TotallyNotJson.1040 : List U8 = Array [92i64, TotallyNotJson.1041];
let TotallyNotJson.1040 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1040;
case 12:
let TotallyNotJson.1043 : U8 = 102i64;
let TotallyNotJson.1042 : List U8 = Array [92i64, TotallyNotJson.1043];
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.1045 : U8 = 110i64;
let TotallyNotJson.1044 : List U8 = Array [92i64, TotallyNotJson.1045];
ret TotallyNotJson.1044;
let TotallyNotJson.1048 : U8 = 110i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 13:
let TotallyNotJson.1047 : U8 = 114i64;
let TotallyNotJson.1046 : List U8 = Array [92i64, TotallyNotJson.1047];
ret TotallyNotJson.1046;
let TotallyNotJson.1050 : U8 = 114i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 9:
let TotallyNotJson.1049 : U8 = 114i64;
let TotallyNotJson.1048 : List U8 = Array [92i64, TotallyNotJson.1049];
ret TotallyNotJson.1048;
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
default:
let TotallyNotJson.1050 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1050;
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1053;
procedure TotallyNotJson.31 (TotallyNotJson.226, TotallyNotJson.227):
let TotallyNotJson.972 : {Str, List Str} = Struct {TotallyNotJson.226, TotallyNotJson.227};
let TotallyNotJson.971 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.972;
ret TotallyNotJson.971;
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 TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.0 ():
let Test.12 : Str = "foo";

View file

@ -30,7 +30,7 @@ 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.228 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -140,7 +140,7 @@ procedure List.8 (#Attr.2, #Attr.3):
let List.633 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.633;
procedure List.80 (#Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_gen.30, #Derived_gen.31):
procedure List.80 (#Derived_gen.24, #Derived_gen.25, #Derived_gen.26, #Derived_gen.27, #Derived_gen.28):
joinpoint List.657 List.490 List.491 List.492 List.493 List.494:
let List.659 : Int1 = CallByName Num.22 List.493 List.494;
if List.659 then
@ -164,7 +164,7 @@ procedure List.80 (#Derived_gen.27, #Derived_gen.28, #Derived_gen.29, #Derived_g
let List.658 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.658;
in
jump List.657 #Derived_gen.27 #Derived_gen.28 #Derived_gen.29 #Derived_gen.30 #Derived_gen.31;
jump List.657 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26 #Derived_gen.27 #Derived_gen.28;
procedure List.91 (#Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17, #Derived_gen.18):
joinpoint List.601 List.162 List.163 List.164 List.165 List.166:
@ -172,7 +172,7 @@ procedure List.91 (#Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_g
if List.603 then
let List.607 : Str = CallByName List.66 List.162 List.165;
inc List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.230 List.163 List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.233 List.163 List.607;
let List.606 : U64 = 1i64;
let List.605 : U64 = CallByName Num.51 List.165 List.606;
jump List.601 List.162 List.167 List.164 List.605 List.166;
@ -182,7 +182,7 @@ procedure List.91 (#Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_g
in
jump List.601 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18;
procedure List.91 (#Derived_gen.22, #Derived_gen.23, #Derived_gen.24, #Derived_gen.25, #Derived_gen.26):
procedure List.91 (#Derived_gen.19, #Derived_gen.20, #Derived_gen.21, #Derived_gen.22, #Derived_gen.23):
joinpoint List.613 List.162 List.163 List.164 List.165 List.166:
let List.615 : Int1 = CallByName Num.22 List.165 List.166;
if List.615 then
@ -195,7 +195,7 @@ procedure List.91 (#Derived_gen.22, #Derived_gen.23, #Derived_gen.24, #Derived_g
dec List.162;
ret List.163;
in
jump List.613 #Derived_gen.22 #Derived_gen.23 #Derived_gen.24 #Derived_gen.25 #Derived_gen.26;
jump List.613 #Derived_gen.19 #Derived_gen.20 #Derived_gen.21 #Derived_gen.22 #Derived_gen.23;
procedure Num.127 (#Attr.2):
let Num.282 : U8 = lowlevel NumIntCast #Attr.2;
@ -257,234 +257,234 @@ procedure Str.9 (Str.67):
let Str.232 : [C {U64, U8}, C Str] = TagId(0) Str.233;
ret Str.232;
procedure TotallyNotJson.150 (TotallyNotJson.151, TotallyNotJson.1014, TotallyNotJson.149):
let TotallyNotJson.1017 : List U8 = CallByName TotallyNotJson.26 TotallyNotJson.149;
let TotallyNotJson.1016 : List U8 = CallByName List.8 TotallyNotJson.151 TotallyNotJson.1017;
ret TotallyNotJson.1016;
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 TotallyNotJson.157 (TotallyNotJson.1065, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1065;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1065;
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.1068 : Int1 = false;
let TotallyNotJson.1067 : {U64, Int1} = Struct {TotallyNotJson.158, TotallyNotJson.1068};
let TotallyNotJson.1066 : [C {U64, Int1}, C {U64, Int1}] = TagId(0) TotallyNotJson.1067;
ret TotallyNotJson.1066;
case 92:
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 47:
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 8:
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 12:
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 10:
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 13:
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 9:
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;
default:
let TotallyNotJson.1093 : U64 = 1i64;
let TotallyNotJson.1092 : U64 = CallByName Num.19 TotallyNotJson.158 TotallyNotJson.1093;
let TotallyNotJson.1091 : {U64, Int1} = Struct {TotallyNotJson.1092, TotallyNotJson.159};
let TotallyNotJson.1090 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) TotallyNotJson.1091;
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 TotallyNotJson.183 (TotallyNotJson.184, TotallyNotJson.185):
let TotallyNotJson.1036 : List U8 = CallByName TotallyNotJson.27 TotallyNotJson.185;
let TotallyNotJson.1035 : List U8 = CallByName List.8 TotallyNotJson.184 TotallyNotJson.1036;
ret TotallyNotJson.1035;
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 TotallyNotJson.228 (TotallyNotJson.229, TotallyNotJson.973, #Attr.12):
let TotallyNotJson.227 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.226 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1011 : I64 = 123i64;
let TotallyNotJson.1010 : U8 = CallByName Num.127 TotallyNotJson.1011;
let TotallyNotJson.1007 : List U8 = CallByName List.4 TotallyNotJson.229 TotallyNotJson.1010;
let TotallyNotJson.1009 : I64 = 34i64;
let TotallyNotJson.1008 : U8 = CallByName Num.127 TotallyNotJson.1009;
let TotallyNotJson.1005 : List U8 = CallByName List.4 TotallyNotJson.1007 TotallyNotJson.1008;
let TotallyNotJson.1006 : List U8 = CallByName Str.12 TotallyNotJson.226;
let TotallyNotJson.1002 : List U8 = CallByName List.8 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 34i64;
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 = 58i64;
let TotallyNotJson.1001 : I64 = 91i64;
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 = 91i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.231 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.995 : U64 = CallByName List.6 TotallyNotJson.227;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.231, TotallyNotJson.995};
let TotallyNotJson.984 : {} = Struct {};
let TotallyNotJson.982 : {List U8, U64} = CallByName List.18 TotallyNotJson.227 TotallyNotJson.983 TotallyNotJson.984;
let TotallyNotJson.233 : List U8 = StructAtIndex 0 TotallyNotJson.982;
let TotallyNotJson.981 : I64 = 93i64;
let TotallyNotJson.980 : U8 = CallByName Num.127 TotallyNotJson.981;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.233 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.976 : List U8 = CallByName List.4 TotallyNotJson.977 TotallyNotJson.978;
ret TotallyNotJson.976;
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 TotallyNotJson.230 (TotallyNotJson.975, TotallyNotJson.236):
let TotallyNotJson.234 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.235 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.994 : {} = Struct {};
let TotallyNotJson.237 : List U8 = CallByName Encode.24 TotallyNotJson.234 TotallyNotJson.236 TotallyNotJson.994;
joinpoint TotallyNotJson.989 TotallyNotJson.238:
let TotallyNotJson.987 : U64 = 1i64;
let TotallyNotJson.986 : U64 = CallByName Num.20 TotallyNotJson.235 TotallyNotJson.987;
let TotallyNotJson.985 : {List U8, U64} = Struct {TotallyNotJson.238, TotallyNotJson.986};
ret TotallyNotJson.985;
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.993 : U64 = 1i64;
let TotallyNotJson.990 : Int1 = CallByName Num.24 TotallyNotJson.235 TotallyNotJson.993;
if TotallyNotJson.990 then
let TotallyNotJson.992 : I64 = 44i64;
let TotallyNotJson.991 : U8 = CallByName Num.127 TotallyNotJson.992;
let TotallyNotJson.988 : List U8 = CallByName List.4 TotallyNotJson.237 TotallyNotJson.991;
jump TotallyNotJson.989 TotallyNotJson.988;
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.989 TotallyNotJson.237;
jump TotallyNotJson.992 TotallyNotJson.240;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1096 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1096;
let TotallyNotJson.1099 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1099;
procedure TotallyNotJson.26 (TotallyNotJson.152):
let TotallyNotJson.153 : List U8 = CallByName Str.12 TotallyNotJson.152;
let TotallyNotJson.1094 : U64 = 0i64;
let TotallyNotJson.1095 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1094, TotallyNotJson.1095};
let TotallyNotJson.1064 : {} = Struct {};
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.1064;
let TotallyNotJson.1018 : Int1 = StructAtIndex 1 TotallyNotJson.155;
let TotallyNotJson.1062 : Int1 = true;
let TotallyNotJson.1063 : Int1 = lowlevel Eq TotallyNotJson.1062 TotallyNotJson.1018;
if TotallyNotJson.1063 then
let TotallyNotJson.1028 : U64 = CallByName List.6 TotallyNotJson.153;
let TotallyNotJson.1029 : U64 = 2i64;
let TotallyNotJson.1027 : U64 = CallByName Num.19 TotallyNotJson.1028 TotallyNotJson.1029;
let TotallyNotJson.1024 : List U8 = CallByName List.68 TotallyNotJson.1027;
let TotallyNotJson.1026 : U8 = 34i64;
let TotallyNotJson.1025 : List U8 = Array [TotallyNotJson.1026];
let TotallyNotJson.1023 : List U8 = CallByName List.8 TotallyNotJson.1024 TotallyNotJson.1025;
let TotallyNotJson.1020 : List U8 = CallByName List.8 TotallyNotJson.1023 TotallyNotJson.153;
let TotallyNotJson.1022 : U8 = 34i64;
let TotallyNotJson.1021 : List U8 = Array [TotallyNotJson.1022];
let TotallyNotJson.1019 : List U8 = CallByName List.8 TotallyNotJson.1020 TotallyNotJson.1021;
ret TotallyNotJson.1019;
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.1061 : U64 = StructAtIndex 0 TotallyNotJson.155;
let TotallyNotJson.1060 : {List U8, List U8} = CallByName List.52 TotallyNotJson.153 TotallyNotJson.1061;
let TotallyNotJson.179 : List U8 = StructAtIndex 0 TotallyNotJson.1060;
let TotallyNotJson.181 : List U8 = StructAtIndex 1 TotallyNotJson.1060;
let TotallyNotJson.1058 : U64 = CallByName List.6 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.1059 : U64 = 120i64;
let TotallyNotJson.1056 : U64 = CallByName Num.21 TotallyNotJson.1058 TotallyNotJson.1059;
let TotallyNotJson.1057 : U64 = 100i64;
let TotallyNotJson.1055 : U64 = CallByName Num.137 TotallyNotJson.1056 TotallyNotJson.1057;
let TotallyNotJson.1052 : List U8 = CallByName List.68 TotallyNotJson.1055;
let TotallyNotJson.1054 : U8 = 34i64;
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.1054];
let TotallyNotJson.1051 : List U8 = CallByName List.8 TotallyNotJson.1052 TotallyNotJson.1053;
let TotallyNotJson.182 : List U8 = CallByName List.8 TotallyNotJson.1051 TotallyNotJson.179;
let TotallyNotJson.1034 : {} = Struct {};
let TotallyNotJson.1031 : List U8 = CallByName List.18 TotallyNotJson.181 TotallyNotJson.182 TotallyNotJson.1034;
let TotallyNotJson.1033 : U8 = 34i64;
let TotallyNotJson.1032 : List U8 = Array [TotallyNotJson.1033];
let TotallyNotJson.1030 : List U8 = CallByName List.8 TotallyNotJson.1031 TotallyNotJson.1032;
ret TotallyNotJson.1030;
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 TotallyNotJson.27 (TotallyNotJson.186):
switch TotallyNotJson.186:
case 34:
let TotallyNotJson.1037 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1037;
case 92:
let TotallyNotJson.1038 : List U8 = Array [92i64, 92i64];
ret TotallyNotJson.1038;
case 47:
let TotallyNotJson.1039 : List U8 = Array [92i64, 47i64];
ret TotallyNotJson.1039;
case 8:
let TotallyNotJson.1041 : U8 = 98i64;
let TotallyNotJson.1040 : List U8 = Array [92i64, TotallyNotJson.1041];
let TotallyNotJson.1040 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1040;
case 12:
let TotallyNotJson.1043 : U8 = 102i64;
let TotallyNotJson.1042 : List U8 = Array [92i64, TotallyNotJson.1043];
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.1045 : U8 = 110i64;
let TotallyNotJson.1044 : List U8 = Array [92i64, TotallyNotJson.1045];
ret TotallyNotJson.1044;
let TotallyNotJson.1048 : U8 = 110i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
case 13:
let TotallyNotJson.1047 : U8 = 114i64;
let TotallyNotJson.1046 : List U8 = Array [92i64, TotallyNotJson.1047];
ret TotallyNotJson.1046;
let TotallyNotJson.1050 : U8 = 114i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
case 9:
let TotallyNotJson.1049 : U8 = 114i64;
let TotallyNotJson.1048 : List U8 = Array [92i64, TotallyNotJson.1049];
ret TotallyNotJson.1048;
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
default:
let TotallyNotJson.1050 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1050;
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1053;
procedure TotallyNotJson.31 (TotallyNotJson.226, TotallyNotJson.227):
let TotallyNotJson.972 : {Str, List Str} = Struct {TotallyNotJson.226, TotallyNotJson.227};
let TotallyNotJson.971 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.972;
ret TotallyNotJson.971;
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 TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.0 ():
let Test.13 : Str = "foo";

File diff suppressed because it is too large Load diff

View file

@ -16,7 +16,7 @@ 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.228 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -126,7 +126,7 @@ procedure List.8 (#Attr.2, #Attr.3):
let List.633 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.633;
procedure List.80 (#Derived_gen.16, #Derived_gen.17, #Derived_gen.18, #Derived_gen.19, #Derived_gen.20):
procedure List.80 (#Derived_gen.13, #Derived_gen.14, #Derived_gen.15, #Derived_gen.16, #Derived_gen.17):
joinpoint List.657 List.490 List.491 List.492 List.493 List.494:
let List.659 : Int1 = CallByName Num.22 List.493 List.494;
if List.659 then
@ -150,9 +150,25 @@ procedure List.80 (#Derived_gen.16, #Derived_gen.17, #Derived_gen.18, #Derived_g
let List.658 : [C {U64, Int1}, C {U64, Int1}] = TagId(1) List.491;
ret List.658;
in
jump List.657 #Derived_gen.16 #Derived_gen.17 #Derived_gen.18 #Derived_gen.19 #Derived_gen.20;
jump List.657 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15 #Derived_gen.16 #Derived_gen.17;
procedure List.91 (#Derived_gen.11, #Derived_gen.12, #Derived_gen.13, #Derived_gen.14, #Derived_gen.15):
procedure List.91 (#Derived_gen.3, #Derived_gen.4, #Derived_gen.5, #Derived_gen.6, #Derived_gen.7):
joinpoint List.601 List.162 List.163 List.164 List.165 List.166:
let List.603 : Int1 = CallByName Num.22 List.165 List.166;
if List.603 then
let List.607 : Str = CallByName List.66 List.162 List.165;
inc List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.233 List.163 List.607;
let List.606 : U64 = 1i64;
let List.605 : U64 = CallByName Num.51 List.165 List.606;
jump List.601 List.162 List.167 List.164 List.605 List.166;
else
dec List.162;
ret List.163;
in
jump List.601 #Derived_gen.3 #Derived_gen.4 #Derived_gen.5 #Derived_gen.6 #Derived_gen.7;
procedure List.91 (#Derived_gen.8, #Derived_gen.9, #Derived_gen.10, #Derived_gen.11, #Derived_gen.12):
joinpoint List.613 List.162 List.163 List.164 List.165 List.166:
let List.615 : Int1 = CallByName Num.22 List.165 List.166;
if List.615 then
@ -165,23 +181,7 @@ procedure List.91 (#Derived_gen.11, #Derived_gen.12, #Derived_gen.13, #Derived_g
dec List.162;
ret List.163;
in
jump List.613 #Derived_gen.11 #Derived_gen.12 #Derived_gen.13 #Derived_gen.14 #Derived_gen.15;
procedure List.91 (#Derived_gen.6, #Derived_gen.7, #Derived_gen.8, #Derived_gen.9, #Derived_gen.10):
joinpoint List.601 List.162 List.163 List.164 List.165 List.166:
let List.603 : Int1 = CallByName Num.22 List.165 List.166;
if List.603 then
let List.607 : Str = CallByName List.66 List.162 List.165;
inc List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.230 List.163 List.607;
let List.606 : U64 = 1i64;
let List.605 : U64 = CallByName Num.51 List.165 List.606;
jump List.601 List.162 List.167 List.164 List.605 List.166;
else
dec List.162;
ret List.163;
in
jump List.601 #Derived_gen.6 #Derived_gen.7 #Derived_gen.8 #Derived_gen.9 #Derived_gen.10;
jump List.613 #Derived_gen.8 #Derived_gen.9 #Derived_gen.10 #Derived_gen.11 #Derived_gen.12;
procedure Num.127 (#Attr.2):
let Num.282 : U8 = lowlevel NumIntCast #Attr.2;
@ -258,234 +258,234 @@ procedure Test.5 (Test.6, Test.7, Test.4):
let Test.19 : {Str, List Str} = CallByName TotallyNotJson.31 Test.21 Test.22;
jump Test.20 Test.19;
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 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 TotallyNotJson.157 (TotallyNotJson.1068, TotallyNotJson.160):
let TotallyNotJson.158 : U64 = StructAtIndex 0 TotallyNotJson.1068;
let TotallyNotJson.159 : Int1 = StructAtIndex 1 TotallyNotJson.1068;
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.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:
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 8:
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 12:
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 10:
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 13:
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 9:
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;
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;
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 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;
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 TotallyNotJson.228 (TotallyNotJson.229, TotallyNotJson.973, #Attr.12):
let TotallyNotJson.227 : List Str = StructAtIndex 1 #Attr.12;
let TotallyNotJson.226 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1011 : I64 = 123i64;
let TotallyNotJson.1010 : U8 = CallByName Num.127 TotallyNotJson.1011;
let TotallyNotJson.1007 : List U8 = CallByName List.4 TotallyNotJson.229 TotallyNotJson.1010;
let TotallyNotJson.1009 : I64 = 34i64;
let TotallyNotJson.1008 : U8 = CallByName Num.127 TotallyNotJson.1009;
let TotallyNotJson.1005 : List U8 = CallByName List.4 TotallyNotJson.1007 TotallyNotJson.1008;
let TotallyNotJson.1006 : List U8 = CallByName Str.12 TotallyNotJson.226;
let TotallyNotJson.1002 : List U8 = CallByName List.8 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 34i64;
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 = 58i64;
let TotallyNotJson.1001 : I64 = 91i64;
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 = 91i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.231 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.995 : U64 = CallByName List.6 TotallyNotJson.227;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.231, TotallyNotJson.995};
let TotallyNotJson.984 : {} = Struct {};
let TotallyNotJson.982 : {List U8, U64} = CallByName List.18 TotallyNotJson.227 TotallyNotJson.983 TotallyNotJson.984;
let TotallyNotJson.233 : List U8 = StructAtIndex 0 TotallyNotJson.982;
let TotallyNotJson.981 : I64 = 93i64;
let TotallyNotJson.980 : U8 = CallByName Num.127 TotallyNotJson.981;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.233 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.976 : List U8 = CallByName List.4 TotallyNotJson.977 TotallyNotJson.978;
ret TotallyNotJson.976;
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 TotallyNotJson.230 (TotallyNotJson.975, TotallyNotJson.236):
let TotallyNotJson.234 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.235 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.994 : {} = Struct {};
let TotallyNotJson.237 : List U8 = CallByName Encode.24 TotallyNotJson.234 TotallyNotJson.236 TotallyNotJson.994;
joinpoint TotallyNotJson.989 TotallyNotJson.238:
let TotallyNotJson.987 : U64 = 1i64;
let TotallyNotJson.986 : U64 = CallByName Num.20 TotallyNotJson.235 TotallyNotJson.987;
let TotallyNotJson.985 : {List U8, U64} = Struct {TotallyNotJson.238, TotallyNotJson.986};
ret TotallyNotJson.985;
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.993 : U64 = 1i64;
let TotallyNotJson.990 : Int1 = CallByName Num.24 TotallyNotJson.235 TotallyNotJson.993;
if TotallyNotJson.990 then
let TotallyNotJson.992 : I64 = 44i64;
let TotallyNotJson.991 : U8 = CallByName Num.127 TotallyNotJson.992;
let TotallyNotJson.988 : List U8 = CallByName List.4 TotallyNotJson.237 TotallyNotJson.991;
jump TotallyNotJson.989 TotallyNotJson.988;
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.989 TotallyNotJson.237;
jump TotallyNotJson.992 TotallyNotJson.240;
procedure TotallyNotJson.25 (TotallyNotJson.149):
let TotallyNotJson.1099 : Str = CallByName Encode.23 TotallyNotJson.149;
ret TotallyNotJson.1099;
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.1097 : U64 = 0i64;
let TotallyNotJson.1098 : Int1 = true;
let TotallyNotJson.154 : {U64, Int1} = Struct {TotallyNotJson.1097, TotallyNotJson.1098};
let TotallyNotJson.1067 : {} = Struct {};
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.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;
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.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;
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.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;
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.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];
let TotallyNotJson.1043 : List U8 = Array [92i64, 34i64];
ret TotallyNotJson.1043;
case 12:
let TotallyNotJson.1046 : U8 = 102i64;
let TotallyNotJson.1045 : List U8 = Array [92i64, TotallyNotJson.1046];
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.1048 : U8 = 110i64;
let TotallyNotJson.1047 : List U8 = Array [92i64, TotallyNotJson.1048];
ret TotallyNotJson.1047;
let TotallyNotJson.1051 : U8 = 110i64;
let TotallyNotJson.1050 : List U8 = Array [92i64, TotallyNotJson.1051];
ret TotallyNotJson.1050;
case 13:
let TotallyNotJson.1050 : U8 = 114i64;
let TotallyNotJson.1049 : List U8 = Array [92i64, TotallyNotJson.1050];
ret TotallyNotJson.1049;
let TotallyNotJson.1053 : U8 = 114i64;
let TotallyNotJson.1052 : List U8 = Array [92i64, TotallyNotJson.1053];
ret TotallyNotJson.1052;
case 9:
let TotallyNotJson.1052 : U8 = 114i64;
let TotallyNotJson.1051 : List U8 = Array [92i64, TotallyNotJson.1052];
ret TotallyNotJson.1051;
let TotallyNotJson.1055 : U8 = 114i64;
let TotallyNotJson.1054 : List U8 = Array [92i64, TotallyNotJson.1055];
ret TotallyNotJson.1054;
default:
let TotallyNotJson.1053 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1053;
let TotallyNotJson.1056 : List U8 = Array [TotallyNotJson.186];
ret TotallyNotJson.1056;
procedure TotallyNotJson.31 (TotallyNotJson.226, TotallyNotJson.227):
let TotallyNotJson.1013 : {Str, List Str} = Struct {TotallyNotJson.226, TotallyNotJson.227};
let TotallyNotJson.1012 : {Str, List Str} = CallByName Encode.23 TotallyNotJson.1013;
ret TotallyNotJson.1012;
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.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.0 ():
let Test.12 : {Str, Str} = CallByName Test.3;

View file

@ -56,7 +56,7 @@ 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.228 Encode.99 Encode.101 Encode.107;
let Encode.113 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.113;
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
@ -72,7 +72,7 @@ procedure Encode.24 (Encode.99, Encode.107, Encode.101):
procedure Encode.24 (Encode.99, Encode.107, Encode.101):
let Encode.121 : List U8 = CallByName TotallyNotJson.228 Encode.99 Encode.101 Encode.107;
let Encode.121 : List U8 = CallByName TotallyNotJson.231 Encode.99 Encode.101 Encode.107;
ret Encode.121;
procedure Encode.26 (Encode.105, Encode.106):
@ -132,7 +132,7 @@ procedure List.91 (#Derived_gen.26, #Derived_gen.27, #Derived_gen.28, #Derived_g
let List.643 : Int1 = CallByName Num.22 List.165 List.166;
if List.643 then
let List.647 : [] = CallByName List.66 List.162 List.165;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.230 List.163 List.647;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.233 List.163 List.647;
let List.646 : U64 = 1i64;
let List.645 : U64 = CallByName Num.51 List.165 List.646;
jump List.641 List.162 List.167 List.164 List.645 List.166;
@ -147,7 +147,7 @@ procedure List.91 (#Derived_gen.40, #Derived_gen.41, #Derived_gen.42, #Derived_g
let List.603 : Int1 = CallByName Num.22 List.165 List.166;
if List.603 then
let List.607 : [C {}, C {}] = CallByName List.66 List.162 List.165;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.230 List.163 List.607;
let List.167 : {List U8, U64} = CallByName TotallyNotJson.233 List.163 List.607;
let List.606 : U64 = 1i64;
let List.605 : U64 = CallByName Num.51 List.165 List.606;
jump List.601 List.162 List.167 List.164 List.605 List.166;
@ -212,127 +212,127 @@ procedure Test.5 (Test.6, Test.7, Test.4):
let Test.22 : {Str, List [C {}, C {}]} = CallByName TotallyNotJson.31 Test.24 Test.25;
jump Test.23 Test.22;
procedure TotallyNotJson.228 (TotallyNotJson.229, TotallyNotJson.973, #Attr.12):
let TotallyNotJson.227 : List [C {}, C {}] = StructAtIndex 1 #Attr.12;
let TotallyNotJson.226 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1011 : I64 = 123i64;
let TotallyNotJson.1010 : U8 = CallByName Num.127 TotallyNotJson.1011;
let TotallyNotJson.1007 : List U8 = CallByName List.4 TotallyNotJson.229 TotallyNotJson.1010;
let TotallyNotJson.1009 : I64 = 34i64;
let TotallyNotJson.1008 : U8 = CallByName Num.127 TotallyNotJson.1009;
let TotallyNotJson.1005 : List U8 = CallByName List.4 TotallyNotJson.1007 TotallyNotJson.1008;
let TotallyNotJson.1006 : List U8 = CallByName Str.12 TotallyNotJson.226;
let TotallyNotJson.1002 : List U8 = CallByName List.8 TotallyNotJson.1005 TotallyNotJson.1006;
let TotallyNotJson.1004 : I64 = 34i64;
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 = 58i64;
let TotallyNotJson.1001 : I64 = 91i64;
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 = 91i64;
let TotallyNotJson.997 : U8 = CallByName Num.127 TotallyNotJson.998;
let TotallyNotJson.231 : List U8 = CallByName List.4 TotallyNotJson.996 TotallyNotJson.997;
let TotallyNotJson.995 : U64 = CallByName List.6 TotallyNotJson.227;
let TotallyNotJson.983 : {List U8, U64} = Struct {TotallyNotJson.231, TotallyNotJson.995};
let TotallyNotJson.984 : {} = Struct {};
let TotallyNotJson.982 : {List U8, U64} = CallByName List.18 TotallyNotJson.227 TotallyNotJson.983 TotallyNotJson.984;
let TotallyNotJson.233 : List U8 = StructAtIndex 0 TotallyNotJson.982;
let TotallyNotJson.981 : I64 = 93i64;
let TotallyNotJson.980 : U8 = CallByName Num.127 TotallyNotJson.981;
let TotallyNotJson.977 : List U8 = CallByName List.4 TotallyNotJson.233 TotallyNotJson.980;
let TotallyNotJson.979 : I64 = 125i64;
let TotallyNotJson.978 : U8 = CallByName Num.127 TotallyNotJson.979;
let TotallyNotJson.976 : List U8 = CallByName List.4 TotallyNotJson.977 TotallyNotJson.978;
ret TotallyNotJson.976;
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 TotallyNotJson.228 (TotallyNotJson.229, TotallyNotJson.973, #Attr.12):
let TotallyNotJson.227 : List [] = StructAtIndex 1 #Attr.12;
let TotallyNotJson.226 : Str = StructAtIndex 0 #Attr.12;
let TotallyNotJson.1054 : I64 = 123i64;
let TotallyNotJson.1053 : U8 = CallByName Num.127 TotallyNotJson.1054;
let TotallyNotJson.1050 : List U8 = CallByName List.4 TotallyNotJson.229 TotallyNotJson.1053;
let TotallyNotJson.1052 : I64 = 34i64;
let TotallyNotJson.1051 : U8 = CallByName Num.127 TotallyNotJson.1052;
let TotallyNotJson.1048 : List U8 = CallByName List.4 TotallyNotJson.1050 TotallyNotJson.1051;
let TotallyNotJson.1049 : List U8 = CallByName Str.12 TotallyNotJson.226;
let TotallyNotJson.1045 : List U8 = CallByName List.8 TotallyNotJson.1048 TotallyNotJson.1049;
let TotallyNotJson.1047 : I64 = 34i64;
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 = 58i64;
let TotallyNotJson.1044 : I64 = 91i64;
let TotallyNotJson.1043 : U8 = CallByName Num.127 TotallyNotJson.1044;
let TotallyNotJson.1039 : List U8 = CallByName List.4 TotallyNotJson.1042 TotallyNotJson.1043;
let TotallyNotJson.1041 : I64 = 91i64;
let TotallyNotJson.1040 : U8 = CallByName Num.127 TotallyNotJson.1041;
let TotallyNotJson.231 : List U8 = CallByName List.4 TotallyNotJson.1039 TotallyNotJson.1040;
let TotallyNotJson.1038 : U64 = CallByName List.6 TotallyNotJson.227;
let TotallyNotJson.1026 : {List U8, U64} = Struct {TotallyNotJson.231, TotallyNotJson.1038};
let TotallyNotJson.1027 : {} = Struct {};
let TotallyNotJson.1025 : {List U8, U64} = CallByName List.18 TotallyNotJson.227 TotallyNotJson.1026 TotallyNotJson.1027;
let TotallyNotJson.233 : List U8 = StructAtIndex 0 TotallyNotJson.1025;
let TotallyNotJson.1024 : I64 = 93i64;
let TotallyNotJson.1023 : U8 = CallByName Num.127 TotallyNotJson.1024;
let TotallyNotJson.1020 : List U8 = CallByName List.4 TotallyNotJson.233 TotallyNotJson.1023;
let TotallyNotJson.1022 : I64 = 125i64;
let TotallyNotJson.1021 : U8 = CallByName Num.127 TotallyNotJson.1022;
let TotallyNotJson.1019 : List U8 = CallByName List.4 TotallyNotJson.1020 TotallyNotJson.1021;
ret TotallyNotJson.1019;
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 TotallyNotJson.230 (TotallyNotJson.975, TotallyNotJson.236):
let TotallyNotJson.234 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.235 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.1037 : {} = Struct {};
let TotallyNotJson.237 : List U8 = CallByName Encode.24 TotallyNotJson.234 TotallyNotJson.236 TotallyNotJson.1037;
joinpoint TotallyNotJson.1032 TotallyNotJson.238:
let TotallyNotJson.1030 : U64 = 1i64;
let TotallyNotJson.1029 : U64 = CallByName Num.20 TotallyNotJson.235 TotallyNotJson.1030;
let TotallyNotJson.1028 : {List U8, U64} = Struct {TotallyNotJson.238, TotallyNotJson.1029};
ret TotallyNotJson.1028;
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.1036 : U64 = 1i64;
let TotallyNotJson.1033 : Int1 = CallByName Num.24 TotallyNotJson.235 TotallyNotJson.1036;
if TotallyNotJson.1033 then
let TotallyNotJson.1035 : I64 = 44i64;
let TotallyNotJson.1034 : U8 = CallByName Num.127 TotallyNotJson.1035;
let TotallyNotJson.1031 : List U8 = CallByName List.4 TotallyNotJson.237 TotallyNotJson.1034;
jump TotallyNotJson.1032 TotallyNotJson.1031;
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.1032 TotallyNotJson.237;
jump TotallyNotJson.1035 TotallyNotJson.240;
procedure TotallyNotJson.230 (TotallyNotJson.975, TotallyNotJson.236):
let TotallyNotJson.234 : List U8 = StructAtIndex 0 TotallyNotJson.975;
let TotallyNotJson.235 : U64 = StructAtIndex 1 TotallyNotJson.975;
let TotallyNotJson.994 : {} = Struct {};
let TotallyNotJson.237 : List U8 = CallByName Encode.24 TotallyNotJson.234 TotallyNotJson.236 TotallyNotJson.994;
joinpoint TotallyNotJson.989 TotallyNotJson.238:
let TotallyNotJson.987 : U64 = 1i64;
let TotallyNotJson.986 : U64 = CallByName Num.20 TotallyNotJson.235 TotallyNotJson.987;
let TotallyNotJson.985 : {List U8, U64} = Struct {TotallyNotJson.238, TotallyNotJson.986};
ret TotallyNotJson.985;
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.993 : U64 = 1i64;
let TotallyNotJson.990 : Int1 = CallByName Num.24 TotallyNotJson.235 TotallyNotJson.993;
if TotallyNotJson.990 then
let TotallyNotJson.992 : I64 = 44i64;
let TotallyNotJson.991 : U8 = CallByName Num.127 TotallyNotJson.992;
let TotallyNotJson.988 : List U8 = CallByName List.4 TotallyNotJson.237 TotallyNotJson.991;
jump TotallyNotJson.989 TotallyNotJson.988;
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.989 TotallyNotJson.237;
jump TotallyNotJson.992 TotallyNotJson.240;
procedure TotallyNotJson.31 (TotallyNotJson.226, TotallyNotJson.227):
let TotallyNotJson.1013 : {Str, List [C {}, C {}]} = Struct {TotallyNotJson.226, TotallyNotJson.227};
let TotallyNotJson.1012 : {Str, List [C {}, C {}]} = CallByName Encode.23 TotallyNotJson.1013;
ret TotallyNotJson.1012;
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 TotallyNotJson.31 (TotallyNotJson.226, TotallyNotJson.227):
let TotallyNotJson.1056 : {Str, List []} = Struct {TotallyNotJson.226, TotallyNotJson.227};
let TotallyNotJson.1055 : {Str, List []} = CallByName Encode.23 TotallyNotJson.1056;
ret TotallyNotJson.1055;
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 TotallyNotJson.8 ():
let TotallyNotJson.970 : {} = Struct {};
ret TotallyNotJson.970;
let TotallyNotJson.973 : {} = Struct {};
ret TotallyNotJson.973;
procedure Test.0 ():
let Test.13 : {{}, {}} = CallByName Test.3;

View file

@ -18,6 +18,7 @@ roc_module = { path = "../module" }
roc_parse = { path = "../parse" }
roc_region = { path = "../region" }
roc_test_utils = { path = "../../test_utils" }
roc_test_utils_dir = { path = "../../test_utils_dir" }
[dev-dependencies]
indoc.workspace = true

View file

@ -2,6 +2,7 @@ When(
@5-6 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
[
WhenBranch {

View file

@ -2,6 +2,7 @@ When(
@5-6 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
[
WhenBranch {

View file

@ -4,6 +4,7 @@ BinOps(
@0-1 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
@2-3 Plus,
),

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-3 Identifier(
"foo",
),
@0-3 Identifier {
ident: "foo",
suffixed: 0,
},
@6-27 TagUnion {
ext: None,
tags: [
@ -40,9 +41,10 @@ Defs(
},
),
AnnotatedBody {
ann_pattern: @0-3 Identifier(
"foo",
),
ann_pattern: @0-3 Identifier {
ident: "foo",
suffixed: 0,
},
ann_type: @6-27 TagUnion {
ext: None,
tags: [
@ -63,9 +65,10 @@ Defs(
],
},
comment: None,
body_pattern: @28-31 Identifier(
"foo",
),
body_pattern: @28-31 Identifier {
ident: "foo",
suffixed: 0,
},
body_expr: @34-38 Tag(
"True",
),

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-3 Identifier(
"foo",
),
@0-3 Identifier {
ident: "foo",
suffixed: 0,
},
@6-28 TagUnion {
ext: Some(
@27-28 Wildcard,
@ -42,9 +43,10 @@ Defs(
},
),
AnnotatedBody {
ann_pattern: @0-3 Identifier(
"foo",
),
ann_pattern: @0-3 Identifier {
ident: "foo",
suffixed: 0,
},
ann_type: @6-28 TagUnion {
ext: Some(
@27-28 Wildcard,
@ -67,9 +69,10 @@ Defs(
],
},
comment: None,
body_pattern: @29-32 Identifier(
"foo",
),
body_pattern: @29-32 Identifier {
ident: "foo",
suffixed: 0,
},
body_expr: @35-39 Tag(
"True",
),

View file

@ -18,12 +18,14 @@ Defs(
Annotation(
@0-8 RecordDestructure(
[
@2-3 Identifier(
"x",
),
@5-7 Identifier(
"y",
),
@2-3 Identifier {
ident: "x",
suffixed: 0,
},
@5-7 Identifier {
ident: "y",
suffixed: 0,
},
],
),
@11-14 Apply(
@ -35,12 +37,14 @@ Defs(
AnnotatedBody {
ann_pattern: @0-8 RecordDestructure(
[
@2-3 Identifier(
"x",
),
@5-7 Identifier(
"y",
),
@2-3 Identifier {
ident: "x",
suffixed: 0,
},
@5-7 Identifier {
ident: "y",
suffixed: 0,
},
],
),
ann_type: @11-14 Apply(
@ -51,12 +55,14 @@ Defs(
comment: None,
body_pattern: @15-23 RecordDestructure(
[
@17-18 Identifier(
"x",
),
@20-21 Identifier(
"y",
),
@17-18 Identifier {
ident: "x",
suffixed: 0,
},
@20-21 Identifier {
ident: "y",
suffixed: 0,
},
],
),
body_expr: @26-49 Record(
@ -86,6 +92,7 @@ Defs(
Var {
module_name: "",
ident: "x",
suffixed: 0,
},
[
Newline,

View file

@ -18,9 +18,10 @@ Defs(
header: TypeHeader {
name: @0-6 "UserId",
vars: [
@7-8 Identifier(
"x",
),
@7-8 Identifier {
ident: "x",
suffixed: 0,
},
],
},
ann: @11-25 TagUnion {
@ -47,9 +48,10 @@ Defs(
"UserId",
),
[
@7-8 Identifier(
"x",
),
@7-8 Identifier {
ident: "x",
suffixed: 0,
},
],
),
ann_type: @11-25 TagUnion {
@ -73,9 +75,10 @@ Defs(
"UserId",
),
[
@33-34 Identifier(
"x",
),
@33-34 Identifier {
ident: "x",
suffixed: 0,
},
],
),
body_expr: @37-46 Apply(
@ -96,6 +99,7 @@ Defs(
Var {
module_name: "",
ident: "x",
suffixed: 0,
},
[
Newline,

View file

@ -18,12 +18,14 @@ Defs(
Annotation(
@0-8 Tuple(
[
@2-3 Identifier(
"x",
),
@5-6 Identifier(
"y",
),
@2-3 Identifier {
ident: "x",
suffixed: 0,
},
@5-6 Identifier {
ident: "y",
suffixed: 0,
},
],
),
@11-14 Apply(
@ -35,12 +37,14 @@ Defs(
AnnotatedBody {
ann_pattern: @0-8 Tuple(
[
@2-3 Identifier(
"x",
),
@5-6 Identifier(
"y",
),
@2-3 Identifier {
ident: "x",
suffixed: 0,
},
@5-6 Identifier {
ident: "y",
suffixed: 0,
},
],
),
ann_type: @11-14 Apply(
@ -51,12 +55,14 @@ Defs(
comment: None,
body_pattern: @15-23 Tuple(
[
@17-18 Identifier(
"x",
),
@20-21 Identifier(
"y",
),
@17-18 Identifier {
ident: "x",
suffixed: 0,
},
@20-21 Identifier {
ident: "y",
suffixed: 0,
},
],
),
body_expr: @26-41 Tuple(
@ -78,6 +84,7 @@ Defs(
Var {
module_name: "",
ident: "x",
suffixed: 0,
},
[
Newline,

View file

@ -2,19 +2,23 @@ Apply(
@0-1 Var {
module_name: "",
ident: "a",
suffixed: 0,
},
[
@2-3 Var {
module_name: "",
ident: "b",
suffixed: 0,
},
@4-5 Var {
module_name: "",
ident: "c",
suffixed: 0,
},
@6-7 Var {
module_name: "",
ident: "d",
suffixed: 0,
},
],
Space,

View file

@ -2,6 +2,7 @@ Apply(
@0-4 Var {
module_name: "",
ident: "whee",
suffixed: 0,
},
[
@6-8 Num(

View file

@ -3,6 +3,7 @@ Apply(
@1-5 Var {
module_name: "",
ident: "whee",
suffixed: 0,
},
@0-1 Negate,
),
@ -13,6 +14,7 @@ Apply(
@10-13 Var {
module_name: "",
ident: "foo",
suffixed: 0,
},
],
Space,

View file

@ -3,6 +3,7 @@ Apply(
@1-5 Var {
module_name: "",
ident: "whee",
suffixed: 0,
},
@0-1 Not,
),
@ -13,6 +14,7 @@ Apply(
@10-13 Var {
module_name: "",
ident: "foo",
suffixed: 0,
},
],
Space,

View file

@ -2,6 +2,7 @@ Apply(
@0-4 Var {
module_name: "",
ident: "whee",
suffixed: 0,
},
[
@5-6 Num(

View file

@ -17,9 +17,10 @@ SpaceBefore(
type_defs: [],
value_defs: [
Body(
@107-108 Identifier(
"x",
),
@107-108 Identifier {
ident: "x",
suffixed: 0,
},
@111-112 Num(
"5",
),

View file

@ -2,6 +2,7 @@ RecordAccess(
Var {
module_name: "",
ident: "rec",
suffixed: 0,
},
"field",
)

View file

@ -1,4 +1,5 @@
Var {
module_name: "",
ident: "whee",
suffixed: 0,
}

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-1 Identifier(
"a",
),
@0-1 Identifier {
ident: "a",
suffixed: 0,
},
@3-4 SpaceBefore(
BoundVariable(
"c",

View file

@ -3,6 +3,7 @@ Apply(
Var {
module_name: "",
ident: "f",
suffixed: 0,
},
[
Newline,

View file

@ -4,6 +4,7 @@ BinOps(
@0-1 Var {
module_name: "",
ident: "a",
suffixed: 0,
},
@2-4 And,
),
@ -11,13 +12,15 @@ BinOps(
@5-12 Apply(
@5-10 Closure(
[
@6-7 Identifier(
"x",
),
@6-7 Identifier {
ident: "x",
suffixed: 0,
},
],
@9-10 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
),
[

View file

@ -4,6 +4,7 @@ BinOps(
@0-1 Var {
module_name: "",
ident: "i",
suffixed: 0,
},
@1-2 GreaterThan,
),
@ -12,13 +13,15 @@ BinOps(
@2-7 SpaceAfter(
Closure(
[
@3-4 Identifier(
"s",
),
@3-4 Identifier {
ident: "s",
suffixed: 0,
},
],
@6-7 Var {
module_name: "",
ident: "s",
suffixed: 0,
},
),
[
@ -30,6 +33,7 @@ BinOps(
@9-10 Var {
module_name: "",
ident: "a",
suffixed: 0,
},
@8-9 Negate,
),

View file

@ -30,6 +30,7 @@ Defs(
Var {
module_name: "",
ident: "q",
suffixed: 0,
},
[
LineComment(

View file

@ -19,9 +19,10 @@ Defs {
type_defs: [],
value_defs: [
Body(
@0-3 Identifier(
"foo",
),
@0-3 Identifier {
ident: "foo",
suffixed: 0,
},
@6-7 Num(
"1",
),

View file

@ -3,6 +3,7 @@ ParensAround(
Var {
module_name: "",
ident: "i",
suffixed: 0,
},
[
LineComment(

View file

@ -20,9 +20,10 @@ Defs(
vars: [
@3-4 SpaceAfter(
SpaceBefore(
Identifier(
"h",
),
Identifier {
ident: "h",
suffixed: 0,
},
[
LineComment(
"",
@ -46,6 +47,7 @@ Defs(
Var {
module_name: "",
ident: "j",
suffixed: 0,
},
[
Newline,

View file

@ -17,9 +17,10 @@ Defs(
value_defs: [
Annotation(
@0-1 SpaceAfter(
Identifier(
"w",
),
Identifier {
ident: "w",
suffixed: 0,
},
[
LineComment(
"",

View file

@ -17,9 +17,10 @@ Defs(
value_defs: [
Body(
@0-1 SpaceAfter(
Identifier(
"t",
),
Identifier {
ident: "t",
suffixed: 0,
},
[
LineComment(
"",
@ -36,6 +37,7 @@ Defs(
Var {
module_name: "",
ident: "e",
suffixed: 0,
},
[
Newline,

View file

@ -98,11 +98,13 @@ Defs(
@50-53 Var {
module_name: "",
ident: "try",
suffixed: 0,
},
[
@54-57 Var {
module_name: "",
ident: "foo",
suffixed: 0,
},
@59-73 ParensAround(
Closure(

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-1 Identifier(
"a",
),
@0-1 Identifier {
ident: "a",
suffixed: 0,
},
@2-3 BoundVariable(
"b",
),
@ -28,5 +29,6 @@ Defs(
@4-5 Var {
module_name: "",
ident: "i",
suffixed: 0,
},
)

View file

@ -21,9 +21,10 @@ Defs(
"Email",
),
[
@6-9 Identifier(
"str",
),
@6-9 Identifier {
ident: "str",
suffixed: 0,
},
],
),
@12-36 Apply(
@ -46,6 +47,7 @@ Defs(
Var {
module_name: "",
ident: "str",
suffixed: 0,
},
[
Newline,

View file

@ -17,9 +17,10 @@ SpaceBefore(
type_defs: [],
value_defs: [
Body(
@48-49 Identifier(
"x",
),
@48-49 Identifier {
ident: "x",
suffixed: 0,
},
@52-53 Num(
"5",
),

View file

@ -2,6 +2,7 @@ RecordUpdate {
update: @1-2 Var {
module_name: "",
ident: "e",
suffixed: 0,
},
fields: [],
}

View file

@ -4,6 +4,7 @@ BinOps(
@0-1 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
@1-3 Equals,
),
@ -11,5 +12,6 @@ BinOps(
@3-4 Var {
module_name: "",
ident: "y",
suffixed: 0,
},
)

View file

@ -4,6 +4,7 @@ BinOps(
@0-1 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
@2-4 Equals,
),
@ -11,5 +12,6 @@ BinOps(
@5-6 Var {
module_name: "",
ident: "y",
suffixed: 0,
},
)

View file

@ -33,6 +33,7 @@ Defs(
Var {
module_name: "",
ident: "a",
suffixed: 0,
},
[
Newline,

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-5 Identifier(
"table",
),
@0-5 Identifier {
ident: "table",
suffixed: 0,
},
@8-44 Function(
[
@8-35 Record {
@ -54,9 +55,10 @@ Defs(
),
),
AnnotatedBody {
ann_pattern: @0-5 Identifier(
"table",
),
ann_pattern: @0-5 Identifier {
ident: "table",
suffixed: 0,
},
ann_type: @8-44 Function(
[
@8-35 Record {
@ -91,16 +93,18 @@ Defs(
),
),
comment: None,
body_pattern: @45-50 Identifier(
"table",
),
body_pattern: @45-50 Identifier {
ident: "table",
suffixed: 0,
},
body_expr: @53-89 Closure(
[
@54-62 RecordDestructure(
[
@55-61 Identifier(
"height",
),
@55-61 Identifier {
ident: "height",
suffixed: 0,
},
],
),
],
@ -123,6 +127,7 @@ Defs(
Var {
module_name: "",
ident: "table",
suffixed: 0,
},
[
Newline,

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-1 Identifier(
"f",
),
@0-1 Identifier {
ident: "f",
suffixed: 0,
},
@4-20 Function(
[
@4-10 Tuple {
@ -53,9 +54,10 @@ Defs(
),
),
AnnotatedBody {
ann_pattern: @0-1 Identifier(
"f",
),
ann_pattern: @0-1 Identifier {
ident: "f",
suffixed: 0,
},
ann_type: @4-20 Function(
[
@4-10 Tuple {
@ -89,18 +91,21 @@ Defs(
},
),
comment: None,
body_pattern: @21-22 Identifier(
"f",
),
body_pattern: @21-22 Identifier {
ident: "f",
suffixed: 0,
},
body_expr: @25-32 Closure(
[
@26-27 Identifier(
"x",
),
@26-27 Identifier {
ident: "x",
suffixed: 0,
},
],
@31-32 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
),
},
@ -111,6 +116,7 @@ Defs(
@34-35 Var {
module_name: "",
ident: "f",
suffixed: 0,
},
[
@36-47 Tuple(

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Annotation(
@0-1 Identifier(
"f",
),
@0-1 Identifier {
ident: "f",
suffixed: 0,
},
@4-21 Function(
[
@4-7 Apply(
@ -45,9 +46,10 @@ Defs(
),
),
AnnotatedBody {
ann_pattern: @0-1 Identifier(
"f",
),
ann_pattern: @0-1 Identifier {
ident: "f",
suffixed: 0,
},
ann_type: @4-21 Function(
[
@4-7 Apply(
@ -73,20 +75,23 @@ Defs(
},
),
comment: None,
body_pattern: @22-23 Identifier(
"f",
),
body_pattern: @22-23 Identifier {
ident: "f",
suffixed: 0,
},
body_expr: @26-42 Closure(
[
@27-28 Identifier(
"x",
),
@27-28 Identifier {
ident: "x",
suffixed: 0,
},
],
@32-42 Tuple(
[
@33-34 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
@36-41 BinOps(
[
@ -94,6 +99,7 @@ Defs(
@36-37 Var {
module_name: "",
ident: "x",
suffixed: 0,
},
@38-39 Plus,
),
@ -113,6 +119,7 @@ Defs(
@44-45 Var {
module_name: "",
ident: "f",
suffixed: 0,
},
[
@46-48 Num(

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Body(
@0-4 Identifier(
"iffy",
),
@0-4 Identifier {
ident: "iffy",
suffixed: 0,
},
@5-6 Num(
"5",
),

View file

@ -18,6 +18,7 @@ BinOps(
Var {
module_name: "Str",
ident: "toUtf8",
suffixed: 0,
},
[
Newline,
@ -31,13 +32,15 @@ BinOps(
@28-36 Var {
module_name: "List",
ident: "map",
suffixed: 0,
},
[
@37-54 Closure(
[
@38-42 Identifier(
"byte",
),
@38-42 Identifier {
ident: "byte",
suffixed: 0,
},
],
@46-54 BinOps(
[
@ -45,6 +48,7 @@ BinOps(
@46-50 Var {
module_name: "",
ident: "byte",
suffixed: 0,
},
@51-52 Plus,
),
@ -67,5 +71,6 @@ BinOps(
@58-70 Var {
module_name: "List",
ident: "reverse",
suffixed: 0,
},
)

View file

@ -1,8 +1,9 @@
Closure(
[
@1-2 Identifier(
"x",
),
@1-2 Identifier {
ident: "x",
suffixed: 0,
},
],
@8-9 SpaceBefore(
Num(

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Body(
@0-6 Identifier(
"myList",
),
@0-6 Identifier {
ident: "myList",
suffixed: 0,
},
@9-57 List(
Collection {
items: [
@ -38,6 +39,7 @@ Defs(
Var {
module_name: "",
ident: "a",
suffixed: 0,
},
[
Newline,
@ -47,6 +49,7 @@ Defs(
Var {
module_name: "",
ident: "b",
suffixed: 0,
},
[
Newline,

View file

@ -16,9 +16,10 @@ Defs(
type_defs: [],
value_defs: [
Body(
@0-6 Identifier(
"myList",
),
@0-6 Identifier {
ident: "myList",
suffixed: 0,
},
@9-25 List(
[
@15-16 SpaceBefore(

Some files were not shown because too many files have changed in this diff Show more