Fixed bug #402, getting confused with __attribute__ directives with spacing.

This commit is contained in:
Mark VanderVoord
2023-01-11 15:43:48 -05:00
parent 902b6c8b3d
commit a58808d424
2 changed files with 25 additions and 3 deletions
+2 -2
View File
@@ -15,7 +15,7 @@ class CMockConfig
:weak => '',
:subdir => nil,
:plugins => [],
:strippables => ['(?:__attribute__\s*\(+.*?\)+)'],
:strippables => ['(?:__attribute__\s*\([ (]*.*?[ )]*\)+)'],
:attributes => %w[__ramfunc __irq __fiq register extern],
:c_calling_conventions => %w[__stdcall __cdecl __fastcall],
:enforce_strict_ordering => false,
@@ -50,7 +50,7 @@ class CMockConfig
# - The keywords can appear before or after the return type (this is a compiler warning but people do weird stuff),
# so we check for word boundaries when searching for them
# - We first remove "static inline" combinations and boil down to single inline or static statements
:inline_function_patterns => ['(static\s+inline|inline\s+static)\s*', '(\bstatic\b|\binline\b)\s*'] # Last part (\s*) is just to remove whitespaces (only to prettify the output)
:inline_function_patterns => ['(static\s+inline|inline\s+static)\s*', '(\bstatic\b|\binline\b)\s*', '(?:static\s*)?(?:__inline__)?__attribute__\s*\([ (]*always_inline[ )]*\)', 'static __inline__'] # Last part (\s*) is just to remove whitespaces (only to prettify the output)
}.freeze
def initialize(options = nil)
+23 -1
View File
@@ -121,7 +121,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
" my_realloc(void*, size_t) __attribute__((alloc_size(2)));\n" +
"extern int\n" +
" my_printf (void *my_object, const char *my_format, ...)\n" +
" __attribute__ ((format (printf, 2, 3)));\n" +
" __attribute__ ( (format (printf, 2, 3)) );\n" +
" void __attribute__ ((interrupt)) universal_handler ();\n"
expected =
@@ -2755,6 +2755,28 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
assert_equal(expected, @parser.transform_inline_functions(source))
end
it "Transform inline functions using gnu attribute notation" do
source =
"static __inline__ __attribute__ ((always_inline)) uint16_t _somefunc (uint32_t a)\n" +
"{\n" +
" return _someotherfunc (a);\n" +
"}\n" +
"static __attribute__ (( always_inline )) uint16_t _somefunc_0 (uint32_t a)\n" +
"{\n" +
" return (uint16_t) a;\n" +
"}\n" +
"\n"
expected =
"uint16_t _somefunc (uint32_t a);\n" +
"uint16_t _somefunc_0 (uint32_t a);\n" +
"\n"
@parser.treat_inlines = :include
@parser.inline_function_patterns = ['(?:static\s*)?(?:__inline__)?__attribute__\s*\([ (]*always_inline[ )]*\)', 'static __inline__']
assert_equal(expected, @parser.transform_inline_functions(source))
end
it "Transform inline functions takes user provided patterns into account" do
source =
"static __inline__ __attribute__ ((always_inline)) uint16_t _somefunc (uint32_t a)\n" +