From eb98a1d1ab4aa3688758b42c7409f5e7f2821c00 Mon Sep 17 00:00:00 2001 From: Matt Knight Date: Thu, 2 Mar 2023 00:43:23 -0800 Subject: [PATCH] handle additional %s case for register names in SVD (#97) --- tools/regz/src/svd.zig | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/tools/regz/src/svd.zig b/tools/regz/src/svd.zig index b615b7f..36422a4 100644 --- a/tools/regz/src/svd.zig +++ b/tools/regz/src/svd.zig @@ -395,6 +395,7 @@ fn load_register( ) !void { const db = ctx.db; const register_props = try ctx.derive_register_properties_from(node, parent_id); + const name = node.get_value("name") orelse return error.MissingRegisterName; const size = register_props.size orelse return error.MissingRegisterSize; const count: ?u64 = if (try DimElements.parse(node)) |elements| count: { if (elements.dim_index != null or elements.dim_name != null) @@ -407,7 +408,10 @@ fn load_register( } else null; const id = try db.create_register(parent_id, .{ - .name = try get_name_without_suffix(node, "[%s]"), + .name = if (std.mem.endsWith(u8, name, "[%s]")) + name[0 .. name.len - 4] + else + try std.mem.replaceOwned(u8, ctx.db.arena.allocator(), name, "%s", ""), .description = node.get_value("description"), .offset = if (node.get_value("addressOffset")) |offset_str| try std.fmt.parseInt(u64, offset_str, 0) @@ -1171,6 +1175,40 @@ test "svd.register with dimElementGroup, suffixed with [%s]" { try expectAttr(db, "count", 4, register_id); } +test "svd.register with dimElementGroup, %s in name" { + const text = + \\ + \\ TEST_DEVICE + \\ 32 + \\ read-only + \\ 0x00000000 + \\ 0xffffffff + \\ + \\ + \\ TEST_PERIPHERAL + \\ 0x1000 + \\ + \\ + \\ TEST%s_REGISTER + \\ 0 + \\ 4 + \\ 4 + \\ + \\ + \\ + \\ + \\ + ; + + var doc = try xml.Doc.from_memory(text); + var db = try Database.init_from_svd(std.testing.allocator, doc); + defer db.deinit(); + + // %s is dropped from name, it is redundant + const register_id = try db.get_entity_id_by_name("type.register", "TEST_REGISTER"); + try expectAttr(db, "count", 4, register_id); +} + test "svd.field with dimElementGroup, suffixed with %s" { const text = \\