* Copyright (c) 1983 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)parser4.c 3.6 (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
;