Index: tools/external-reference-check.py |
diff --git a/tools/external-reference-check.py b/tools/external-reference-check.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..386d4a9ee51293d6c05f153544d2b9e771cd45d6 |
--- /dev/null |
+++ b/tools/external-reference-check.py |
@@ -0,0 +1,43 @@ |
+#!/usr/bin/env python |
+# Copyright 2014 the V8 project authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import re |
+import os |
+import sys |
+ |
+DECLARE_FILE = "src/assembler.h" |
+REGISTER_FILE = "src/serialize.cc" |
+DECLARE_RE = re.compile("\s*static ExternalReference ([^(]+)\(") |
+REGISTER_RE = re.compile("\s*Add\(ExternalReference::([^(]+)\(") |
+ |
+WORKSPACE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "..")) |
+ |
+# Ignore those. |
+BLACKLISTED = [ |
+ "page_flags", |
+ "math_exp_constants", |
+ "math_exp_log_table", |
+ "ForDeoptEntry", |
+] |
+ |
+def Find(filename, re): |
+ references = [] |
+ with open(filename, "r") as f: |
+ for line in f: |
+ match = re.match(line) |
+ if match: |
+ references.append(match.group(1)) |
+ return references |
+ |
+def Main(): |
+ declarations = Find(DECLARE_FILE, DECLARE_RE) |
+ registrations = Find(REGISTER_FILE, REGISTER_RE) |
+ difference = list(set(declarations) - set(registrations) - set(BLACKLISTED)) |
+ for reference in difference: |
+ print("Declared but not registered: ExternalReference::%s" % reference) |
+ return len(difference) > 0 |
+ |
+if __name__ == "__main__": |
+ sys.exit(Main()) |