63fbe2f6a2
In uctags File is made private and mio gets inaccessible. At the moment it's used by c.c and lcpp.c to get the parameter list. The C parser "marks" the position where the argument list starts and once the right ")" is reached, string corresponding to this range is read from MIO, filtered and used for parameter list. For macro parameters the end of parameter list is handled in a slightly obfuscated way - since the code from read.c reads the code by lines, getInputFilePosition() returns the position of EOL so the parameter list is read between '(' and EOL. The code had to be modified to collect the potential parameter string on the way - vString *signature has been added to lcpp.c and every getcFromInputFile() and ungetcToInputFile() has been converted to getcAndCollect() and ungetcAndCollect(), respectively, which in addition perform the parameter collection when needed. Unfortunately this involves many places in lcpp.c and we must be careful to always use these instead of the standard ones from read.c. We cannot rely on the implicit reading of whole lines and must add such a code ourselves: just plain reading and collecting is enough. In addition I added handling of multi-line signatures which was missing before. In tests "bug1585745.cpp" and "cpp_destructor.cpp" the new code fixes missing () in destructors when there's a space between tilde and name. In "simple.d" test it fixes wrong function prototype. The output of test "bug507864.c" seems to be worse than before but it was already broken before and apparently the compiler is confused by it.