aboutsummaryrefslogtreecommitdiffstats
path: root/gawkapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'gawkapi.c')
-rw-r--r--gawkapi.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gawkapi.c b/gawkapi.c
index 929c36b8..e8a9c312 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -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: