I’ve encountered some quirks of the “future” parser while testing it:
-
By default, the first parameter of a
__thiscallfunction will be assigned the namethisby IDA. However, if you try to modify the function prototype without removing the namethis(which is reserved), the future parser will throw an error:1:61 error invalid parameter name: 'this' is a keyword.
This has quickly gotten frustrating, because the legacy parser could handle this just fine. -
When changing the type of a parameter through the decompiler UI (by pressing Y), it’s necessary to specify a name for the parameter as well, otherwise I get another parse error:
1:9 error expected unqualified-id. The legacy parser could handle me just enteringint *as the type, and completely ignored whatever parameter name I provided. -
Not exactly a parser issue, but something that I think should be corrected at some point: by default, it is still impossible to assign templated names to functions (or seemingly any other data). If I have a struct called
A<B>, and there’s a__thiscallfunction that works on objects of typeA<B>, and I know that function corresponds to a method calledC, I would like to be able to name the functionA<B>::C, instead of something weird likeA_B::C.
Separate from all of this, I’m constantly getting tripped up by the recent changes to the behavior of “Add Type”. In the past, I could press INS on the local type window, enter multiple type declarations in the dialog, click OK, and they’d all get created. If I do the same thing today, I get a bunch of parser errors (whether I use the future parser or the legacy parser). This seriously confused me, but I eventually realized that’s because I need to use the “Parse declarations” command instead… even though the documentation suggests the old way should still work:
Please note that Ins can be used to add many types at once. For that the user just needs to enter multiple declarations, one after another in the dialog box.
This hasn’t worked for me since IDA 9.1. Just try putting struct MultiDec1 {};struct MultiDec2 {}; (with any indentation or line-breaking you want) in the Ins-triggered dialog. On IDA 9.2 with the future parser, only MultiDec1 is added.
I like the direction the product is going (even partial support for C++ template types is enormously helpful for me), and hope some of these rough edges can be addressed before the final release of 9.2.

