rename: h_seq_index_user -> h_seq_index -> h_seq_index_token

This commit is contained in:
Sven M. Hallberg 2013-01-23 19:06:25 +01:00
parent 2d53a0f873
commit 2c90bd3ef5
2 changed files with 26 additions and 20 deletions

View file

@ -57,7 +57,7 @@ const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p)
case TT_SEQUENCE: case TT_SEQUENCE:
// Flatten and append all. // Flatten and append all.
for(size_t i; i<p->seq->used; i++) { for(size_t i; i<p->seq->used; i++) {
h_seq_append(ret, h_seq_flatten(arena, h_seq_index(p, i))); h_seq_append(ret, h_seq_flatten(arena, h_seq_index_token(p, i)));
} }
break; break;
default: default:
@ -99,16 +99,16 @@ HParsedToken *h_carray_index(const HCountedArray *a, size_t i)
return a->elements[i]; return a->elements[i];
} }
HParsedToken *h_seq_index(const HParsedToken *p, size_t i) HParsedToken *h_seq_index_token(const HParsedToken *p, size_t i)
{ {
assert(p != NULL); assert(p != NULL);
assert(p->token_type == TT_SEQUENCE); assert(p->token_type == TT_SEQUENCE);
return h_carray_index(p->seq, i); return h_carray_index(p->seq, i);
} }
void *h_seq_index_user(HTokenType type, const HParsedToken *p, size_t i) void *h_seq_index(HTokenType type, const HParsedToken *p, size_t i)
{ {
HParsedToken *elem = h_seq_index(p, i); HParsedToken *elem = h_seq_index_token(p, i);
assert(elem->token_type == (HTokenType)type); assert(elem->token_type == (HTokenType)type);
return elem->user; return elem->user;
} }

View file

@ -43,34 +43,40 @@ const HParsedToken *h_act_flatten(const HParseResult *p);
// Working with HParsedTokens // Working with HParsedTokens
// //
// Standard short-hand for arena-allocating a variable in a semantic action.
#define H_ALLOC(TYP) \
((TYP *) h_arena_malloc(p->arena, sizeof(TYP)))
// Token constructors... // Token constructors...
HParsedToken *h_make(HArena *arena, HTokenType type, void *value); HParsedToken *h_make(HArena *arena, HTokenType type, void *value);
HParsedToken *h_make_seq(HArena *arena); HParsedToken *h_make_seq(HArena *arena);
#define H_ALLOC(TYP) \ // Standard short-hand to make a user-type token.
((TYP *) h_arena_malloc(p->arena, sizeof(TYP))) #define H_MAKE(TYP, VAL) h_make(p->arena, TT_ ## TYP, VAL)
#define H_MAKE(TYP, VAL) \
h_make(p->arena, TT_ ## TYP, VAL)
// Sequences... // Sequences...
// Access a sequence element by index.
HParsedToken *h_seq_index_token(const HParsedToken *p, size_t i);
// Access a user-type element of a sequence by index.
#define H_SEQ_INDEX(TYP, SEQ, IDX) \
((TYP *) h_seq_index(TT_ ## TYP, SEQ, IDX))
// Standard short-hand to access a user-type field on a sequence token.
#define H_FIELD(TYP, IDX) H_SEQ_INDEX(TYP, p->ast, IDX)
// Append elements to a sequence.
void h_seq_snoc(HParsedToken *xs, const HParsedToken *x); // append one
void h_seq_append(HParsedToken *xs, const HParsedToken *ys); // append many
// Flatten nested sequences into one. // Flatten nested sequences into one.
const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p); const HParsedToken *h_seq_flatten(HArena *arena, const HParsedToken *p);
void h_seq_snoc(HParsedToken *xs, const HParsedToken *x); // Helpers for implementing H_SEQ_INDEX.
void h_seq_append(HParsedToken *xs, const HParsedToken *ys); void *h_seq_index(HTokenType type, const HParsedToken *p, size_t i); // XXX helper
HParsedToken *h_carray_index(const HCountedArray *a, size_t i); // XXX -> internal HParsedToken *h_carray_index(const HCountedArray *a, size_t i); // XXX -> internal
HParsedToken *h_seq_index(const HParsedToken *p, size_t i);
void *h_seq_index_user(HTokenType type, const HParsedToken *p, size_t i);
#define H_SEQ_INDEX(TYP, SEQ, IDX) \
((TYP *) h_seq_index_user(TT_ ## TYP, SEQ, IDX))
#define H_FIELD(TYP, IDX) \
H_SEQ_INDEX(TYP, p->ast, IDX)
#endif #endif