]> git.kaiwu.me - klib.git/commitdiff
return final type
authorHeng Li <lh3@me.com>
Fri, 22 May 2015 02:12:02 +0000 (22:12 -0400)
committerHeng Li <lh3@me.com>
Fri, 22 May 2015 02:12:02 +0000 (22:12 -0400)
kexpr.c
kexpr.h

diff --git a/kexpr.c b/kexpr.c
index 5f984a081aaaf2181b649b89927d0f97dbdc439a..1cc75b12a330b2b9af417c7bd83717be2d2a1b5c 100644 (file)
--- 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 a87c8395b045a4f48766a4ae57cfa21e47eef317..8cca627ac9c3a78fb9900230d0b5a54a18a31933 100644 (file)
--- 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
 }