[PATCH] D124221: Add new builtin __builtin_reflect_struct.

Wang Yihan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 25 09:04:33 PDT 2022

yihanaa added a comment.

Thank you for inviting me to a discussion on this topic. I have something very confusing as follows:

- If the developer already knows all fields info in some struct, wyh doesn't he write a simple function to do the printing(like: print_struct_foo(const struct foo *); )? It might be easier to write a printing  function.
- If the struct has many levels of nesting, and the developers just want to output the details of the struct for debugging purposes, then I think they might just need something like the 'p' command in LLDB.
- If we want to support these printing functions, and make this builtin flexible and general, I think reflection is a good idea. But we may want to make this builtin support C/C++ or other languages supported by Clang at the same time. I have a not-so-sophisticated (perhaps silly-sounding) idea: this builtin might be one or more C-style functions in order to be usable in many different languages. This family of functions supports getting the number of struct fields, as well as their details (and possibly getting the value of the field by getting the subscript). like:

  int __builtin_reflect_struct_member_count(const void *struct_addr, unsigned *count);
  int __builtin_reflect_struct_member_detail(const void *struct_addr, unsigned index, char *name, unsigned *bitfield, int *is_unnamed);
  int __builtin_reflect_struct_member_ptr(const void *struct_addr, unsigned index, void **ptr);

Maybe it also can support nested struct?

emmmmm, my idea looks really stupid, don't laugh at me, hahahaha~~~😂😂😂😂

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list