[libc-commits] [libc] 68a82a2 - [libc] Elide extra space in hdrgen function declarations (#127287)

via libc-commits libc-commits at lists.llvm.org
Fri Feb 14 17:10:01 PST 2025


Author: Roland McGrath
Date: 2025-02-14T17:09:58-08:00
New Revision: 68a82a2298327c74bf25b8d376ffa3dc1e1b6388

URL: https://github.com/llvm/llvm-project/commit/68a82a2298327c74bf25b8d376ffa3dc1e1b6388
DIFF: https://github.com/llvm/llvm-project/commit/68a82a2298327c74bf25b8d376ffa3dc1e1b6388.diff

LOG: [libc] Elide extra space in hdrgen function declarations (#127287)

When the return type's rendering already doesn't end with an
identifier character, such as when it's `T *`, then idiomatic
syntax does not include a space before the `(` and arguments.

Added: 
    

Modified: 
    libc/utils/hdrgen/function.py
    libc/utils/hdrgen/tests/expected_output/subdir/test.h
    libc/utils/hdrgen/tests/input/subdir/test.yaml

Removed: 
    


################################################################################
diff  --git a/libc/utils/hdrgen/function.py b/libc/utils/hdrgen/function.py
index bccd2c2caa2f5..28af05f78d897 100644
--- a/libc/utils/hdrgen/function.py
+++ b/libc/utils/hdrgen/function.py
@@ -81,4 +81,12 @@ def collapse(type_string):
     def __str__(self):
         attrs_str = "".join(f"{attr} " for attr in self.attributes)
         arguments_str = ", ".join(self.arguments) if self.arguments else "void"
-        return attrs_str + f"{self.return_type} {self.name}({arguments_str})"
+        # The rendering of the return type may look like `int` or it may look
+        # like `int *` (and other examples).  For `int`, a space is always
+        # needed to separate the tokens.  For `int *`, no whitespace matters to
+        # the syntax one way or the other, but an extra space between `*` and
+        # the function identifier is not the canonical style.
+        type_str = str(self.return_type)
+        if type_str[-1].isalnum() or type_str[-1] == "_":
+            type_str += " "
+        return attrs_str + type_str + self.name + "(" + arguments_str + ")"

diff  --git a/libc/utils/hdrgen/tests/expected_output/subdir/test.h b/libc/utils/hdrgen/tests/expected_output/subdir/test.h
index e968f92bf4e6d..20bab502e6821 100644
--- a/libc/utils/hdrgen/tests/expected_output/subdir/test.h
+++ b/libc/utils/hdrgen/tests/expected_output/subdir/test.h
@@ -19,6 +19,8 @@ type_a func(type_b) __NOEXCEPT;
 
 void gnufunc(type_a) __NOEXCEPT;
 
+int *ptrfunc(void) __NOEXCEPT;
+
 __END_C_DECLS
 
 #endif // LLVM_LIBC_SUBDIR_TEST_H

diff  --git a/libc/utils/hdrgen/tests/input/subdir/test.yaml b/libc/utils/hdrgen/tests/input/subdir/test.yaml
index f325363e09cde..5bc8b29e334f8 100644
--- a/libc/utils/hdrgen/tests/input/subdir/test.yaml
+++ b/libc/utils/hdrgen/tests/input/subdir/test.yaml
@@ -12,3 +12,6 @@ functions:
       - type: type_a
     standards:
       - gnu
+  - name: ptrfunc
+    return_type: int *
+    arguments: []


        


More information about the libc-commits mailing list