[libc-commits] [libc] [libc][NFC] clean up printf_core and scanf_core (PR #74535)
via libc-commits
libc-commits at lists.llvm.org
Tue Dec 5 15:20:18 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: None (michaelrj-google)
<details>
<summary>Changes</summary>
Add LIBC_INLINE annotations to functions and fix variable cases within
printf_core and scanf_core.
---
Full diff: https://github.com/llvm/llvm-project/pull/74535.diff
5 Files Affected:
- (modified) libc/src/stdio/printf_core/core_structs.h (+6-6)
- (modified) libc/src/stdio/printf_core/float_dec_converter.h (+16-15)
- (modified) libc/src/stdio/printf_core/writer.h (+1-1)
- (modified) libc/src/stdio/scanf_core/core_structs.h (+1-1)
- (modified) libc/src/stdio/scanf_core/reader.h (+5-4)
``````````diff
diff --git a/libc/src/stdio/printf_core/core_structs.h b/libc/src/stdio/printf_core/core_structs.h
index 88a13703fd947..ee0f2343fc6d2 100644
--- a/libc/src/stdio/printf_core/core_structs.h
+++ b/libc/src/stdio/printf_core/core_structs.h
@@ -53,7 +53,7 @@ struct FormatSection {
// This operator is only used for testing and should be automatically
// optimized out for release builds.
- bool operator==(const FormatSection &other) const {
+ LIBC_INLINE bool operator==(const FormatSection &other) const {
if (has_conv != other.has_conv)
return false;
@@ -93,11 +93,11 @@ template <typename T> LIBC_INLINE constexpr TypeDesc type_desc_from_type() {
if constexpr (cpp::is_same_v<T, void>) {
return TypeDesc{0, PrimaryType::Unknown};
} else {
- constexpr bool isPointer = cpp::is_pointer_v<T>;
- constexpr bool isFloat = cpp::is_floating_point_v<T>;
- return TypeDesc{sizeof(T), isPointer ? PrimaryType::Pointer
- : isFloat ? PrimaryType::Float
- : PrimaryType::Integer};
+ constexpr bool IS_POINTER = cpp::is_pointer_v<T>;
+ constexpr bool IS_FLOAT = cpp::is_floating_point_v<T>;
+ return TypeDesc{sizeof(T), IS_POINTER ? PrimaryType::Pointer
+ : IS_FLOAT ? PrimaryType::Float
+ : PrimaryType::Integer};
}
}
diff --git a/libc/src/stdio/printf_core/float_dec_converter.h b/libc/src/stdio/printf_core/float_dec_converter.h
index ca52271004069..24d6120f4f151 100644
--- a/libc/src/stdio/printf_core/float_dec_converter.h
+++ b/libc/src/stdio/printf_core/float_dec_converter.h
@@ -103,14 +103,14 @@ class PaddingWriter {
size_t min_width = 0;
public:
- PaddingWriter() {}
- PaddingWriter(const FormatSection &to_conv, char init_sign_char)
+ LIBC_INLINE PaddingWriter() {}
+ LIBC_INLINE PaddingWriter(const FormatSection &to_conv, char init_sign_char)
: left_justified((to_conv.flags & FormatFlags::LEFT_JUSTIFIED) > 0),
leading_zeroes((to_conv.flags & FormatFlags::LEADING_ZEROES) > 0),
sign_char(init_sign_char),
min_width(to_conv.min_width > 0 ? to_conv.min_width : 0) {}
- int write_left_padding(Writer *writer, size_t total_digits) {
+ LIBC_INLINE int write_left_padding(Writer *writer, size_t total_digits) {
// The pattern is (spaces) (sign) (zeroes), but only one of spaces and
// zeroes can be written, and only if the padding amount is positive.
int padding_amount =
@@ -133,7 +133,7 @@ class PaddingWriter {
return 0;
}
- int write_right_padding(Writer *writer, size_t total_digits) {
+ LIBC_INLINE int write_right_padding(Writer *writer, size_t total_digits) {
// If and only if the conversion is left justified, there may be trailing
// spaces.
int padding_amount =
@@ -170,7 +170,7 @@ class FloatWriter {
Writer *writer; // Writes to the final output.
PaddingWriter padding_writer; // Handles prefixes/padding, uses total_digits.
- int flush_buffer(bool round_up_max_blocks = false) {
+ LIBC_INLINE int flush_buffer(bool round_up_max_blocks = false) {
const char MAX_BLOCK_DIGIT = (round_up_max_blocks ? '0' : '9');
// Write the most recent buffered block, and mark has_written
@@ -249,17 +249,18 @@ class FloatWriter {
(sizeof(int) * 8));
public:
- FloatWriter(Writer *init_writer, bool init_has_decimal_point,
- const PaddingWriter &init_padding_writer)
+ LIBC_INLINE FloatWriter(Writer *init_writer, bool init_has_decimal_point,
+ const PaddingWriter &init_padding_writer)
: has_decimal_point(init_has_decimal_point), writer(init_writer),
padding_writer(init_padding_writer) {}
- void init(size_t init_total_digits, size_t init_digits_before_decimal) {
+ LIBC_INLINE void init(size_t init_total_digits,
+ size_t init_digits_before_decimal) {
total_digits = init_total_digits;
digits_before_decimal = init_digits_before_decimal;
}
- void write_first_block(BlockInt block, bool exp_format = false) {
+ LIBC_INLINE void write_first_block(BlockInt block, bool exp_format = false) {
const DecimalString buf(block);
const cpp::string_view int_to_str = buf.view();
size_t digits_buffered = int_to_str.size();
@@ -280,7 +281,7 @@ class FloatWriter {
}
}
- int write_middle_block(BlockInt block) {
+ LIBC_INLINE int write_middle_block(BlockInt block) {
if (block == MAX_BLOCK) { // Buffer max blocks in case of rounding
++max_block_count;
} else { // If a non-max block has been found
@@ -301,9 +302,9 @@ class FloatWriter {
return 0;
}
- int write_last_block(BlockInt block, size_t block_digits,
- RoundDirection round, int exponent = 0,
- char exp_char = '\0') {
+ LIBC_INLINE int write_last_block(BlockInt block, size_t block_digits,
+ RoundDirection round, int exponent = 0,
+ char exp_char = '\0') {
bool has_exp = (exp_char != '\0');
char end_buff[BLOCK_SIZE];
@@ -458,13 +459,13 @@ class FloatWriter {
return WRITE_OK;
}
- int write_zeroes(uint32_t num_zeroes) {
+ LIBC_INLINE int write_zeroes(uint32_t num_zeroes) {
RET_IF_RESULT_NEGATIVE(flush_buffer());
RET_IF_RESULT_NEGATIVE(writer->write('0', num_zeroes));
return 0;
}
- int right_pad() {
+ LIBC_INLINE int right_pad() {
return padding_writer.write_right_padding(writer, total_digits);
}
};
diff --git a/libc/src/stdio/printf_core/writer.h b/libc/src/stdio/printf_core/writer.h
index e4f503abc34c5..67513eca97288 100644
--- a/libc/src/stdio/printf_core/writer.h
+++ b/libc/src/stdio/printf_core/writer.h
@@ -45,7 +45,7 @@ struct WriteBuffer {
// write as much of new_str to the buffer as it can. The current position in
// the buffer will be reset iff stream_writer is called. Calling this with an
// empty string will flush the buffer if relevant.
- int overflow_write(cpp::string_view new_str) {
+ LIBC_INLINE int overflow_write(cpp::string_view new_str) {
// If there is a stream_writer, write the contents of the buffer, then
// new_str, then clear the buffer.
if (stream_writer != nullptr) {
diff --git a/libc/src/stdio/scanf_core/core_structs.h b/libc/src/stdio/scanf_core/core_structs.h
index 246f770e0cabe..5f13287ec41dd 100644
--- a/libc/src/stdio/scanf_core/core_structs.h
+++ b/libc/src/stdio/scanf_core/core_structs.h
@@ -46,7 +46,7 @@ struct FormatSection {
cpp::bitset<256> scan_set;
- bool operator==(const FormatSection &other) {
+ LIBC_INLINE bool operator==(const FormatSection &other) {
if (has_conv != other.has_conv)
return false;
diff --git a/libc/src/stdio/scanf_core/reader.h b/libc/src/stdio/scanf_core/reader.h
index d8647fe2c4ec7..f750c4341a8d7 100644
--- a/libc/src/stdio/scanf_core/reader.h
+++ b/libc/src/stdio/scanf_core/reader.h
@@ -38,10 +38,11 @@ class Reader {
public:
// TODO: Set buff_len with a proper constant
- Reader(ReadBuffer *string_buffer) : rb(string_buffer) {}
+ LIBC_INLINE Reader(ReadBuffer *string_buffer) : rb(string_buffer) {}
- Reader(void *stream, StreamGetc stream_getc_in, StreamUngetc stream_ungetc_in,
- ReadBuffer *stream_buffer = nullptr)
+ LIBC_INLINE Reader(void *stream, StreamGetc stream_getc_in,
+ StreamUngetc stream_ungetc_in,
+ ReadBuffer *stream_buffer = nullptr)
: rb(stream_buffer), input_stream(stream), stream_getc(stream_getc_in),
stream_ungetc(stream_ungetc_in) {}
@@ -63,7 +64,7 @@ class Reader {
// this is a file reader, else c is ignored.
void ungetc(char c);
- size_t chars_read() { return cur_chars_read; }
+ LIBC_INLINE size_t chars_read() { return cur_chars_read; }
};
} // namespace scanf_core
``````````
</details>
https://github.com/llvm/llvm-project/pull/74535
More information about the libc-commits
mailing list