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);
}
#define act_hdzero act_ignore
#define act_hdzero h_act_ignore
#define act_qname act_index0
///
// Parser / Grammar
///

View file

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

View file

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

View file

@ -3,13 +3,13 @@
// The action equivalent of h_ignore.
const HParsedToken *act_ignore(const HParseResult *p)
const HParsedToken *h_act_ignore(const HParseResult *p)
{
return NULL;
}
// 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;
@ -27,11 +27,6 @@ const HParsedToken *act_index(int i, const HParseResult *p)
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)
{
assert(xs != NULL);
@ -75,7 +70,7 @@ const HParsedToken *h_token_flatten(HArena *arena, const HParsedToken *p)
}
// 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);
}

View file

@ -17,10 +17,16 @@
#define H_AVRULE(rule, def) const HParser *rule = \
h_action(h_attr_bool(def, validate_ ## rule), act_ ## rule)
const HParsedToken *act_ignore(const HParseResult *p);
const HParsedToken *act_index(int i, const HParseResult *p);
const HParsedToken *act_index0(const HParseResult *p);
const HParsedToken *act_flatten(const HParseResult *p);
const HParsedToken *h_act_ignore(const HParseResult *p);
const HParsedToken *h_act_index(int i, const HParseResult *p);
const HParsedToken *h_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);