Skip to content

Commit

Permalink
Refactor DSLX->Verilog.
Browse files Browse the repository at this point in the history
Most notably, this adds DSLX->Verilog package conversion for type definitions, not just type annotations. This also enables using typedefs to incrementally build up types, so instead of e.g. defining enums inline inside a struct definition, now we build up the leaf typedefs and then use them to convert structs or type aliases.

PiperOrigin-RevId: 724472686
  • Loading branch information
grebe authored and copybara-github committed Feb 7, 2025
1 parent 42d1cff commit 9d85eec
Show file tree
Hide file tree
Showing 13 changed files with 793 additions and 304 deletions.
13 changes: 13 additions & 0 deletions xls/dslx/frontend/ast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#include "xls/common/visitor.h"
#include "xls/dslx/channel_direction.h"
#include "xls/dslx/frontend/ast_builtin_types.inc"
#include "xls/dslx/frontend/ast_node.h"
#include "xls/dslx/frontend/pos.h"
#include "xls/dslx/frontend/token_utils.h"
#include "xls/ir/bits.h"
Expand Down Expand Up @@ -347,6 +348,18 @@ AnyNameDef TypeDefinitionGetNameDef(const TypeDefinition& td) {
td);
}

AstNode* TypeDefinitionToAstNode(const TypeDefinition& td) {
return absl::visit(Visitor{
[](TypeAlias* n) -> AstNode* { return n; },
[](StructDef* n) -> AstNode* { return n; },
[](ProcDef* n) -> AstNode* { return n; },
[](EnumDef* n) -> AstNode* { return n; },
[](ColonRef* n) -> AstNode* { return n; },
[](UseTreeEntry* n) -> AstNode* { return n; },
},
td);
}

absl::StatusOr<TypeDefinition> ToTypeDefinition(AstNode* node) {
if (auto* n = dynamic_cast<TypeAlias*>(node)) {
return TypeDefinition(n);
Expand Down
4 changes: 4 additions & 0 deletions xls/dslx/frontend/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -1444,6 +1444,10 @@ using TypeDefinition = std::variant<TypeAlias*, StructDef*, ProcDef*, EnumDef*,
// "foo", which can be a built-in name.
AnyNameDef TypeDefinitionGetNameDef(const TypeDefinition& td);

// Returns a type-erased AstNode* of a type definition.
AstNode* TypeDefinitionToAstNode(const TypeDefinition& td);

// Returns a TypeDefinition from an AstNode.
absl::StatusOr<TypeDefinition> ToTypeDefinition(AstNode* node);

// AST construct that refers to a defined type.
Expand Down
9 changes: 6 additions & 3 deletions xls/dslx/translators/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,24 @@ cc_library(
deps = [
"//xls/codegen/vast",
"//xls/common:visitor",
"//xls/common/status:ret_check",
"//xls/common/status:status_macros",
"//xls/dslx:import_data",
"//xls/dslx:interp_value",
"//xls/dslx/frontend:ast",
"//xls/dslx/frontend:pos",
"//xls/dslx/type_system:type",
"//xls/dslx/type_system:type_info",
"//xls/ir:bits",
"//xls/ir:name_uniquer",
"//xls/ir:source_location",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/log",
"@com_google_absl//absl/log:check",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:statusor",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_absl//absl/types:span",
"@com_google_absl//absl/types:variant",
],
)
Expand All @@ -60,9 +63,9 @@ cc_test(
"//xls/dslx:create_import_data",
"//xls/dslx:import_data",
"//xls/dslx:parse_and_typecheck",
"//xls/dslx:virtualizable_file_system",
"//xls/dslx/frontend:ast",
"@com_google_absl//absl/status",
"@com_google_absl//absl/status:status_matchers",
"@com_google_absl//absl/container:flat_hash_map",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
"@com_google_googletest//:gtest",
Expand Down
Loading

0 comments on commit 9d85eec

Please sign in to comment.