mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
C++: Only support non-type template parameters in tail position.
This commit is contained in:
@@ -634,14 +634,13 @@ string getParameterTypeWithoutTemplateArguments(Function f, int n, boolean canon
|
|||||||
canonical = true
|
canonical = true
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the `i`'th supported template parameter for `templateFunction`. */
|
/**
|
||||||
private Locatable getSupportedFunctionTemplateArgument(Function templateFunction, int i) {
|
* Gets the largest index of a template parameter of `templateFunction` that
|
||||||
|
* is a type template parameter.
|
||||||
|
*/
|
||||||
|
private int getLastTypeTemplateFunctionParameterIndex(Function templateFunction) {
|
||||||
result =
|
result =
|
||||||
rank[i + 1](int j, TypeTemplateParameter ttp |
|
max(int index | templateFunction.getTemplateArgument(index) instanceof TypeTemplateParameter)
|
||||||
ttp = templateFunction.getTemplateArgument(j)
|
|
||||||
|
|
|
||||||
ttp order by j
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the number of supported template parameters for `templateFunction`. */
|
/** Gets the number of supported template parameters for `templateFunction`. */
|
||||||
@@ -649,6 +648,14 @@ private int getNumberOfSupportedFunctionTemplateArguments(Function templateFunct
|
|||||||
result = count(int i | exists(getSupportedFunctionTemplateArgument(templateFunction, i)) | i)
|
result = count(int i | exists(getSupportedFunctionTemplateArgument(templateFunction, i)) | i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the `i`'th supported template parameter for `templateFunction`. */
|
||||||
|
private Locatable getSupportedFunctionTemplateArgument(Function templateFunction, int i) {
|
||||||
|
result = templateFunction.getTemplateArgument(i) and
|
||||||
|
// We don't yet support non-type template parameters in the middle of a
|
||||||
|
// template parameter list
|
||||||
|
i <= getLastTypeTemplateFunctionParameterIndex(templateFunction)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize the `n`'th parameter of `f` by replacing template names
|
* Normalize the `n`'th parameter of `f` by replacing template names
|
||||||
* with `func:N` (where `N` is the index of the template).
|
* with `func:N` (where `N` is the index of the template).
|
||||||
@@ -669,14 +676,21 @@ private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remain
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the largest index of a template parameter of `templateFunction` that
|
||||||
|
* is a type template parameter.
|
||||||
|
*/
|
||||||
|
private int getLastTypeTemplateClassParameterIndex(Class templateClass) {
|
||||||
|
result =
|
||||||
|
max(int index | templateClass.getTemplateArgument(index) instanceof TypeTemplateParameter)
|
||||||
|
}
|
||||||
|
|
||||||
/** Gets the `i`'th supported template parameter for `templateClass`. */
|
/** Gets the `i`'th supported template parameter for `templateClass`. */
|
||||||
private Locatable getSupportedClassTemplateArgument(Class templateClass, int i) {
|
private Locatable getSupportedClassTemplateArgument(Class templateClass, int i) {
|
||||||
result =
|
result = templateClass.getTemplateArgument(i) and
|
||||||
rank[i + 1](int j, TypeTemplateParameter ttp |
|
// We don't yet support non-type template parameters in the middle of a
|
||||||
ttp = templateClass.getTemplateArgument(j)
|
// template parameter list
|
||||||
|
|
i <= getLastTypeTemplateClassParameterIndex(templateClass)
|
||||||
ttp order by j
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the number of supported template parameters for `templateClass`. */
|
/** Gets the number of supported template parameters for `templateClass`. */
|
||||||
|
|||||||
Reference in New Issue
Block a user