Updated the doc comments.
diff --git a/upb/util/required_fields.h b/upb/util/required_fields.h
index 6ab0dbb..f934f18 100644
--- a/upb/util/required_fields.h
+++ b/upb/util/required_fields.h
@@ -44,8 +44,11 @@
// { {.field = f1}, {.index = 5}, {.field = f2} } # f1[5].f2
// { {.field = f1}, {.key = "abc"}, {.field = f2} } # f1["abc"].f2
//
-// A user must look at the type of `f1` to know whether to expect an index or
-// map key after it.
+// Users must look at the type of `field` to know if an index or map key
+// follows.
+//
+// A field path may be NULL-terminated, in which case a NULL field indicates
+// the end of the field path.
typedef union {
const upb_fielddef* field;
size_t array_index;
@@ -53,13 +56,17 @@
} upb_FieldPathEntry;
// Writes a string representing `*path` to `buf` in the following textual format:
-// foo.bar.repeated_baz[2].string_msg_map["abc"]
+// foo.bar # Regular fields
+// repeated_baz[2].bar # Repeated field
+// int32_msg_map[5].bar # Integer-keyed map
+// string_msg_map["abc"] # String-keyed map
+// bool_msg_map[true] # Bool-keyed map
//
-// The given buffer will always be NULL-terminated. If the data (including NULL
-// terminator) exceeds `size`, the result will be truncated.
+// The input array `*path` must be NULL-terminated. The pointer `*path` will be
+// updated to point to one past the terminating NULL pointer of the input array.
//
-// The pointer `*path` will be updated to point to one past the terminating NULL
-// pointer of the input array.
+// The output buffer `buf` will always be NULL-terminated. If the output data
+// (including NULL terminator) exceeds `size`, the result will be truncated.
size_t upb_FieldPath_ToText(upb_FieldPathEntry **path, char *buf, size_t size);
// Checks whether `msg` or any of its children has unset required fields,