From 0ec5f99ef83da12a469cbd9a6390afb5c1fc62e1 Mon Sep 17 00:00:00 2001 From: usr42 Date: Sat, 14 Jan 2017 11:55:35 +0100 Subject: [PATCH] Refactor output_macro_counting_shortcuts --- fakegen.rb | 147 +++++++++++------------------------------------------ fff.h | 50 +++++++++--------- 2 files changed, 55 insertions(+), 142 deletions(-) diff --git a/fakegen.rb b/fakegen.rb index a393eed..1e758fa 100644 --- a/fakegen.rb +++ b/fakegen.rb @@ -408,6 +408,23 @@ def generate_arg_sequence(args, prefix, do_reverse, joinstr) if do_reverse then fmap.reverse.join(joinstr) else fmap.join(", ") end end +def counting_macro_instance(type, vararg = :non_vararg, prefix = "") + appendix = (vararg == :vararg) ? "_VARARG" : "" + minus_count = (type == :VOID) ? 1 : 2 + + <<-MACRO_COUNTING_INSTANCE +#define #{prefix}FAKE_#{type.to_s}_FUNC#{appendix}(...) \ + #{prefix}FUNC_#{type.to_s}#{appendix}_(PP_NARG_MINUS#{minus_count}(__VA_ARGS__), __VA_ARGS__) + +#define #{prefix}FUNC_#{type.to_s}#{appendix}_(N,...) \ + #{prefix}FUNC_#{type.to_s}#{appendix}_N(N,__VA_ARGS__) + +#define #{prefix}FUNC_#{type.to_s}#{appendix}_N(N,...) \ + #{prefix}FAKE_#{type.to_s}_FUNC ## N#{" ## _VARARG" if vararg == :vararg}(__VA_ARGS__) + + MACRO_COUNTING_INSTANCE +end + def output_macro_counting_shortcuts putd <<-MACRO_COUNTING @@ -438,130 +455,24 @@ def output_macro_counting_shortcuts /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */ -#define FAKE_VALUE_FUNC(...) \ - FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define FUNC_VALUE_(N,...) \ - FUNC_VALUE_N(N,__VA_ARGS__) - -#define FUNC_VALUE_N(N,...) \ - FAKE_VALUE_FUNC ## N(__VA_ARGS__) - - -#define FAKE_VOID_FUNC(...) \ - FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define FUNC_VOID_(N,...) \ - FUNC_VOID_N(N,__VA_ARGS__) - -#define FUNC_VOID_N(N,...) \ - FAKE_VOID_FUNC ## N(__VA_ARGS__) - - -#define FAKE_VALUE_FUNC_VARARG(...) \ - FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define FUNC_VALUE_VARARG_(N,...) \ - FUNC_VALUE_VARARG_N(N,__VA_ARGS__) - -#define FUNC_VALUE_VARARG_N(N,...) \ - FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) - - -#define FAKE_VOID_FUNC_VARARG(...) \ - FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define FUNC_VOID_VARARG_(N,...) \ - FUNC_VOID_VARARG_N(N,__VA_ARGS__) - -#define FUNC_VOID_VARARG_N(N,...) \ - FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) - - +#{counting_macro_instance(:VALUE)} +#{counting_macro_instance(:VOID)} +#{counting_macro_instance(:VALUE, :vararg)} +#{counting_macro_instance(:VOID, :vararg)} /* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */ -#define DECLARE_FAKE_VALUE_FUNC(...) \ - DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define DEC_FUNC_VALUE_(N,...) \ - DEC_FUNC_VALUE_N(N,__VA_ARGS__) - -#define DEC_FUNC_VALUE_N(N,...) \ - DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) - - -#define DECLARE_FAKE_VOID_FUNC(...) \ - DEC_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define DEC_FUNC_VOID_(N,...) \ - DEC_FUNC_VOID_N(N, __VA_ARGS__) - -#define DEC_FUNC_VOID_N(N,...) \ - DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__) - - -#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) \ - DEC_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define DEC_FUNC_VALUE_VARARG_(N,...) \ - DEC_FUNC_VALUE_VARARG_N(N, __VA_ARGS__) - -#define DEC_FUNC_VALUE_VARARG_N(N,...) \ - DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) - - -#define DECLARE_FAKE_VOID_FUNC_VARARG(...) \ - DEC_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define DEC_FUNC_VOID_VARARG_(N,...) \ - DEC_FUNC_VOID_VARARG_N(N, __VA_ARGS__) - -#define DEC_FUNC_VOID_VARARG_N(N,...) \ - DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) - - +#{counting_macro_instance(:VALUE, :non_vararg, "DECLARE_")} +#{counting_macro_instance(:VOID, :non_vararg, "DECLARE_")} +#{counting_macro_instance(:VALUE, :vararg, "DECLARE_")} +#{counting_macro_instance(:VOID, :vararg, "DECLARE_")} /* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */ -#define DEFINE_FAKE_VALUE_FUNC(...) \ - DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define DEF_FUNC_VALUE_(N,...) \ - DEF_FUNC_VALUE_N(N,__VA_ARGS__) - -#define DEF_FUNC_VALUE_N(N,...) \ - DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) - - -#define DEFINE_FAKE_VOID_FUNC(...) \ - DEF_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define DEF_FUNC_VOID_(N,...) \ - DEF_FUNC_VOID_N(N,__VA_ARGS__) - -#define DEF_FUNC_VOID_N(N,...) \ - DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) - - -#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) \ - DEF_FUNC_VALUE_VARARG(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) - -#define DEF_FUNC_VALUE_VARARG(N,...) \ - DEF_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) - -#define DEF_FUNC_VALUE_VARARG_N(N,...) \ - DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) - - -#define DEFINE_FAKE_VOID_FUNC_VARARG(...) \ - DEF_FUNC_VOID_VARARG(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) - -#define DEF_FUNC_VOID_VARARG(N,...) \ - DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__) - -#define DEF_FUNC_VOID_VARARG_N(N,...) \ - DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) +#{counting_macro_instance(:VALUE, :non_vararg, "DEFINE_")} +#{counting_macro_instance(:VOID, :non_vararg, "DEFINE_")} +#{counting_macro_instance(:VALUE, :vararg, "DEFINE_")} +#{counting_macro_instance(:VOID, :vararg, "DEFINE_")} MACRO_COUNTING end diff --git a/fff.h b/fff.h index 4094b91..af69416 100644 --- a/fff.h +++ b/fff.h @@ -5864,63 +5864,65 @@ FFF_END_EXTERN_C \ /* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */ -#define DECLARE_FAKE_VALUE_FUNC(...) DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) +#define DECLARE_FAKE_VALUE_FUNC(...) DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) -#define DEC_FUNC_VALUE_(N,...) DEC_FUNC_VALUE_N(N,__VA_ARGS__) +#define DECLARE_FUNC_VALUE_(N,...) DECLARE_FUNC_VALUE_N(N,__VA_ARGS__) -#define DEC_FUNC_VALUE_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) +#define DECLARE_FUNC_VALUE_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) -#define DECLARE_FAKE_VOID_FUNC(...) DEC_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) +#define DECLARE_FAKE_VOID_FUNC(...) DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) -#define DEC_FUNC_VOID_(N,...) DEC_FUNC_VOID_N(N, __VA_ARGS__) +#define DECLARE_FUNC_VOID_(N,...) DECLARE_FUNC_VOID_N(N,__VA_ARGS__) -#define DEC_FUNC_VOID_N(N,...) DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__) +#define DECLARE_FUNC_VOID_N(N,...) DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__) -#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) DEC_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) +#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) -#define DEC_FUNC_VALUE_VARARG_(N,...) DEC_FUNC_VALUE_VARARG_N(N, __VA_ARGS__) +#define DECLARE_FUNC_VALUE_VARARG_(N,...) DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) -#define DEC_FUNC_VALUE_VARARG_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) +#define DECLARE_FUNC_VALUE_VARARG_N(N,...) DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) -#define DECLARE_FAKE_VOID_FUNC_VARARG(...) DEC_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) +#define DECLARE_FAKE_VOID_FUNC_VARARG(...) DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) -#define DEC_FUNC_VOID_VARARG_(N,...) DEC_FUNC_VOID_VARARG_N(N, __VA_ARGS__) +#define DECLARE_FUNC_VOID_VARARG_(N,...) DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__) -#define DEC_FUNC_VOID_VARARG_N(N,...) DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) +#define DECLARE_FUNC_VOID_VARARG_N(N,...) DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) /* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */ -#define DEFINE_FAKE_VALUE_FUNC(...) DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) +#define DEFINE_FAKE_VALUE_FUNC(...) DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) -#define DEF_FUNC_VALUE_(N,...) DEF_FUNC_VALUE_N(N,__VA_ARGS__) +#define DEFINE_FUNC_VALUE_(N,...) DEFINE_FUNC_VALUE_N(N,__VA_ARGS__) -#define DEF_FUNC_VALUE_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) +#define DEFINE_FUNC_VALUE_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__) -#define DEFINE_FAKE_VOID_FUNC(...) DEF_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) +#define DEFINE_FAKE_VOID_FUNC(...) DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) -#define DEF_FUNC_VOID_(N,...) DEF_FUNC_VOID_N(N,__VA_ARGS__) +#define DEFINE_FUNC_VOID_(N,...) DEFINE_FUNC_VOID_N(N,__VA_ARGS__) -#define DEF_FUNC_VOID_N(N,...) DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) +#define DEFINE_FUNC_VOID_N(N,...) DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) -#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) DEF_FUNC_VALUE_VARARG(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) +#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__) -#define DEF_FUNC_VALUE_VARARG(N,...) DEF_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) +#define DEFINE_FUNC_VALUE_VARARG_(N,...) DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) -#define DEF_FUNC_VALUE_VARARG_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) +#define DEFINE_FUNC_VALUE_VARARG_N(N,...) DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) -#define DEFINE_FAKE_VOID_FUNC_VARARG(...) DEF_FUNC_VOID_VARARG(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) +#define DEFINE_FAKE_VOID_FUNC_VARARG(...) DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__) + +#define DEFINE_FUNC_VOID_VARARG_(N,...) DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__) + +#define DEFINE_FUNC_VOID_VARARG_N(N,...) DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) -#define DEF_FUNC_VOID_VARARG(N,...) DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__) -#define DEF_FUNC_VOID_VARARG_N(N,...) DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) #endif /* FAKE_FUNCTIONS */