give glue actions an h_ prefix and add H_ACT_APPLY macro

This commit is contained in:
Sven M. Hallberg 2013-01-17 18:31:13 +01:00
parent e875dcd19a
commit dd574bd735
5 changed files with 20 additions and 14 deletions

View file

@ -262,10 +262,11 @@ const HParsedToken* act_message(const HParseResult *p) {
return H_MAKE_TOKEN(dns_message_t, msg); return H_MAKE_TOKEN(dns_message_t, msg);
} }
#define act_hdzero act_ignore #define act_hdzero h_act_ignore
#define act_qname act_index0 #define act_qname act_index0
/// ///
// Parser / Grammar // Parser / Grammar
/// ///

View file

@ -5,6 +5,8 @@
#define false 0 #define false 0
#define true 1 #define true 1
H_ACT_APPLY(act_index0, h_act_index, 0)
/** /**
* A label can't be more than 63 characters. * A label can't be more than 63 characters.
*/ */
@ -52,7 +54,7 @@ const HParsedToken* act_domain(const HParseResult *p) {
return ret; return ret;
} }
#define act_label_ act_flatten #define act_label_ h_act_flatten
const HParser* init_domain() { const HParser* init_domain() {
static const HParser *ret = NULL; static const HParser *ret = NULL;

View file

@ -7,4 +7,6 @@
const HParser* init_domain(); const HParser* init_domain();
const HParser* init_character_string(); const HParser* init_character_string();
const HParsedToken* act_index0(const HParseResult *p);
#endif #endif

View file

@ -3,13 +3,13 @@
// The action equivalent of h_ignore. // The action equivalent of h_ignore.
const HParsedToken *act_ignore(const HParseResult *p) const HParsedToken *h_act_ignore(const HParseResult *p)
{ {
return NULL; return NULL;
} }
// Helper to build HAction's that pick one index out of a sequence. // Helper to build HAction's that pick one index out of a sequence.
const HParsedToken *act_index(int i, const HParseResult *p) const HParsedToken *h_act_index(int i, const HParseResult *p)
{ {
if(!p) return NULL; if(!p) return NULL;
@ -27,11 +27,6 @@ const HParsedToken *act_index(int i, const HParseResult *p)
return tok->seq->elements[i]; return tok->seq->elements[i];
} }
const HParsedToken *act_index0(const HParseResult *p)
{
return act_index(0, p);
}
void h_seq_snoc(HParsedToken *xs, const HParsedToken *x) void h_seq_snoc(HParsedToken *xs, const HParsedToken *x)
{ {
assert(xs != NULL); assert(xs != NULL);
@ -75,7 +70,7 @@ const HParsedToken *h_token_flatten(HArena *arena, const HParsedToken *p)
} }
// Action version of h_token_flatten. // Action version of h_token_flatten.
const HParsedToken *act_flatten(const HParseResult *p) { const HParsedToken *h_act_flatten(const HParseResult *p) {
return h_token_flatten(p->arena, p->ast); return h_token_flatten(p->arena, p->ast);
} }

View file

@ -17,10 +17,16 @@
#define H_AVRULE(rule, def) const HParser *rule = \ #define H_AVRULE(rule, def) const HParser *rule = \
h_action(h_attr_bool(def, validate_ ## rule), act_ ## rule) h_action(h_attr_bool(def, validate_ ## rule), act_ ## rule)
const HParsedToken *act_ignore(const HParseResult *p); const HParsedToken *h_act_ignore(const HParseResult *p);
const HParsedToken *act_index(int i, const HParseResult *p); const HParsedToken *h_act_index(int i, const HParseResult *p);
const HParsedToken *act_index0(const HParseResult *p); const HParsedToken *h_act_flatten(const HParseResult *p);
const HParsedToken *act_flatten(const HParseResult *p);
// Define 'myaction' as a specialization of 'paction' by supplying the leading
// parameters.
#define H_ACT_APPLY(myaction, paction, ...) \
const HParsedToken *myaction(const HParseResult *p) { \
return paction(__VA_ARGS__, p); \
}
const HParsedToken *h_token_flatten(HArena *arena, const HParsedToken *p); const HParsedToken *h_token_flatten(HArena *arena, const HParsedToken *p);