Hi Bram,

2018-2-11(Sun) 1:15:49 UTC+9 h_east:
> Hi Bram,
> 
> 2018-2-10(Sat) 21:10:17 UTC+9 Bram Moolenaar:
> > Hirohito Higashi wrote:
> > 
> > > 2018-2-9(Fri) 20:30:22 UTC+9 Bram Moolenaar:
> > > > Patch 8.0.1481
> > > > Problem:    Clearing a pointer takes two lines.
> > > > Solution:   Add vim_clear() to free and clear the pointer.
> > > > Files:      src/misc2.c, src/proto/misc2.pro, src/edit.c
> > > [...]
> > > 
> > > 
> > > In todo.txt
> > > > Use vim_clear() in more places, instead of vim_free() and assigning 
> > > > NULL.
> > > 
> > > I am working on the above items now.
> > > Wait about 6 hours.
> > > 
> > > Remarks:
> > > It includes the following changes.
> > > - Since cast is dangerous and troublesome, I changed vim_clear() from
> > > function to macro.
> > > 
> > > #define VIM_CLEAR(p) \
> > >     do { \
> > >         vim_free(p); \
> > >         p = NULL; \
> > >     } while (0)
> > 
> > I want to avoid using a macro, because the argument may not be a simple
> > pointer.
> 
> Hmm, at least my modified parts were all simple pointers.

I found not a simple pointer with vim_free() in Patch 8.0.1492.
+                 vim_free(array[--size].pum_text);

Certainly, passing `array[--size].pum_text` to the VIM_CLEAR() macro will cause 
unintended behavior due to side effects of macros...

--
Best regards,
Hirohito Higashi (h_east)

> 
> > 
> > Also, I intentionally only store NULL when it wasn't already set to NULL.
> > That should be faster.
> 
> Ah, I fixed the patch to check that it's not NULL.
> 
> > 
> > Why would the cast be dangerous?
> 
> Casting can trick compiler type checks. The thing that the compiler does not 
> tell even if you pass the wrong argument is "dangerous".
> 
> For example, the following sample code will succeed in compiling. (on 64bit 
> OS)
> 
> --------8<--------
> #include <stdlib.h>
> 
> void vim_clear(void **x)
> {
>     if (*x != NULL) {
>         free(*x);
>         *x = NULL;
>     }
> }
> 
> int main(void)
> {
>     long long a = 0;
> 
>     vim_clear((void **)a);
>     return 0;
> }
> --------8<--------
> 
> --
> Best regards,
> Hirohito Higashi (h_east)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui