Merge pull request #72 from mingodad/less-strcmp

Some small performance enhancements
This commit is contained in:
Daniel Holden
2017-10-14 11:22:24 -04:00
committed by GitHub

40
mpc.c
View File

@@ -920,10 +920,10 @@ typedef union {
} mpc_pdata_t; } mpc_pdata_t;
struct mpc_parser_t { struct mpc_parser_t {
char retained;
char *name; char *name;
char type;
mpc_pdata_t data; mpc_pdata_t data;
char type;
char retained;
}; };
static mpc_val_t *mpcf_input_nth_free(mpc_input_t *i, int n, mpc_val_t **xs, int x) { static mpc_val_t *mpcf_input_nth_free(mpc_input_t *i, int n, mpc_val_t **xs, int x) {
@@ -2021,11 +2021,15 @@ static mpc_val_t *mpcf_re_repeat(int n, mpc_val_t **xs) {
int num; int num;
(void) n; (void) n;
if (xs[1] == NULL) { return xs[0]; } if (xs[1] == NULL) { return xs[0]; }
if (strcmp(xs[1], "*") == 0) { free(xs[1]); return mpc_many(mpcf_strfold, xs[0]); } switch(((char*)xs[1])[0])
if (strcmp(xs[1], "+") == 0) { free(xs[1]); return mpc_many1(mpcf_strfold, xs[0]); } {
if (strcmp(xs[1], "?") == 0) { free(xs[1]); return mpc_maybe_lift(xs[0], mpcf_ctor_str); } case '*': { free(xs[1]); return mpc_many(mpcf_strfold, xs[0]); }; break;
case '+': { free(xs[1]); return mpc_many1(mpcf_strfold, xs[0]); }; break;
case '?': { free(xs[1]); return mpc_maybe_lift(xs[0], mpcf_ctor_str); }; break;
default:
num = *(int*)xs[1]; num = *(int*)xs[1];
free(xs[1]); free(xs[1]);
}
return mpc_count(num, mpcf_strfold, xs[0], free); return mpc_count(num, mpcf_strfold, xs[0], free);
} }
@@ -2461,11 +2465,15 @@ mpc_val_t *mpcf_maths(int n, mpc_val_t **xs) {
int **vs = (int**)xs; int **vs = (int**)xs;
(void) n; (void) n;
if (strcmp(xs[1], "*") == 0) { *vs[0] *= *vs[2]; } switch(((char*)xs[1])[0])
if (strcmp(xs[1], "/") == 0) { *vs[0] /= *vs[2]; } {
if (strcmp(xs[1], "%") == 0) { *vs[0] %= *vs[2]; } case '*': { *vs[0] *= *vs[2]; }; break;
if (strcmp(xs[1], "+") == 0) { *vs[0] += *vs[2]; } case '/': { *vs[0] /= *vs[2]; }; break;
if (strcmp(xs[1], "-") == 0) { *vs[0] -= *vs[2]; } case '%': { *vs[0] %= *vs[2]; }; break;
case '+': { *vs[0] += *vs[2]; }; break;
case '-': { *vs[0] -= *vs[2]; }; break;
default: break;
}
free(xs[1]); free(xs[2]); free(xs[1]); free(xs[2]);
@@ -3184,12 +3192,16 @@ static mpc_val_t *mpcaf_grammar_repeat(int n, mpc_val_t **xs) {
int num; int num;
(void) n; (void) n;
if (xs[1] == NULL) { return xs[0]; } if (xs[1] == NULL) { return xs[0]; }
if (strcmp(xs[1], "*") == 0) { free(xs[1]); return mpca_many(xs[0]); } switch(((char*)xs[1])[0])
if (strcmp(xs[1], "+") == 0) { free(xs[1]); return mpca_many1(xs[0]); } {
if (strcmp(xs[1], "?") == 0) { free(xs[1]); return mpca_maybe(xs[0]); } case '*': { free(xs[1]); return mpca_many(xs[0]); }; break;
if (strcmp(xs[1], "!") == 0) { free(xs[1]); return mpca_not(xs[0]); } case '+': { free(xs[1]); return mpca_many1(xs[0]); }; break;
case '?': { free(xs[1]); return mpca_maybe(xs[0]); }; break;
case '!': { free(xs[1]); return mpca_not(xs[0]); }; break;
default:
num = *((int*)xs[1]); num = *((int*)xs[1]);
free(xs[1]); free(xs[1]);
}
return mpca_count(num, xs[0]); return mpca_count(num, xs[0]);
} }