glsl/glcpp: make sure to expand new token after concatenation
Previously the code was using a hack to change the token type from INDETIFIER -> OTHER in order to avoid getting in an infinite loop expanding the tokens. This worked ok until we got to a paste where the replacement parameters had already had their type changed to OTHER because the newly created paste token would then inherit the OTHER type and never get expanded inself. For example with the follow code: #define STEP_ONE() \ out_Color = vec4(0.0,1.0,0.0,1.0) #define GLUE(x,y) x ## _ ## y #define EVALUATE(x,y) GLUE(x,y) #define STEP(stepname) EVALUATE(STEP, stepname)() #define PERFORM_RAYCASTING_STEP STEP(ONE) This would get all the way to expanding PERFORM_RAYCASTING_STEP to STEP_ONE() but because it was created via the paste `x ## _ ## y` it would never get any further. To fix this we remove the OTHER hack and instead just track if the token has already been handled via a bool value `explanding`. Closes: mesa/mesa#5724 Fixes: 28842c23 ("glcpp: Implement token pasting for non-function-like macros") Acked-by:Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by:
Ian Romanick <ian.d.romanick@intel.com> Part-of: <mesa/mesa!14101>