From ca12d72d3f3179686bfb332a0b4ef362423a1846 Mon Sep 17 00:00:00 2001 From: wangmengc Date: Wed, 22 May 2024 13:47:05 +0800 Subject: [PATCH] add ipow exp1 function --- utshell-0.5/r_expr/src/lib.rs | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/utshell-0.5/r_expr/src/lib.rs b/utshell-0.5/r_expr/src/lib.rs index 15ad0a8d..9583efeb 100644 --- a/utshell-0.5/r_expr/src/lib.rs +++ b/utshell-0.5/r_expr/src/lib.rs @@ -330,4 +330,43 @@ unsafe extern "C" fn expr_bind_array_element( b"../expr.c\0" as *const u8 as *const libc::c_char, 387 as libc::c_int, ); +} + +#[no_mangle] +unsafe extern "C" fn ipow(mut base: intmax_t, mut exp: intmax_t) -> intmax_t { + let mut result: intmax_t = 0; + result = 1 as libc::c_int as intmax_t; + while exp != 0 { + if exp & 1 as libc::c_int as libc::c_long != 0 { + result *= base; + } + exp >>= 1 as libc::c_int; + base *= base; + } + return result; +} + +#[no_mangle] +unsafe extern "C" fn exp1() -> intmax_t { + let mut val: intmax_t = 0; + if curtok == '!' as i32 { + readtok(); + val = (exp1() == 0) as libc::c_int as intmax_t; + lasttok = 6 as libc::c_int; + } else if curtok == '~' as i32 { + readtok(); + val = !exp1(); + lasttok = 6 as libc::c_int; + } else if curtok == '-' as i32 { + readtok(); + val = -exp1(); + lasttok = 6 as libc::c_int; + } else if curtok == '+' as i32 { + readtok(); + val = exp1(); + lasttok = 6 as libc::c_int; + } else { + val = exp0(); + } + return val; } \ No newline at end of file -- Gitee