[PATCH] Fix the handling of the star in pointer to user defined types for parameter declarations.

Théo Cavignac <[email protected]> Mon, 29 Mar 2021 16:58:49 +0200
Newsgroups gmane.comp.gnu.indent.bugs
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------1B3B7C6B612D72AB75373CCC
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Hello,

I would like to submit a small patch to fix a bug I noticed in the 
handling of the pointer star in parameter declaration.

Since indent don't detect user-defined types at lexing time, the 
eventual star following such a type is considered to be a binary operator.

As a consequence the formatting is off when it comes to aligning the 
star on the left (or the right depending on the options.)

For example:

     void f(char * s);

     void g(custom_type * p);

Would become:

     void f (char *s);

     void g (custom_type * p);

with `indent -npro -par`

My patch simply detect that a `*` is being handled as a binary operator 
in a parameter definition and redirect to the unary operator handler.

It thus provide the expected output:

     void f(char *s);

     void g(custom_type *p);


If you use a lot of typedef as I do and want to fully rely on indent to 
keep style homogeneous, this small change is very welcome.


I added a regression test named `custom-type-pointer.c`. It tests for 
function declarations and prototypes, and also check that actual 
multiplications are not affected.

I had to modify the test `bug-gnu-33364.c` reference because my solution 
work by trusting `in_decl` which is broken in that test.

Maybe this patch can be useful to others.

Cheers,

Théo Cavignac


PS: I never submitted any patch through a mailing list, hopefully I did 
everything right.


--------------1B3B7C6B612D72AB75373CCC
Content-Type: text/plain; charset=UTF-8;
 name="patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="patch"

