Module Name: src Committed By: rillig Date: Mon Feb 15 17:44:09 UTC 2021
Modified Files: src/usr.bin/make: var.c Log Message: make: split parameters for evaluating variable expressions The details of how variable expressions are evaluated is controlled by several parameters: startc and endc differ for $(VAR) and ${VAR}, the value of the expression can be interpreted as a single big word, and when joining several words (such as with ':M' or ':S'), there may be a custom word separator (defined with ':ts*'). The scope of half of these parameters is the whole variable expression, the other half of the parameters are reset after each chain of indirect modifiers. To make this distinction obvious in the code, extract Expr from ApplyModifiersState. Previously, these details were hidden in how parameters are passed and restored among ApplyModifiersIndirect and ApplyModifiers. The changes in the individual ApplyModifier functions are numerous but straight-forward. They mostly replace 'st' with 'expr'. The changes in ApplyModifiers and ApplyModifiersIndirect are more subtle. The value of the expression is no longer passed around but is stored in a fixed location, in Expr, which makes it easier to reason about memory management. The code in ApplyModifiers after 'cleanup' looks quite different but preserves the existing behavior. Expr_SetValueRefer is nothing else than the combination of FStr_Done followed by FStr_InitRefer. Storing exprStatus back at the end was responsible for passing the definedness of the expression after applying the indirect modifiers back to the outer ApplyModifiersState. The same effect is now achieved by having Expr.status with a wider scope. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.822 -r1.823 src/usr.bin/make/var.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.