Commit 18ec89bd by Aaron Leung

More helper macros. Gonna' try to turn these string prefix matchers into a small, reusable library.

parent d424389c
...@@ -17,6 +17,8 @@ int main() { ...@@ -17,6 +17,8 @@ int main() {
} }
unsigned char x; unsigned char x;
printf("By the way, punctuation symbols are:\n");
for (x = '\0'; x < 128; x++) if (ispunct(x)) printf("%c", x); for (x = '\0'; x < 128; x++) if (ispunct(x)) printf("%c", x);
putchar('\n');
return 0; return 0;
} }
\ No newline at end of file
...@@ -15,6 +15,10 @@ size_t text_starts_with_ ## type ## s(char *src) { \ ...@@ -15,6 +15,10 @@ size_t text_starts_with_ ## type ## s(char *src) { \
return p; \ return p; \
} }
#define DEF_DELIMITED_PREFIX_MATCHER(name, begin, end, escapable) \
size_t text_starts_with_ ## name(char *src) { \
return text_has_delimited_prefix(src, begin, end, escapable); \
}
size_t text_has_exact_prefix(char *src, char* pre) { size_t text_has_exact_prefix(char *src, char* pre) {
int p = 0; int p = 0;
...@@ -38,6 +42,10 @@ size_t text_has_delimited_prefix(char *src, char *beg, char *end, int esc) { ...@@ -38,6 +42,10 @@ size_t text_has_delimited_prefix(char *src, char *beg, char *end, int esc) {
} }
} }
/*
These macro calls expand into function definitions. Their corresponding
signatures are in the comments.
*/
DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(space); /* size_t text_starts_with_spaces(char *) */ DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(space); /* size_t text_starts_with_spaces(char *) */
DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(alpha); /* size_t text_starts_with_alphas(char *) */ DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(alpha); /* size_t text_starts_with_alphas(char *) */
DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(digit); /* size_t text_starts_with_digits(char *) */ DEF_CTYPE_SEQUENCE_PREFIX_MATCHER(digit); /* size_t text_starts_with_digits(char *) */
...@@ -60,9 +68,11 @@ size_t text_starts_with_line_comment(char *src) { ...@@ -60,9 +68,11 @@ size_t text_starts_with_line_comment(char *src) {
return p; return p;
} }
DEF_DELIMITED_PREFIX_MATCHER(dqstring, "\"", "\"", 1);
DEF_DELIMITED_PREFIX_MATCHER(sqstring, "'", "'", 1);
size_t text_starts_with_string_constant(char *src) { size_t text_starts_with_string_constant(char *src) {
return text_has_delimited_prefix(src, "\"", "\"", 1) return text_starts_with_dqstring(src) || text_starts_with_sqstring(src);
|| text_has_delimited_prefix(src, "'", "'", 1);
} }
size_t text_starts_with_interpolant(char *src) { size_t text_starts_with_interpolant(char *src) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment