[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--