* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
* This code is derived from software contributed to Berkeley by
* Edward Wang at The University of California, Berkeley.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)parser4.c 8.1 (Berkeley) %G%";
p_expr3_10(level
, v
, flag
)
register struct value
*v
;
if ((level
== 10 ? p_expr11(v
, flag
)
: p_expr3_10(level
+ 1, v
, flag
)) < 0)
else if (token
== T_MINUS
)
if ((level
== 10 ? p_expr11(&r
, flag
)
: p_expr3_10(level
+ 1, &r
, flag
)) < 0) {
if (l
.v_type
== V_STR
|| r
.v_type
== V_STR
) {
p_error("%s: Numeric operands required.",
int tmp
= strcmp(l
.v_str
, r
.v_str
);
v
->v_num
= l
.v_num
| r
.v_num
;
v
->v_num
= l
.v_num
^ r
.v_num
;
v
->v_num
= l
.v_num
& r
.v_num
;
v
->v_num
= l
.v_num
== r
.v_num
;
v
->v_num
= l
.v_num
!= r
.v_num
;
v
->v_num
= l
.v_num
< r
.v_num
;
v
->v_num
= l
.v_num
<= r
.v_num
;
v
->v_num
= l
.v_num
> r
.v_num
;
v
->v_num
= l
.v_num
>= r
.v_num
;
if ((i
= strlen(l
.v_str
)) > r
.v_num
)
v
->v_str
= str_ncpy(l
.v_str
, i
);
v
->v_num
= l
.v_num
<< r
.v_num
;
if ((i
= strlen(l
.v_str
)) > r
.v_num
)
v
->v_str
= str_cpy(l
.v_str
+ i
);
v
->v_num
= l
.v_num
>> r
.v_num
;
v
->v_str
= str_cat(l
.v_str
, r
.v_str
);
v
->v_num
= l
.v_num
+ r
.v_num
;
v
->v_num
= l
.v_num
- r
.v_num
;
v
->v_num
= l
.v_num
* r
.v_num
;
v
->v_num
= l
.v_num
/ r
.v_num
;
v
->v_num
= l
.v_num
% r
.v_num
;