Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
zaoqi committed Aug 9, 2018
1 parent 9751d8b commit 8a2ed70
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
4 changes: 4 additions & 0 deletions example-function.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ define_public_lambda(add, var(x, int), var(y, int) __ int)({
define_private_lambda(addprivate, var(x, int), var(y, int) __ int)({
x+y;
})
define_public_inline_lambda(add2, var(x, int), var(y, int) __ int)({
var_lambda(f, int __ int)=lambda(var(y, int) __ int)({ x+y; });
f(y+1);
})
#include ">module"
7 changes: 4 additions & 3 deletions make_macro_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,14 @@ defn expand x x
defn count_helper0 $(prefix_from_to _ 0 $max) x ... x
defn count_helper1 ... $(expand $(call count_helper0 __VA_ARGS__ $(from_to $max 0)))
defn count ... $(call count_helper1 _Nothing '##__VA_ARGS__')
echo '#define EOC_HELPER_count_assert0()
#define EOC_HELPER_count_assert1() EOC_HELPER_error("this compiler does not offers an extension that allows ## to appear after a comma and before __VA_ARGS__ , in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty")
EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(EOC_HELPER_count_assert, EOC_HELPER_count()) ())'
defn symbol_append x y "x##y"
defn symbol_append_with_macro x y $(call symbol_append x y)
defn with_count ider ... $(expand $(symbol_append ider $(call count __VA_ARGS__))'(__VA_ARGS__)')

echo '#define EOC_HELPER_count_assert0()
#define EOC_HELPER_count_assert1() EOC_HELPER_error("this compiler does not offers an extension that allows ## to appear after a comma and before __VA_ARGS__ , in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty")
EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(EOC_HELPER_count_assert, EOC_HELPER_count()) ())'

defn if b x y $(expand $(symbol_append $(S if) b)'(x,y)')
defn if1 x y x
defn iftrue x y x
Expand Down
6 changes: 3 additions & 3 deletions module<
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
#define EOC_HELPER_count_helper0(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,x,...) x
#define EOC_HELPER_count_helper1(...) EOC_HELPER_expand(EOC_HELPER_count_helper0(__VA_ARGS__,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0))
#define EOC_HELPER_count(...) EOC_HELPER_count_helper1(_Nothing,##__VA_ARGS__)
#define EOC_HELPER_count_assert0()
#define EOC_HELPER_count_assert1() EOC_HELPER_error("this compiler does not offers an extension that allows ## to appear after a comma and before __VA_ARGS__ , in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty")
EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(EOC_HELPER_count_assert, EOC_HELPER_count()) ())
#define EOC_HELPER_symbol_append(x,y) x##y
#define EOC_HELPER_symbol_append_with_macro(x,y) EOC_HELPER_symbol_append(x,y)
#define EOC_HELPER_with_count(ider,...) EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(ider,EOC_HELPER_count(__VA_ARGS__))(__VA_ARGS__))
#define EOC_HELPER_count_assert0()
#define EOC_HELPER_count_assert1() EOC_HELPER_error("this compiler does not offers an extension that allows ## to appear after a comma and before __VA_ARGS__ , in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty")
EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(EOC_HELPER_count_assert, EOC_HELPER_count()) ())
#define EOC_HELPER_if(b,x,y) EOC_HELPER_expand(EOC_HELPER_symbol_append_with_macro(EOC_HELPER_if,b)(x,y))
#define EOC_HELPER_if1(x,y) x
#define EOC_HELPER_iftrue(x,y) x
Expand Down

0 comments on commit 8a2ed70

Please sign in to comment.