From: Heng Li Date: Fri, 22 May 2015 02:12:02 +0000 (-0400) Subject: return final type X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=ffa32a59c79cd27543dd225033fa65a8270b00eb;p=klib.git return final type --- diff --git a/kexpr.c b/kexpr.c index 5f984a0..1cc75b1 100644 --- a/kexpr.c +++ b/kexpr.c @@ -265,7 +265,7 @@ kexpr_t *ke_parse(const char *_s, int *err) return ke; } -int ke_eval(const kexpr_t *ke, int64_t *_i, double *_r) +int ke_eval(const kexpr_t *ke, int64_t *_i, double *_r, int *int_ret) { #define _do_cmp(_op) do { \ q = &stack[--top], p = &stack[top-1]; \ @@ -375,7 +375,7 @@ int ke_eval(const kexpr_t *ke, int64_t *_i, double *_r) } if (top != 1) err |= KEE_ARG; free(stack); - *_i = stack->i, *_r = stack->r; + *_i = stack->i, *_r = stack->r, *int_ret = (stack->vtype == KEV_INT); return err; #undef _do_bin_int @@ -479,7 +479,8 @@ int main(int argc, char *argv[]) if (!to_print) { int64_t vi; double vr; - err = ke_eval(ke, &vi, &vr); + int int_ret; + err = ke_eval(ke, &vi, &vr, &int_ret); if (err) { fprintf(stderr, "ERROR: 0x%x\n", err); return 1; diff --git a/kexpr.h b/kexpr.h index a87c839..8cca627 100644 --- a/kexpr.h +++ b/kexpr.h @@ -24,7 +24,7 @@ void ke_print(const kexpr_t *ke); int ke_set_int(kexpr_t *ke, const char *var, int64_t x); int ke_set_real(kexpr_t *ke, const char *var, double x); int ke_set_str(kexpr_t *ke, const char *var, const char *x); -int ke_eval(const kexpr_t *ke, int64_t *_i, double *_r); +int ke_eval(const kexpr_t *ke, int64_t *_i, double *_r, int *int_ret); #ifdef __cplusplus }