diff --git a/src/autoload.cpp b/src/autoload.cpp index 326279e4e..ade837725 100644 --- a/src/autoload.cpp +++ b/src/autoload.cpp @@ -17,7 +17,7 @@ #include "wutil.h" // IWYU pragma: keep /// The time before we'll recheck an autoloaded file. -const int kAutoloadStalenessInterval = 15; +static const int kAutoloadStalenessInterval = 15; /// Represents a file that we might want to autoload. namespace { diff --git a/src/builtin.cpp b/src/builtin.cpp index 07ce3cd70..ed21d9848 100644 --- a/src/builtin.cpp +++ b/src/builtin.cpp @@ -224,8 +224,7 @@ static maybe_t builtin_generic(parser_t &parser, io_streams_t &streams, con // How many bytes we read() at once. // Since this is just for counting, it can be massive. -constexpr int COUNT_CHUNK_SIZE = 512 * 256; - +#define COUNT_CHUNK_SIZE (512 * 256) /// Implementation of the builtin count command, used to count the number of arguments sent to it. static maybe_t builtin_count(parser_t &parser, io_streams_t &streams, const wchar_t **argv) { UNUSED(parser); @@ -414,7 +413,7 @@ static constexpr builtin_data_t builtin_datas[] = { }; ASSERT_SORTED_BY_NAME(builtin_datas); -constexpr int BUILTIN_COUNT = sizeof builtin_datas / sizeof *builtin_datas; +#define BUILTIN_COUNT (sizeof builtin_datas / sizeof *builtin_datas) /// Look up a builtin_data_t for a specified builtin /// diff --git a/src/builtins/math.cpp b/src/builtins/math.cpp index 98d409984..979e13435 100644 --- a/src/builtins/math.cpp +++ b/src/builtins/math.cpp @@ -19,7 +19,7 @@ #include "../wutil.h" // IWYU pragma: keep // The maximum number of points after the decimal that we'll print. -constexpr int kDefaultScale = 6; +static constexpr int kDefaultScale = 6; // The end of the range such that every integer is representable as a double. // i.e. this is the first value such that x + 1 == x (or == x + 2, depending on rounding mode). diff --git a/src/builtins/path.cpp b/src/builtins/path.cpp index aa0fb2fae..8d774fdd8 100644 --- a/src/builtins/path.cpp +++ b/src/builtins/path.cpp @@ -34,7 +34,7 @@ // How many bytes we read() at once. // We use PATH_MAX here so we always get at least one path, // and so we can automatically detect NULL-separated input. -constexpr int PATH_CHUNK_SIZE = PATH_MAX; +#define PATH_CHUNK_SIZE PATH_MAX static void path_error(io_streams_t &streams, const wchar_t *fmt, ...) { streams.err.append(L"path "); diff --git a/src/builtins/read.cpp b/src/builtins/read.cpp index 59d509645..e432a03c8 100644 --- a/src/builtins/read.cpp +++ b/src/builtins/read.cpp @@ -247,7 +247,7 @@ static int read_interactive(parser_t &parser, wcstring &buff, int nchars, bool s /// Bash uses 128 bytes for its chunk size. Very informal testing I did suggested that a smaller /// chunk size performed better. However, we're going to use the bash value under the assumption /// they've done more extensive testing. -constexpr int READ_CHUNK_SIZE = 128; +#define READ_CHUNK_SIZE 128 /// Read from the fd in chunks until we see newline or null, as requested, is seen. This is only /// used when the fd is seekable (so not from a tty or pipe) and we're not reading a specific number diff --git a/src/builtins/string.cpp b/src/builtins/string.cpp index a8da87554..e1d7a91a8 100644 --- a/src/builtins/string.cpp +++ b/src/builtins/string.cpp @@ -34,7 +34,7 @@ // Empirically determined. // This is probably down to some pipe buffer or some such, // but too small means we need to call `read(2)` and str2wcstring a lot. -constexpr int STRING_CHUNK_SIZE = 1024; +#define STRING_CHUNK_SIZE 1024 namespace { diff --git a/src/builtins/ulimit.cpp b/src/builtins/ulimit.cpp index d2a29fb35..d6fd2b90e 100644 --- a/src/builtins/ulimit.cpp +++ b/src/builtins/ulimit.cpp @@ -81,7 +81,7 @@ static const struct resource_t resource_arr[] = { /// This is likely to be the same as RLIMIT_INFINITY, but it shouldn't get used /// in the same context (that is, compared to the result of a getrlimit call). -constexpr int RLIMIT_UNKNOWN = -1; +#define RLIMIT_UNKNOWN -1 /// Get the implicit multiplication factor for the specified resource limit. static int get_multiplier(int what) { diff --git a/src/common.cpp b/src/common.cpp index ddf8a1ffc..465f5a89f 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1372,7 +1372,7 @@ static bool unescape_string_internal(const wchar_t *const input, const size_t in if (unescape_special && input_position == 0 && !std::wcscmp(input, PROCESS_EXPAND_SELF_STR)) { to_append_or_none = PROCESS_EXPAND_SELF; - input_position += const_strlen(PROCESS_EXPAND_SELF_STR) - 1; // skip over 'self's + input_position += PROCESS_EXPAND_SELF_STR_LEN - 1; // skip over 'self's } break; } diff --git a/src/common.h b/src/common.h index b4a32e643..d6e0e43ff 100644 --- a/src/common.h +++ b/src/common.h @@ -55,34 +55,34 @@ #endif // Common string type. -using wcstring = std::wstring; -using wcstring_list_t = std::vector; +typedef std::wstring wcstring; +typedef std::vector wcstring_list_t; struct termsize_t; // Highest legal ASCII value. -constexpr char ASCII_MAX = 127U; +#define ASCII_MAX 127u // Highest legal 16-bit Unicode value. -constexpr uint16_t UCS2_MAX = 0xFFFF; +#define UCS2_MAX 0xFFFFu // Highest legal byte value. -constexpr uint8_t BYTE_MAX = 0xFF; +#define BYTE_MAX 0xFFu // Unicode BOM value. -constexpr uint16_t UTF8_BOM_WCHAR = 0xFEFF; +#define UTF8_BOM_WCHAR 0xFEFFu // Use Unicode "noncharacters" for internal characters as much as we can. This // gives us 32 "characters" for internal use that we can guarantee should not // appear in our input stream. See http://www.unicode.org/faq/private_use.html. -constexpr wchar_t RESERVED_CHAR_BASE = static_cast(0xFDD0); -constexpr wchar_t RESERVED_CHAR_END = static_cast(0xFDF0); +#define RESERVED_CHAR_BASE static_cast(0xFDD0) +#define RESERVED_CHAR_END static_cast(0xFDF0) // Split the available noncharacter values into two ranges to ensure there are // no conflicts among the places we use these special characters. -constexpr wchar_t EXPAND_RESERVED_BASE = RESERVED_CHAR_BASE; -constexpr wchar_t EXPAND_RESERVED_END = (EXPAND_RESERVED_BASE + 16); -constexpr wchar_t WILDCARD_RESERVED_BASE = EXPAND_RESERVED_END; -constexpr wchar_t WILDCARD_RESERVED_END = (WILDCARD_RESERVED_BASE + 16); +#define EXPAND_RESERVED_BASE RESERVED_CHAR_BASE +#define EXPAND_RESERVED_END (EXPAND_RESERVED_BASE + 16) +#define WILDCARD_RESERVED_BASE EXPAND_RESERVED_END +#define WILDCARD_RESERVED_END (WILDCARD_RESERVED_BASE + 16) // Make sure the ranges defined above don't exceed the range for noncharacters. // This is to make sure we didn't do something stupid in subdividing the // Unicode range for our needs. @@ -102,8 +102,8 @@ constexpr wchar_t WILDCARD_RESERVED_END = (WILDCARD_RESERVED_BASE + 16); // Note: We don't use the highest 8 bit range (0xF800 - 0xF8FF) because we know // of at least one use of a codepoint in that range: the Apple symbol (0xF8FF) // on Mac OS X. See http://www.unicode.org/faq/private_use.html. -constexpr wchar_t ENCODE_DIRECT_BASE = static_cast(0xF600); -constexpr wchar_t ENCODE_DIRECT_END = (ENCODE_DIRECT_BASE + 256); +#define ENCODE_DIRECT_BASE static_cast(0xF600) +#define ENCODE_DIRECT_END (ENCODE_DIRECT_BASE + 256) // NAME_MAX is not defined on Solaris #if !defined(NAME_MAX) @@ -140,7 +140,7 @@ enum { UNESCAPE_INCOMPLETE = 1 << 1, // allow incomplete escape sequences UNESCAPE_NO_BACKSLASHES = 1 << 2, // don't handle backslash escapes }; -using unescape_flags_t = unsigned int; +typedef unsigned int unescape_flags_t; // Flags for the escape_string() function. These are only applicable when the escape style is // "script" (i.e., STRING_STYLE_SCRIPT). @@ -156,7 +156,7 @@ enum { /// Replace nonprintable control characters with Unicode symbols. ESCAPE_SYMBOLIC = 1 << 3 }; -using escape_flags_t = unsigned int; +typedef unsigned int escape_flags_t; /// A user-visible job ID. using job_id_t = int; @@ -300,7 +300,7 @@ std::string wcs2string(const wchar_t *in, size_t len); void wcs2string_appending(const wchar_t *in, size_t len, std::string *receiver); // Check if we are running in the test mode, where we should suppress error output -constexpr const wchar_t TESTS_PROGRAM_NAME[] = L"(ignore)"; +#define TESTS_PROGRAM_NAME L"(ignore)" bool should_suppress_stderr_for_tests(); /// Branch prediction hints. Idea borrowed from Linux kernel. Just used for asserts. @@ -637,7 +637,7 @@ enum { // Custom hash function used by unordered_map/unordered_set when key is const #ifndef CONST_WCSTRING_HASH -#define CONST_WCSTRING_HASH +#define CONST_WCSTRING_HASH 1 namespace std { template <> struct hash { diff --git a/src/complete.h b/src/complete.h index 6bd4c8c30..2c27e05b4 100644 --- a/src/complete.h +++ b/src/complete.h @@ -27,7 +27,7 @@ struct completion_mode_t { }; /// Character that separates the completion and description on programmable completions. -constexpr char PROG_COMPLETE_SEP = L'\t'; +#define PROG_COMPLETE_SEP L'\t' class parser_t; diff --git a/src/env.cpp b/src/env.cpp index fda0f7264..85ca447fd 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -38,19 +38,19 @@ #include "wutil.h" // IWYU pragma: keep /// Some configuration path environment variables. -constexpr const wchar_t FISH_DATADIR_VAR[] = L"__fish_data_dir"; -constexpr const wchar_t FISH_SYSCONFDIR_VAR[] = L"__fish_sysconf_dir"; -constexpr const wchar_t FISH_HELPDIR_VAR[] = L"__fish_help_dir"; -constexpr const wchar_t FISH_BIN_DIR[] = L"__fish_bin_dir"; -constexpr const wchar_t FISH_CONFIG_DIR[] = L"__fish_config_dir"; -constexpr const wchar_t FISH_USER_DATA_DIR[] = L"__fish_user_data_dir"; +#define FISH_DATADIR_VAR L"__fish_data_dir" +#define FISH_SYSCONFDIR_VAR L"__fish_sysconf_dir" +#define FISH_HELPDIR_VAR L"__fish_help_dir" +#define FISH_BIN_DIR L"__fish_bin_dir" +#define FISH_CONFIG_DIR L"__fish_config_dir" +#define FISH_USER_DATA_DIR L"__fish_user_data_dir" /// At init, we read all the environment variables from this array. extern char **environ; /// The character used to delimit path and non-path variables in exporting and in string expansion. -constexpr wchar_t PATH_ARRAY_SEP = L':'; -constexpr wchar_t NONPATH_ARRAY_SEP = L' '; +static constexpr wchar_t PATH_ARRAY_SEP = L':'; +static constexpr wchar_t NONPATH_ARRAY_SEP = L' '; bool curses_initialized = false; diff --git a/src/env_universal_common.cpp b/src/env_universal_common.cpp index 5aec61715..465ceac67 100644 --- a/src/env_universal_common.cpp +++ b/src/env_universal_common.cpp @@ -55,16 +55,16 @@ #endif // Haiku /// Error message. -constexpr const wchar_t PARSE_ERR[] = L"Unable to parse universal variable message: '%ls'"; +#define PARSE_ERR L"Unable to parse universal variable message: '%ls'" /// Small note about not editing ~/.fishd manually. Inserted at the top of all .fishd files. -constexpr const char SAVE_MSG[] = "# This file contains fish universal variable definitions.\n"; +#define SAVE_MSG "# This file contains fish universal variable definitions.\n" /// Version for fish 3.0 #define UVARS_VERSION_3_0 "3.0" // Maximum file size we'll read. -constexpr size_t k_max_read_size = 16 * 1024 * 1024; +static constexpr size_t k_max_read_size = 16 * 1024 * 1024; // Fields used in fish 2.x uvars. namespace fish2x_uvars { @@ -211,11 +211,11 @@ static bool append_file_entry(env_var_t::env_var_flags_t flags, const wcstring & } /// Encoding of a null string. -constexpr const wchar_t ENV_NULL[] = L"\x1d"; +static const wchar_t *const ENV_NULL = L"\x1d"; /// Character used to separate arrays in universal variables file. /// This is 30, the ASCII record separator. -constexpr const wchar_t UVAR_ARRAY_SEP = 0x1e; +static const wchar_t UVAR_ARRAY_SEP = 0x1e; /// Decode a serialized universal variable value into a list. static wcstring_list_t decode_serialized(const wcstring &val) { @@ -869,7 +869,7 @@ void env_universal_t::parse_message_2x_internal(const wcstring &msgstr, var_tabl } /// Maximum length of hostname. Longer hostnames are truncated. -constexpr int HOSTNAME_LEN = 255; +#define HOSTNAME_LEN 255 /// Function to get an identifier based on the hostname. bool get_hostname_identifier(wcstring &result) { @@ -898,8 +898,8 @@ class universal_notifier_shmem_poller_t final : public universal_notifier_t { uint32_t universal_variable_seed; }; -constexpr int SHMEM_MAGIC_NUMBER = 0xF154; -constexpr int SHMEM_VERSION_CURRENT = 1000; +#define SHMEM_MAGIC_NUMBER 0xF154 +#define SHMEM_VERSION_CURRENT 1000 private: long long last_change_time{0}; diff --git a/src/event.h b/src/event.h index a2275c07d..bbdf7bd30 100644 --- a/src/event.h +++ b/src/event.h @@ -19,7 +19,7 @@ struct io_streams_t; /// The process id that is used to match any process id. -constexpr int EVENT_ANY_PID = 0; +#define EVENT_ANY_PID 0 /// Enumeration of event types. enum class event_type_t { diff --git a/src/expand.cpp b/src/expand.cpp index c6d1e9825..17af38038 100644 --- a/src/expand.cpp +++ b/src/expand.cpp @@ -39,9 +39,9 @@ /// Characters which make a string unclean if they are the first character of the string. See \c /// expand_is_clean(). -constexpr const wchar_t UNCLEAN_FIRST[] = L"~%"; +#define UNCLEAN_FIRST L"~%" /// Unclean characters. See \c expand_is_clean(). -constexpr const wchar_t UNCLEAN[] = L"$*?\\\"'({})"; +#define UNCLEAN L"$*?\\\"'({})" static void remove_internal_separator(wcstring *s, bool conv); diff --git a/src/expand.h b/src/expand.h index 1d4bf7e89..5649abcb4 100644 --- a/src/expand.h +++ b/src/expand.h @@ -133,7 +133,8 @@ struct expand_result_t { }; /// The string represented by PROCESS_EXPAND_SELF -constexpr const wchar_t PROCESS_EXPAND_SELF_STR[] = L"%self"; +#define PROCESS_EXPAND_SELF_STR L"%self" +#define PROCESS_EXPAND_SELF_STR_LEN 5 /// Perform various forms of expansion on in, such as tilde expansion (\~USER becomes the users home /// directory), variable expansion (\$VAR_NAME becomes the value of the environment variable diff --git a/src/fd_monitor.cpp b/src/fd_monitor.cpp index 298f606d7..de55abd94 100644 --- a/src/fd_monitor.cpp +++ b/src/fd_monitor.cpp @@ -14,7 +14,7 @@ #include "iothread.h" #include "wutil.h" -constexpr uint64_t kUsecPerMsec = 1000; +static constexpr uint64_t kUsecPerMsec = 1000; fd_monitor_t::fd_monitor_t() = default; diff --git a/src/fds.cpp b/src/fds.cpp index 7ca57a7a4..0dbae2eb3 100644 --- a/src/fds.cpp +++ b/src/fds.cpp @@ -19,9 +19,9 @@ // The first fd in the "high range." fds below this are allowed to be used directly by users in // redirections, e.g. >&3 -constexpr int k_first_high_fd = 10; -constexpr uint64_t kUsecPerMsec = 1000; -constexpr uint64_t kUsecPerSec [[gnu::unused]] = 1000 * kUsecPerMsec; +const int k_first_high_fd = 10; +static constexpr uint64_t kUsecPerMsec = 1000; +static constexpr uint64_t kUsecPerSec [[gnu::unused]] = 1000 * kUsecPerMsec; void autoclose_fd_t::close() { if (fd_ < 0) return; diff --git a/src/fish_indent.cpp b/src/fish_indent.cpp index 5d135670f..142786608 100644 --- a/src/fish_indent.cpp +++ b/src/fish_indent.cpp @@ -56,7 +56,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA // The number of spaces per indent isn't supposed to be configurable. // See discussion at https://github.com/fish-shell/fish-shell/pull/6790 -constexpr int SPACES_PER_INDENT = 4; +#define SPACES_PER_INDENT 4 static bool dump_parse_tree = false; static int ret = 0; diff --git a/src/fish_tests.cpp b/src/fish_tests.cpp index 6ce1e52e6..fa6cc3934 100644 --- a/src/fish_tests.cpp +++ b/src/fish_tests.cpp @@ -121,11 +121,11 @@ static bool should_test_function(const char *func_name, bool default_on = true) } /// The number of tests to run. -constexpr int ESCAPE_TEST_COUNT = 100000; +#define ESCAPE_TEST_COUNT 100000 /// The average length of strings to unescape. -constexpr int ESCAPE_TEST_LENGTH = 100; +#define ESCAPE_TEST_LENGTH 100 /// The highest character number of character to try and escape. -constexpr int ESCAPE_TEST_CHAR = 4000; +#define ESCAPE_TEST_CHAR 4000 /// Number of encountered errors. static int err_count = 0; @@ -3928,8 +3928,8 @@ static void test_undo() { do_test(line.text() == L"abc"); } -constexpr int UVARS_PER_THREAD = 8; -constexpr const wchar_t UVARS_TEST_PATH[] = L"test/fish_uvars_test/varsfile.txt"; +#define UVARS_PER_THREAD 8 +#define UVARS_TEST_PATH L"test/fish_uvars_test/varsfile.txt" static int test_universal_helper(int x) { callback_data_list_t callbacks; diff --git a/src/highlight.cpp b/src/highlight.cpp index b870d3b7b..027756236 100644 --- a/src/highlight.cpp +++ b/src/highlight.cpp @@ -550,7 +550,7 @@ static void color_string_internal(const wcstring &buffstr, highlight_spec_t base // Hacky support for %self which must be an unquoted literal argument. if (buffstr == PROCESS_EXPAND_SELF_STR) { - std::fill_n(colors, const_strlen(PROCESS_EXPAND_SELF_STR), highlight_role_t::operat); + std::fill_n(colors, std::wcslen(PROCESS_EXPAND_SELF_STR), highlight_role_t::operat); return; } diff --git a/src/history.cpp b/src/history.cpp index 95a6875ad..80876d587 100644 --- a/src/history.cpp +++ b/src/history.cpp @@ -52,21 +52,21 @@ // Newlines are replaced by \n. Backslashes are replaced by \\. // This is the history session ID we use by default if the user has not set env var fish_history. -constexpr const wchar_t DFLT_FISH_HISTORY_SESSION_ID[] = L"fish"; +#define DFLT_FISH_HISTORY_SESSION_ID L"fish" // When we rewrite the history, the number of items we keep. -constexpr int HISTORY_SAVE_MAX = 1024 * 256; +#define HISTORY_SAVE_MAX (1024 * 256) // Default buffer size for flushing to the history file. -constexpr int HISTORY_OUTPUT_BUFFER_SIZE = 64 * 1024; +#define HISTORY_OUTPUT_BUFFER_SIZE (64 * 1024) // The file access mode we use for creating history files -constexpr int history_file_mode = 0600; +static constexpr int history_file_mode = 0600; // How many times we retry to save // Saving may fail if the file is modified in between our opening // the file and taking the lock -constexpr int max_save_tries = 1024; +static constexpr int max_save_tries = 1024; namespace { diff --git a/src/input.cpp b/src/input.cpp index 2af0b1be3..562cf7f33 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -32,7 +32,7 @@ #include "wutil.h" // IWYU pragma: keep /// A name for our own key mapping for nul. -constexpr const wchar_t k_nul_mapping_name[] = L"nul"; +static const wchar_t *k_nul_mapping_name = L"nul"; /// Struct representing a keybinding. Returned by input_get_mappings. struct input_mapping_t { @@ -72,7 +72,7 @@ struct terminfo_mapping_t { terminfo_mapping_t(const wchar_t *name, std::string s) : name(name), seq(std::move(s)) {} }; -constexpr size_t input_function_count = R_END_INPUT_FUNCTIONS; +static constexpr size_t input_function_count = R_END_INPUT_FUNCTIONS; /// Input function metadata. This list should be kept in sync with the key code list in /// input_common.h. diff --git a/src/input.h b/src/input.h index 27da08aa5..b775ad779 100644 --- a/src/input.h +++ b/src/input.h @@ -14,8 +14,8 @@ #include "input_common.h" #include "maybe.h" -constexpr wchar_t FISH_BIND_MODE_VAR[] = L"fish_bind_mode"; -constexpr wchar_t DEFAULT_BIND_MODE[]= L"default"; +#define FISH_BIND_MODE_VAR L"fish_bind_mode" +#define DEFAULT_BIND_MODE L"default" class event_queue_peeker_t; class parser_t; diff --git a/src/input_common.cpp b/src/input_common.cpp index 0c20af5c6..307af7522 100644 --- a/src/input_common.cpp +++ b/src/input_common.cpp @@ -30,7 +30,7 @@ /// Time in milliseconds to wait for another byte to be available for reading /// after \x1B is read before assuming that escape key was pressed, and not an /// escape sequence. -constexpr int WAIT_ON_ESCAPE_DEFAULT = 30; +#define WAIT_ON_ESCAPE_DEFAULT 30 static int wait_on_escape_ms = WAIT_ON_ESCAPE_DEFAULT; input_event_queue_t::input_event_queue_t(int in) : in_(in) {} diff --git a/src/io.cpp b/src/io.cpp index 7442702ef..463311c37 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -26,7 +26,7 @@ #define NOCLOB_ERROR _(L"The file '%ls' already exists") /// Base open mode to pass to calls to open. -constexpr int OPEN_MASK = 0666; +#define OPEN_MASK 0666 /// Provide the fd monitor used for background fillthread operations. static fd_monitor_t &fd_monitor() { diff --git a/src/iothread.cpp b/src/iothread.cpp index a6958f04b..c9bbe20ee 100644 --- a/src/iothread.cpp +++ b/src/iothread.cpp @@ -21,7 +21,7 @@ #include "maybe.h" /// We just define a thread limit of 1024. -constexpr int IO_MAX_THREADS = 1024; +#define IO_MAX_THREADS 1024 // iothread has a thread pool. Sometimes there's no work to do, but extant threads wait around for a // while (on a condition variable) in case new work comes soon. However condition variables are not @@ -29,9 +29,9 @@ constexpr int IO_MAX_THREADS = 1024; // See https://github.com/google/sanitizers/issues/1259 // When using TSan, disable the wait-around feature. #ifdef FISH_TSAN_WORKAROUNDS -constexpr int IO_WAIT_FOR_WORK_DURATION_MS = 0; +#define IO_WAIT_FOR_WORK_DURATION_MS 0 #else -constexpr int IO_WAIT_FOR_WORK_DURATION_MS = 500; +#define IO_WAIT_FOR_WORK_DURATION_MS 500 #endif using void_function_t = std::function; diff --git a/src/pager.cpp b/src/pager.cpp index 073c71ef2..a5c5ec199 100644 --- a/src/pager.cpp +++ b/src/pager.cpp @@ -30,16 +30,16 @@ using comp_t = pager_t::comp_t; using comp_info_list_t = std::vector; /// The minimum width (in characters) the terminal must to show completions at all. -constexpr int PAGER_MIN_WIDTH = 16; +#define PAGER_MIN_WIDTH 16 /// Minimum height to show completions -constexpr int PAGER_MIN_HEIGHT = 4; +#define PAGER_MIN_HEIGHT 4 /// The maximum number of columns of completion to attempt to fit onto the screen. -constexpr int PAGER_MAX_COLS = 6; +#define PAGER_MAX_COLS 6 /// Width of the search field. -constexpr int PAGER_SEARCH_FIELD_WIDTH = 12; +#define PAGER_SEARCH_FIELD_WIDTH 12 /// Text we use for the search field. #define SEARCH_FIELD_PROMPT _(L"search: ") diff --git a/src/pager.h b/src/pager.h index 3ed17db9e..ff74d055b 100644 --- a/src/pager.h +++ b/src/pager.h @@ -15,7 +15,7 @@ struct termsize_t; -constexpr size_t PAGER_SELECTION_NONE = static_cast(-1); +#define PAGER_SELECTION_NONE static_cast(-1) /// Represents rendering from the pager. class page_rendering_t { @@ -56,11 +56,11 @@ enum class selection_motion_t { }; // The space between adjacent completions. -constexpr const wchar_t PAGER_SPACER_STRING[] = L" "; -constexpr int PAGER_SPACER_STRING_WIDTH = const_strlen(PAGER_SPACER_STRING); +#define PAGER_SPACER_STRING L" " +#define PAGER_SPACER_STRING_WIDTH 2 // How many rows we will show in the "initial" pager. -constexpr int PAGER_UNDISCLOSED_MAX_ROWS = 4; +#define PAGER_UNDISCLOSED_MAX_ROWS 4 class pager_t { size_t available_term_width{0}; diff --git a/src/parse_constants.h b/src/parse_constants.h index 94d90eaa7..bd89e6dc5 100644 --- a/src/parse_constants.h +++ b/src/parse_constants.h @@ -189,13 +189,13 @@ struct parse_error_t { wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool is_interactive, bool skip_caret) const; }; -using parse_error_list_t = std::vector; +typedef std::vector parse_error_list_t; wcstring token_type_user_presentable_description(parse_token_type_t type, parse_keyword_t keyword = parse_keyword_t::none); // Special source_start value that means unknown. -constexpr size_t SOURCE_LOCATION_UNKNOWN = static_cast(-1); +#define SOURCE_LOCATION_UNKNOWN (static_cast(-1)) /// Helper function to offset error positions by the given amount. This is used when determining /// errors in a substring of a larger source buffer. @@ -209,7 +209,7 @@ enum class pipeline_position_t : uint8_t { }; /// Maximum number of function calls. -constexpr int FISH_MAX_STACK_DEPTH = 128; +#define FISH_MAX_STACK_DEPTH 128 /// Error message on a function that calls itself immediately. #define INFINITE_FUNC_RECURSION_ERR_MSG \ diff --git a/src/parse_util.cpp b/src/parse_util.cpp index 91fa85a04..f62a0e707 100644 --- a/src/parse_util.cpp +++ b/src/parse_util.cpp @@ -43,7 +43,7 @@ #define TIME_IN_PIPELINE_ERR_MSG _(L"The 'time' command may only be at the beginning of a pipeline") /// Maximum length of a variable name to show in error reports before truncation -constexpr int var_err_len = 16; +static constexpr int var_err_len = 16; int parse_util_lineno(const wcstring &str, size_t offset) { // Return the line number of position offset, starting with 1. diff --git a/src/print_help.cpp b/src/print_help.cpp index 456b1eb3b..0b2fa3c71 100644 --- a/src/print_help.cpp +++ b/src/print_help.cpp @@ -10,14 +10,15 @@ #include "common.h" -constexpr int CMD_LEN = 1024; -constexpr char HELP_ERR[] = "Could not show help message\n"; +#define CMD_LEN 1024 + +#define HELP_ERR "Could not show help message\n" void print_help(const char *c, int fd) { char cmd[CMD_LEN]; int printed = snprintf(cmd, CMD_LEN, "fish -c '__fish_print_help %s >&%d'", c, fd); if (printed < CMD_LEN && system(cmd) == -1) { - write_loop(2, HELP_ERR, const_strlen(HELP_ERR)); + write_loop(2, HELP_ERR, std::strlen(HELP_ERR)); } } diff --git a/src/reader.cpp b/src/reader.cpp index e1e57e291..7c1f1d831 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -83,47 +83,47 @@ // Name of the variable that tells how long it took, in milliseconds, for the previous // interactive command to complete. -constexpr const wchar_t ENV_CMD_DURATION[] = L"CMD_DURATION"; +#define ENV_CMD_DURATION L"CMD_DURATION" /// Maximum length of prefix string when printing completion list. Longer prefixes will be /// ellipsized. -constexpr int PREFIX_MAX_LEN = 9; +#define PREFIX_MAX_LEN 9 /// A simple prompt for reading shell commands that does not rely on fish specific commands, meaning /// it will work even if fish is not installed. This is used by read_i. -constexpr const wchar_t DEFAULT_PROMPT[] = L"echo -n \"$USER@$hostname $PWD \"'> '"; +#define DEFAULT_PROMPT L"echo -n \"$USER@$hostname $PWD \"'> '" /// The name of the function that prints the fish prompt. -constexpr const wchar_t LEFT_PROMPT_FUNCTION_NAME[] = L"fish_prompt"; +#define LEFT_PROMPT_FUNCTION_NAME L"fish_prompt" /// The name of the function that prints the fish right prompt (RPROMPT). -constexpr const wchar_t RIGHT_PROMPT_FUNCTION_NAME[] = L"fish_right_prompt"; +#define RIGHT_PROMPT_FUNCTION_NAME L"fish_right_prompt" /// The name of the function to use in place of the left prompt if we're in the debugger context. -constexpr const wchar_t DEBUG_PROMPT_FUNCTION_NAME[] = L"fish_breakpoint_prompt"; +#define DEBUG_PROMPT_FUNCTION_NAME L"fish_breakpoint_prompt" /// The name of the function for getting the input mode indicator. -constexpr const wchar_t MODE_PROMPT_FUNCTION_NAME[] = L"fish_mode_prompt"; +#define MODE_PROMPT_FUNCTION_NAME L"fish_mode_prompt" /// The default title for the reader. This is used by reader_readline. -constexpr const wchar_t DEFAULT_TITLE[] = L"echo (status current-command) \" \" $PWD"; +#define DEFAULT_TITLE L"echo (status current-command) \" \" $PWD" /// The maximum number of characters to read from the keyboard without repainting. Note that this /// readahead will only occur if new characters are available for reading, fish will never block for /// more input without repainting. -constexpr size_t READAHEAD_MAX = 256; +static constexpr size_t READAHEAD_MAX = 256; /// When tab-completing with a wildcard, we expand the wildcard up to this many results. /// If expansion would exceed this many results, beep and do nothing. -constexpr size_t TAB_COMPLETE_WILDCARD_MAX_EXPANSION = 256; +static const size_t TAB_COMPLETE_WILDCARD_MAX_EXPANSION = 256; /// A mode for calling the reader_kill function. In this mode, the new string is appended to the /// current contents of the kill buffer. -constexpr int KILL_APPEND = 0; +#define KILL_APPEND 0 /// A mode for calling the reader_kill function. In this mode, the new string is prepended to the /// current contents of the kill buffer. -constexpr int KILL_PREPEND = 1; +#define KILL_PREPEND 1 enum class jump_direction_t { forward, backward }; enum class jump_precision_t { till, to }; @@ -169,7 +169,7 @@ static operation_context_t get_bg_context(const std::shared_ptr & /// typed. But we do not want it to block forever - e.g. it may hang on determining if an arbitrary /// argument is a path. This is how long we'll wait (in milliseconds) before giving up and /// performing a no-io syntax highlighting. See #7418, #5912. -constexpr long kHighlightTimeoutForExecutionMs = 250; +static constexpr long kHighlightTimeoutForExecutionMs = 250; /// Get the debouncer for autosuggestions and background highlighting. /// These are deliberately leaked to avoid shutdown dtor registration. diff --git a/src/screen.cpp b/src/screen.cpp index 6bec1292b..30e27421b 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -45,7 +45,7 @@ #include "termsize.h" /// The number of characters to indent new blocks. -constexpr uint32_t INDENT_STEP = 4U; +#define INDENT_STEP 4u /// RAII class to begin and end buffering around an outputter. namespace { diff --git a/src/tokenizer.h b/src/tokenizer.h index 06c15124c..3fd12466f 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -26,17 +26,17 @@ enum class token_type_t : uint8_t { /// Flag telling the tokenizer to accept incomplete parameters, i.e. parameters with mismatching /// parenthesis, etc. This is useful for tab-completion. -constexpr int TOK_ACCEPT_UNFINISHED = 1; +#define TOK_ACCEPT_UNFINISHED 1 /// Flag telling the tokenizer not to remove comments. Useful for syntax highlighting. -constexpr int TOK_SHOW_COMMENTS = 2; +#define TOK_SHOW_COMMENTS 2 /// Ordinarily, the tokenizer ignores newlines following a newline, or a semicolon. This flag tells /// the tokenizer to return each of them as a separate END. -constexpr int TOK_SHOW_BLANK_LINES = 4; +#define TOK_SHOW_BLANK_LINES 4 /// Make an effort to continue after an error. -constexpr int TOK_CONTINUE_AFTER_ERROR = 8; +#define TOK_CONTINUE_AFTER_ERROR 8 using tok_flags_t = unsigned int; diff --git a/src/utf8.cpp b/src/utf8.cpp index 96fe74592..dfd031708 100644 --- a/src/utf8.cpp +++ b/src/utf8.cpp @@ -24,12 +24,12 @@ #include "common.h" -constexpr char _NXT = 0x80; -constexpr char _SEQ2 = 0xc0; -constexpr char _SEQ3 = 0xe0; -constexpr char _SEQ4 = 0xf0; +#define _NXT 0x80 +#define _SEQ2 0xc0 +#define _SEQ3 0xe0 +#define _SEQ4 0xf0 -constexpr uint16_t _BOM = 0xfeff; +#define _BOM 0xfeff // We can tweak the following typedef to allow us to simulate Windows-style 16 bit wchar's on Unix. using utf8_wchar_t = wchar_t; diff --git a/src/utf8.h b/src/utf8.h index ff1197b3c..cfd2a1b2d 100644 --- a/src/utf8.h +++ b/src/utf8.h @@ -22,8 +22,8 @@ #include -constexpr int UTF8_IGNORE_ERROR = 0x01; -constexpr int UTF8_SKIP_BOM = 0x02; +#define UTF8_IGNORE_ERROR 0x01 +#define UTF8_SKIP_BOM 0x02 /// Convert a string between UTF8 and UCS-2/4 (depending on size of wchar_t). Returns true if /// successful, storing the result of the conversion in *result*. diff --git a/src/wutil.h b/src/wutil.h index ef9a0d1b4..84a77e668 100644 --- a/src/wutil.h +++ b/src/wutil.h @@ -176,7 +176,7 @@ struct dir_t { }; #ifndef HASH_FILE_ID -#define HASH_FILE_ID +#define HASH_FILE_ID 1 namespace std { template <> struct hash {