Commit cd5a1d00 by Aaron Leung

Fixing a bug in my usage of va_args.

parent 16e32d31
......@@ -34,7 +34,7 @@ int prefix_is_delimited_by(char *src, char *beg, char *end, int esc) {
}
}
int prefix_alternatives(char *src, ...) {
int _prefix_alternatives(char *src, ...) {
int p = 0;
va_list ap;
va_start(ap, src);
......@@ -44,7 +44,7 @@ int prefix_alternatives(char *src, ...) {
return p;
}
int prefix_sequence(char *src, ...) {
int _prefix_sequence(char *src, ...) {
int p = 0, p_sum = 0;
va_list ap;
va_start(ap, src);
......@@ -76,11 +76,8 @@ DEFINE_DELIMITED_MATCHER(block_comment, "/*", "*/", 0);
DEFINE_DELIMITED_MATCHER(double_quoted_string, "\"", "\"", 1);
DEFINE_DELIMITED_MATCHER(single_quoted_string, "'", "'", 1);
DEFINE_DELIMITED_MATCHER(interpolant, "#{", "}", 0);
int prefix_is_string(char *src) {
return prefix_alternatives(src, prefix_is_double_quoted_string,
DEFINE_ALTERNATIVES_MATCHER(string, prefix_is_double_quoted_string,
prefix_is_single_quoted_string);
}
DEFINE_EXACT_MATCHER(lparen, "(");
DEFINE_EXACT_MATCHER(rparen, ")");
......@@ -129,7 +126,7 @@ DEFINE_ALTERNATIVES_MATCHER(identifier_initial, prefix_is_alphas, prefix_is_unde
DEFINE_ALTERNATIVES_MATCHER(identifier_trailing, prefix_is_alnums, prefix_is_underscore);
DEFINE_FIRST_REST_MATCHER(identifier, prefix_is_identifier_initial, prefix_is_identifier_trailing);
// DEFINE_ALTERNATIVES_MATCHER(
// DEFINE_ALTERNATIVES_MATCHER(word_initial, prefix_is_identifier, prefix_is_hyphen_);
DEFINE_ALTERNATIVES_MATCHER(word_trailing, prefix_is_alnums, prefix_is_underscore, prefix_is_hyphen);
DEFINE_SEQUENCE_MATCHER(hyphen_and_alpha, prefix_is_hyphen, prefix_is_alpha);
DEFINE_ALTERNATIVES_MATCHER(word_initial, prefix_is_identifier, prefix_is_hyphen_and_alpha);
DEFINE_ALTERNATIVES_MATCHER(word_trailing, prefix_is_alnums, prefix_is_hyphen, prefix_is_underscore);
DEFINE_FIRST_REST_MATCHER(word, prefix_is_word_initial, prefix_is_word_trailing);
......@@ -4,8 +4,10 @@ int prefix_is_exactly(char *, char*);
int prefix_is_one_of(char *, char *);
int prefix_is_some_of(char *, char *);
int prefix_is_delimited_by(char *, char *, char *, int);
int prefix_alternatives(char *, ...);
int prefix_sequence(char *, ...);
int _prefix_alternatives(char *, ...);
int _prefix_sequence(char *, ...);
#define prefix_alternatives(src, ...) _prefix_alternatives(src, __VA_ARGS__, NULL)
#define prefix_sequence(src, ...) _prefix_sequence(src, __VA_ARGS__, NULL)
int prefix_optional(char *, prefix_matcher);
#define DECLARE_MATCHER(name) \
......@@ -82,8 +84,8 @@ DECLARE_MATCHER(line_comment);
DECLARE_MATCHER(block_comment);
DECLARE_MATCHER(double_quoted_string);
DECLARE_MATCHER(single_quoted_string);
DECLARE_MATCHER(interpolant);
DECLARE_MATCHER(string);
DECLARE_MATCHER(interpolant);
DECLARE_MATCHER(lparen);
DECLARE_MATCHER(rparen);
DECLARE_MATCHER(lbrack);
......
......@@ -23,23 +23,17 @@ int main() {
char *x = "12nonidentifier_";
char *y = "-blah-blah_blah";
int (*funcs[])(char *) = { prefix_is_string, prefix_is_block_comment, NULL };
printn(s, funcs[0](s));
printn(s, prefix_is_string(s));
printn(s, prefix_is_one_of(s, "abcde+'"));
printn(s, prefix_is_some_of(s, "'abcdefghijklmnopqrstuvwxyz "));
printn(t, funcs[1](t));
printn(t, prefix_is_block_comment(t));
printn(u, prefix_is_interpolant(u));
printn(v, prefix_is_alphas(v));
printn(v, prefix_is_one_alpha(v));
printn(v, prefix_is_alpha(v));
printn(v, prefix_is_exactly(v, "hello"));
{
int hidden = 42;
printf("%d\n", hidden);
}
printf("%s", "Did this run?\n");
printn(x, prefix_sequence(x, prefix_is_digits, prefix_is_alnums));
printn(x, prefix_alternatives(x, prefix_is_hyphen, prefix_is_alphas, prefix_is_puncts, prefix_is_digits));
//printn(y, prefix_is_word(y));
printf("blah");
return 0;
}
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