[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] [PATCH 4/4] libgst: Define and use COUNT_OF
From: |
Lee Duhem |
Subject: |
Re: [Help-smalltalk] [PATCH 4/4] libgst: Define and use COUNT_OF |
Date: |
Fri, 28 Apr 2017 22:00:05 +0800 |
On Wed, Apr 26, 2017 at 7:19 PM, Lee Duhem <address@hidden> wrote:
> 2017-04-26 Lee Duhem <address@hidden>
>
> * gstpriv.h (COUNT_OF): New macro.
> * dict.c (_gst_init_dictionary, _gst_init_dictionary_on_image_load):
> Use COUNT_OF.
> * sym.c (_gst_init_symbols_pass1): Ditto.
> ---
> libgst/ChangeLog | 7 +++++++
> libgst/dict.c | 8 +++-----
> libgst/gstpriv.h | 5 +++++
> libgst/sym.c | 6 +++---
> 4 files changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/libgst/ChangeLog b/libgst/ChangeLog
> index 4d1375c..5298b12 100644
> --- a/libgst/ChangeLog
> +++ b/libgst/ChangeLog
> @@ -1,5 +1,12 @@
> 2017-04-26 Lee Duhem <address@hidden>
>
> + * gstpriv.h (COUNT_OF): New macro.
> + * dict.c (_gst_init_dictionary, _gst_init_dictionary_on_image_load):
> + Use COUNT_OF.
> + * sym.c (_gst_init_symbols_pass1): Ditto.
> +
> +2017-04-26 Lee Duhem <address@hidden>
> +
> * callin.c (_gst_type_name_to_oop): Replace sprintf with snprintf.
> (_gst_class_name_to_oop): Clean properly before return.
> * cint.c (_gst_invoke_croutine): Clean properly before return.
> diff --git a/libgst/dict.c b/libgst/dict.c
> index 6e11fc6..30845ce 100644
> --- a/libgst/dict.c
> +++ b/libgst/dict.c
> @@ -828,13 +828,13 @@ _gst_init_dictionary (void)
>
> _gst_init_symbols_pass1 ();
>
> - create_classes_pass1 (class_info, sizeof (class_info) / sizeof
> (class_info[0]));
> + create_classes_pass1 (class_info, COUNT_OF (class_info));
>
> init_proto_oops();
> _gst_init_symbols_pass2 ();
> init_smalltalk_dictionary ();
>
> - create_classes_pass2 (class_info, sizeof (class_info) / sizeof
> (class_info[0]));
> + create_classes_pass2 (class_info, COUNT_OF (class_info));
>
> init_runtime_objects ();
> _gst_tenure_all_survivors ();
> @@ -1308,9 +1308,7 @@ _gst_init_dictionary_on_image_load (mst_Boolean
> prim_table_matches)
>
> _gst_restore_symbols ();
>
> - for (ci = class_info;
> - ci < class_info + sizeof(class_info) / sizeof(class_definition);
> - ci++)
> + for (ci = class_info; ci < class_info + COUNT_OF (class_info); ci++)
> if (ci->reloadAddress)
> {
> *ci->classVar = dictionary_at (_gst_smalltalk_dictionary,
> diff --git a/libgst/gstpriv.h b/libgst/gstpriv.h
> index 85aa9a0..ed68ef2 100644
> --- a/libgst/gstpriv.h
> +++ b/libgst/gstpriv.h
> @@ -553,6 +553,11 @@ extern OOP _gst_nil_oop
> #define MIN(x, y) ( ((x) > (y)) ? (y) : (x) )
> #endif
>
> +#ifndef COUNT_OF
> +#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / \
> + ((size_t)(!(sizeof(x) % sizeof(0[x])))))
> +#endif
I'd like to point out that this definition is copied from this
StackOverflow question [1].
Is this OK? If not, do I have to rewrite it somehow?
[1] http://stackoverflow.com/questions/4415524/common-array-length-macro-for-c
> +
> #include "ansidecl.h"
> #include "mathl.h"
> #include "socketx.h"
> diff --git a/libgst/sym.c b/libgst/sym.c
> index 57f62e7..cbd0d32 100644
> --- a/libgst/sym.c
> +++ b/libgst/sym.c
> @@ -1568,7 +1568,7 @@ _gst_init_symbols_pass1 (void)
> to the hash table entries. */
> for (bs = _gst_builtin_selectors_hash;
> bs - _gst_builtin_selectors_hash <
> - sizeof (_gst_builtin_selectors_hash) / sizeof
> (_gst_builtin_selectors_hash[0]);
> + COUNT_OF (_gst_builtin_selectors_hash);
> bs++)
> if (bs->offset != -1)
> {
> @@ -1594,7 +1594,7 @@ _gst_init_symbols_pass2 (void)
> to the hash table entries. */
> for (bs = _gst_builtin_selectors_hash;
> bs - _gst_builtin_selectors_hash <
> - sizeof (_gst_builtin_selectors_hash) / sizeof
> (_gst_builtin_selectors_hash[0]);
> + COUNT_OF (_gst_builtin_selectors_hash);
> bs++)
> if (bs->offset != -1)
> {
> @@ -1633,7 +1633,7 @@ _gst_restore_symbols (void)
> to the hash table entries. */
> for (bs = _gst_builtin_selectors_hash;
> bs - _gst_builtin_selectors_hash <
> - sizeof (_gst_builtin_selectors_hash) / sizeof
> (_gst_builtin_selectors_hash[0]);
> + COUNT_OF (_gst_builtin_selectors_hash);
> bs++)
> if (bs->offset != -1)
> {
> --
> 2.9.3
>