Libc++ frequently has the need to parse more than just the builtin *test keywords* (RUN, REQUIRES, XFAIL, ect). For example libc++ currently needs a new keyword MODULES-DEFINES: macro list.... Instead of re-implementing the script parsing in libc++ this patch allows parseIntegratedTestScript to take custom parsers.
This patch introduces a new class IntegratedTestKeywordParser which implements the logic to parse/process a test keyword. Parsing of various keyword "kinds" are supported out of the box, including 'TAG', 'COMMAND', and 'LIST', which parse keywords such as END., RUN: and XFAIL: respectively.
As an example after this change libc++ can implement the MODULES-DEFINES simply using:
mparser = IntegratedTestKeywordParser('MODULES-DEFINES:', ParserKind.LIST) parseIntegratedTestScript(test, additional_parsers=[mparser]) macro_list = mparser.getValue()