Setup parser testing with various tests
This commit is contained in:
parent
77738f7e20
commit
9d243e33b6
|
@ -1,6 +1,33 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Statement(
|
||||
Enum {
|
||||
name: Ident(
|
||||
"Foo",
|
||||
),
|
||||
fields: [],
|
||||
},
|
||||
),
|
||||
Statement(
|
||||
Enum {
|
||||
name: Ident(
|
||||
"Bar",
|
||||
),
|
||||
fields: [
|
||||
Ident(
|
||||
"A",
|
||||
),
|
||||
Ident(
|
||||
"B",
|
||||
),
|
||||
Ident(
|
||||
"C",
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
enum Foo {}
|
||||
|
||||
enum Bar {
|
||||
A,
|
||||
B,
|
||||
C,
|
||||
}
|
|
@ -1,6 +1,57 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Expr(
|
||||
BinOp {
|
||||
typ: Eq,
|
||||
left: UnOp {
|
||||
typ: Star,
|
||||
right: Path(
|
||||
Path(
|
||||
[
|
||||
Ident(
|
||||
"a",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
},
|
||||
right: BinOp {
|
||||
typ: EqEq,
|
||||
left: BinOp {
|
||||
typ: Star,
|
||||
left: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 1,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 3,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 4,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
*a = 1 * 3 == 4;
|
||||
b.c = 3/4 == *a;
|
||||
c->d = (a->b.c->d) / 2;
|
||||
*d->e.f = 2 / a->b.c->d;
|
||||
e = a->b.c->d / 2;
|
||||
f = a.b.c.d / 2;
|
||||
g = a.b[*a.c] * 5;
|
||||
|
|
@ -1,6 +1,191 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Statement(
|
||||
Fn {
|
||||
struct_name: None,
|
||||
name: Ident(
|
||||
"main",
|
||||
),
|
||||
params: [
|
||||
(
|
||||
Ident(
|
||||
"argc",
|
||||
),
|
||||
Owned(
|
||||
Ident(
|
||||
"i32",
|
||||
),
|
||||
),
|
||||
),
|
||||
(
|
||||
Ident(
|
||||
"argv",
|
||||
),
|
||||
Ref {
|
||||
inner: Array {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Str",
|
||||
),
|
||||
),
|
||||
},
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
ret_type: Some(
|
||||
Owned(
|
||||
Ident(
|
||||
"i32",
|
||||
),
|
||||
),
|
||||
),
|
||||
qual_const: false,
|
||||
qual_extern: None,
|
||||
body: Some(
|
||||
Block(
|
||||
[
|
||||
Expr(
|
||||
Return(
|
||||
Some(
|
||||
Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 0,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
Statement(
|
||||
Fn {
|
||||
struct_name: Some(
|
||||
Ident(
|
||||
"Baz",
|
||||
),
|
||||
),
|
||||
name: Ident(
|
||||
"main",
|
||||
),
|
||||
params: [
|
||||
(
|
||||
Ident(
|
||||
"self",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Baz",
|
||||
),
|
||||
),
|
||||
mutable: true,
|
||||
},
|
||||
),
|
||||
(
|
||||
Ident(
|
||||
"a",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Foo",
|
||||
),
|
||||
),
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
(
|
||||
Ident(
|
||||
"b",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Bar",
|
||||
),
|
||||
),
|
||||
mutable: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
ret_type: Some(
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Nya",
|
||||
),
|
||||
),
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
qual_const: false,
|
||||
qual_extern: None,
|
||||
body: None,
|
||||
},
|
||||
),
|
||||
Statement(
|
||||
Fn {
|
||||
struct_name: Some(
|
||||
Ident(
|
||||
"Baz",
|
||||
),
|
||||
),
|
||||
name: Ident(
|
||||
"main",
|
||||
),
|
||||
params: [
|
||||
(
|
||||
Ident(
|
||||
"a",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Foo",
|
||||
),
|
||||
),
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
(
|
||||
Ident(
|
||||
"b",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Bar",
|
||||
),
|
||||
),
|
||||
mutable: true,
|
||||
},
|
||||
),
|
||||
],
|
||||
ret_type: Some(
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"Nya",
|
||||
),
|
||||
),
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
qual_const: false,
|
||||
qual_extern: None,
|
||||
body: None,
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
fn main(argc: i32, argv: &[Str]) -> i32 {
|
||||
return 0;
|
||||
}
|
||||
fn Baz.main(self: &mut Baz, a: &Foo, b: &mut Bar) -> &Nya;
|
||||
fn Baz.main(a: &Foo, b: &mut Bar) -> &Nya;
|
|
@ -1,6 +1,38 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Expr(
|
||||
If(
|
||||
IfExpr {
|
||||
test: BinOp {
|
||||
typ: Gt,
|
||||
left: Path(
|
||||
Path(
|
||||
[
|
||||
Ident(
|
||||
"i",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 3,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
body: Block(
|
||||
[],
|
||||
),
|
||||
else_if: None,
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
if i > 3 {
|
||||
|
||||
}
|
||||
|
||||
if 1 {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if 1 {
|
||||
|
||||
} else if a > 3 {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
|
@ -1,6 +1,110 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Expr(
|
||||
ForLoop {
|
||||
init: Statement(
|
||||
Let {
|
||||
name: Ident(
|
||||
"i",
|
||||
),
|
||||
typ: None,
|
||||
val: Some(
|
||||
Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 0,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
test: BinOp {
|
||||
typ: Lt,
|
||||
left: Path(
|
||||
Path(
|
||||
[
|
||||
Ident(
|
||||
"i",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 10,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
on_loop: BinOp {
|
||||
typ: AddEq,
|
||||
left: Path(
|
||||
Path(
|
||||
[
|
||||
Ident(
|
||||
"i",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 1,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
body: Block(
|
||||
[],
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
WhileLoop {
|
||||
test: BinOp {
|
||||
typ: Gt,
|
||||
left: Path(
|
||||
Path(
|
||||
[
|
||||
Ident(
|
||||
"i",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
right: Literal(
|
||||
Number(
|
||||
Number {
|
||||
val: 3,
|
||||
base: 10,
|
||||
signed: false,
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
body: Block(
|
||||
[],
|
||||
),
|
||||
},
|
||||
),
|
||||
Expr(
|
||||
InfLoop {
|
||||
body: Block(
|
||||
[],
|
||||
),
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
for let i = 0; i < 10; i += 1 {}
|
||||
while i > 3 {}
|
||||
loop {}
|
|
@ -1,6 +1,37 @@
|
|||
Program {
|
||||
ast: Block(
|
||||
[],
|
||||
[
|
||||
Statement(
|
||||
Struct {
|
||||
name: Ident(
|
||||
"foo_t",
|
||||
),
|
||||
fields: [],
|
||||
},
|
||||
),
|
||||
Statement(
|
||||
Struct {
|
||||
name: Ident(
|
||||
"bar_t",
|
||||
),
|
||||
fields: [
|
||||
(
|
||||
Ident(
|
||||
"a",
|
||||
),
|
||||
Ref {
|
||||
inner: Owned(
|
||||
Ident(
|
||||
"bar_t",
|
||||
),
|
||||
),
|
||||
mutable: false,
|
||||
},
|
||||
),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
structs: {},
|
||||
enums: {},
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
struct foo_t {}
|
||||
|
||||
struct bar_t {
|
||||
a: &bar_t
|
||||
}
|
Loading…
Reference in New Issue
Block a user