Index: tools/binary_size/libsupersize/function_signature_test.py |
diff --git a/tools/binary_size/libsupersize/function_signature_test.py b/tools/binary_size/libsupersize/function_signature_test.py |
index 6c6ac7351b8c8fa4b9c72cba62f2b11d7c53d39f..757da729786a642047af5dd90fa628f85769673d 100755 |
--- a/tools/binary_size/libsupersize/function_signature_test.py |
+++ b/tools/binary_size/libsupersize/function_signature_test.py |
@@ -4,6 +4,7 @@ |
# found in the LICENSE file. |
import logging |
+import re |
import unittest |
import function_signature |
@@ -12,16 +13,24 @@ import function_signature |
class AnalyzeTest(unittest.TestCase): |
def testParseFunctionSignature(self): |
- def check(ret_part, name_part, params_part, after_part=''): |
+ def check(ret_part, name_part, params_part, after_part='', |
+ name_without_templates=None): |
+ if name_without_templates is None: |
+ name_without_templates = re.sub(r'<.*?>', '', name_part) + after_part |
+ |
signature = ''.join((name_part, params_part, after_part)) |
- got_full, got_name = function_signature.Parse(signature) |
- self.assertEqual(name_part + after_part, got_name) |
- self.assertEqual(name_part + params_part + after_part, got_full) |
+ got_full_name, got_template_name, got_name = ( |
+ function_signature.Parse(signature)) |
+ self.assertEqual(name_without_templates, got_name) |
+ self.assertEqual(name_part + after_part, got_template_name) |
+ self.assertEqual(name_part + params_part + after_part, got_full_name) |
if ret_part: |
signature = ''.join((ret_part, name_part, params_part, after_part)) |
- got_full, got_name = function_signature.Parse(signature) |
- self.assertEqual(name_part + after_part, got_name) |
- self.assertEqual(name_part + params_part + after_part, got_full) |
+ got_full_name, got_template_name, got_name = ( |
+ function_signature.Parse(signature)) |
+ self.assertEqual(name_without_templates, got_name) |
+ self.assertEqual(name_part + after_part, got_template_name) |
+ self.assertEqual(name_part + params_part + after_part, got_full_name) |
check('bool ', |
'foo::Bar<unsigned int, int>::Do<unsigned int>', |
@@ -50,7 +59,8 @@ class AnalyzeTest(unittest.TestCase): |
'(std::__ndk1::<int> volatile*, std::__ndk1::memory_order)') |
check('std::basic_ostream<char, std::char_traits<char> >& ', |
'std::operator<< <std::char_traits<char> >', |
- '(std::basic_ostream<char, std::char_traits<char> >&, char)') |
+ '(std::basic_ostream<char, std::char_traits<char> >&, char)', |
+ name_without_templates='std::operator<<') |
check('v8::internal::SlotCallbackResult ', |
'v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget' |
'<v8::PointerUpdateJobTraits<(v8::Direction)1>::Foo(v8::Heap*, ' |
@@ -59,7 +69,9 @@ class AnalyzeTest(unittest.TestCase): |
'const::{lambda(v8::Object**)#1}>', |
'(v8::RelocInfo, v8::Foo<(v8::PointerDirection)1>::Bar(v8::Heap*)::' |
'{lambda(v8::SlotType)#2}::operator()(v8::SlotType) const::' |
- '{lambda(v8::Object**)#1})') |
+ '{lambda(v8::Object**)#1})', |
+ name_without_templates=( |
+ 'v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget')) |
check('', |
'WTF::StringAppend<WTF::String, WTF::String>::operator WTF::String', |
'()', |
@@ -72,6 +84,10 @@ class AnalyzeTest(unittest.TestCase): |
'Paint()::{lambda(FrameView&)#2}>', |
'(blink::FrameView::PrePaint()::{lambda(FrameView&)#2} const&)', '') |
+ # Test with multiple template args. |
+ check('int ', 'Foo<int()>::bar<a<b> >', '()', |
+ name_without_templates='Foo::bar') |
+ |
# SkArithmeticImageFilter.cpp has class within function body. e.g.: |
# ArithmeticFP::onCreateGLSLInstance() looks like: |
# class ArithmeticFP { |
@@ -83,17 +99,26 @@ class AnalyzeTest(unittest.TestCase): |
# } |
# }; |
SIG = '(anonymous namespace)::Foo::Baz() const::GLSLFP::onData(Foo, Bar)' |
- got_full, got_name = function_signature.Parse(SIG) |
+ got_full_name, got_template_name, got_name = ( |
+ function_signature.Parse(SIG)) |
self.assertEqual('(anonymous namespace)::Foo::Baz', got_name) |
- self.assertEqual(SIG, got_full) |
+ self.assertEqual('(anonymous namespace)::Foo::Baz', got_template_name) |
+ self.assertEqual(SIG, got_full_name) |
# Top-level lambda. |
# Note: Inline lambdas do not seem to be broken into their own symbols. |
SIG = 'cc::{lambda(cc::PaintOp*)#63}::_FUN(cc::PaintOp*)' |
- got_full, got_name = function_signature.Parse(SIG) |
+ got_full_name, got_template_name, got_name = ( |
+ function_signature.Parse(SIG)) |
self.assertEqual('cc::{lambda#63}', got_name) |
- self.assertEqual('cc::{lambda#63}(cc::PaintOp*)', got_full) |
+ self.assertEqual('cc::{lambda#63}', got_template_name) |
+ self.assertEqual('cc::{lambda#63}(cc::PaintOp*)', got_full_name) |
+ # Data members |
+ check('', 'blink::CSSValueKeywordsHash::findValueImpl', '(char const*)', |
+ '::value_word_list') |
+ check('', 'foo::Bar<Z<Y> >::foo<bar>', '(abc)', '::var<baz>', |
+ name_without_templates='foo::Bar::foo::var') |
if __name__ == '__main__': |
logging.basicConfig(level=logging.DEBUG, |