From 50d51bd2d26feb60fea76dcf9577d4cb3767cbb4 Mon Sep 17 00:00:00 2001 From: dalance Date: Tue, 30 Jul 2019 17:00:23 +0900 Subject: [PATCH] Fix primary priority --- sv-parser-parser/src/expressions/primaries.rs | 14 +++++----- sv-parser-parser/src/tests.rs | 27 ++++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/sv-parser-parser/src/expressions/primaries.rs b/sv-parser-parser/src/expressions/primaries.rs index f0c4f51..2698f5f 100644 --- a/sv-parser-parser/src/expressions/primaries.rs +++ b/sv-parser-parser/src/expressions/primaries.rs @@ -7,6 +7,9 @@ use crate::*; pub(crate) fn constant_primary(s: Span) -> IResult { 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 { 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 { 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 { 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)) }), diff --git a/sv-parser-parser/src/tests.rs b/sv-parser-parser/src/tests.rs index aba68a7..4181c7b 100644 --- a/sv-parser-parser/src/tests.rs +++ b/sv-parser-parser/src/tests.rs @@ -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() {}