ZGlmZiAtLWdpdCBhL3JlZ3Jlc3Npb24vVEVTVCBiL3JlZ3Jlc3Npb24vVEVTVAppbmRleCA1
NmY0MWQ5Li5lOTQ5MzhkIDEwMDc1NQotLS0gYS9yZWdyZXNzaW9uL1RFU1QKKysrIGIvcmVn
cmVzc2lvbi9URVNUCkBAIC0zNyw3ICszNyw3IEBAIEJVR1M9ImNhc2UtbGFiZWwuYyBvbmUt
bGluZS0xLmMgb25lLWxpbmUtMi5jIG9uZS1saW5lLTMuYyBcCiAgICAgICAgIG9uZS1saW5l
LTQuYyBzdHJ1Y3QtZGVjbC5jIHNpemVvZi1pbi13aGlsZS5jIGxpbmUtYnJlYWstY29tbWVu
dC5jIFwKICAgICAgICAgbWFjcm8uYyBlbnVtLmMgZWxpZi5jIG5lc3RlZC5jIHdyYXBwZWQt
c3RyaW5nLmMgbWludXNfcHJlZGVjcmVtZW50LmMgXAogICAgICAgICBidWctZ251LTMzMzY0
LmMgZmxvYXQtY29uc3RhbnQtc3VmZml4LmMgYmxvY2stY29tbWVudHMuYyBcCi0gICAgICAg
IG5vLWZvcmNlZC1ubC1pbi1ibG9jay1pbml0LmMgaGV4YWRlY2ltYWxfZmxvYXQuYyIKKyAg
ICAgICAgbm8tZm9yY2VkLW5sLWluLWJsb2NrLWluaXQuYyBoZXhhZGVjaW1hbF9mbG9hdC5j
IGN1c3RvbS10eXBlLXBvaW50ZXIuYyIKIAogSU5ERU5UU1JDPSJhcmdzLmMgYmFja3VwLmgg
YmFja3VwLmMgZGlyZW50X2RlZi5oIGdsb2JzLmMgaW5kZW50LmggXAogICAgICAgICBpbmRl
bnQuYyBpbmRlbnRfZ2xvYnMuaCBpby5jIGxleGkuYyBtZW1jcHkuYyBwYXJzZS5jIHByX2Nv
bW1lbnQuYyBcCmRpZmYgLS1naXQgYS9yZWdyZXNzaW9uL2lucHV0L2N1c3RvbS10eXBlLXBv
aW50ZXIuYyBiL3JlZ3Jlc3Npb24vaW5wdXQvY3VzdG9tLXR5cGUtcG9pbnRlci5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMGM1MTMKLS0tIC9kZXYvbnVsbAor
KysgYi9yZWdyZXNzaW9uL2lucHV0L2N1c3RvbS10eXBlLXBvaW50ZXIuYwpAQCAtMCwwICsx
LDggQEAKK3R5cGVkZWYgaW50ICogdmFsdWU7CisKK3ZhbHVlICogZyhpbnQgdik7CisKK3Zv
aWQgZih2YWx1ZSAqIGFycikKK3sKKyAgdmFsdWUgKiB2ID0gZyhhICogYik7Cit9CmRpZmYg
LS1naXQgYS9yZWdyZXNzaW9uL3N0YW5kYXJkL2J1Zy1nbnUtMzMzNjQuYyBiL3JlZ3Jlc3Np
b24vc3RhbmRhcmQvYnVnLWdudS0zMzM2NC5jCmluZGV4IGJkNDVjOGEuLmE3ZTFlN2MgMTAw
NjQ0Ci0tLSBhL3JlZ3Jlc3Npb24vc3RhbmRhcmQvYnVnLWdudS0zMzM2NC5jCisrKyBiL3Jl
Z3Jlc3Npb24vc3RhbmRhcmQvYnVnLWdudS0zMzM2NC5jCkBAIC0xLDUgKzEsNSBAQAogbWFp
biAoKQogewogICByZXR1cm47Ci0gIG1hbGxvYyAoeCAoaW50KSArIDIgKiA0KTsKKyAgbWFs
bG9jICh4IChpbnQpICsgMiAqNCk7CiB9CmRpZmYgLS1naXQgYS9yZWdyZXNzaW9uL3N0YW5k
YXJkL2N1c3RvbS10eXBlLXBvaW50ZXIuYyBiL3JlZ3Jlc3Npb24vc3RhbmRhcmQvY3VzdG9t
LXR5cGUtcG9pbnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2
YjQ3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9yZWdyZXNzaW9uL3N0YW5kYXJkL2N1c3RvbS10
eXBlLXBvaW50ZXIuYwpAQCAtMCwwICsxLDkgQEAKK3R5cGVkZWYgaW50ICp2YWx1ZTsKKwor
dmFsdWUgKmcgKGludCB2KTsKKwordm9pZAorZiAodmFsdWUgKmFycikKK3sKKyAgdmFsdWUg
KnYgPSBnIChhICogYik7Cit9CmRpZmYgLS1naXQgYS9zcmMvaGFuZGxldG9rZW4uYyBiL3Ny
Yy9oYW5kbGV0b2tlbi5jCmluZGV4IDkxOWZiYTkuLjFjZGRkZGEgMTAwNjQ0Ci0tLSBhL3Ny
Yy9oYW5kbGV0b2tlbi5jCisrKyBiL3NyYy9oYW5kbGV0b2tlbi5jCkBAIC03MTMsOSArNzEz
LDIxIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90b2tlbl91bmFyeV9vcCgKICAqLwogCiBzdGF0
aWMgdm9pZCBoYW5kbGVfdG9rZW5fYmluYXJ5X29wKAorICAgIGludCAgICAgICAgICAgICog
ZGVjX2luZCwKICAgICBjb25zdCBiYl9jb2RlX3R5IGNhbl9icmVhaykKIHsKICAgICBjaGFy
ICAgICAgICAgICAqIHRfcHRyOworCisgICAgLyoKKyAgICAgKiB0aGUgdG9rZW4gaXMgYWN0
dWFsbHkgYSBwb2ludGVyIHN0YXIgdXNlZCBhZnRlciBhIGN1c3RvbSB0eXBlCisgICAgICov
CisgICAgaWYgKCgqdG9rZW4gPT0gJyonKSAgICAgICAgICAgICAgICAgICAmJgorICAgICAg
ICBwYXJzZXJfc3RhdGVfdG9zLT5pbl9zdG10ICAgICAgICAgJiYgCisgICAgICAgIHBhcnNl
cl9zdGF0ZV90b3MtPmluX2RlY2wpCisgICAgeworICAgICAgICBoYW5kbGVfdG9rZW5fdW5h
cnlfb3AoZGVjX2luZCwgY2FuX2JyZWFrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICAgICAgICAgIAogICAgIGlmIChwYXJzZXJfc3RhdGVfdG9zLT53YW50X2JsYW5rICAgICAg
ICB8fCAKICAgICAgICAgKGVfY29kZSA+IHNfY29kZSAmJiAqZV9jb2RlICE9ICcgJykpCkBA
IC0yMjUxLDEyICsyMjYzLDEyIEBAIGV4dGVybiB2b2lkIGhhbmRsZV90aGVfdG9rZW4oCiAK
ICAgICBjYXNlIHVuYXJ5X29wOgogICAgICAgLyogdGhpcyBjb3VsZCBiZSBhbnkgdW5hcnkg
b3BlcmF0aW9uICovCi0gICAgICAgaGFuZGxlX3Rva2VuX3VuYXJ5X29wKCBkZWNfaW5kLCBj
YW5fYnJlYWspOworICAgICAgIGhhbmRsZV90b2tlbl91bmFyeV9vcChkZWNfaW5kLCBjYW5f
YnJlYWspOwogICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBiaW5hcnlfb3A6CiAgICAgICAv
KiBhbnkgYmluYXJ5IG9wZXJhdGlvbiAqLwotICAgICAgIGhhbmRsZV90b2tlbl9iaW5hcnlf
b3AoY2FuX2JyZWFrKTsKKyAgICAgICBoYW5kbGVfdG9rZW5fYmluYXJ5X29wKGRlY19pbmQs
IGNhbl9icmVhayk7CiAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIHBvc3RvcDoK
--------------1B3B7C6B612D72AB75373CCC--