From 9015bb0a95a6843e00e4017023c7ad2f6ea33a91 Mon Sep 17 00:00:00 2001 From: erihsu Date: Sun, 3 Apr 2022 15:37:22 +0800 Subject: [PATCH 1/3] sv-parser support parse class declare --- .../source_text/system_verilog_source_text.rs | 3 ++ sv-parser-pp/src/preprocess.rs | 32 +++++++++++++++++++ sv-parser-pp/testcases/test21.sv | 7 ++++ sv-parser-pp/testcases/test22.sv | 18 +++++++++++ .../source_text/system_verilog_source_text.rs | 1 + 5 files changed, 61 insertions(+) create mode 100644 sv-parser-pp/testcases/test21.sv create mode 100644 sv-parser-pp/testcases/test22.sv diff --git a/sv-parser-parser/src/source_text/system_verilog_source_text.rs b/sv-parser-parser/src/source_text/system_verilog_source_text.rs index d8a4d97..c1b6c29 100644 --- a/sv-parser-parser/src/source_text/system_verilog_source_text.rs +++ b/sv-parser-parser/src/source_text/system_verilog_source_text.rs @@ -50,6 +50,9 @@ pub(crate) fn description(s: Span) -> IResult { map(config_declaration, |x| { Description::ConfigDeclaration(Box::new(x)) }), + map(class_declaration, |x| { + Description::ClassDeclaration(Box::new(x)) + }), ))(s) } diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index 849527f..3545535 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -1339,4 +1339,36 @@ endmodule ); assert_eq!(ret.origin(80).unwrap().1, 60); } + + + #[test] + fn test21() { + let include_paths = [get_testcase("")]; + let (ret, _) = preprocess( + get_testcase("test21.sv"), + &HashMap::new(), + &include_paths, + false, + false, + ) + .unwrap(); + } + + #[test] + fn test22() { + let include_paths = [get_testcase("")]; + let (ret, _) = preprocess( + get_testcase("test22.sv"), + &HashMap::new(), + &include_paths, + false, + false, + ) + .unwrap(); + } + + + + + } diff --git a/sv-parser-pp/testcases/test21.sv b/sv-parser-pp/testcases/test21.sv new file mode 100644 index 0000000..cfa2032 --- /dev/null +++ b/sv-parser-pp/testcases/test21.sv @@ -0,0 +1,7 @@ +class test21 extends base_class /* base class*/; + int a; + int b; + function int funcname(); + return 2; + endfunction : funcname +endclass : test21 \ No newline at end of file diff --git a/sv-parser-pp/testcases/test22.sv b/sv-parser-pp/testcases/test22.sv new file mode 100644 index 0000000..34266de --- /dev/null +++ b/sv-parser-pp/testcases/test22.sv @@ -0,0 +1,18 @@ +// it's for test + +`ifndef ABCD +`define ABCD + +package my_package; + + import uvm_pkg::*; + import internal_pkg::*; + + // include + `include "test21.sv" + + +endpackage : my_package + + +`endif \ No newline at end of file diff --git a/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs b/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs index e66a47f..9af92ef 100644 --- a/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs +++ b/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs @@ -23,6 +23,7 @@ pub enum Description { PackageItem(Box), BindDirective(Box), ConfigDeclaration(Box), + ClassDeclaration(Box), } #[derive(Clone, Debug, PartialEq, Node)] From 82ecd16f20f1a9461440c10107855d984125778e Mon Sep 17 00:00:00 2001 From: Eric Date: Mon, 4 Apr 2022 15:15:56 +0800 Subject: [PATCH 2/3] parser support differentiate newline and space --- sv-parser-parser/src/utils.rs | 5 ++++- sv-parser-syntaxtree/src/special_node.rs | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sv-parser-parser/src/utils.rs b/sv-parser-parser/src/utils.rs index c94365e..902777c 100644 --- a/sv-parser-parser/src/utils.rs +++ b/sv-parser-parser/src/utils.rs @@ -314,9 +314,12 @@ pub(crate) fn white_space(s: Span) -> IResult { })(s) } else { alt(( - map(multispace1, |x: Span| { + map(space1, |x: Span| { WhiteSpace::Space(Box::new(into_locate(x))) }), + map(multispace1, |x: Span| { + WhiteSpace::Newline(Box::new(into_locate(x))) + }), map(preceded(peek(char('/')), comment), |x| { WhiteSpace::Comment(Box::new(x)) }), diff --git a/sv-parser-syntaxtree/src/special_node.rs b/sv-parser-syntaxtree/src/special_node.rs index 753824d..fd1b528 100644 --- a/sv-parser-syntaxtree/src/special_node.rs +++ b/sv-parser-syntaxtree/src/special_node.rs @@ -14,6 +14,7 @@ pub struct Keyword { #[derive(Clone, Debug, PartialEq, Node)] pub enum WhiteSpace { + Newline(Box), Space(Box), Comment(Box), CompilerDirective(Box), From 5078b0b21a26c298c14cef82a88482336b22544f Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 29 Apr 2022 20:27:27 +0800 Subject: [PATCH 3/3] Revert "sv-parser support parse class declare" This reverts commit 9015bb0a95a6843e00e4017023c7ad2f6ea33a91. --- .../source_text/system_verilog_source_text.rs | 3 -- sv-parser-pp/src/preprocess.rs | 32 ------------------- sv-parser-pp/testcases/test21.sv | 7 ---- sv-parser-pp/testcases/test22.sv | 18 ----------- .../source_text/system_verilog_source_text.rs | 1 - 5 files changed, 61 deletions(-) delete mode 100644 sv-parser-pp/testcases/test21.sv delete mode 100644 sv-parser-pp/testcases/test22.sv diff --git a/sv-parser-parser/src/source_text/system_verilog_source_text.rs b/sv-parser-parser/src/source_text/system_verilog_source_text.rs index c1b6c29..d8a4d97 100644 --- a/sv-parser-parser/src/source_text/system_verilog_source_text.rs +++ b/sv-parser-parser/src/source_text/system_verilog_source_text.rs @@ -50,9 +50,6 @@ pub(crate) fn description(s: Span) -> IResult { map(config_declaration, |x| { Description::ConfigDeclaration(Box::new(x)) }), - map(class_declaration, |x| { - Description::ClassDeclaration(Box::new(x)) - }), ))(s) } diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index 3545535..849527f 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -1339,36 +1339,4 @@ endmodule ); assert_eq!(ret.origin(80).unwrap().1, 60); } - - - #[test] - fn test21() { - let include_paths = [get_testcase("")]; - let (ret, _) = preprocess( - get_testcase("test21.sv"), - &HashMap::new(), - &include_paths, - false, - false, - ) - .unwrap(); - } - - #[test] - fn test22() { - let include_paths = [get_testcase("")]; - let (ret, _) = preprocess( - get_testcase("test22.sv"), - &HashMap::new(), - &include_paths, - false, - false, - ) - .unwrap(); - } - - - - - } diff --git a/sv-parser-pp/testcases/test21.sv b/sv-parser-pp/testcases/test21.sv deleted file mode 100644 index cfa2032..0000000 --- a/sv-parser-pp/testcases/test21.sv +++ /dev/null @@ -1,7 +0,0 @@ -class test21 extends base_class /* base class*/; - int a; - int b; - function int funcname(); - return 2; - endfunction : funcname -endclass : test21 \ No newline at end of file diff --git a/sv-parser-pp/testcases/test22.sv b/sv-parser-pp/testcases/test22.sv deleted file mode 100644 index 34266de..0000000 --- a/sv-parser-pp/testcases/test22.sv +++ /dev/null @@ -1,18 +0,0 @@ -// it's for test - -`ifndef ABCD -`define ABCD - -package my_package; - - import uvm_pkg::*; - import internal_pkg::*; - - // include - `include "test21.sv" - - -endpackage : my_package - - -`endif \ No newline at end of file diff --git a/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs b/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs index 9af92ef..e66a47f 100644 --- a/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs +++ b/sv-parser-syntaxtree/src/source_text/system_verilog_source_text.rs @@ -23,7 +23,6 @@ pub enum Description { PackageItem(Box), BindDirective(Box), ConfigDeclaration(Box), - ClassDeclaration(Box), } #[derive(Clone, Debug, PartialEq, Node)]