From 014c27abe443a6303559465eb2800550738ac4e0 Mon Sep 17 00:00:00 2001 From: "evan.lucas" Date: Thu, 12 Nov 2015 06:47:38 -0800 Subject: [PATCH] deps: backport bc2e393 from v8 upstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [tools] Make gen-postmortem-metadata.py more reliable Instead of basing matches off of whitespace, walk the inheritance chain and include any classes that inherit from Object. R=machenbach@chromium.org,jkummerow@chromium.org NOTRY=true Review URL: https://codereview.chromium.org/1435643002 Cr-Commit-Position: refs/heads/master@{#31964} This adds some missing classes to postmortem info like JSMap and JSSet. Ref: https://github.com/nodejs/node/pull/3792 PR-URL: https://github.com/nodejs/node/pull/4106 Reviewed-By: bnoordhuis - Ben Noordhuis Reviewed-By: targos - Michaƫl Zasso Reviewed-By: rvagg - Rod Vagg --- deps/v8/tools/gen-postmortem-metadata.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/deps/v8/tools/gen-postmortem-metadata.py b/deps/v8/tools/gen-postmortem-metadata.py index 433fc55d582a54..1f2c4e7cbed7a5 100644 --- a/deps/v8/tools/gen-postmortem-metadata.py +++ b/deps/v8/tools/gen-postmortem-metadata.py @@ -273,6 +273,20 @@ } ''' +# +# Get the base class +# +def get_base_class(klass): + if (klass == 'Object'): + return klass; + + if (not (klass in klasses)): + return None; + + k = klasses[klass]; + + return get_base_class(k['parent']); + # # Loads class hierarchy and type information from "objects.h". # @@ -311,12 +325,14 @@ def load_objects(): typestr += line; continue; - match = re.match('class (\w[^\s:]*)(: public (\w[^\s{]*))?\s*{', + match = re.match('class (\w[^:]*)(: public (\w[^{]*))?\s*{\s*', line); if (match): - klass = match.group(1); + klass = match.group(1).rstrip().lstrip(); pklass = match.group(3); + if (pklass): + pklass = pklass.rstrip().lstrip(); klasses[klass] = { 'parent': pklass }; # @@ -567,6 +583,9 @@ def emit_config(): keys.sort(); for klassname in keys: pklass = klasses[klassname]['parent']; + bklass = get_base_class(klassname); + if (bklass != 'Object'): + continue; if (pklass == None): continue;