From 69b4c6e0b70f92e829848e21c4d8983fac904f30 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Mon, 14 Jan 2019 22:39:00 -0500 Subject: Add assoc_set inline function for setting array elements. --- awk.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index bac788b3..9b5d359c 100644 --- a/awk.h +++ b/awk.h @@ -1362,6 +1362,21 @@ extern int fatal_tag_valid; /* assoc_remove --- remove an index from symbol[] */ #define assoc_remove(a, s) ((a)->aremove(a, s) != NULL) +/* assoc_set -- set an element in an array */ + +static inline void +assoc_set(NODE *array, NODE *sub, NODE *value) +{ + + NODE **lhs = assoc_lookup(array, sub); + unref(*lhs); + *lhs = value; + if (array->astore != NULL) + (*array->astore)(array, sub); + unref(sub); +} + + /* ------------- Function prototypes or defs (as appropriate) ------------- */ /* array.c */ typedef enum { SORTED_IN = 1, ASORT, ASORTI } sort_context_t; -- cgit v1.2.3 From 5812db74483bce781281422953d359fde5be6a99 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Tue, 15 Jan 2019 10:51:40 -0500 Subject: Fix location of assoc_set function in awk.h and start to use it. --- awk.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 9b5d359c..d14eae20 100644 --- a/awk.h +++ b/awk.h @@ -1362,20 +1362,6 @@ extern int fatal_tag_valid; /* assoc_remove --- remove an index from symbol[] */ #define assoc_remove(a, s) ((a)->aremove(a, s) != NULL) -/* assoc_set -- set an element in an array */ - -static inline void -assoc_set(NODE *array, NODE *sub, NODE *value) -{ - - NODE **lhs = assoc_lookup(array, sub); - unref(*lhs); - *lhs = value; - if (array->astore != NULL) - (*array->astore)(array, sub); - unref(sub); -} - /* ------------- Function prototypes or defs (as appropriate) ------------- */ /* array.c */ @@ -2038,6 +2024,20 @@ make_number_node(unsigned int flags) return r; } +/* assoc_set -- set an element in an array */ + +static inline void +assoc_set(NODE *array, NODE *sub, NODE *value) +{ + + NODE **lhs = assoc_lookup(array, sub); + unref(*lhs); + *lhs = value; + if (array->astore != NULL) + (*array->astore)(array, sub); + unref(sub); +} + /* * str_terminate_f, str_terminate, str_restore: function and macros to * reduce chances of typos when terminating and restoring strings. -- cgit v1.2.3 From c73d262642ee3a3d6585dc44acc62c432910f920 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 15 Jan 2019 21:27:06 +0200 Subject: Finish transition to using assoc_set. --- awk.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index d14eae20..378b935f 100644 --- a/awk.h +++ b/awk.h @@ -2024,7 +2024,7 @@ make_number_node(unsigned int flags) return r; } -/* assoc_set -- set an element in an array */ +/* assoc_set -- set an element in an array. Does unref(sub)! */ static inline void assoc_set(NODE *array, NODE *sub, NODE *value) -- cgit v1.2.3