Generalize and harmonize sub-expression traversal
CastExpr::getSubExprAsWritten and getConversionFunction used to have disparate implementations to traverse the sub-expression chain and skip so-called "implicit temporaries" (which are really implicit nodes added by Sema to represent semantic details in the AST). There's some friction in these algorithms that makes it hard to extend and change them: * skipImplicitTemporary is order-dependent; it can skip a CXXBindTemporaryExpr nested inside a MaterializeTemporaryExpr, but not vice versa * skipImplicitTemporary only runs one pass, it does not traverse multiple nested sequences of MTE/CBTE/MTE/CBTE, for example Both of these weaknesses are void at this point, because this kind of out-of-order multi-level nesting does not exist in the current AST. Adding a new implicit expression to skip exacerbates the problem, however, since a node X might show up in any and all locations between the existing. Thus; * Harmonize the form of getSubExprAsWritten and getConversionFunction so they both use a for loop * Use the IgnoreExprNodes machinery to skip multiple nodes * Rename skipImplicitTemporary to ignoreImplicitSemaNodes to generalize * Update ignoreImplicitSemaNodes so it only skips one level per call, to mirror existing Ignore functions and work better with IgnoreExprNodes This is a functional change, but one without visible effect.
Loading
Please sign in to comment