@@ -289,6 +289,13 @@ char* xls_vast_verilog_file_emit(const struct xls_vast_verilog_file* f) {
289289 return xls::ToOwnedCString (result);
290290}
291291
292+ char * xls_vast_expression_emit (struct xls_vast_expression * expr) {
293+ CHECK_NE (expr, nullptr );
294+ auto * cpp_expr = reinterpret_cast <xls::verilog::Expression*>(expr);
295+ std::string result = cpp_expr->Emit (/* line_info=*/ nullptr );
296+ return xls::ToOwnedCString (result);
297+ }
298+
292299struct xls_vast_data_type * xls_vast_verilog_file_make_scalar_type (
293300 struct xls_vast_verilog_file * f) {
294301 auto * cpp_file = reinterpret_cast <xls::verilog::VerilogFile*>(f);
@@ -408,6 +415,20 @@ void xls_vast_verilog_module_add_member_comment(
408415 auto * cpp_comment = reinterpret_cast <xls::verilog::Comment*>(comment);
409416 cpp_module->AddModuleMember (cpp_comment);
410417}
418+ void xls_vast_verilog_module_add_member_blank_line (
419+ struct xls_vast_verilog_module * m, struct xls_vast_blank_line * blank) {
420+ auto * cpp_module = reinterpret_cast <xls::verilog::Module*>(m);
421+ auto * cpp_blank = reinterpret_cast <xls::verilog::BlankLine*>(blank);
422+ cpp_module->AddModuleMember (cpp_blank);
423+ }
424+ void xls_vast_verilog_module_add_member_inline_statement (
425+ struct xls_vast_verilog_module * m,
426+ struct xls_vast_inline_verilog_statement * stmt) {
427+ auto * cpp_module = reinterpret_cast <xls::verilog::Module*>(m);
428+ auto * cpp_stmt =
429+ reinterpret_cast <xls::verilog::InlineVerilogStatement*>(stmt);
430+ cpp_module->AddModuleMember (cpp_stmt);
431+ }
411432
412433struct xls_vast_literal * xls_vast_verilog_file_make_plain_literal (
413434 struct xls_vast_verilog_file * f, int32_t value) {
@@ -478,13 +499,20 @@ struct xls_vast_comment* xls_vast_verilog_file_make_comment(
478499 cpp_file->Make <xls::verilog::Comment>(xls::SourceInfo (), text);
479500 return reinterpret_cast <xls_vast_comment*>(cpp_comment);
480501}
481-
502+ struct xls_vast_blank_line * xls_vast_verilog_file_make_blank_line (
503+ struct xls_vast_verilog_file * f) {
504+ auto * cpp_file = reinterpret_cast <xls::verilog::VerilogFile*>(f);
505+ xls::verilog::BlankLine* cpp_blank =
506+ cpp_file->Make <xls::verilog::BlankLine>(xls::SourceInfo ());
507+ return reinterpret_cast <xls_vast_blank_line*>(cpp_blank);
508+ }
482509struct xls_vast_inline_verilog_statement *
483510xls_vast_verilog_file_make_inline_verilog_statement (
484511 struct xls_vast_verilog_file * f, const char * text) {
485512 auto * cpp_file = reinterpret_cast <xls::verilog::VerilogFile*>(f);
486- auto * cpp_stmt = cpp_file->Make <xls::verilog::InlineVerilogStatement>(
487- xls::SourceInfo (), text);
513+ xls::verilog::InlineVerilogStatement* cpp_stmt =
514+ cpp_file->Make <xls::verilog::InlineVerilogStatement>(xls::SourceInfo (),
515+ text);
488516 return reinterpret_cast <xls_vast_inline_verilog_statement*>(cpp_stmt);
489517}
490518
@@ -843,6 +871,39 @@ struct xls_vast_concat* xls_vast_verilog_file_make_concat(
843871 return reinterpret_cast <xls_vast_concat*>(cpp_concat);
844872}
845873
874+ struct xls_vast_concat * xls_vast_verilog_file_make_replicated_concat (
875+ struct xls_vast_verilog_file * f, struct xls_vast_expression * replication,
876+ struct xls_vast_expression ** elements, size_t element_count) {
877+ auto * cpp_file = reinterpret_cast <xls::verilog::VerilogFile*>(f);
878+ auto * cpp_rep = reinterpret_cast <xls::verilog::Expression*>(replication);
879+ std::vector<xls::verilog::Expression*> cpp_elements;
880+ cpp_elements.reserve (element_count);
881+ for (size_t i = 0 ; i < element_count; ++i) {
882+ cpp_elements.push_back (
883+ reinterpret_cast <xls::verilog::Expression*>(elements[i]));
884+ }
885+ xls::verilog::Concat* cpp_concat = cpp_file->Make <xls::verilog::Concat>(
886+ xls::SourceInfo (), cpp_rep, absl::MakeConstSpan (cpp_elements));
887+ return reinterpret_cast <xls_vast_concat*>(cpp_concat);
888+ }
889+
890+ struct xls_vast_concat * xls_vast_verilog_file_make_replicated_concat_i64 (
891+ struct xls_vast_verilog_file * f, int64_t replication_count,
892+ struct xls_vast_expression ** elements, size_t element_count) {
893+ auto * cpp_file = reinterpret_cast <xls::verilog::VerilogFile*>(f);
894+ xls::verilog::Expression* cpp_rep =
895+ cpp_file->PlainLiteral (replication_count, xls::SourceInfo ());
896+ std::vector<xls::verilog::Expression*> cpp_elements;
897+ cpp_elements.reserve (element_count);
898+ for (size_t i = 0 ; i < element_count; ++i) {
899+ cpp_elements.push_back (
900+ reinterpret_cast <xls::verilog::Expression*>(elements[i]));
901+ }
902+ xls::verilog::Concat* cpp_concat = cpp_file->Make <xls::verilog::Concat>(
903+ xls::SourceInfo (), cpp_rep, absl::MakeConstSpan (cpp_elements));
904+ return reinterpret_cast <xls_vast_concat*>(cpp_concat);
905+ }
906+
846907struct xls_vast_index * xls_vast_verilog_file_make_index_i64 (
847908 struct xls_vast_verilog_file * f,
848909 struct xls_vast_indexable_expression * subject, int64_t index) {
@@ -1072,6 +1133,28 @@ struct xls_vast_statement* xls_vast_statement_block_add_nonblocking_assignment(
10721133 cpp_lhs, cpp_rhs);
10731134 return reinterpret_cast <xls_vast_statement*>(cpp_assignment);
10741135}
1136+ struct xls_vast_statement * xls_vast_statement_block_add_comment_text (
1137+ struct xls_vast_statement_block * block, const char * text) {
1138+ auto * cpp_block = reinterpret_cast <xls::verilog::StatementBlock*>(block);
1139+ xls::verilog::Comment* cpp_comment =
1140+ cpp_block->Add <xls::verilog::Comment>(xls::SourceInfo (), text);
1141+ return reinterpret_cast <xls_vast_statement*>(cpp_comment);
1142+ }
1143+ struct xls_vast_statement * xls_vast_statement_block_add_blank_line (
1144+ struct xls_vast_statement_block * block) {
1145+ auto * cpp_block = reinterpret_cast <xls::verilog::StatementBlock*>(block);
1146+ xls::verilog::BlankLine* cpp_blank =
1147+ cpp_block->Add <xls::verilog::BlankLine>(xls::SourceInfo ());
1148+ return reinterpret_cast <xls_vast_statement*>(cpp_blank);
1149+ }
1150+ struct xls_vast_statement * xls_vast_statement_block_add_inline_text (
1151+ struct xls_vast_statement_block * block, const char * text) {
1152+ auto * cpp_block = reinterpret_cast <xls::verilog::StatementBlock*>(block);
1153+ xls::verilog::InlineVerilogStatement* cpp_stmt =
1154+ cpp_block->Add <xls::verilog::InlineVerilogStatement>(xls::SourceInfo (),
1155+ text);
1156+ return reinterpret_cast <xls_vast_statement*>(cpp_stmt);
1157+ }
10751158
10761159struct xls_vast_statement * xls_vast_statement_block_add_blocking_assignment (
10771160 struct xls_vast_statement_block * block, struct xls_vast_expression * lhs,
0 commit comments