Refactor output_macro_counting_shortcuts
diff --git a/fakegen.rb b/fakegen.rb
index a393eed..1e758fa 100644
--- a/fakegen.rb
+++ b/fakegen.rb
@@ -408,6 +408,23 @@
  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 @@
 
 /* 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 @@
 
 /* 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 DEF_FUNC_VOID_VARARG(N,...)     DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__) 
+#define DEFINE_FUNC_VOID_VARARG_(N,...)     DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__)
 
-#define DEF_FUNC_VOID_VARARG_N(N,...)     DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) 
+#define DEFINE_FUNC_VOID_VARARG_N(N,...)     DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
+
+
 
 
 #endif /* FAKE_FUNCTIONS */