Skip to content

Commit

Permalink
Merge pull request #736 from veryl-lang/fix_embed_comment
Browse files Browse the repository at this point in the history
Fix parse error at comment after embed
  • Loading branch information
dalance committed May 27, 2024
2 parents be68e24 + b21e551 commit 729c569
Show file tree
Hide file tree
Showing 9 changed files with 23 additions and 12 deletions.
2 changes: 1 addition & 1 deletion crates/emitter/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/parser/src/generated/veryl-exp.par
Original file line number Diff line number Diff line change
Expand Up @@ -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<T>::Push */: EmbedItem EmbedContentTokenList;
/* 893 */ EmbedContentTokenList /* Vec<T>::New */: ;
/* 894 */ EmbedItem: LBraceTerm EmbedItemList /* Vec */ RBraceTerm;
Expand Down
7 changes: 6 additions & 1 deletion crates/parser/src/generated/veryl_grammar_trait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5906,6 +5906,7 @@ pub struct EmbedContentToken {
pub r_brace_term: Box<RBraceTerm>,
pub r_brace_term0: Box<RBraceTerm>,
pub r_brace_term1: Box<RBraceTerm>,
pub comments: Box<Comments>,
}

///
Expand Down Expand Up @@ -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(
Expand All @@ -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);
Expand All @@ -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
Expand Down Expand Up @@ -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(),
Expand Down
3 changes: 2 additions & 1 deletion crates/parser/src/generated/veryl_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
11 changes: 7 additions & 4 deletions crates/parser/src/veryl_token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 })
}
}
2 changes: 1 addition & 1 deletion crates/parser/veryl.par
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions testcases/sv/47_embed.sv
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
module veryl_testcase_Module47;
endmodule


module test;
initial begin
$display("hello");
end
endmodule


// comment
3 changes: 0 additions & 3 deletions testcases/sv/48_test.sv
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ module test1;
$finish();
end
endmodule

`endif

`ifdef __veryl_test_veryl_testcase_test2__
Expand All @@ -22,7 +21,6 @@ module test2;
// parse error
initial
endmodule

`endif

`ifdef __veryl_test_veryl_testcase_test3__
Expand All @@ -32,7 +30,6 @@ module test3;
tri logic a;
always_comb a = 1;
endmodule

`endif

`ifdef __veryl_test_veryl_testcase_test4__
Expand Down
2 changes: 2 additions & 0 deletions testcases/veryl/47_embed.veryl
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ module test;
end
endmodule
}}}

// comment

0 comments on commit 729c569

Please sign in to comment.