mirror of
https://github.com/ThrowTheSwitch/CMock.git
synced 2026-08-10 05:07:52 +00:00
Merge pull request #420 from ThrowTheSwitch/bugfixes/batch1
Collection of Quick Fixes
This commit is contained in:
+2
-2
@@ -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)
|
||||
|
||||
@@ -22,7 +22,7 @@ class CMockGenerator
|
||||
@exclude_setjmp_h = @config.exclude_setjmp_h
|
||||
@subdir = @config.subdir
|
||||
|
||||
@includes_h_pre_orig_header = (@config.includes || @config.includes_h_pre_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
||||
@includes_h_pre_orig_header = ((@config.includes || []) + (@config.includes_h_pre_orig_header || [])).uniq.map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
||||
@includes_h_post_orig_header = (@config.includes_h_post_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
||||
@includes_c_pre_header = (@config.includes_c_pre_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
||||
@includes_c_post_header = (@config.includes_c_post_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
||||
|
||||
@@ -14,7 +14,7 @@ class CMockHeaderParser
|
||||
@c_calling_conventions = cfg.c_calling_conventions.uniq
|
||||
@treat_as_array = cfg.treat_as_array
|
||||
@treat_as_void = (['void'] + cfg.treat_as_void).uniq
|
||||
@function_declaration_parse_base_match = '([\w\s\*\(\),\[\]]+??)\(([\w\s\*\(\),\.\[\]+\-\/]*)\)'
|
||||
@function_declaration_parse_base_match = '([\w\s\*\(\),\[\]]*?\w[\w\s\*\(\),\[\]]*?)\(([\w\s\*\(\),\.\[\]+\-\/]*)\)'
|
||||
@declaration_parse_matcher = /#{@function_declaration_parse_base_match}$/m
|
||||
@standards = (%w[int short char long unsigned signed] + cfg.treat_as.keys).uniq
|
||||
@array_size_name = cfg.array_size_name
|
||||
|
||||
@@ -16,8 +16,8 @@ typedef struct _POINT_T
|
||||
int y;
|
||||
} POINT_T;
|
||||
|
||||
// typedef edge case;
|
||||
// not ANSI C but it has been done and will break cmock if not handled
|
||||
/* typedef edge case;
|
||||
not ANSI C but it has been done and will break cmock if not handled */
|
||||
typedef void VOID_TYPE_CRAZINESS;
|
||||
|
||||
/* fun parsing & mock generation cases */
|
||||
@@ -36,6 +36,9 @@ char
|
||||
int a,
|
||||
unsigned int b);
|
||||
|
||||
/* this isn't a function, despite the parenthesis */
|
||||
static const unsigned int foo = (1);
|
||||
|
||||
U16 *ptr_return1(int a);
|
||||
U16* ptr_return2(int a);
|
||||
U16 * ptr_return3(int a);
|
||||
|
||||
@@ -48,7 +48,7 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
|
||||
@config.expect :enforce_strict_ordering, nil
|
||||
@config.expect :framework, :unity
|
||||
@config.expect :includes, ["ConfigRequiredHeader1.h","ConfigRequiredHeader2.h"]
|
||||
#@config.expect :includes_h_pre_orig_header, nil #not called because includes called
|
||||
@config.expect :includes_h_pre_orig_header, nil
|
||||
@config.expect :includes_h_post_orig_header, nil
|
||||
@config.expect :includes_c_pre_header, nil
|
||||
@config.expect :includes_c_post_header, nil
|
||||
|
||||
@@ -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" +
|
||||
|
||||
Reference in New Issue
Block a user