diff --git a/src/AlphaLibMacros.cppo.ml b/src/AlphaLibMacros.cppo.ml index 3ce86cf0fa5dc3e0d3336c59a2514f94540f367b..c627731a297c59e16c51a16df99d10c4c27b19b9 100644 --- a/src/AlphaLibMacros.cppo.ml +++ b/src/AlphaLibMacros.cppo.ml @@ -7,6 +7,8 @@ (* -------------------------------------------------------------------------- *) +(* [fa] could be defined in terms of [reduce], as follows. *) + #define FA_CLASS __fa #define FA_FUN(term) CONCAT(fa_, term) @@ -20,6 +22,26 @@ let FA_FUN(term) t = \ new FA_CLASS # VISIT(term) () t \ +#undef __FA +#undef FA + +(* -------------------------------------------------------------------------- *) + +(* We prefer to define [fa] in terms of [iter] because we wish to eliminate + our dependency on [reduce] visitors. *) + +#define __FA \ + class FA_CLASS = object \ + inherit [_] iter \ + inherit [_] KitFa.iter \ + end \ + +#define FA(term) \ + let FA_FUN(term) t = \ + let o = new FA_CLASS in \ + o # VISIT(term) KitFa.empty t; \ + o # accu + (* -------------------------------------------------------------------------- *) #define FILTER_CLASS __filter