diff --git a/utshell-0.5/r_expr/src/lib.rs b/utshell-0.5/r_expr/src/lib.rs index 88a0fb5e62ea22eeddc5d9d72b8786213d1f80be..8369bbd4f7d27bd94b7121e2d932bcb5787d6325 100644 --- a/utshell-0.5/r_expr/src/lib.rs +++ b/utshell-0.5/r_expr/src/lib.rs @@ -507,4 +507,31 @@ unsafe extern "C" fn exp0() -> intmax_t { )); } return val; -} \ No newline at end of file +} + +#[no_mangle] +unsafe extern "C" fn exppower() -> intmax_t { + let mut val1: intmax_t = 0; + let mut val2: intmax_t = 0; + let mut c: intmax_t = 0; + val1 = exp1(); + while curtok == POWER as libc::c_int { + readtok(); + val2 = exppower(); + lasttok = NUM as libc::c_int; + if val2 == 0 as libc::c_int as libc::c_long { + return 1 as libc::c_int as intmax_t; + } + if val2 < 0 as libc::c_int as libc::c_long { + evalerror(dcgettext( + 0 as *const libc::c_char, + b"exponent less than 0\0" as *const u8 as *const libc::c_char, + 5 as libc::c_int, + )); + } + val1 = ipow(val1, val2); + } + return val1; +} + +