From 377fa5bd42ee54a2fb7cee568c33e51a3c67a6e5 Mon Sep 17 00:00:00 2001 From: dalance Date: Mon, 12 Aug 2019 02:33:23 +0900 Subject: [PATCH] Fix bugs --- .../declarations/net_and_variable_types.rs | 18 +++++++- .../src/declarations/task_declarations.rs | 6 +-- sv-parser-parser/src/tests.rs | 44 +++++++++---------- 3 files changed, 42 insertions(+), 26 deletions(-) diff --git a/sv-parser-parser/src/declarations/net_and_variable_types.rs b/sv-parser-parser/src/declarations/net_and_variable_types.rs index 18bcd11..042f587 100644 --- a/sv-parser-parser/src/declarations/net_and_variable_types.rs +++ b/sv-parser-parser/src/declarations/net_and_variable_types.rs @@ -215,11 +215,27 @@ pub(crate) fn enum_name_declaration(s: Span) -> IResult IResult { - let (s, a) = class_type(s)?; + let (s, a) = class_type_class_scope(s)?; let (s, b) = symbol("::")(s)?; Ok((s, ClassScope { nodes: (a, b) })) } +#[tracable_parser] +#[packrat_parser] +pub(crate) fn class_type_class_scope(s: Span) -> IResult { + let (s, a) = ps_class_identifier(s)?; + let (s, b) = opt(parameter_value_assignment)(s)?; + let (s, c) = many0(terminated( + triple( + symbol("::"), + class_identifier, + opt(parameter_value_assignment), + ), + peek(symbol("::")), + ))(s)?; + Ok((s, ClassType { nodes: (a, b, c) })) +} + #[tracable_parser] #[packrat_parser] pub(crate) fn class_type(s: Span) -> IResult { diff --git a/sv-parser-parser/src/declarations/task_declarations.rs b/sv-parser-parser/src/declarations/task_declarations.rs index e3c0183..a65b5a2 100644 --- a/sv-parser-parser/src/declarations/task_declarations.rs +++ b/sv-parser-parser/src/declarations/task_declarations.rs @@ -87,7 +87,7 @@ pub(crate) fn tf_port_item(s: Span) -> IResult { let (s, e) = opt(triple( port_identifier, many0(variable_dimension), - opt(pair(symbol(":"), expression)), + opt(pair(symbol("="), expression)), ))(s)?; Ok(( s, @@ -108,7 +108,7 @@ pub(crate) fn data_type_or_implicit_tf_port_item(s: Span) -> IResult IResult