mirror of
https://github.com/meekrosoft/fff
synced 2026-01-23 00:15:59 +01:00
Custom return value delegate sequences for variadic functions (#63)
* Custom return value delegate sequences for variadic functions * Added unit tests for variadic functions custom return value delegate sequences * Fixes in code style * Variadic functions custom delegates also tested in C++ * Fixed some compilation warnings * Added test for variadic function custom delegates sequence reset * Updated documentation with variadic functions custom delegate sequences * Update README.md * Minor style changes. Thank you very much @oliviera9!
This commit is contained in:
29
fakegen.rb
29
fakegen.rb
@@ -408,6 +408,35 @@ def output_function_body(arg_count, has_varargs, is_value_function)
|
||||
putd_backslash "REGISTER_CALL(FUNCNAME);"
|
||||
|
||||
if has_varargs
|
||||
return_type = is_value_function ? "return " : ""
|
||||
putd_backslash "if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */"
|
||||
indent {
|
||||
putd_backslash "if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){"
|
||||
indent {
|
||||
putd_backslash "va_list ap;"
|
||||
putd_backslash "va_start(ap, arg#{arg_count-1});"
|
||||
putd_backslash "RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](#{arg_list(arg_count)}, ap);" unless not is_value_function
|
||||
putd_backslash "SAVE_RET_HISTORY(FUNCNAME, ret);" unless not is_value_function
|
||||
putd_backslash "va_end(ap);" unless not is_value_function
|
||||
putd_backslash "return ret;" unless not is_value_function
|
||||
putd_backslash "#{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](#{arg_list(arg_count)}, ap);" unless is_value_function
|
||||
putd_backslash "va_end(ap);" unless is_value_function
|
||||
}
|
||||
putd_backslash "}"
|
||||
putd_backslash "else{"
|
||||
indent {
|
||||
putd_backslash "va_list ap;"
|
||||
putd_backslash "va_start(ap, arg#{arg_count-1});"
|
||||
putd_backslash "RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](#{arg_list(arg_count)}, ap);" unless not is_value_function
|
||||
putd_backslash "SAVE_RET_HISTORY(FUNCNAME, ret);" unless not is_value_function
|
||||
putd_backslash "va_end(ap);" unless not is_value_function
|
||||
putd_backslash "return ret;" unless not is_value_function
|
||||
putd_backslash "#{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](#{arg_list(arg_count)}, ap);"
|
||||
putd_backslash "va_end(ap);" unless is_value_function
|
||||
}
|
||||
putd_backslash "}"
|
||||
}
|
||||
putd_backslash "}"
|
||||
putd_backslash "if(FUNCNAME##_fake.custom_fake){"
|
||||
indent {
|
||||
putd_backslash "RETURN_TYPE ret;" if is_value_function
|
||||
|
||||
Reference in New Issue
Block a user