/*
* An expression evaluator
*/
#ifndef _H_CPP_EVAL_
#define _H_CPP_EVAL_
/*
* eval status
* to gen Ada we want to grok strings/floats too
*/
typedef enum {
eval_failed,
eval_int,
eval_float,
eval_string
} cpp_eval_result_kind_t;
typedef struct {
cpp_eval_result_kind_t eval_result_kind;
int base;
union {
host_int_t ival;
double fval;
char *sval;
} eval_result;
} cpp_eval_result_t;
extern cpp_eval_result_t cpp_eval _ANSI_PROTO_((char*));
#define EVAL_FAILED(x) ((x).eval_result_kind == eval_failed)
#define IS_EVAL_INT(x) ((x).eval_result_kind == eval_int)
#define IS_EVAL_FLOAT(x) ((x).eval_result_kind == eval_float)
#define IS_EVAL_STRING(x) ((x).eval_result_kind == eval_string)
#define EVAL_INT(x) ((x).eval_result.ival)
#define EVAL_FLOAT(x) ((x).eval_result.fval)
#define EVAL_STRING(x) ((x).eval_result.sval)
#endif /* _H_CPP_EVAL_ */
syntax highlighted by Code2HTML, v. 0.9.1