Fix primary priority

This commit is contained in:
dalance 2019-07-30 17:00:23 +09:00
parent ea9af9282e
commit 50d51bd2d2
2 changed files with 21 additions and 20 deletions

View File

@ -7,6 +7,9 @@ use crate::*;
pub(crate) fn constant_primary(s: Span) -> IResult<Span, ConstantPrimary> {
alt((
map(keyword("null"), |x| ConstantPrimary::Null(Box::new(x))),
map(constant_assignment_pattern_expression, |x| {
ConstantPrimary::ConstantAssignmentPatternExpression(Box::new(x))
}),
map(primary_literal, |x| {
ConstantPrimary::PrimaryLiteral(Box::new(x))
}),
@ -29,9 +32,6 @@ pub(crate) fn constant_primary(s: Span) -> IResult<Span, ConstantPrimary> {
map(constant_cast, |x| {
ConstantPrimary::ConstantCast(Box::new(x))
}),
map(constant_assignment_pattern_expression, |x| {
ConstantPrimary::ConstantAssignmentPatternExpression(Box::new(x))
}),
map(type_reference, |x| {
ConstantPrimary::TypeReference(Box::new(x))
}),
@ -147,8 +147,11 @@ pub(crate) fn primary(s: Span) -> IResult<Span, Primary> {
map(keyword("this"), |x| Primary::This(Box::new(x))),
map(keyword("$"), |x| Primary::Dollar(Box::new(x))),
map(keyword("null"), |x| Primary::Null(Box::new(x))),
map(assignment_pattern_expression, |x| {
Primary::AssignmentPatternExpression(Box::new(x))
}),
map(primary_literal, |x| Primary::PrimaryLiteral(Box::new(x))),
primary_hierarchical,
terminated(primary_hierarchical, peek(none_of("("))),
map(empty_unpacked_array_concatenation, |x| {
Primary::EmptyUnpackedArrayConcatenation(Box::new(x))
}),
@ -160,9 +163,6 @@ pub(crate) fn primary(s: Span) -> IResult<Span, Primary> {
map(let_expression, |x| Primary::LetExpression(Box::new(x))),
primary_mintypmax_expression,
map(cast, |x| Primary::Cast(Box::new(x))),
map(assignment_pattern_expression, |x| {
Primary::AssignmentPatternExpression(Box::new(x))
}),
map(streaming_concatenation, |x| {
Primary::StreamingConcatenation(Box::new(x))
}),

View File

@ -966,13 +966,12 @@ fn test_clause5() {
r##"c = '{default:0}; // all elements of structure c are set to 0"##,
Ok((_, _))
);
//TODO
//test!(
// module_item,
// r##"d = ab'{int:1, shortreal:1.0}; // data type and default value for all
// // members of that type"##,
// Ok((_, _))
//);
test!(
module_item,
r##"d = ab'{int:1, shortreal:1.0}; // data type and default value for all
// members of that type"##,
Ok((_, _))
);
test!(
module_item,
r##"ab abarr[1:0] = '{'{1, 1.0}, '{2, 2.0}};"##,
@ -1039,15 +1038,17 @@ fn test_clause5() {
// to be the string cla."##,
Ok((_, _))
);
//TODO
//test!(
// module_item,
// r##"a = add (* mode = "cla" *) (b, c);"##,
// Ok((_, _))
//);
test!(
module_item,
r##"a = add (* mode = "cla" *) (b, c);"##,
Ok((_, _))
);
test!(
module_item,
r##"a = b ? (* no_glitch *) c : d;"##,
Ok((_, _))
);
}
#[test]
fn test_debug() {}