diff options
Diffstat (limited to 'gawkapi.c')
-rw-r--r-- | gawkapi.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -535,6 +535,16 @@ assign_regex(NODE *node, awk_value_t *val) val->val_type = AWK_REGEX; } +/* assign_bool --- return a bool node */ + +static inline void +assign_bool(NODE *node, awk_value_t *val) +{ + assert((node->flags & BOOL) != 0); + val->val_type = AWK_BOOL; + val->bool_value = get_number_si(node) != 0 ? awk_true : awk_false; +} + /* node_to_awk_value --- convert a node into a value for an extension */ static awk_bool_t @@ -572,18 +582,15 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) switch (wanted) { case AWK_BOOL: if ((node->flags & BOOL) != 0) { - val->val_type = AWK_BOOL; - val->bool_value = (get_number_si(node) ? awk_true : awk_false); + assign_bool(node, val); ret = awk_true; - } else { + } else ret = awk_false; - } break; + case AWK_NUMBER: if ((node->flags & REGEX) != 0) val->val_type = AWK_REGEX; - else if ((node->flags & BOOL) != 0) - val->val_type = AWK_BOOL; else { (void) force_number(node); assign_number(node, val); @@ -693,8 +700,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) /* return true and actual type for request of undefined */ switch (fixtype(node)->flags & (STRING|NUMBER|USER_INPUT|REGEX|BOOL)) { case BOOL: - val->val_type = AWK_BOOL; - val->bool_value = (get_number_si(node) ? awk_true : awk_false); + assign_bool(node, val); ret = awk_true; break; case STRING: |