Fix style, since this file has just been touched in a major way.
No actual code changes.
This commit is contained in:
parent
6fbe7bf4f2
commit
69759f0829
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=223883
@ -52,7 +52,7 @@ void assert_times(intmax_t, intmax_t, intmax_t);
|
||||
int compare_vals(struct val *, struct val *);
|
||||
void free_value(struct val *);
|
||||
int is_integer(const char *);
|
||||
int isstring(struct val *);
|
||||
int is_string(struct val *);
|
||||
int is_zero_or_null(struct val *);
|
||||
struct val *make_integer(intmax_t);
|
||||
struct val *make_str(const char *);
|
||||
@ -115,7 +115,6 @@ expr: TOKEN
|
||||
| expr ':' expr { $$ = op_colon($1, $3); }
|
||||
;
|
||||
|
||||
|
||||
%%
|
||||
|
||||
struct val *
|
||||
@ -124,13 +123,12 @@ make_integer(intmax_t i)
|
||||
struct val *vp;
|
||||
|
||||
vp = (struct val *)malloc(sizeof(*vp));
|
||||
if (vp == NULL) {
|
||||
if (vp == NULL)
|
||||
errx(ERR_EXIT, "malloc() failed");
|
||||
}
|
||||
|
||||
vp->type = integer;
|
||||
vp->u.i = i;
|
||||
return vp;
|
||||
return (vp);
|
||||
}
|
||||
|
||||
struct val *
|
||||
@ -139,19 +137,17 @@ make_str(const char *s)
|
||||
struct val *vp;
|
||||
|
||||
vp = (struct val *)malloc(sizeof(*vp));
|
||||
if (vp == NULL || ((vp->u.s = strdup (s)) == NULL)) {
|
||||
if (vp == NULL || ((vp->u.s = strdup(s)) == NULL))
|
||||
errx(ERR_EXIT, "malloc() failed");
|
||||
}
|
||||
|
||||
if (is_integer(s))
|
||||
vp->type = numeric_string;
|
||||
else
|
||||
vp->type = string;
|
||||
|
||||
return vp;
|
||||
return (vp);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
free_value(struct val *vp)
|
||||
{
|
||||
@ -159,7 +155,6 @@ free_value(struct val *vp)
|
||||
free(vp->u.s);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
to_integer(struct val *vp)
|
||||
{
|
||||
@ -179,7 +174,6 @@ to_integer(struct val *vp)
|
||||
return (vp->type == integer);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
assert_to_integer(struct val *vp)
|
||||
{
|
||||
@ -212,7 +206,6 @@ to_string(struct val *vp)
|
||||
vp->u.s = tmp;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
is_integer(const char *s)
|
||||
{
|
||||
@ -231,15 +224,13 @@ is_integer(const char *s)
|
||||
return (*s == '\0');
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
isstring(struct val *vp)
|
||||
is_string(struct val *vp)
|
||||
{
|
||||
/* only TRUE if this string is not a valid integer */
|
||||
return (vp->type == string);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
yylex(void)
|
||||
{
|
||||
@ -268,13 +259,11 @@ yylex(void)
|
||||
int
|
||||
is_zero_or_null(struct val *vp)
|
||||
{
|
||||
if (vp->type == integer) {
|
||||
if (vp->type == integer)
|
||||
return (vp->u.i == 0);
|
||||
} else {
|
||||
|
||||
return (*vp->u.s == 0 || (to_integer(vp) && vp->u.i == 0));
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
@ -287,16 +276,15 @@ main(int argc, char *argv[])
|
||||
av = argv + 1;
|
||||
nonposix = 1;
|
||||
} else {
|
||||
while ((c = getopt(argc, argv, "e")) != -1)
|
||||
while ((c = getopt(argc, argv, "e")) != -1) {
|
||||
switch (c) {
|
||||
case 'e':
|
||||
nonposix = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr,
|
||||
errx(ERR_EXIT,
|
||||
"usage: expr [-e] expression\n");
|
||||
exit(ERR_EXIT);
|
||||
}
|
||||
}
|
||||
av = argv + optind;
|
||||
}
|
||||
@ -317,7 +305,6 @@ yyerror(const char *s __unused)
|
||||
errx(ERR_EXIT, "syntax error");
|
||||
}
|
||||
|
||||
|
||||
struct val *
|
||||
op_or(struct val *a, struct val *b)
|
||||
{
|
||||
@ -350,7 +337,7 @@ compare_vals(struct val *a, struct val *b)
|
||||
{
|
||||
int r;
|
||||
|
||||
if (isstring(a) || isstring(b)) {
|
||||
if (is_string(a) || is_string(b)) {
|
||||
to_string(a);
|
||||
to_string(b);
|
||||
r = strcoll(a->u.s, b->u.s);
|
||||
@ -425,19 +412,17 @@ op_plus(struct val *a, struct val *b)
|
||||
|
||||
assert_to_integer(a);
|
||||
assert_to_integer(b);
|
||||
|
||||
r = make_integer(a->u.i + b->u.i);
|
||||
assert_plus(a->u.i, b->u.i, r->u.i);
|
||||
|
||||
free_value(a);
|
||||
free_value(b);
|
||||
return r;
|
||||
return (r);
|
||||
}
|
||||
|
||||
void
|
||||
assert_minus(intmax_t a, intmax_t b, intmax_t r)
|
||||
{
|
||||
|
||||
/* special case subtraction of INTMAX_MIN */
|
||||
if (b == INTMAX_MIN && a < 0)
|
||||
errx(ERR_EXIT, "overflow");
|
||||
@ -452,13 +437,12 @@ op_minus(struct val *a, struct val *b)
|
||||
|
||||
assert_to_integer(a);
|
||||
assert_to_integer(b);
|
||||
|
||||
r = make_integer(a->u.i - b->u.i);
|
||||
assert_minus(a->u.i, b->u.i, r->u.i);
|
||||
|
||||
free_value(a);
|
||||
free_value(b);
|
||||
return r;
|
||||
return (r);
|
||||
}
|
||||
|
||||
void
|
||||
@ -479,7 +463,6 @@ op_times(struct val *a, struct val *b)
|
||||
|
||||
assert_to_integer(a);
|
||||
assert_to_integer(b);
|
||||
|
||||
r = make_integer(a->u.i * b->u.i);
|
||||
assert_times(a->u.i, b->u.i, r->u.i);
|
||||
|
||||
@ -505,14 +488,13 @@ op_div(struct val *a, struct val *b)
|
||||
|
||||
assert_to_integer(a);
|
||||
assert_to_integer(b);
|
||||
|
||||
/* assert based on operands only, not on result */
|
||||
assert_div(a->u.i, b->u.i);
|
||||
r = make_integer(a->u.i / b->u.i);
|
||||
|
||||
free_value(a);
|
||||
free_value(b);
|
||||
return r;
|
||||
return (r);
|
||||
}
|
||||
|
||||
struct val *
|
||||
@ -528,7 +510,7 @@ op_rem(struct val *a, struct val *b)
|
||||
|
||||
free_value(a);
|
||||
free_value(b);
|
||||
return r;
|
||||
return (r);
|
||||
}
|
||||
|
||||
struct val *
|
||||
@ -552,26 +534,23 @@ op_colon(struct val *a, struct val *b)
|
||||
|
||||
/* compare string against pattern */
|
||||
/* remember that patterns are anchored to the beginning of the line */
|
||||
if (regexec(&rp, a->u.s, (size_t)2, rm, 0) == 0 && rm[0].rm_so == 0) {
|
||||
if (regexec(&rp, a->u.s, (size_t)2, rm, 0) == 0 && rm[0].rm_so == 0)
|
||||
if (rm[1].rm_so >= 0) {
|
||||
*(a->u.s + rm[1].rm_eo) = '\0';
|
||||
v = make_str(a->u.s + rm[1].rm_so);
|
||||
|
||||
} else {
|
||||
} else
|
||||
v = make_integer((intmax_t)(rm[0].rm_eo - rm[0].rm_so));
|
||||
}
|
||||
} else {
|
||||
if (rp.re_nsub == 0) {
|
||||
else
|
||||
if (rp.re_nsub == 0)
|
||||
v = make_integer((intmax_t)0);
|
||||
} else {
|
||||
else
|
||||
v = make_str("");
|
||||
}
|
||||
}
|
||||
|
||||
/* free arguments and pattern buffer */
|
||||
free_value(a);
|
||||
free_value(b);
|
||||
regfree(&rp);
|
||||
|
||||
return v;
|
||||
return (v);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user