| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 764d356 commit c3be122
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -65,33 +65,42 @@ std::string ToBaseString(const T& value) { | |||
| 65 | 65 | return ToStringHelper::BaseConvert<BASE_BITS>(value); | |
| 66 | 66 | } | |
| 67 | 67 | ||
| 68 | - inline std::string SPrintFImpl(const char* format) { | ||
| 69 | - const char* p = strchr(format, '%'); | ||
| 70 | - if (p == nullptr) [[unlikely]] | ||
| 71 | - return format; | ||
| 72 | - CHECK_EQ(p[1], '%'); // Only '%%' allowed when there are no arguments. | ||
| 68 | + inline std::string SPrintFImpl(std::string_view format) { | ||
| 69 | + auto offset = format.find('%'); | ||
| 70 | + if (offset == std::string_view::npos) return std::string(format); | ||
| 71 | + CHECK_LT(offset + 1, format.size()); | ||
| 72 | + CHECK_EQ(format[offset + 1], | ||
| 73 | + '%'); // Only '%%' allowed when there are no arguments. | ||
| 73 | 74 | ||
| 74 | - return std::string(format, p + 1) + SPrintFImpl(p + 2); | ||
| 75 | + return std::string(format.substr(0, offset + 1)) + | ||
| 76 | + SPrintFImpl(format.substr(offset + 2)); | ||
| 75 | 77 | } | |
| 76 | 78 | ||
| 77 | 79 | template <typename Arg, typename... Args> | |
| 78 | 80 | std::string COLD_NOINLINE SPrintFImpl( // NOLINT(runtime/string) | |
| 79 | - const char* format, Arg&& arg, Args&&... args) { | ||
| 80 | - const char* p = strchr(format, '%'); | ||
| 81 | - CHECK_NOT_NULL(p); // If you hit this, you passed in too many arguments. | ||
| 82 | - std::string ret(format, p); | ||
| 81 | + std::string_view format, | ||
| 82 | + Arg&& arg, | ||
| 83 | + Args&&... args) { | ||
| 84 | + auto offset = format.find('%'); | ||
| 85 | + CHECK_NE(offset, std::string_view::npos); // If you hit this, you passed in | ||
| 86 | + // too many arguments. | ||
| 87 | + std::string ret(format.substr(0, offset)); | ||
| 83 | 88 | // Ignore long / size_t modifiers | |
| 84 | - while (strchr("lz", *++p) != nullptr) {} | ||
| 85 | - switch (*p) { | ||
| 89 | + while (++offset < format.size() && | ||
| 90 | + (format[offset] == 'l' || format[offset] == 'z')) { | ||
| 91 | + } | ||
| 92 | + switch (offset == format.size() ? '\0' : format[offset]) { | ||
| 86 | 93 | case '%': { | |
| 87 | - return ret + '%' + SPrintFImpl(p + 1, | ||
| 88 | - std::forward<Arg>(arg), | ||
| 89 | - std::forward<Args>(args)...); | ||
| 94 | + return ret + '%' + | ||
| 95 | + SPrintFImpl(format.substr(offset + 1), | ||
| 96 | + std::forward<Arg>(arg), | ||
| 97 | + std::forward<Args>(args)...); | ||
| 90 | 98 | } | |
| 91 | 99 | default: { | |
| 92 | - return ret + '%' + SPrintFImpl(p, | ||
| 93 | - std::forward<Arg>(arg), | ||
| 94 | - std::forward<Args>(args)...); | ||
| 100 | + return ret + '%' + | ||
| 101 | + SPrintFImpl(format.substr(offset), | ||
| 102 | + std::forward<Arg>(arg), | ||
| 103 | + std::forward<Args>(args)...); | ||
| 95 | 104 | } | |
| 96 | 105 | case 'd': | |
| 97 | 106 | case 'i': | |
@@ -120,17 +129,21 @@ std::string COLD_NOINLINE SPrintFImpl( // NOLINT(runtime/string) | |||
| 120 | 129 | break; | |
| 121 | 130 | } | |
| 122 | 131 | } | |
| 123 | - return ret + SPrintFImpl(p + 1, std::forward<Args>(args)...); | ||
| 132 | + return ret + | ||
| 133 | + SPrintFImpl(format.substr(offset + 1), std::forward<Args>(args)...); | ||
| 124 | 134 | } | |
| 125 | 135 | ||
| 126 | 136 | template <typename... Args> | |
| 127 | 137 | std::string COLD_NOINLINE SPrintF( // NOLINT(runtime/string) | |
| 128 | - const char* format, Args&&... args) { | ||
| 138 | + std::string_view format, | ||
| 139 | + Args&&... args) { | ||
| 129 | 140 | return SPrintFImpl(format, std::forward<Args>(args)...); | |
| 130 | 141 | } | |
| 131 | 142 | ||
| 132 | 143 | template <typename... Args> | |
| 133 | - void COLD_NOINLINE FPrintF(FILE* file, const char* format, Args&&... args) { | ||
| 144 | + void COLD_NOINLINE FPrintF(FILE* file, | ||
| 145 | + std::string_view format, | ||
| 146 | + Args&&... args) { | ||
| 134 | 147 | FWrite(file, SPrintF(format, std::forward<Args>(args)...)); | |
| 135 | 148 | } | |
| 136 | 149 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -33,9 +33,9 @@ inline std::string ToString(const T& value); | |||
| 33 | 33 | // - Supports %p and %s. %d, %i and %u are aliases for %s. | |
| 34 | 34 | // - Accepts any class that has a ToString() method for stringification. | |
| 35 | 35 | template <typename... Args> | |
| 36 | - inline std::string SPrintF(const char* format, Args&&... args); | ||
| 36 | + inline std::string SPrintF(std::string_view format, Args&&... args); | ||
| 37 | 37 | template <typename... Args> | |
| 38 | - inline void FPrintF(FILE* file, const char* format, Args&&... args); | ||
| 38 | + inline void FPrintF(FILE* file, std::string_view format, Args&&... args); | ||
| 39 | 39 | void NODE_EXTERN_PRIVATE FWrite(FILE* file, const std::string& str); | |
| 40 | 40 | ||
| 41 | 41 | // Listing the AsyncWrap provider types first enables us to cast directly | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -134,7 +134,7 @@ void OOMErrorHandler(const char* location, const v8::OOMDetails& details); | |||
| 134 | 134 | #define V(code, type) \ | |
| 135 | 135 | template <typename... Args> \ | |
| 136 | 136 | inline v8::Local<v8::Object> code( \ | |
| 137 | - v8::Isolate* isolate, const char* format, Args&&... args) { \ | ||
| 137 | + v8::Isolate* isolate, std::string_view format, Args&&... args) { \ | ||
| 138 | 138 | std::string message; \ | |
| 139 | 139 | if (sizeof...(Args) == 0) { \ | |
| 140 | 140 | message = format; \ | |
@@ -159,17 +159,18 @@ void OOMErrorHandler(const char* location, const v8::OOMDetails& details); | |||
| 159 | 159 | } \ | |
| 160 | 160 | template <typename... Args> \ | |
| 161 | 161 | inline void THROW_##code( \ | |
| 162 | - v8::Isolate* isolate, const char* format, Args&&... args) { \ | ||
| 162 | + v8::Isolate* isolate, std::string_view format, Args&&... args) { \ | ||
| 163 | 163 | isolate->ThrowException( \ | |
| 164 | 164 | code(isolate, format, std::forward<Args>(args)...)); \ | |
| 165 | 165 | } \ | |
| 166 | 166 | template <typename... Args> \ | |
| 167 | 167 | inline void THROW_##code( \ | |
| 168 | - Environment* env, const char* format, Args&&... args) { \ | ||
| 168 | + Environment* env, std::string_view format, Args&&... args) { \ | ||
| 169 | 169 | THROW_##code(env->isolate(), format, std::forward<Args>(args)...); \ | |
| 170 | 170 | } \ | |
| 171 | 171 | template <typename... Args> \ | |
| 172 | - inline void THROW_##code(Realm* realm, const char* format, Args&&... args) { \ | ||
| 172 | + inline void THROW_##code( \ | ||
| 173 | + Realm* realm, std::string_view format, Args&&... args) { \ | ||
| 173 | 174 | THROW_##code(realm->isolate(), format, std::forward<Args>(args)...); \ | |
| 174 | 175 | } | |
| 175 | 176 | ERRORS_WITH_CODE(V) | |
@@ -250,10 +251,8 @@ PREDEFINED_ERROR_MESSAGES(V) | |||
| 250 | 251 | // Errors with predefined non-static messages | |
| 251 | 252 | inline void THROW_ERR_SCRIPT_EXECUTION_TIMEOUT(Environment* env, | |
| 252 | 253 | int64_t timeout) { | |
| 253 | - std::ostringstream message; | ||
| 254 | - message << "Script execution timed out after "; | ||
| 255 | - message << timeout << "ms"; | ||
| 256 | - THROW_ERR_SCRIPT_EXECUTION_TIMEOUT(env, message.str().c_str()); | ||
| 254 | + THROW_ERR_SCRIPT_EXECUTION_TIMEOUT( | ||
| 255 | + env, "Script execution timed out after %dms", timeout); | ||
| 257 | 256 | } | |
| 258 | 257 | ||
| 259 | 258 | inline void THROW_ERR_REQUIRE_ASYNC_MODULE( | |
@@ -275,7 +274,7 @@ inline void THROW_ERR_REQUIRE_ASYNC_MODULE( | |||
| 275 | 274 | message += "\n Requiring "; | |
| 276 | 275 | message += utf8.ToStringView(); | |
| 277 | 276 | } | |
| 278 | - THROW_ERR_REQUIRE_ASYNC_MODULE(env, message.c_str()); | ||
| 277 | + THROW_ERR_REQUIRE_ASYNC_MODULE(env, message); | ||
| 279 | 278 | } | |
| 280 | 279 | ||
| 281 | 280 | inline v8::Local<v8::Object> ERR_BUFFER_TOO_LARGE(v8::Isolate* isolate) { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments