node/deps/v8/tools/check-name-clashes.py
Ben Noordhuis 70d1f32f56 deps: update v8 to 4.4.63.9
Upgrade the bundled V8 and update code in src/ and lib/ to the new API.

Notable backwards incompatible changes are the removal of the smalloc
module and dropped support for CESU-8 decoding.  CESU-8 support can be
brought back if necessary by doing UTF-8 decoding ourselves.

This commit includes https://codereview.chromium.org/1192973004 to fix
a build error on python 2.6 systems.  The original commit log follows:

    Use optparse in js2c.py for python compatibility

    Without this change, V8 won't build on RHEL/CentOS 6 because the
    distro python is too old to know about the argparse module.

PR-URL: https://github.com/nodejs/io.js/pull/2022
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
2015-08-04 11:56:14 -07:00

118 lines
2.8 KiB
Python
Executable file

#!/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 js2c
import os
import re
import sys
FILENAME = "src/runtime/runtime.h"
LISTHEAD = re.compile(r"#define\s+(FOR_EACH_\w+)\((\w+)\)")
LISTBODY = re.compile(r".*\\$")
class Function(object):
def __init__(self, match):
self.name = match.group(1).strip()
def ListMacroRe(list):
macro = LISTHEAD.match(list[0]).group(2)
re_string = "\s*%s\((\w+)" % macro
return re.compile(re_string)
def FindLists(filename):
lists = []
current_list = []
mode = "SEARCHING"
with open(filename, "r") as f:
for line in f:
if mode == "SEARCHING":
match = LISTHEAD.match(line)
if match:
mode = "APPENDING"
current_list.append(line)
else:
current_list.append(line)
match = LISTBODY.match(line)
if not match:
mode = "SEARCHING"
lists.append(current_list)
current_list = []
return lists
# Detects runtime functions by parsing FILENAME.
def FindRuntimeFunctions():
functions = []
lists = FindLists(FILENAME)
for list in lists:
function_re = ListMacroRe(list)
for line in list:
match = function_re.match(line)
if match:
functions.append(Function(match))
return functions
class Builtin(object):
def __init__(self, match):
self.name = match.group(1)
def FindJSNatives():
PATH = "src"
fileslist = []
for (root, dirs, files) in os.walk(PATH):
for f in files:
if f.endswith(".js"):
fileslist.append(os.path.join(root, f))
natives = []
regexp = re.compile("^function (\w+)\s*\((.*?)\) {")
matches = 0
for filename in fileslist:
with open(filename, "r") as f:
file_contents = f.read()
file_contents = js2c.ExpandInlineMacros(file_contents)
lines = file_contents.split("\n")
partial_line = ""
for line in lines:
if line.startswith("function") and not '{' in line:
partial_line += line.rstrip()
continue
if partial_line:
partial_line += " " + line.strip()
if '{' in line:
line = partial_line
partial_line = ""
else:
continue
match = regexp.match(line)
if match:
natives.append(Builtin(match))
return natives
def Main():
functions = FindRuntimeFunctions()
natives = FindJSNatives()
errors = 0
runtime_map = {}
for f in functions:
runtime_map[f.name] = 1
for b in natives:
if b.name in runtime_map:
print("JS_Native/Runtime_Function name clash: %s" % b.name)
errors += 1
if errors > 0:
return 1
print("Runtime/Natives name clashes: checked %d/%d functions, all good." %
(len(functions), len(natives)))
return 0
if __name__ == "__main__":
sys.exit(Main())