Date: Fri, 20 Oct 2023 12:42:53 +0200
Sounds good!
Von:Hadriel Kaplan <hkaplan_at_[hidden]>
Gesendet:Fr 20.10.2023 10:15
> Just mentioning, there is a small difference to _Pragma:
> According to lex.phases _Pragma is evaluated in phase 4, string encoding and concatenation in phases 5 and 6.
Yup, and the things I was talking about are also being done in phase-4: during the macro-invocation expansion - i.e., when the preprocessor is expanding preprocessing-tokens that match a defined object-like or function-like macro; which is the same time it "expands" _Pragma().
I'm not proposing some new early or intermediate phase, or anything like that.
I should have made that clearer.
There is, though, one difference relative to _Pragma(). The _Pragma() operator passes the modified string to the lexer, but does not truly then process the new tokens through stage-4 again. It only processes pragma directives from those lex'ed output tokens.
Whereas this new thing needs to run them through stage-4 again... but NOT exactly all of stage-4 - only macro expansions, not directives. (for example, we would not allow a `#include` or `#ifdef` statement to work within it)
So maybe I shouldn't even describe it as "stage-4 but not xyz", but instead describe it as only "macro-invocation expansion".
-hadriel
Juniper Business Use Only
Received on 2023-10-20 10:42:56