Added %(line), %(line+<number>), %(line-<number>) substitutions to lit

llvm-svn: 167971
This commit is contained in:
Alexander Kornienko 2012-11-14 20:26:19 +00:00
parent e18e4add6c
commit 317adfc8b7
2 changed files with 16 additions and 0 deletions

View File

@ -723,6 +723,11 @@ define two separate CHECK lines that match on the same line.
<dd>The full path to the test case's source. This is suitable for passing
on the command line as the input to an llvm tool.</dd>
<dt><b>%(line), %(line+<i>number</i>), %(line-<i>number</i>)</b></dt>
<dd>The number of the line where this variable is used, with an optional
integer offset. This can be used in tests with multiple RUN: lines, which
reference test file's line numbers.</dd>
<dt><b>$srcdir</b></dt>
<dd>The source directory from where the "<tt>make check</tt>" was run.</dd>

View File

@ -432,7 +432,9 @@ def parseIntegratedTestScript(test, normalize_slashes=False,
script = []
xfails = []
requires = []
line_number = 0
for ln in open(sourcepath):
line_number += 1
if 'RUN:' in ln:
# Isolate the command to run.
index = ln.index('RUN:')
@ -441,6 +443,15 @@ def parseIntegratedTestScript(test, normalize_slashes=False,
# Trim trailing whitespace.
ln = ln.rstrip()
# Substitute line number expressions
ln = re.sub('%\(line\)', str(line_number), ln)
def replace_line_number(match):
if match.group(1) == '+':
return str(line_number + int(match.group(2)))
if match.group(1) == '-':
return str(line_number - int(match.group(2)))
ln = re.sub('%\(line *([\+-]) *(\d+)\)', replace_line_number, ln)
# Collapse lines with trailing '\\'.
if script and script[-1][-1] == '\\':
script[-1] = script[-1][:-1] + ln