02.07.2020 18:49, Markus Armbruster wrote:
The object_property_set_FOO() setters take property name and value in
an unusual order:

     void object_property_set_FOO(Object *obj, FOO_TYPE value,
                                  const char *name, Error **errp)

Having to pass value before name feels grating.  Swap them.

Same for object_property_set(), object_property_get(), and
object_property_parse().

Convert callers with this Coccinelle script:

     @@
     identifier fun = {object_property_get, object_property_parse, 
object_property_set_str, object_property_set_link, object_property_set_bool, 
object_property_set_int, object_property_set_uint, object_property_set, 
object_property_set_qobject};
     expression obj, v, name, errp;
     @@
     -    fun(obj, v, name, errp)
     +    fun(obj, name, v, errp)

I'd suggest

@@
identifier fun = {object_property_get, object_property_parse, 
object_property_set_str, object_property_set_link, object_property_set_bool, 
object_property_set_int, object_property_set_uint, object_property_set, 
object_property_set_qobject};
parameter obj, v, name, errp;
@@
-    fun(obj, v, name, errp)
+    fun(obj, name, v, errp)
     {...}


in addition, to not


Chokes on hw/arm/musicpal.c's lcd_refresh() with the unhelpful error
message "no position information".  Convert that one manually.

Fails to convert hw/arm/armsse.c, because Coccinelle gets confused by
ARMSSE being used both as typedef and function-like macro there.
Convert manually.

Fails to convert hw/rx/rx-gdbsim.c, because Coccinelle gets confused
by RXCPU being used both as typedef and function-like macro there.
Convert manually.  The other files using RXCPU that way don't need
conversion.

Signed-off-by: Markus Armbruster <arm...@redhat.com>
Reviewed-by: Eric Blake <ebl...@redhat.com>

The change should be safe, as compiler will complain if something is not 
updated correspondingly. The only exclusion are object_property_parse and 
object_property_set_str, where both key and value are strings. Check them 
presizely looking at

 vimdiff <(git grep object_property_parse HEAD^ | sed 's/HEAD\^://') <(git grep 
object_property_parse)

and

 vimdiff <(git grep -A 1 object_property_set_str HEAD^ | sed 's/HEAD\^://') 
<(git grep -A 1 object_property_set_str)

seems everything is updated.

Also, looked through manual changes for hw/arm/musicpal.c, hw/arm/armsse.c and 
hw/rx/rx-gdbsim.c. Seems correct..


---
  include/hw/audio/pcspk.h                 |   2 +-
  include/qom/object.h                     |  45 ++++-----
  include/qom/qom-qobject.h                |   7 +-
  backends/cryptodev.c                     |   2 +-

[..]

static void property_release_tm(Object *obj, const char *name,
@@ -2384,10 +2375,8 @@ static void property_set_uint8_ptr(Object *obj, Visitor 
*v, const char *name,
  {
      uint8_t *field = opaque;
      uint8_t value;
-    Error *local_err = NULL;

This (and some more) chunks are obviously from some another patch..

- if (!visit_type_uint8(v, name, &value, &local_err)) {
-        error_propagate(errp, local_err);
+    if (!visit_type_uint8(v, name, &value, errp)) {
          return;
      }


To find problems like this, I'm trying to rerun your cocci-script, but I don't 
know how exactly do you run it.

I've tried --use-gitgrep, but it doesn't find some files.

I've tried
git grep -l 
'object_property_get\|object_property_parse\|object_property_set_str\|object_property_set_link\|object_property_set_bool\|object_property_set_int\|object_property_set_uint\|object_property_set\|object_property_set_qobject'
 | xargs spatch script.cocci --macro-file scripts/cocci-macro-file.h --in-place 
--no-show-diff

Still, have not updated target/arm/monitor.c, strange..

Another fact, which makes it hard to check the patch is a lot of manual 
wrapping/indenting updates.. Hmm, I need some tool or script to make it simple 
to compare commits ignoring wrapping and indentation differences.

--
Best regards,
Vladimir

Reply via email to