mirror of
https://github.com/Noratrieb/dilaria.git
synced 2026-01-14 17:35:03 +01:00
use cargo insta in parser
This commit is contained in:
parent
9e643b8acd
commit
ee01a9f5b5
64 changed files with 2212 additions and 423 deletions
218
Cargo.lock
generated
218
Cargo.lock
generated
|
|
@ -2,15 +2,233 @@
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console"
|
||||||
|
version = "0.14.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45"
|
||||||
|
dependencies = [
|
||||||
|
"encode_unicode",
|
||||||
|
"lazy_static",
|
||||||
|
"libc",
|
||||||
|
"terminal_size",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "encode_unicode"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.11.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "1.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "insta"
|
||||||
|
version = "1.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "86c4e56d571b4cc829f0ce71506bd865a90369eeab5f3d3657ba96230beb8012"
|
||||||
|
dependencies = [
|
||||||
|
"console",
|
||||||
|
"lazy_static",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"serde_yaml",
|
||||||
|
"similar",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.112"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.36"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc-hash"
|
name = "rustc-hash"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "script_lang"
|
name = "script_lang"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"insta",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.132"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.132"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.73"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bcbd0344bc6533bc7ec56df11d42fb70f1b912351c0825ccb7211b59d8af7cf5"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.8.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"yaml-rust",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "similar"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2e24979f63a11545f5f2c60141afe249d4f19f84581ea2138065e400941d83d3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.84"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "terminal_size"
|
||||||
|
version = "0.1.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yaml-rust"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||||
|
dependencies = [
|
||||||
|
"linked-hash-map",
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,6 @@ rustc-hash = { version = "1.1.0", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
fxhash = ["rustc-hash"]
|
fxhash = ["rustc-hash"]
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
insta = "1.9.0"
|
||||||
|
|
|
||||||
33
src/parse/snapshots/script_lang__parse__test__add.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__add.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Add,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__and-2.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__and-2.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Or,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__and.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__and.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: And,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 107
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Assignment(
|
||||||
|
Assignment {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "hugo",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Field(
|
||||||
|
Ident {
|
||||||
|
sym: "age",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
rhs: BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
2021.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
1986.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Sub,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 89
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Assignment(
|
||||||
|
Assignment {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "hugo",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 251
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 267
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Block {
|
||||||
|
stmts: [
|
||||||
|
Block(
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 260
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Block {
|
||||||
|
stmts: [
|
||||||
|
Expr(
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expr(
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
20.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 519
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "hugo",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Field(
|
||||||
|
Ident {
|
||||||
|
sym: "name",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 543
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "print",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Fn(
|
||||||
|
[
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
5.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 560
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Call(
|
||||||
|
Call {
|
||||||
|
callee: Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "hugo",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Field(
|
||||||
|
Ident {
|
||||||
|
sym: "name",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Field(
|
||||||
|
Ident {
|
||||||
|
sym: "print",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Fn(
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 526
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "print",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Fn(
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 583
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "print",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Fn(
|
||||||
|
[
|
||||||
|
Call(
|
||||||
|
Call {
|
||||||
|
callee: Call(
|
||||||
|
Call {
|
||||||
|
callee: BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
5.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Add,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Field(
|
||||||
|
Ident {
|
||||||
|
sym: "abs",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
kind: Fn(
|
||||||
|
[],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__divide.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__divide.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Div,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__equal.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__equal.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Equal,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 300
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
20.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
100.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Mul,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
kind: Add,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 309
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: UnaryOp(
|
||||||
|
UnaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
expr: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Neg,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
kind: Equal,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 326
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
20.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
30.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Add,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
kind: Mul,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__greater.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__greater.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Greater,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: GreaterEqual,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__less.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__less.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Less,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: LessEqual,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__modulo.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__modulo.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Mod,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__multiply.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__multiply.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Mul,
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__not_equal.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__not_equal.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: NotEqual,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 41
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 627
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 655
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 620
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Object(
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 599
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Ident(
|
||||||
|
Ident {
|
||||||
|
sym: "tokens",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 648
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Null(
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 613
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
String(
|
||||||
|
"uwu",
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 634
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Boolean(
|
||||||
|
false,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 641
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 662
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 669
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 606
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 678
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 687
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Literal(
|
||||||
|
Array(
|
||||||
|
[
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 209
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Print(
|
||||||
|
Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 125
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
FnDecl(
|
||||||
|
FnDecl {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
name: Ident {
|
||||||
|
sym: "empty",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: [],
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 148
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
FnDecl(
|
||||||
|
FnDecl {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
name: Ident {
|
||||||
|
sym: "empty",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: [
|
||||||
|
Ident {
|
||||||
|
sym: "a",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Ident {
|
||||||
|
sym: "b",
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
body: Block {
|
||||||
|
stmts: [
|
||||||
|
Expr(
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
20.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Add,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 164
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: None,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 173
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: Some(
|
||||||
|
Else(
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 182
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: Some(
|
||||||
|
ElseIf(
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: None,
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 193
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: Some(
|
||||||
|
ElseIf(
|
||||||
|
IfStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else_part: Some(
|
||||||
|
Else(
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 234
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Loop(
|
||||||
|
Block {
|
||||||
|
stmts: [
|
||||||
|
Loop(
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Break(
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 218
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Loop(
|
||||||
|
Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 225
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
Loop(
|
||||||
|
Block {
|
||||||
|
stmts: [
|
||||||
|
Break(
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 193
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
While(
|
||||||
|
WhileStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 202
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
While(
|
||||||
|
WhileStmt {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
cond: BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Boolean(
|
||||||
|
false,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Or,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
body: Block {
|
||||||
|
stmts: [
|
||||||
|
Break(
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
33
src/parse/snapshots/script_lang__parse__test__sub.snap
Normal file
33
src/parse/snapshots/script_lang__parse__test__sub.snap
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 35
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
BinaryOp(
|
||||||
|
BinaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
lhs: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rhs: Literal(
|
||||||
|
Number(
|
||||||
|
4.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Sub,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 503
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
UnaryOp(
|
||||||
|
UnaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
expr: Literal(
|
||||||
|
Number(
|
||||||
|
10.0,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Neg,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
source: src/parse/test.rs
|
||||||
|
assertion_line: 496
|
||||||
|
expression: ast
|
||||||
|
|
||||||
|
---
|
||||||
|
UnaryOp(
|
||||||
|
UnaryOp {
|
||||||
|
span: Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
expr: Literal(
|
||||||
|
Boolean(
|
||||||
|
true,
|
||||||
|
Span {
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
kind: Not,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
use crate::ast::BinaryOp;
|
|
||||||
use crate::parse::Parser;
|
use crate::parse::Parser;
|
||||||
use prelude::*;
|
use prelude::*;
|
||||||
|
|
||||||
mod prelude {
|
mod prelude {
|
||||||
pub(super) use super::{
|
pub(super) use super::{parser, test_literal_bin_op, test_number_literal, token};
|
||||||
empty_block, ident, num_lit, parser, test_literal_bin_op, test_number_literal, token,
|
pub(super) use crate::ast::{Expr, Stmt};
|
||||||
};
|
|
||||||
pub(super) use crate::ast::*;
|
|
||||||
pub(super) use crate::errors::Span;
|
pub(super) use crate::errors::Span;
|
||||||
pub(super) use crate::lex::{
|
pub(super) use crate::lex::{
|
||||||
Token,
|
Token,
|
||||||
|
|
@ -21,24 +18,6 @@ fn token(kind: TokenType) -> Token {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn num_lit(number: f64) -> Expr {
|
|
||||||
Expr::Literal(Literal::Number(number, Span::dummy()))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn ident(name: &str) -> Ident {
|
|
||||||
Ident {
|
|
||||||
sym: name.to_string(),
|
|
||||||
span: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn empty_block() -> Block {
|
|
||||||
Block {
|
|
||||||
stmts: vec![],
|
|
||||||
span: Span::dummy(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parser(tokens: Vec<Token>) -> Parser {
|
fn parser(tokens: Vec<Token>) -> Parser {
|
||||||
Parser {
|
Parser {
|
||||||
tokens: tokens.into_iter().peekable(),
|
tokens: tokens.into_iter().peekable(),
|
||||||
|
|
@ -48,30 +27,18 @@ fn parser(tokens: Vec<Token>) -> Parser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_literal_bin_op<F: FnOnce(Vec<Token<'_>>) -> Expr>(
|
fn test_literal_bin_op<F: FnOnce(Vec<Token<'_>>) -> Expr>(token_type: TokenType, parser: F) {
|
||||||
token_type: TokenType,
|
|
||||||
expected_op_kind: BinaryOpKind,
|
|
||||||
parser: F,
|
|
||||||
) {
|
|
||||||
let tokens = [TokenType::Number(10.0), token_type, TokenType::Number(4.0)]
|
let tokens = [TokenType::Number(10.0), token_type, TokenType::Number(4.0)]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let factor = parser(tokens);
|
let ast = parser(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: num_lit(4.0),
|
|
||||||
kind: expected_op_kind
|
|
||||||
})),
|
|
||||||
factor
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_number_literal<F: FnOnce(Vec<Token<'_>>) -> Expr>(parser: F) {
|
fn test_number_literal<F: FnOnce(Vec<Token<'_>>) -> Expr>(parser: F) {
|
||||||
let tokens = [TokenType::Number(10.0)].map(token).into();
|
let tokens = [TokenType::Number(10.0)].map(token).into();
|
||||||
let unary = parser(tokens);
|
let ast = parser(tokens);
|
||||||
assert_eq!(num_lit(10.0), unary);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
mod assignment {
|
mod assignment {
|
||||||
|
|
@ -86,14 +53,7 @@ mod assignment {
|
||||||
fn simple() {
|
fn simple() {
|
||||||
let tokens = [Ident("hugo"), Equal, Number(10.0), Semi].map(token).into();
|
let tokens = [Ident("hugo"), Equal, Number(10.0), Semi].map(token).into();
|
||||||
let ast = parse_assignment(tokens);
|
let ast = parse_assignment(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::Assignment(Assignment {
|
|
||||||
span: Default::default(),
|
|
||||||
lhs: Expr::Ident(ident("hugo")),
|
|
||||||
rhs: num_lit(10.0)
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -111,23 +71,7 @@ mod assignment {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_assignment(tokens);
|
let ast = parse_assignment(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::Assignment(Assignment {
|
|
||||||
span: Default::default(),
|
|
||||||
lhs: Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("hugo")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Field(ident("age"))
|
|
||||||
})),
|
|
||||||
rhs: Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Default::default(),
|
|
||||||
lhs: num_lit(2021.0),
|
|
||||||
rhs: num_lit(1986.0),
|
|
||||||
kind: BinaryOpKind::Sub
|
|
||||||
}))
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -145,18 +89,7 @@ mod r#fn {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_fn(tokens);
|
let ast = parse_fn(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::FnDecl(FnDecl {
|
|
||||||
span: Span::dummy(),
|
|
||||||
name: ident("empty"),
|
|
||||||
params: vec![],
|
|
||||||
body: Block {
|
|
||||||
stmts: vec![],
|
|
||||||
span: Default::default()
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -179,28 +112,13 @@ mod r#fn {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_fn(tokens);
|
let ast = parse_fn(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::FnDecl(FnDecl {
|
|
||||||
span: Span::dummy(),
|
|
||||||
name: ident("empty"),
|
|
||||||
params: vec![ident("a"), ident("b")],
|
|
||||||
body: Block {
|
|
||||||
stmts: vec![Stmt::Expr(Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Default::default(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: num_lit(20.0),
|
|
||||||
kind: BinaryOpKind::Add,
|
|
||||||
})))],
|
|
||||||
span: Default::default()
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod r#if {
|
mod r#if {
|
||||||
use super::prelude::*;
|
use super::prelude::*;
|
||||||
|
use crate::ast::IfStmt;
|
||||||
|
|
||||||
fn parse_if(tokens: Vec<Token>) -> IfStmt {
|
fn parse_if(tokens: Vec<Token>) -> IfStmt {
|
||||||
let mut parser = parser(tokens);
|
let mut parser = parser(tokens);
|
||||||
|
|
@ -211,15 +129,7 @@ mod r#if {
|
||||||
fn empty() {
|
fn empty() {
|
||||||
let tokens = [If, True, BraceO, BraceC].map(token).into();
|
let tokens = [If, True, BraceO, BraceC].map(token).into();
|
||||||
let ast = parse_if(tokens);
|
let ast = parse_if(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: None
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -228,15 +138,7 @@ mod r#if {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_if(tokens);
|
let ast = parse_if(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: Some(Box::new(ElsePart::Else(empty_block(), Span::dummy())))
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -245,23 +147,7 @@ mod r#if {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_if(tokens);
|
let ast = parse_if(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: Some(Box::new(ElsePart::ElseIf(
|
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: None
|
|
||||||
},
|
|
||||||
Span::dummy()
|
|
||||||
)))
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -272,23 +158,7 @@ mod r#if {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_if(tokens);
|
let ast = parse_if(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: Some(Box::new(ElsePart::ElseIf(
|
|
||||||
IfStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block(),
|
|
||||||
else_part: Some(Box::new(ElsePart::Else(empty_block(), Span::dummy())))
|
|
||||||
},
|
|
||||||
Span::dummy()
|
|
||||||
)))
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -302,15 +172,9 @@ mod print {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn print_true() {
|
fn print_true() {
|
||||||
let tokens = [Print, True].map(token).into();
|
let tokens = [Print, True, Semi].map(token).into();
|
||||||
let ast = parse_print(tokens);
|
let ast = parse_print(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::Print(
|
|
||||||
Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
Span::dummy()
|
|
||||||
),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -326,14 +190,7 @@ mod r#while {
|
||||||
fn empty() {
|
fn empty() {
|
||||||
let tokens = [While, True, BraceO, BraceC].map(token).into();
|
let tokens = [While, True, BraceO, BraceC].map(token).into();
|
||||||
let ast = parse_while(tokens);
|
let ast = parse_while(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::While(WhileStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
body: empty_block()
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -342,22 +199,7 @@ mod r#while {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_while(tokens);
|
let ast = parse_while(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::While(WhileStmt {
|
|
||||||
span: Span::dummy(),
|
|
||||||
cond: Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: Expr::Literal(Literal::Boolean(false, Span::dummy())),
|
|
||||||
rhs: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
kind: BinaryOpKind::Or
|
|
||||||
})),
|
|
||||||
body: Block {
|
|
||||||
stmts: vec![Stmt::Break(Span::dummy())],
|
|
||||||
span: Span::dummy()
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -373,23 +215,14 @@ mod r#loop {
|
||||||
fn empty() {
|
fn empty() {
|
||||||
let tokens = [Loop, BraceO, BraceC].map(token).into();
|
let tokens = [Loop, BraceO, BraceC].map(token).into();
|
||||||
let ast = parse_loop(tokens);
|
let ast = parse_loop(tokens);
|
||||||
assert_eq!(Stmt::Loop(empty_block(), Span::dummy()), ast);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn with_break() {
|
fn with_break() {
|
||||||
let tokens = [Loop, BraceO, Break, Semi, BraceC].map(token).into();
|
let tokens = [Loop, BraceO, Break, Semi, BraceC].map(token).into();
|
||||||
let ast = parse_loop(tokens);
|
let ast = parse_loop(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::Loop(
|
|
||||||
Block {
|
|
||||||
stmts: vec![Stmt::Break(Span::dummy())],
|
|
||||||
span: Default::default()
|
|
||||||
},
|
|
||||||
Span::dummy()
|
|
||||||
),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -398,24 +231,13 @@ mod r#loop {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_loop(tokens);
|
let ast = parse_loop(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Stmt::Loop(
|
|
||||||
Block {
|
|
||||||
stmts: vec![
|
|
||||||
Stmt::Loop(empty_block(), Span::dummy()),
|
|
||||||
Stmt::Break(Span::dummy())
|
|
||||||
],
|
|
||||||
span: Span::dummy()
|
|
||||||
},
|
|
||||||
Span::dummy()
|
|
||||||
),
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod block {
|
mod block {
|
||||||
use super::prelude::*;
|
use super::prelude::*;
|
||||||
|
use crate::ast::Block;
|
||||||
|
|
||||||
fn parse_block(tokens: Vec<Token>) -> Block {
|
fn parse_block(tokens: Vec<Token>) -> Block {
|
||||||
let mut parser = parser(tokens);
|
let mut parser = parser(tokens);
|
||||||
|
|
@ -426,7 +248,7 @@ mod block {
|
||||||
fn empty() {
|
fn empty() {
|
||||||
let tokens = [BraceO, BraceC].map(token).into();
|
let tokens = [BraceO, BraceC].map(token).into();
|
||||||
let ast = parse_block(tokens);
|
let ast = parse_block(tokens);
|
||||||
assert_eq!(empty_block(), ast);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -435,32 +257,19 @@ mod block {
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let ast = parse_block(tokens);
|
let ast = parse_block(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Block {
|
|
||||||
stmts: vec![Stmt::Expr(num_lit(10.0)), Stmt::Expr(num_lit(20.0)),],
|
|
||||||
span: Span::dummy()
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn nested() {
|
fn nested() {
|
||||||
let tokens = [BraceO, BraceO, BraceC, BraceC].map(token).into();
|
let tokens = [BraceO, BraceO, BraceC, BraceC].map(token).into();
|
||||||
let ast = parse_block(tokens);
|
let ast = parse_block(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Block {
|
|
||||||
stmts: vec![Stmt::Block(empty_block())],
|
|
||||||
span: Span::dummy()
|
|
||||||
},
|
|
||||||
ast
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod expr {
|
mod expr {
|
||||||
use super::prelude::*;
|
use super::prelude::*;
|
||||||
use crate::ast::{UnaryOp, UnaryOpKind};
|
|
||||||
|
|
||||||
fn parse_expr(tokens: Vec<Token>) -> Expr {
|
fn parse_expr(tokens: Vec<Token>) -> Expr {
|
||||||
let mut parser = parser(tokens);
|
let mut parser = parser(tokens);
|
||||||
|
|
@ -487,22 +296,8 @@ mod expr {
|
||||||
let tokens = [Number(10.0), Plus, Number(20.0), Asterisk, Number(100.0)]
|
let tokens = [Number(10.0), Plus, Number(20.0), Asterisk, Number(100.0)]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let expr = parse_expr(tokens);
|
let ast = parse_expr(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(20.0),
|
|
||||||
rhs: num_lit(100.0),
|
|
||||||
|
|
||||||
kind: BinaryOpKind::Mul
|
|
||||||
})),
|
|
||||||
kind: BinaryOpKind::Add
|
|
||||||
})),
|
|
||||||
expr
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -510,20 +305,8 @@ mod expr {
|
||||||
let tokens = [Number(10.0), EqualEqual, Minus, Number(10.0)]
|
let tokens = [Number(10.0), EqualEqual, Minus, Number(10.0)]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let expr = parse_expr(tokens);
|
let ast = parse_expr(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: Expr::UnaryOp(Box::new(UnaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
expr: num_lit(10.0),
|
|
||||||
kind: UnaryOpKind::Neg
|
|
||||||
})),
|
|
||||||
kind: BinaryOpKind::Equal
|
|
||||||
})),
|
|
||||||
expr
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -539,22 +322,8 @@ mod expr {
|
||||||
]
|
]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let expr = parse_expr(tokens);
|
let ast = parse_expr(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
lhs: num_lit(20.0),
|
|
||||||
rhs: num_lit(30.0),
|
|
||||||
|
|
||||||
kind: BinaryOpKind::Add
|
|
||||||
})),
|
|
||||||
kind: BinaryOpKind::Mul
|
|
||||||
})),
|
|
||||||
expr
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -573,7 +342,7 @@ mod logical_or {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn and() {
|
fn and() {
|
||||||
test_literal_bin_op(Or, BinaryOpKind::Or, parse_logical_or);
|
test_literal_bin_op(Or, parse_logical_or);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -592,7 +361,7 @@ mod logical_and {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn and() {
|
fn and() {
|
||||||
test_literal_bin_op(And, BinaryOpKind::And, parse_logical_and);
|
test_literal_bin_op(And, parse_logical_and);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -611,12 +380,12 @@ mod equality {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn not_equal() {
|
fn not_equal() {
|
||||||
test_literal_bin_op(BangEqual, BinaryOpKind::NotEqual, parse_equality);
|
test_literal_bin_op(BangEqual, parse_equality);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn equal() {
|
fn equal() {
|
||||||
test_literal_bin_op(EqualEqual, BinaryOpKind::Equal, parse_equality);
|
test_literal_bin_op(EqualEqual, parse_equality);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -635,22 +404,22 @@ mod comparison {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn greater() {
|
fn greater() {
|
||||||
test_literal_bin_op(Greater, BinaryOpKind::Greater, parse_comparison);
|
test_literal_bin_op(Greater, parse_comparison);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn greater_equal() {
|
fn greater_equal() {
|
||||||
test_literal_bin_op(GreaterEqual, BinaryOpKind::GreaterEqual, parse_comparison);
|
test_literal_bin_op(GreaterEqual, parse_comparison);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn less() {
|
fn less() {
|
||||||
test_literal_bin_op(Less, BinaryOpKind::Less, parse_comparison);
|
test_literal_bin_op(Less, parse_comparison);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn less_equal() {
|
fn less_equal() {
|
||||||
test_literal_bin_op(LessEqual, BinaryOpKind::LessEqual, parse_comparison);
|
test_literal_bin_op(LessEqual, parse_comparison);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -669,12 +438,12 @@ mod term {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn add() {
|
fn add() {
|
||||||
test_literal_bin_op(Plus, BinaryOpKind::Add, parse_term);
|
test_literal_bin_op(Plus, parse_term);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sub() {
|
fn sub() {
|
||||||
test_literal_bin_op(Minus, BinaryOpKind::Sub, parse_term);
|
test_literal_bin_op(Minus, parse_term);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -693,23 +462,22 @@ mod factor {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn multiply() {
|
fn multiply() {
|
||||||
test_literal_bin_op(Asterisk, BinaryOpKind::Mul, parse_factor);
|
test_literal_bin_op(Asterisk, parse_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn divide() {
|
fn divide() {
|
||||||
test_literal_bin_op(Slash, BinaryOpKind::Div, parse_factor);
|
test_literal_bin_op(Slash, parse_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn modulo() {
|
fn modulo() {
|
||||||
test_literal_bin_op(Percent, BinaryOpKind::Mod, parse_factor);
|
test_literal_bin_op(Percent, parse_factor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mod unary {
|
mod unary {
|
||||||
use super::prelude::*;
|
use super::prelude::*;
|
||||||
use crate::ast::{UnaryOp, UnaryOpKind};
|
|
||||||
|
|
||||||
fn parse_unary(tokens: Vec<Token>) -> Expr {
|
fn parse_unary(tokens: Vec<Token>) -> Expr {
|
||||||
let mut parser = parser(tokens);
|
let mut parser = parser(tokens);
|
||||||
|
|
@ -721,34 +489,18 @@ mod unary {
|
||||||
test_number_literal(parse_unary);
|
test_number_literal(parse_unary);
|
||||||
}
|
}
|
||||||
|
|
||||||
// needs expr support
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn not() {
|
fn not() {
|
||||||
let tokens = [Not, True].map(token).into();
|
let tokens = [Not, True].map(token).into();
|
||||||
let unary = parse_unary(tokens);
|
let ast = parse_unary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::UnaryOp(Box::new(UnaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
expr: Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
kind: UnaryOpKind::Not
|
|
||||||
})),
|
|
||||||
unary
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn neg() {
|
fn neg() {
|
||||||
let tokens = [Minus, Number(10.0)].map(token).into();
|
let tokens = [Minus, Number(10.0)].map(token).into();
|
||||||
let unary = parse_unary(tokens);
|
let ast = parse_unary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::UnaryOp(Box::new(UnaryOp {
|
|
||||||
span: Span::dummy(),
|
|
||||||
expr: num_lit(10.0),
|
|
||||||
kind: UnaryOpKind::Neg
|
|
||||||
})),
|
|
||||||
unary
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -763,29 +515,15 @@ mod call {
|
||||||
#[test]
|
#[test]
|
||||||
fn field_simple() {
|
fn field_simple() {
|
||||||
let tokens = [Ident("hugo"), Dot, Ident("name")].map(token).into();
|
let tokens = [Ident("hugo"), Dot, Ident("name")].map(token).into();
|
||||||
let literal = parse_call(tokens);
|
let ast = parse_call(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("hugo")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Field(ident("name"))
|
|
||||||
})),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn simple() {
|
fn simple() {
|
||||||
let tokens = [Ident("print"), ParenO, ParenC].map(token).into();
|
let tokens = [Ident("print"), ParenO, ParenC].map(token).into();
|
||||||
let literal = parse_call(tokens);
|
let ast = parse_call(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("print")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Fn(Vec::new())
|
|
||||||
})),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -801,15 +539,8 @@ mod call {
|
||||||
]
|
]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let literal = parse_call(tokens);
|
let ast = parse_call(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("print")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Fn(vec![num_lit(10.0), num_lit(5.0)])
|
|
||||||
})),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -825,23 +556,8 @@ mod call {
|
||||||
]
|
]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let literal = parse_call(tokens);
|
let ast = parse_call(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("hugo")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Field(ident("name"))
|
|
||||||
})),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Field(ident("print"))
|
|
||||||
})),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Fn(vec![])
|
|
||||||
})),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -863,28 +579,8 @@ mod call {
|
||||||
]
|
]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let literal = parse_call(tokens);
|
let ast = parse_call(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Ident(ident("print")),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Fn(vec![Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::Call(Box::new(Call {
|
|
||||||
callee: Expr::BinaryOp(Box::new(BinaryOp {
|
|
||||||
span: Default::default(),
|
|
||||||
lhs: num_lit(10.0),
|
|
||||||
rhs: num_lit(5.0),
|
|
||||||
kind: BinaryOpKind::Add
|
|
||||||
})),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Field(ident("abs"))
|
|
||||||
})),
|
|
||||||
span: Default::default(),
|
|
||||||
kind: CallKind::Fn(vec![])
|
|
||||||
})),])
|
|
||||||
})),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -899,99 +595,78 @@ mod primary {
|
||||||
#[test]
|
#[test]
|
||||||
fn ident_test() {
|
fn ident_test() {
|
||||||
let tokens = [Ident("tokens")].map(token).into();
|
let tokens = [Ident("tokens")].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(Expr::Ident(ident("tokens")), literal);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn string() {
|
fn string() {
|
||||||
let tokens = [Number(10.0)].map(token).into();
|
let tokens = [Number(10.0)].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(num_lit(10.0), literal);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn number() {
|
fn number() {
|
||||||
let tokens = [String("uwu".to_string())].map(token).into();
|
let tokens = [String("uwu".to_string())].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::String("uwu".to_string(), Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn empty_object() {
|
fn empty_object() {
|
||||||
let tokens = [BraceO, BraceC].map(token).into();
|
let tokens = [BraceO, BraceC].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(Expr::Literal(Literal::Object(Span::dummy())), literal);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn empty_array() {
|
fn empty_array() {
|
||||||
let tokens = [BracketO, BracketC].map(token).into();
|
let tokens = [BracketO, BracketC].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(Vec::new(), Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn r#false() {
|
fn r#false() {
|
||||||
let tokens = [False].map(token).into();
|
let tokens = [False].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Boolean(false, Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn r#true() {
|
fn r#true() {
|
||||||
let tokens = [True].map(token).into();
|
let tokens = [True].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Boolean(true, Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn null() {
|
fn null() {
|
||||||
let tokens = [Null].map(token).into();
|
let tokens = [Null].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(Expr::Literal(Literal::Null(Span::dummy())), literal);
|
insta::assert_debug_snapshot!(ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn empty_array_literal() {
|
fn empty_array_literal() {
|
||||||
let tokens = [BracketO, BracketC].map(token).into();
|
let tokens = [BracketO, BracketC].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(Vec::new(), Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn single_array_literal() {
|
fn single_array_literal() {
|
||||||
let tokens = [BracketO, Number(10.0), BracketC].map(token).into();
|
let tokens = [BracketO, Number(10.0), BracketC].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(vec![num_lit(10.0)], Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn single_array_literal_trailing_comma() {
|
fn single_array_literal_trailing_comma() {
|
||||||
let tokens = [BracketO, Number(10.0), Comma, BracketC].map(token).into();
|
let tokens = [BracketO, Number(10.0), Comma, BracketC].map(token).into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(vec![num_lit(10.0)], Span::dummy())),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -999,14 +674,8 @@ mod primary {
|
||||||
let tokens = [BracketO, Number(10.0), Comma, Number(10.0), BracketC]
|
let tokens = [BracketO, Number(10.0), Comma, Number(10.0), BracketC]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(
|
|
||||||
vec![num_lit(10.0), num_lit(10.0)],
|
|
||||||
Span::dummy()
|
|
||||||
)),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1014,14 +683,8 @@ mod primary {
|
||||||
let tokens = [BracketO, Number(10.0), Comma, Number(10.0), Comma, BracketC]
|
let tokens = [BracketO, Number(10.0), Comma, Number(10.0), Comma, BracketC]
|
||||||
.map(token)
|
.map(token)
|
||||||
.into();
|
.into();
|
||||||
let literal = parse_primary(tokens);
|
let ast = parse_primary(tokens);
|
||||||
assert_eq!(
|
insta::assert_debug_snapshot!(ast);
|
||||||
Expr::Literal(Literal::Array(
|
|
||||||
vec![num_lit(10.0), num_lit(10.0)],
|
|
||||||
Span::dummy()
|
|
||||||
)),
|
|
||||||
literal
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue