1#!/usr/bin/env python 2# Copyright 2014 the V8 project authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import re 7import os 8import sys 9 10DECLARE_FILE = "src/assembler.h" 11REGISTER_FILE = "src/snapshot/serialize.cc" 12DECLARE_RE = re.compile("\s*static ExternalReference ([^(]+)\(") 13REGISTER_RE = re.compile("\s*Add\(ExternalReference::([^(]+)\(") 14 15WORKSPACE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "..")) 16 17# Ignore those. 18BLACKLISTED = [ 19 "fixed_typed_array_base_data_offset", 20 "page_flags", 21 "math_exp_constants", 22 "math_exp_log_table", 23 "ForDeoptEntry", 24] 25 26def Find(filename, re): 27 references = [] 28 with open(filename, "r") as f: 29 for line in f: 30 match = re.match(line) 31 if match: 32 references.append(match.group(1)) 33 return references 34 35def Main(): 36 declarations = Find(DECLARE_FILE, DECLARE_RE) 37 registrations = Find(REGISTER_FILE, REGISTER_RE) 38 difference = list(set(declarations) - set(registrations) - set(BLACKLISTED)) 39 for reference in difference: 40 print("Declared but not registered: ExternalReference::%s" % reference) 41 return len(difference) > 0 42 43if __name__ == "__main__": 44 sys.exit(Main()) 45