Block syntax fixes
This commit is contained in:
parent
96d12f3659
commit
a31735da88
@ -23,8 +23,8 @@ peg::parser! {
|
|||||||
|
|
||||||
//Note - this is a hack, ideally the rule `rule block() -> Block = "{" _ items:(statement() **
|
//Note - this is a hack, ideally the rule `rule block() -> Block = "{" _ items:(statement() **
|
||||||
//delimiter()) _ "}" { items.into() }` would've worked, but it doesn't.
|
//delimiter()) _ "}" { items.into() }` would've worked, but it doesn't.
|
||||||
pub rule block() -> Block = "{" _ items:block_item()* _ "}" { items.into() } /
|
pub rule block() -> Block = "{" __ items:block_item()* __ "}" { items.into() } /
|
||||||
"{" _ stmt:statement() _ "}" { vec![stmt].into() }
|
"{" __ stmt:statement() __ "}" { vec![stmt].into() }
|
||||||
|
|
||||||
rule block_item() -> Statement =
|
rule block_item() -> Statement =
|
||||||
stmt:statement() delimiter()+ { stmt }
|
stmt:statement() delimiter()+ { stmt }
|
||||||
@ -63,7 +63,7 @@ peg::parser! {
|
|||||||
sig:func_signature() { Declaration::FuncSig(sig) }
|
sig:func_signature() { Declaration::FuncSig(sig) }
|
||||||
|
|
||||||
rule func_declaration() -> Declaration =
|
rule func_declaration() -> Declaration =
|
||||||
sig:func_signature() __ body:block() { Declaration::FuncDecl(sig, body) }
|
_ sig:func_signature() __ body:block() { Declaration::FuncDecl(sig, body) }
|
||||||
|
|
||||||
//TODO handle operators
|
//TODO handle operators
|
||||||
rule func_signature() -> Signature =
|
rule func_signature() -> Signature =
|
||||||
@ -82,7 +82,7 @@ peg::parser! {
|
|||||||
|
|
||||||
|
|
||||||
rule annotation() -> Declaration =
|
rule annotation() -> Declaration =
|
||||||
"@" name:identifier() args:annotation_args()? delimiter() _ inner:statement() { Declaration::Annotation {
|
"@" name:identifier() args:annotation_args()? delimiter()+ _ inner:statement() { Declaration::Annotation {
|
||||||
name: rc_string(name), arguments: if let Some(args) = args { args } else { vec![] }, inner: Box::new(inner) }
|
name: rc_string(name), arguments: if let Some(args) = args { args } else { vec![] }, inner: Box::new(inner) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -817,6 +817,22 @@ fn functions() {
|
|||||||
type_anno: Some(TypeIdentifier::Singleton(TypeSingletonName { name: rc("Int"), params: vec![] })),
|
type_anno: Some(TypeIdentifier::Singleton(TypeSingletonName { name: rc("Int"), params: vec![] })),
|
||||||
})))]
|
})))]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
let source = r#"
|
||||||
|
fn some_function() {
|
||||||
|
|
||||||
|
}"#;
|
||||||
|
|
||||||
|
assert_ast2!(source, vec![fn_decl(
|
||||||
|
Signature {
|
||||||
|
name: rc("some_function"),
|
||||||
|
operator: false,
|
||||||
|
type_anno: None,
|
||||||
|
params: vec![]
|
||||||
|
},
|
||||||
|
vec![].into()
|
||||||
|
)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -976,7 +992,7 @@ fn annotations() {
|
|||||||
vec![].into(),
|
vec![].into(),
|
||||||
));
|
));
|
||||||
|
|
||||||
assert_ast! {
|
assert_ast2! {
|
||||||
r#"
|
r#"
|
||||||
@test_annotation
|
@test_annotation
|
||||||
fn some_function() {
|
fn some_function() {
|
||||||
@ -990,7 +1006,7 @@ fn annotations() {
|
|||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_ast! {
|
assert_ast2! {
|
||||||
r#"
|
r#"
|
||||||
@test_annotation(some,value)
|
@test_annotation(some,value)
|
||||||
@another_annotation
|
@another_annotation
|
||||||
|
@ -77,7 +77,7 @@ x is Some(t) // type bool
|
|||||||
|
|
||||||
if x {
|
if x {
|
||||||
is Some(t) => {
|
is Some(t) => {
|
||||||
},
|
}
|
||||||
is None => {
|
is None => {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user