Skip to content

Commit 5ca7da8

Browse files
committed
Address review comments.
Also expose IndexableExpression to Expression casting in the VAST C API.
1 parent 0433eb4 commit 5ca7da8

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

xls/codegen/vast/vast.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,8 @@ std::string ModulePort::ToString() const {
673673
xls::verilog::ToString(direction), name());
674674
}
675675

676+
// Returns true if the given string looks like an identifier or keyword. Escaped
677+
// identifiers are not handled.
676678
static bool IsDigitsOrIdentifier(std::string_view s) {
677679
if (s.empty()) {
678680
return false;
@@ -694,7 +696,7 @@ static bool IsDigitsOrIdentifier(std::string_view s) {
694696
return false;
695697
}
696698
for (char ch : s.substr(1)) {
697-
if (!absl::ascii_isalnum(ch) && ch != '_') {
699+
if (!absl::ascii_isalnum(ch) && ch != '_' && ch != '$') {
698700
return false;
699701
}
700702
}
@@ -706,11 +708,11 @@ std::string WidthCast::Emit(LineInfo* line_info) const {
706708
LineInfoEnd(line_info, this);
707709
std::string width_expr = width_->Emit(line_info);
708710
if (IsDigitsOrIdentifier(width_expr)) {
709-
// Parentheses are not needed for digits or identifiers.
711+
// Parentheses are not needed for digits or identifiers. This is a purely
712+
// cosmetic as parentheses are always correct to emit.
710713
return absl::StrFormat("%s'(%s)", width_expr, value_->Emit(line_info));
711-
} else {
712-
return absl::StrFormat("(%s)'(%s)", width_expr, value_->Emit(line_info));
713714
}
715+
return absl::StrFormat("(%s)'(%s)", width_expr, value_->Emit(line_info));
714716
}
715717

716718
VerilogFunction::VerilogFunction(std::string_view name, DataType* result_type,

xls/public/c_api_symbols.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ xls_vast_def_get_data_type
309309
xls_vast_def_get_name
310310
xls_vast_index_as_expression
311311
xls_vast_index_as_indexable_expression
312+
xls_vast_indexable_expression_as_expression
312313
xls_vast_literal_as_expression
313314
xls_vast_localparam_ref_as_expression
314315
xls_vast_logic_ref_as_expression

xls/public/c_api_vast.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,13 @@ struct xls_vast_expression* xls_vast_localparam_ref_as_expression(
543543
return reinterpret_cast<xls_vast_expression*>(cpp_expression);
544544
}
545545

546+
struct xls_vast_expression* xls_vast_indexable_expression_as_expression(
547+
struct xls_vast_indexable_expression* v) {
548+
auto* cpp_v = reinterpret_cast<xls::verilog::IndexableExpression*>(v);
549+
auto* cpp_expression = static_cast<xls::verilog::Expression*>(cpp_v);
550+
return reinterpret_cast<xls_vast_expression*>(cpp_expression);
551+
}
552+
546553
struct xls_vast_indexable_expression*
547554
xls_vast_logic_ref_as_indexable_expression(
548555
struct xls_vast_logic_ref* logic_ref) {

xls/public/c_api_vast.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ struct xls_vast_expression* xls_vast_parameter_ref_as_expression(
353353
struct xls_vast_parameter_ref* v);
354354
struct xls_vast_expression* xls_vast_localparam_ref_as_expression(
355355
struct xls_vast_localparam_ref* v);
356+
struct xls_vast_expression* xls_vast_indexable_expression_as_expression(
357+
struct xls_vast_indexable_expression* v);
356358

357359
struct xls_vast_indexable_expression*
358360
xls_vast_logic_ref_as_indexable_expression(

0 commit comments

Comments
 (0)