History log of /src/usr.bin/make/unit-tests/vardebug.exp |
Revision | | Date | Author | Comments |
1.43 |
| 30-Mar-2025 |
rillig | make: use '"filename" line 123' for locations instead of 'filename:123'
The format 'filename:123' is commonly used for identifying a location in a file. Text editors recognize it and allow quick navigation through it. The previous format was specific to make and would have required custom support in editors.
The new format was already used in stack traces, except for the first line. Now all lines use the same format.
|
1.42 |
| 29-Mar-2025 |
rillig | make: add ":" to error message about unknown modifier
In the manual page, the modifiers are listed with a preceding ":", so use the same pattern in the error message. This removes an inconsistency between the error messages "Unknown modifier" and "Bad modifier".
|
1.41 |
| 29-Mar-2025 |
rillig | make: stop parsing after seeing an unknown modifier in an expression
Previously, after an expression such as ${VAR:Z::::}, make detected the unknown modifier ":Z" and then continued parsing, which produced unnecessary follow-up error messages. It was also necessary to distinguish the error cases when logging the result of an applied modifier in -dv mode.
Unify the error handling cases of a syntax error, an evaluation error and an unknown modifier, to avoid the unnecessary follow-up error messages.
The test in varmod-edge.mk now produces ":}" from the erroneous expression, which may be misleading and thus will be looked at in a follow-up commit.
The general idea of this patch was reviewed by sjg, I made a few nonsubstantial changes after the review.
|
1.40 |
| 11-Jan-2025 |
rillig | make: replace "Malformed conditional" with "Variable is undefined"
Evaluating a conditional such as ".if ${UNDEF}" produced a "Malformed conditional" error, even though the form of the conditional was correct, it was the content of the variable that was wrong.
Replace this message with the more accurate "Variable is undefined", revealing which of the possibly many variables is actually undefined.
|
1.39 |
| 11-Jan-2025 |
rillig | make: omit redundant follow-up message "Malformed conditional"
If there is a parse error or an evaluation error during the conditional, the conditional is already mentioned in the "while evaluating condition" line, so there's no reason to repeat it once again.
Same for the "Bad condition" message from the '?:' modifier.
|
1.38 |
| 29-Aug-2024 |
rillig | make: reduce line length in error messages
The error messages for deeply nested parse errors were hard to decipher, due to the large amount of text. Split these messages into individual lines, just as in the backtrace for .include files and .for loops. This unified backtrace makes the output more uniform.
|
1.37 |
| 06-Aug-2024 |
rillig | make: in error message about conditionals, use single quotes
Single quotes are used less often in the conditionals themselves, which leads to fewer confusions.
|
1.36 |
| 05-Jul-2024 |
rillig | make: in error messages for anonymous variables, log the value
|
1.35 |
| 20-Apr-2024 |
rillig | branches: 1.35.2; make: provide more context information for parse/evaluate errors
|
1.34 |
| 20-Dec-2023 |
rillig | tests/make: add the expected output to the test for variable debugging
|
1.33 |
| 20-Dec-2023 |
rillig | make: use consistent debug messages style when ignoring variables
When a variable is not modified or not deleted, clearly say so and state the reason. Use the same style of debug messages everywhere, putting the word 'ignoring' at the front. Previously, that word sticked out to the right, but only in some cases.
|
1.32 |
| 20-Dec-2023 |
rillig | make: fix confusing debug logging when deleting a variable
Be clear when deleting a variable is ignored and state the reason, instead of only providing a keyword as a hint for insiders.
|
1.31 |
| 10-Dec-2023 |
rillig | make: explain in the debug log why a variable assignment is ignored
|
1.30 |
| 01-Jun-2023 |
rillig | tests/make: force line-based diagnostics to be listed in the tests
This way, contradictions between the intended output and the actual output are closer together and have a better chance of being spotted.
|
1.29 |
| 26-Mar-2022 |
rillig | make: avoid trailing whitespace in debug log for variables
Since trailing whitespace is invisible, describe the variable value in words to make it visible.
|
1.28 |
| 26-Mar-2022 |
rillig | make: add space after colon in debug logging for variables
These log messages are intended for human interpretation, so don't make them unnecessarily hard to read.
|
1.27 |
| 20-Nov-2021 |
rillig | make: use correct plural form in debug message
|
1.26 |
| 10-Apr-2021 |
rillig | make: reword debug log message for empty variable name
The function names did not match anymore, after one of the many refactorings in the last few months.
|
1.25 |
| 10-Apr-2021 |
rillig | make: reduce debug logging and memory allocation for ${:U...}
Expressions of the form ${:U...} are often generated by .for loops. Since these expressions are not generated knowingly by the make user, do not fill the debug log with them since that would interrupt the normal reading flow of the -dv log for nested expressions.
|
1.24 |
| 06-Apr-2021 |
rillig | make: reduce verbosity of the -dv debug logging for standard cases
The verbosity was already removed from LogBeforeApply, now it is consistent between LogBeforeApply and LogAfterApply.
|
1.23 |
| 05-Apr-2021 |
rillig | make: in debug log, add space between scope and variable name
Without this space, the debug log looked more like line noise, even though the only punctuation was a single innocent ':'. From a make user's perspective, the variable name is a word of its own and should not be visually glued to its namespace.
|
1.22 |
| 05-Apr-2021 |
rillig | make: omit unnecessary details from -dv debug log
When an expression is based on a defined variable, it does not matter whether the evaluation mode is "eval" or "eval-defined", therefore omit these details to reduce confusion.
|
1.21 |
| 05-Apr-2021 |
rillig | make: be more verbose in -dv debug logging
The previous log output was too brief to be understandable. Give more hints by describing each part of the expression when evaluating a modifier. Distinguish between parse-only mode and eval mode since in parse-only mode most of the details are irrelevant.
|
1.20 |
| 05-Apr-2021 |
rillig | make: clean up debug logging for ':M' and ':N'
Using square brackets as quotes was confusing since patterns can contain square brackets themselves.
The debug logging for VarMatch was a bit too detailed. Having the "before" and "after" states is enough for all practically relevant cases.
|
1.19 |
| 03-Apr-2021 |
rillig | make: remove VarFlags from debug logging
Before the introduction of ExprDefined, VarFlags contained whether the expression was defined or not, which was useful to know since the final value of the expression depends on this information. The other VarFlags do not influence the evaluation, so there is no point logging them.
|
1.18 |
| 15-Mar-2021 |
rillig | make: change debug log for variable evaluation flags to lowercase
This makes them easier distinguishable from variable names since the latter are usually uppercase.
No functional change outside debug mode.
|
1.17 |
| 23-Feb-2021 |
rillig | make: improve error message for unknown modifier
Back in 1995, the modifiers were all single-character, and it made sense to print only the first character. Nowadays, with ':S', ':@var@...@', '::=' and several others, a little more context is useful to see where the exact error is. The actual modifier is still guessed, and the guess may be wrong as soon as backslashes get involved, but it is still better than before.
|
1.16 |
| 15-Feb-2021 |
rillig | make: rename ExprDefined constants for debug logging
|
1.15 |
| 02-Feb-2021 |
rillig | make: replace VarExprFlags with VarExprStatus
The combination of !VEF_UNDEF && VEF_DEF was not possible, which made it rather strange to model this state as a bit set.
The only functional change is the renamed constants in the debug output.
Using ENUM_VALUE_RTTI_2 felt like overengineering since it's harder to understand than a simple array of names.
|
1.14 |
| 20-Dec-2020 |
rillig | make(1): error out on unknown variable modifiers at parse time
Before, make printed an "error message" that did not include the word error and thus was not easily identified as such. This "error message" also did not influence the exit status in the default mode but only in -dL mode. The error message also didn't include any line number information and was thus rude.
|
1.13 |
| 17-Nov-2020 |
rillig | make(1): make test vardebug independent from the shell
|
1.12 |
| 31-Oct-2020 |
rillig | make(1): remove debug logging for the :Q variable modifier
The same information is already logged in LogAfterApply.
|
1.11 |
| 29-Oct-2020 |
rillig | make(1): add test for ignoring assignment to read-only variable
|
1.10 |
| 29-Oct-2020 |
rillig | make(1): move MAKEFLAGS handling in vardebug test to the test itself
|
1.9 |
| 30-Sep-2020 |
rillig | make(1): fix bug in evaluation of indirect variable modifiers
Since 2020-09-22, when indirect variable modifiers were applied to a variable expression based on an undefined variable, these modifiers did not change the state of a variable expression from undefined to defined. The modifiers that do this are :D, :U, :L, :P. Minimal example:
${VARNAME:${:UL}}
The :L modifier from the inner expression sets the value of the outer expression to its variable name, in this case "VARNAME". The outer expression was not marked as being defined though, which resulted in a "Malformed conditional" error.
In the commit from 2020-09-22, vardebug.exp had changed a lot, and I had not inspected the change closely. The important detail was in lines 56 and 60, where VAR_JUNK|VAR_KEEP changed into VEF_UNDEF, thereby losing the VEF_DEF bit.
|
1.8 |
| 22-Sep-2020 |
rillig | make(1): move VAR_JUNK and VAR_KEEP away from VarFlags
These two flags have nothing to do with a variable. They are only used while evaluating a variable expression.
While here, rename the flags and make their documentation more precise.
|
1.7 |
| 13-Sep-2020 |
rillig | make(1): shorten debug output of ApplyModifiers
Having the words "eflags" and "vflags" in the debug output was too repetitive. That they are flags is made obvious by the '|' separator, and the flags have clearly distinguishable names (VARE_* vs. VAR_*), which lowers the chance for confusion.
|
1.6 |
| 08-Aug-2020 |
rillig | make(1): add debug logging for Var_Parse
This will hopefully help with tracking down why the "Undefined variable" error message is not triggered.
There is some other non-obvious behavior nearby. In Parse_DoVar, the != assignment operator evaluates the variable using VARE_UNDEFERR, but there is not even a warning for the following line:
!= echo err ${UNDEFINED} 1>&2
|
1.5 |
| 08-Aug-2020 |
rillig | make(1): extend debug logging to error values
The error marker var_Error is just an empty string. In the debug log this empty string was not distinguishable from an otherwise empty string.
Having this distinction helps in understanding the exact data flow.
|
1.4 |
| 08-Aug-2020 |
rillig | make(1): add more detailed debug logging for variable modifiers
Before a modifier is applied to a variable, it is not yet parsed, therefore it is only possible to log a rough estimate of the modifier. But after applying it, the parsing position has advanced, and the full modifier can be logged.
In addition, to fully understand how the modifiers work, it's not enough to just know the variable names and values, there are also some flags that influence how the modifiers behave. The most influential is VARE_WANTRES.
Thanks to sjg for the extensive review and valuable feedback on the first drafts.
|
1.3 |
| 08-Aug-2020 |
rillig | make(1): fix debug output for indirect modifiers
The trailing part after the modifier was confusing at best. It does make sense to log the string from p to p+rlen, but not from p+len to p+len+len.
Consistently use double quotes for strings.
|
1.2 |
| 08-Aug-2020 |
rillig | make(1): add test for debugging message for indirect modifiers
The current output format stops in the middle of the next modifier, which was probably not intended.
|
1.1 |
| 25-Jul-2020 |
rillig | make(1): add tests for previously uncovered code
|
1.35.2.1 |
| 02-Aug-2025 |
perseant | Sync with HEAD
|