diff --git a/crates/emitter/src/emitter.rs b/crates/emitter/src/emitter.rs index ed6af8c9..6479e421 100644 --- a/crates/emitter/src/emitter.rs +++ b/crates/emitter/src/emitter.rs @@ -3052,7 +3052,7 @@ impl VerylWalker for Emitter { let text = arg.embed_content.embed_content_token.to_string(); let text = text.strip_prefix("{{{").unwrap(); let text = text.strip_suffix("}}}").unwrap(); - self.str(text); + self.veryl_token(&arg.embed_content.embed_content_token.replace(text)); } } diff --git a/crates/parser/src/generated/veryl-exp.par b/crates/parser/src/generated/veryl-exp.par index 8f7598e7..f65e49f2 100644 --- a/crates/parser/src/generated/veryl-exp.par +++ b/crates/parser/src/generated/veryl-exp.par @@ -903,7 +903,7 @@ /* 888 */ PackageItem: FinalDeclaration; /* 889 */ EmbedDeclaration: Embed LParen Identifier RParen Identifier EmbedContent; /* 890 */ EmbedContent: EmbedContentToken : VerylToken; -/* 891 */ EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm %pop(); +/* 891 */ EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm %pop() Comments; /* 892 */ EmbedContentTokenList /* Vec::Push */: EmbedItem EmbedContentTokenList; /* 893 */ EmbedContentTokenList /* Vec::New */: ; /* 894 */ EmbedItem: LBraceTerm EmbedItemList /* Vec */ RBraceTerm; diff --git a/crates/parser/src/generated/veryl_grammar_trait.rs b/crates/parser/src/generated/veryl_grammar_trait.rs index 8bf50df6..8d069af0 100644 --- a/crates/parser/src/generated/veryl_grammar_trait.rs +++ b/crates/parser/src/generated/veryl_grammar_trait.rs @@ -5906,6 +5906,7 @@ pub struct EmbedContentToken { pub r_brace_term: Box, pub r_brace_term0: Box, pub r_brace_term1: Box, + pub comments: Box, } /// @@ -32550,7 +32551,7 @@ impl<'t, 'u> VerylGrammarAuto<'t, 'u> { /// Semantic action for production 891: /// - /// `EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm %pop();` + /// `EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm %pop() Comments;` /// #[parol_runtime::function_name::named] fn embed_content_token( @@ -32562,9 +32563,11 @@ impl<'t, 'u> VerylGrammarAuto<'t, 'u> { _r_brace_term: &ParseTreeType<'t>, _r_brace_term0: &ParseTreeType<'t>, _r_brace_term1: &ParseTreeType<'t>, + _comments: &ParseTreeType<'t>, ) -> Result<()> { let context = function_name!(); trace!("{}", self.trace_item_stack(context)); + let comments = pop_item!(self, comments, Comments, context); let r_brace_term1 = pop_item!(self, r_brace_term1, RBraceTerm, context); let r_brace_term0 = pop_item!(self, r_brace_term0, RBraceTerm, context); let r_brace_term = pop_item!(self, r_brace_term, RBraceTerm, context); @@ -32585,6 +32588,7 @@ impl<'t, 'u> VerylGrammarAuto<'t, 'u> { r_brace_term: Box::new(r_brace_term), r_brace_term0: Box::new(r_brace_term0), r_brace_term1: Box::new(r_brace_term1), + comments: Box::new(comments), }; // Calling user action here self.user_grammar @@ -34351,6 +34355,7 @@ impl<'t> UserActionsTrait<'t> for VerylGrammarAuto<'t, '_> { &children[4], &children[5], &children[6], + &children[7], ), 892 => self.embed_content_token_list_0(&children[0], &children[1]), 893 => self.embed_content_token_list_1(), diff --git a/crates/parser/src/generated/veryl_parser.rs b/crates/parser/src/generated/veryl_parser.rs index 3f75950b..09eecebf 100644 --- a/crates/parser/src/generated/veryl_parser.rs +++ b/crates/parser/src/generated/veryl_parser.rs @@ -21482,10 +21482,11 @@ pub const PRODUCTIONS: &[Production; 915] = &[ lhs: 133, production: &[ParseType::N(134)], }, - // 891 - EmbedContentToken: LBraceTerm Push(1) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm Pop; + // 891 - EmbedContentToken: LBraceTerm Push(1) LBraceTerm LBraceTerm EmbedContentTokenList /* Vec */ RBraceTerm RBraceTerm RBraceTerm Pop Comments; Production { lhs: 134, production: &[ + ParseType::N(100), ParseType::Pop, ParseType::N(499), ParseType::N(499), diff --git a/crates/parser/src/veryl_token.rs b/crates/parser/src/veryl_token.rs index 9eb1f5dc..e2f99837 100644 --- a/crates/parser/src/veryl_token.rs +++ b/crates/parser/src/veryl_token.rs @@ -664,10 +664,13 @@ impl TryFrom<&EmbedContentToken> for VerylToken { text.push_str(&x.r_brace_term0.r_brace_term.to_string()); text.push_str(&x.r_brace_term1.r_brace_term.to_string()); + let mut comments = Vec::new(); + if let Some(ref x) = x.comments.comments_opt { + let mut tokens = split_comment_token(x.comments_term.comments_term); + comments.append(&mut tokens) + } + let token = Token::new(&text, line, column, length, pos, source); - Ok(VerylToken { - token, - comments: Vec::new(), - }) + Ok(VerylToken { token, comments }) } } diff --git a/crates/parser/veryl.par b/crates/parser/veryl.par index 8648183c..5c3dab86 100644 --- a/crates/parser/veryl.par +++ b/crates/parser/veryl.par @@ -797,7 +797,7 @@ EmbedDeclaration: Embed LParen Identifier RParen Identifier EmbedContent; EmbedContent: EmbedContentToken: VerylToken; -EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm { EmbedItem } RBraceTerm RBraceTerm RBraceTerm %pop(); +EmbedContentToken: LBraceTerm %push(Embed) LBraceTerm LBraceTerm { EmbedItem } RBraceTerm RBraceTerm RBraceTerm %pop() Comments; EmbedItem: LBraceTerm { EmbedItem } RBraceTerm | AnyTerm; diff --git a/testcases/sv/47_embed.sv b/testcases/sv/47_embed.sv index 59860301..89977ea3 100644 --- a/testcases/sv/47_embed.sv +++ b/testcases/sv/47_embed.sv @@ -1,9 +1,12 @@ module veryl_testcase_Module47; endmodule + module test; initial begin $display("hello"); end endmodule + +// comment diff --git a/testcases/sv/48_test.sv b/testcases/sv/48_test.sv index fc93239c..8995f25a 100644 --- a/testcases/sv/48_test.sv +++ b/testcases/sv/48_test.sv @@ -13,7 +13,6 @@ module test1; $finish(); end endmodule - `endif `ifdef __veryl_test_veryl_testcase_test2__ @@ -22,7 +21,6 @@ module test2; // parse error initial endmodule - `endif `ifdef __veryl_test_veryl_testcase_test3__ @@ -32,7 +30,6 @@ module test3; tri logic a; always_comb a = 1; endmodule - `endif `ifdef __veryl_test_veryl_testcase_test4__ diff --git a/testcases/veryl/47_embed.veryl b/testcases/veryl/47_embed.veryl index c7ef5168..953cc2b3 100644 --- a/testcases/veryl/47_embed.veryl +++ b/testcases/veryl/47_embed.veryl @@ -7,3 +7,5 @@ module test; end endmodule }}} + +// comment