diff --git a/lib/cmock_generator.rb b/lib/cmock_generator.rb index 2578fbe..1f0e4d0 100644 --- a/lib/cmock_generator.rb +++ b/lib/cmock_generator.rb @@ -13,10 +13,6 @@ class CMockGenerator end def create_mock(parsed_stuff) - parsed_stuff[:functions].each do |function| - function[:args_string_without_varargs] = function[:args_string].gsub(/\,[a-zA-Z0-9_\*\s]*\.\.\./,'') - end - create_mock_header_file(parsed_stuff) create_mock_source_file(parsed_stuff) end @@ -26,7 +22,7 @@ class CMockGenerator create_mock_header_header(file, filename) create_mock_header_externs(file, parsed_stuff) parsed_stuff[:functions].each do |function| - @plugins.each { |plugin| file << plugin.mock_function_declarations(function[:name], function[:args_string_without_varargs], function[:rettype]) } + @plugins.each { |plugin| file << plugin.mock_function_declarations(function[:name], function[:args_string], function[:rettype]) } end create_mock_header_footer(file) end @@ -42,7 +38,7 @@ class CMockGenerator create_mock_destroy_function(file, parsed_stuff[:functions]) parsed_stuff[:functions].each do |function| create_mock_implementation(file, function) - @plugins.each { |plugin| file << plugin.mock_interfaces( function[:name], function[:args_string_without_varargs], function[:args], function[:rettype]) } + @plugins.each { |plugin| file << plugin.mock_interfaces( function[:name], function[:args_string], function[:args], function[:rettype]) } end end end @@ -145,9 +141,12 @@ class CMockGenerator function_mod_and_rettype = function[:modifier] + ' ' + function[:rettype] end + args_string = function[:args_string] + args_string += (", " + function[:var_arg]) unless (function[:var_arg].nil?) + # Create mock function file << "#{function[:attributes]} " if (!function[:attributes].nil? && function[:attributes].length > 0) - file << "#{function_mod_and_rettype} #{function[:name]}(#{function[:args_string]})\n" + file << "#{function_mod_and_rettype} #{function[:name]}(#{args_string})\n" file << "{\n" @plugins.each { |plugin| file << plugin.mock_implementation_prefix(function[:name], function[:rettype]) } diff --git a/lib/cmock_header_parser.rb b/lib/cmock_header_parser.rb index 199f5ef..9a1d447 100644 --- a/lib/cmock_header_parser.rb +++ b/lib/cmock_header_parser.rb @@ -124,6 +124,19 @@ class CMockHeaderParser #remove default parameter statements from mock definitions args.gsub!(/=\s*[a-zA-Z0-9_\.]+\s*\,/, ',') args.gsub!(/=\s*[a-zA-Z0-9_\.]+\s*/, ' ') + + #check for var args + if (args =~ /\.\.\./) + decl[:var_arg] = args.match( /[\w\s]*\.\.\./ ).to_s + if (args =~ /\,[\w\s]*\.\.\./) + args = args.gsub!(/\,[\w\s]*\.\.\./,'') + else + args = 'void' + end + else + decl[:var_arg] = nil + end + args.strip! decl[:args_string] = args decl[:args] = parse_args(args)