On Thu, Dec 10, 2015 at 05:29:14PM +0100, Markus Armbruster wrote:
> Done with this admittedly crude Coccinelle semantic patch:
> 

Reviewed-by: Eduardo Habkost <ehabk...@redhat.com>

You can rewrite the semantic patch as:

    @@
    type T;
    identifier FUN, RET;
    expression list ARGS;
    expression ERR, EC;
    @@
    (
    -    T RET = FUN(ARGS, &ERR);
    +    T RET = FUN(ARGS, &error_fatal);
    |
    -    RET = FUN(ARGS, &ERR);
    +    RET = FUN(ARGS, &error_fatal);
    |
    -    FUN(ARGS, &ERR);
    +    FUN(ARGS, &error_fatal);
    )
    -    if (ERR != NULL) {
    -        error_report_err(ERR);
    -        exit(EC);
    -    }


Coccinelle seems to have some magic to make "LIST," also match
with an empty list.

>     @@
>     identifier FUN;
>     expression ERR, EC;
>     @@
>     -    FUN(&ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    FUN(&error_fatal);
>     @@
>     identifier FUN;
>     expression ARG1, ERR, EC;
>     @@
>     -    FUN(ARG1, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    FUN(ARG1, &error_fatal);
>     @@
>     identifier FUN;
>     expression ARG1, ARG2, ERR, EC;
>     @@
>     -    FUN(ARG1, ARG2, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    FUN(ARG1, ARG2, &error_fatal);
>     @@
>     identifier FUN;
>     expression ARG1, ARG2, ARG3, ERR, EC;
>     @@
>     -    FUN(ARG1, ARG2, ARG3, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    FUN(ARG1, ARG2, ARG3, &error_fatal);
>     @@
>     identifier FUN;
>     expression RET, ERR, EC;
>     @@
>     -    RET = FUN(&ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    RET = FUN(&error_fatal);
>     @@
>     identifier FUN;
>     expression RET, ARG1, ERR, EC;
>     @@
>     -    RET = FUN(ARG1, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    RET = FUN(ARG1, &error_fatal);
>     @@
>     identifier FUN;
>     expression RET, ARG1, ARG2, ERR, EC;
>     @@
>     -    RET = FUN(ARG1, ARG2, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    RET = FUN(ARG1, ARG2, &error_fatal);
>     @@
>     identifier FUN;
>     expression RET, ARG1, ARG2, ARG3, ERR, EC;
>     @@
>     -    RET = FUN(ARG1, ARG2, ARG3, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    RET = FUN(ARG1, ARG2, ARG3, &error_fatal);
>     @@
>     type T;
>     identifier FUN, RET;
>     expression ERR, EC;
>     @@
>     -    T RET = FUN(&ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    T RET = FUN(&error_fatal);
>     @@
>     type T;
>     identifier FUN, RET;
>     expression ARG1, ERR, EC;
>     @@
>     -    T RET = FUN(ARG1, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    T RET = FUN(ARG1, &error_fatal);
>     @@
>     type T;
>     identifier FUN, RET;
>     expression ARG1, ARG2, ERR, EC;
>     @@
>     -    T RET = FUN(ARG1, ARG2, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    T RET = FUN(ARG1, ARG2, &error_fatal);
>     @@
>     type T;
>     identifier FUN, RET;
>     expression ARG1, ARG2, ARG3, ERR, EC;
>     @@
>     -    T RET = FUN(ARG1, ARG2, ARG3, &ERR);
>     -    if (ERR != NULL) {
>     -        error_report_err(ERR);
>     -        exit(EC);
>     -    }
>     +    T RET = FUN(ARG1, ARG2, ARG3, &error_fatal);
> 
> This leaves dead Error * variables behind, cleaned up manually.
> 

-- 
Eduardo

Reply via email to