Chromium Code Reviews| 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..f50a7012a26cf7c5de5e3cb387fd658704257bbe |
| --- /dev/null |
| +++ b/tools/external-reference-check.py |
| @@ -0,0 +1,45 @@ |
| +#!/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]), "..")) |
| + |
| +EXPECTED_EXTERNAL_REFERENCES = 100 |
|
Slava Chigrin
2014/08/05 13:17:04
Seems, it is not used. Am I wrong?
|
| + |
| +# 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()) |