Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: tools/binary_size/libsupersize/function_signature.py

Issue 2856203004: supersize: Fix name normalization of top-level lambdas (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/binary_size/libsupersize/function_signature.py
diff --git a/tools/binary_size/libsupersize/function_signature.py b/tools/binary_size/libsupersize/function_signature.py
index b267fc5a1666e9707c665ba6ce5271216bdcc700..bedc99ee9a267a03a837cd54b745a2b736132262 100644
--- a/tools/binary_size/libsupersize/function_signature.py
+++ b/tools/binary_size/libsupersize/function_signature.py
@@ -43,7 +43,8 @@ def _FindParameterListParen(name):
start_idx = idx + 21
continue
# Special case: skip "decltype (...)"
- if name[idx - 1] != ' ':
+ # Special case: skip "{lambda(PaintOp*)#63}"
+ if name[idx - 1] != ' ' and name[idx - 7:idx] != '{lambda':
return idx
start_idx = idx + 1
paren_balance_count += 1
@@ -85,6 +86,14 @@ def _FindReturnValueSpace(name, paren_idx):
return space_idx
+def _NormalizeTopLevelLambda(name, space_idx, left_paren_idx):
+ # cc::{lambda(PaintOp*)#63}::_FUN() -> cc:{lambda#63}()
+ paren_idx = name.index('(', space_idx + 1)
+ hash_idx = name.rindex('#', paren_idx)
+ return (name[:paren_idx] + name[hash_idx:left_paren_idx - 6] +
+ name[left_paren_idx:])
+
+
def Parse(name):
"""Extracts a function name from a function signature.
@@ -95,10 +104,20 @@ def Parse(name):
"""
left_paren_idx = _FindParameterListParen(name)
+ full_name = name
if left_paren_idx > 0:
right_paren_idx = name.rindex(')')
assert right_paren_idx > left_paren_idx
space_idx = _FindReturnValueSpace(name, left_paren_idx)
- return (name[space_idx + 1:],
- name[space_idx + 1:left_paren_idx] + name[right_paren_idx + 1:])
- return name, name
+ name_without_attrib = name[space_idx + 1:left_paren_idx]
+ # Special case for top-level lamdas.
+ if name_without_attrib.endswith('}::_FUN'):
+ # Don't use name_without_attrib in here since prior _idx will be off if
+ # there was a return value.
+ name = _NormalizeTopLevelLambda(name, space_idx, left_paren_idx)
+ return Parse(name)
+
+ full_name = name[space_idx + 1:]
+ name = name_without_attrib + name[right_paren_idx + 1:]
+
+ return full_name, name
« no previous file with comments | « tools/binary_size/libsupersize/describe.py ('k') | tools/binary_size/libsupersize/function_signature_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698