Currently, there are two functions ("elseBlock" and "elifBlock") that are used to generate alternatives (i.e. "#elif", "#elifdef", "#else").
More precisely, "elseBlock" generates "#else" and "#elif" nodes, and elifBlock generates "#elifdef" nodes.
The "#ifdef" is currently the only node offering a choice between elseBlock and elifBlock. Other conditional directives only allow elseBlock and thus do not offer the possiblity to have (for example) a "#if" followed by a "#elifdef".
I can't think about any reason to disallow this behavior so I suggest to merge both function into a single one that generate all possible alternatives.
For the given example, this would result in
Currently, there are two functions ("elseBlock" and "elifBlock") that are used to generate alternatives (i.e. "#elif", "#elifdef", "#else"). More precisely, "elseBlock" generates "#else" and "#elif" nodes, and elifBlock generates "#elifdef" nodes.
The "#ifdef" is currently the only node offering a choice between elseBlock and elifBlock. Other conditional directives only allow elseBlock and thus do not offer the possiblity to have (for example) a "#if" followed by a "#elifdef".
Concretely, consider the following code:
This is currently parsed as a preproc_call
I can't think about any reason to disallow this behavior so I suggest to merge both function into a single one that generate all possible alternatives. For the given example, this would result in
This commit also adds a test to check for regression