diff --git a/.natvis b/.natvis
index 4eb7585c..4429a90a 100644
--- a/.natvis
+++ b/.natvis
@@ -43,7 +43,7 @@
- 0x{hi, xb}{lo, xb}
+ [{(u32)(hi >> 32), xb}]{((u32)(hi & 0xFFFFFFFF)), xb}{lo, xb}
diff --git a/src/string.c b/src/string.c
index a0ac41be..68cb99c2 100644
--- a/src/string.c
+++ b/src/string.c
@@ -175,6 +175,14 @@ struct string string_from_handle(struct arena *arena, u64 v0, u64 v1)
return res;
}
+struct string string_from_uid(struct arena *arena, struct uid uid)
+{
+ struct string res = ZI;
+ res.text = arena_dry_push(arena, u8);
+ res.len += string_from_uint(arena, (uid.hi >> 32), 16, 8).len;
+ return res;
+}
+
/* ========================== *
* String operations
* ========================== */
@@ -486,6 +494,10 @@ struct string string_formatv(struct arena *arena, struct string fmt, va_list arg
parsed_str = string_from_handle(arena, arg.value.handle.h64[0], arg.value.handle.h64[1]);
} break;
+ case FMT_TYPE_UID: {
+ parsed_str = string_from_uid(arena, arg.value.uid);
+ } break;
+
case FMT_TYPE_END: {
/* Unexpected end. Not enough FMT args passed to function. */
ASSERT(false);
diff --git a/src/string.h b/src/string.h
index fea5c357..945df597 100644
--- a/src/string.h
+++ b/src/string.h
@@ -16,6 +16,7 @@ struct string string_from_int(struct arena *arena, i64 n, u64 base, u64 zfill);
struct string string_from_ptr(struct arena *arena, void *ptr);
struct string string_from_float(struct arena *arena, f64 f, u32 precision);
struct string string_from_handle(struct arena *arena, u64 v0, u64 v1);
+struct string string_from_uid(struct arena *arena, struct uid uid);
/* ========================== *
* String operations
@@ -52,6 +53,7 @@ enum fmt_type {
FMT_TYPE_PTR = 0x0c4519e4,
FMT_TYPE_FLOAT = 0x04814143,
FMT_TYPE_HANDLE = 0x0f112992,
+ FMT_TYPE_UID = 0x0beb23dd,
FMT_TYPE_END = 0x0ecbc5ae
};
@@ -70,6 +72,7 @@ struct fmt_arg {
struct {
u64 h64[2];
} handle;
+ struct uid uid;
} value;
};
@@ -85,6 +88,7 @@ struct fmt_arg {
#define FMT_FLOAT(v) FMT_FLOAT_P(v, DEFAULT_FMT_PRECISION)
#define FMT_FLOAT_P(v, p) (struct fmt_arg) {.type = FMT_TYPE_FLOAT, .value.f = (v), .precision = (p)}
#define FMT_HANDLE(v) (struct fmt_arg) {.type = FMT_TYPE_HANDLE, .value.handle.h64[0] = (v).idx, .value.handle.h64[1] = (v).gen}
+#define FMT_UID(v) (struct fmt_arg) {.type = FMT_TYPE_UID, .value.uid = (v) }
#define string_format(arena, fmt, ...) _string_format((arena), (fmt), __VA_ARGS__, FMT_END)
struct string _string_format(struct arena *arena, struct string fmt, ...);
diff --git a/src/user.c b/src/user.c
index f3ec6049..5810a848 100644
--- a/src/user.c
+++ b/src/user.c
@@ -349,12 +349,7 @@ INTERNAL struct string get_ent_debug_text(struct arena *arena, struct sim_ent *e
res.text = arena_dry_push(arena, u8);
res.len += string_format(arena, LIT("<%F>"), FMT_HANDLE(ent->handle)).len;
-
- /* TODO: String fmt function */
- struct uid uid = ent->uid;
- res.len += string_copy(arena, LIT(" [")).len;
- res.len += string_from_uint(arena, (uid.hi >> 36) & 0xFFFFFFF, 16, 7).len;
- res.len += string_copy(arena, LIT("]\n")).len;
+ res.len += string_format(arena, LIT(" [%F]\n"), FMT_UID(ent->uid)).len;
{
res.len += string_copy(arena, LIT("net: ")).len;