This commit introduces 4 macros (for different log levels) that can be used
to log messages to $HOME/.nvimlog:
- DLOG: log a debug message (e.g. `DLOG("sum(%d, %d): %d", x, y, sum(x, y));`)
- ILOG: log some useful information (e.g. `ILOG("Main loop started")`)
- WLOG: log a warning (e.g. `WLOG("Command not found: %s", command)`)
- ELOG: log an error (e.g. `ELOG("Out of memory. Exiting.")`)
All these macros are disabled if `NDEBUG` or `DISABLE_LOG` is defined. This
guarantees that a `Release` build won't log anything.
`MIN_LOG_LEVEL` can be defined to reduce the verbosity of the log. The log
levels are:
```
DEBUG_LOG_LEVEL 0
INFO_LOG_LEVEL 1
WARNING_LOG_LEVEL 2
ERROR_LOG_LEVEL 3
```
`MIN_LOG_LEVEL` is 0 by default enabling all levels. If `MIN_LOG_LEVEL` is set
to 2, for example, only warnings and errors will be logged.
That's how the log looks like:
```
DATETIME LOG_LEVEL FUNCTION LINE PID FORMATTED MESSAGE
2014/05/01 23:46:14 [info @ main_loop:582] 44376 - Starting Neovim main loop.
2014/05/01 23:46:31 [info @ main_loop:582] 44400 - Starting Neovim main loop.
```
ENABLE_LOG is too broad to be used only to enable logging in regexp_nfa.c. Use
REGEXP_DEBUG instead.
ENABLE_LOG was defined by checking REGEXP_DEBUG in the first place.
Problem EMSGN was being used to print a format string using "%lu",
which is incorrect because EMSGN casts its argument to int64_t.
Solution Use EMGSU instead.
Problem
EMSGU macro was defined as the unsigned counterpart of EMSGN. This is,
invoking emsgu instead of emsgn and having a long_u argument instead of
a long.
But, surprisingly, emsgu was not defined anywhere, which didn't result
in an error because in fact EMSGU was not used (the only point in code
printing a %lu erroneously using EMSGN instead).
Solution
- Define emsgu.
- Adapt EMSGU macro to use uint64_t instead of long_u.
This allows us to avoid hard-coding paths and using environment
variables to communicate key information to unit tests, which fits
with the overall goal of making sure that folks driving CMake directly
can continue to do out-of-tree builds.
Replace long_i with plain long.
long_i was just plain long, adding marker __w64, to be used by
Microsoft's compilers only, as an aid when transitioning from 32 bits to
64 bits. Purpose of this marker was, in fact, to make a 32 bit compiler
emit the same warnings that a 64 bit compiler would.
This __w64 marker is nowadays deprecated by said compilers, and use of a
real 64 bit compiler is recommended instead. See
http://msdn.microsoft.com/en-us/library/s04b5w00.aspx for details.
So, there's no reason to maintain this anymore, and thus is removed.
Refactoring long into int64_t is not attempted, as doing that in a bulk
way is too much complicated. That is left to be done later, on a
file-by-file basis, probably intermixed with file-by-file -Wconversion
activation.
Requested in #459.
- Replace int_u with uint32_t (same size, should give no problems).
In fact, only usage found seems to be dead code (some functions in
ui.h seem not to be used anymore).
- Remove int_u typedef.
Requested in #459.
- Replace short_u with uint16_t (same size, should give no problems).
- When possible, remove explicit downcasts so that they are found when
flag -Wconversion enabled.
- Remove short_u typedef.
Requested in #459.
Files changed: charset.c, buffer.c, diff.c, edit.c,
ex_cmds.c, ex_cmds2.c and ex_docmd.c.
The remaining alloc's in these files require more careful attention to
remove.
reverting broad cosmetic/style change because:
- increases merge-conflicts
- increases overhead of merging upstream Vim patches
- reasons for change are ambiguous, so default to no change