diff --git a/lib/cmock_header_parser.rb b/lib/cmock_header_parser.rb index 4115427..7c00fb1 100644 --- a/lib/cmock_header_parser.rb +++ b/lib/cmock_header_parser.rb @@ -330,7 +330,7 @@ class CMockHeaderParser source.gsub!(/(^|\W+)(?:#{@c_strippables.join('|')})(?=$|\W+)/, '\1') unless @c_strippables.empty? # remove known attributes slated to be stripped # scan standalone function pointers and remove them, because they can just be ignored - source.gsub!(/\w+\s*\(\s*\*\s*\w+\s*\)\s*\([^)]*\)\s*;/, ';') + source.gsub!(/[\w][\w\s*]*\(\s*\*\s*\w+\s*\)\s*\([^)]*\)\s*;/, ';') # scan for functions which return function pointers, because they are a pain source.gsub!(/([\w\s*]+)\(*\(\s*\*([\w\s*]+)\s*\(([\w\s*,]*)\)\)\s*\(([\w\s*,]*)\)\)*/) do |_m| diff --git a/test/unit/cmock_header_parser_test.rb b/test/unit/cmock_header_parser_test.rb index a6f2051..bd38a57 100644 --- a/test/unit/cmock_header_parser_test.rb +++ b/test/unit/cmock_header_parser_test.rb @@ -387,6 +387,17 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do end + it "ignore function pointer variables with pointer return types and not treat them as function prototypes" do + source = + "struct_t * (*func)(some_argument);\n" + + "void real_func(int a);\n" + + expected = ["void real_func(int a)"] + + assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip }) + end + + it "remove struct statements" do source = "struct _NamedStruct1 {\n" +