mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Merge branch 'main' into rust-1-76-0-upgrade
This commit is contained in:
commit
1a5e065055
249 changed files with 7985 additions and 4219 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
2
.github/workflows/nightly_linux_arm64.yml
vendored
2
.github/workflows/nightly_linux_arm64.yml
vendored
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
|
|
2
.github/workflows/nightly_linux_x86_64.yml
vendored
2
.github/workflows/nightly_linux_x86_64.yml
vendored
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
|
|
2
.github/workflows/nightly_macos_x86_64.yml
vendored
2
.github/workflows/nightly_macos_x86_64.yml
vendored
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 9 * * *" # 9=9am utc+0
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
on:
|
||||
# pull_request:
|
||||
#pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 9 * * *'
|
||||
|
|
21
Cargo.lock
generated
21
Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.
|
||||
##
|
||||
|
|
|
@ -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 }
|
||||
|
||||
|
|
|
@ -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" }
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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!(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
830
crates/compiler/can/src/suffixed.rs
Normal file
830
crates/compiler/can/src/suffixed.rs
Normal 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,
|
||||
}
|
||||
}
|
641
crates/compiler/can/tests/test_suffixed.rs
Normal file
641
crates/compiler/can/tests/test_suffixed.rs
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -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![],
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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(
|
||||
//
|
||||
|
|
|
@ -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, ®ion);
|
||||
}
|
||||
|
||||
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(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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())))
|
||||
|
|
|
@ -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`,
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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, _)
|
||||
|
|
|
@ -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
|
||||
"###
|
||||
)
|
||||
})
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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";
|
||||
|
|
946
crates/compiler/test_mono/generated/issue_4749.txt
generated
946
crates/compiler/test_mono/generated/issue_4749.txt
generated
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,6 +2,7 @@ When(
|
|||
@5-6 Var {
|
||||
module_name: "",
|
||||
ident: "x",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
WhenBranch {
|
||||
|
|
|
@ -2,6 +2,7 @@ When(
|
|||
@5-6 Var {
|
||||
module_name: "",
|
||||
ident: "x",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
WhenBranch {
|
||||
|
|
|
@ -4,6 +4,7 @@ BinOps(
|
|||
@0-1 Var {
|
||||
module_name: "",
|
||||
ident: "x",
|
||||
suffixed: 0,
|
||||
},
|
||||
@2-3 Plus,
|
||||
),
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -2,6 +2,7 @@ Apply(
|
|||
@0-4 Var {
|
||||
module_name: "",
|
||||
ident: "whee",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
@6-8 Num(
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -2,6 +2,7 @@ Apply(
|
|||
@0-4 Var {
|
||||
module_name: "",
|
||||
ident: "whee",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
@5-6 Num(
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -2,6 +2,7 @@ RecordAccess(
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "rec",
|
||||
suffixed: 0,
|
||||
},
|
||||
"field",
|
||||
)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "whee",
|
||||
suffixed: 0,
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -3,6 +3,7 @@ Apply(
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "f",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
),
|
||||
[
|
||||
|
|
|
@ -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,
|
||||
),
|
||||
|
|
|
@ -30,6 +30,7 @@ Defs(
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "q",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
LineComment(
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -3,6 +3,7 @@ ParensAround(
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "i",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
LineComment(
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -17,9 +17,10 @@ Defs(
|
|||
value_defs: [
|
||||
Annotation(
|
||||
@0-1 SpaceAfter(
|
||||
Identifier(
|
||||
"w",
|
||||
),
|
||||
Identifier {
|
||||
ident: "w",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
LineComment(
|
||||
"",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -2,6 +2,7 @@ RecordUpdate {
|
|||
update: @1-2 Var {
|
||||
module_name: "",
|
||||
ident: "e",
|
||||
suffixed: 0,
|
||||
},
|
||||
fields: [],
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -33,6 +33,7 @@ Defs(
|
|||
Var {
|
||||
module_name: "",
|
||||
ident: "a",
|
||||
suffixed: 0,
|
||||
},
|
||||
[
|
||||
Newline,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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",
|
||||
),
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
)
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
Closure(
|
||||
[
|
||||
@1-2 Identifier(
|
||||
"x",
|
||||
),
|
||||
@1-2 Identifier {
|
||||
ident: "x",
|
||||
suffixed: 0,
|
||||
},
|
||||
],
|
||||
@8-9 SpaceBefore(
|
||||
Num(
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue