summaryrefslogtreecommitdiffstats
path: root/llvm/test/TableGen/JSON-check.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/TableGen/JSON-check.py')
-rw-r--r--llvm/test/TableGen/JSON-check.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/llvm/test/TableGen/JSON-check.py b/llvm/test/TableGen/JSON-check.py
new file mode 100644
index 00000000000..b6bc4ee6c90
--- /dev/null
+++ b/llvm/test/TableGen/JSON-check.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+
+import sys
+import subprocess
+import traceback
+import json
+
+data = json.load(sys.stdin)
+testfile = sys.argv[1]
+
+prefix = "CHECK: "
+
+fails = 0
+passes = 0
+with open(testfile) as testfh:
+ lineno = 0
+ for line in iter(testfh.readline, ""):
+ lineno += 1
+ line = line.rstrip("\r\n")
+ try:
+ prefix_pos = line.index(prefix)
+ except ValueError:
+ continue
+ check_expr = line[prefix_pos + len(prefix):]
+
+ try:
+ exception = None
+ result = eval(check_expr, {"data":data})
+ except Exception:
+ result = False
+ exception = traceback.format_exc().splitlines()[-1]
+
+ if exception is not None:
+ sys.stderr.write(
+ "{file}:{line:d}: check threw exception: {expr}\n"
+ "{file}:{line:d}: exception was: {exception}\n".format(
+ file=testfile, line=lineno,
+ expr=check_expr, exception=exception))
+ fails += 1
+ elif not result:
+ sys.stderr.write(
+ "{file}:{line:d}: check returned False: {expr}\n".format(
+ file=testfile, line=lineno, expr=check_expr))
+ fails += 1
+ else:
+ passes += 1
+
+if fails != 0:
+ sys.exit("{} checks failed".format(fails))
+else:
+ sys.stdout.write("{} checks passed\n".format(passes))
OpenPOWER on IntegriCloud