> And I'd assume I am right in the following. > > > + * ATOM_INVALID equals to the size of valid_atom array, which could help us > > + * iterate over valid_atom array like this: > > + * > > + * for (i = ATOM_UNKNOWN + 1; i < ATOM_INVALID; i++) { > > I find it far more intuitive to say > > for (i = 0; i < ATOM_INVALID; i++) > > than having to say UNKNOWN+1. > > In any case, the values should be indented, and a comment should > ensure that the final one stays at the end, perhaps like this. > > enum atom_type { > ATOM_INVALID = -2, > ATOM_UNKNOWN = -1, > ATOM_REFNAME, > ... > ATOM_ELSE, > ATOM_MAX /* MUST BE AT THE END */ > } > > (note that the trailing comma is deliberately omitted). > > It would allow people to say > > for (i = 0; i < ATOM_MAX; i++) > > instead, which would be even nicer. I think ATOM_INVALID and ATOM_MAX all will have a similar effort. Why don't we omit one of them? For the time being, all the used_atom entry create in `parse_ref_filter_atom()`, we directly use `used_atom[at].atom_type = i;` after realloc the used_atom. There is no time for "ATOM_UNKNOWN" at all. I don’t know if it makes a lot of sense use "ATOM_UNKNOWN" at the moment. -- ZheNing Hu