About the author
Many years ago, I wrote the following regular expression:
^(?:\s*)(class)?(?:\s*)(constructor|destructor|function|operator|procedure)(?:\s*)(\w+\.)*(\w+)(?:\s*)((?:\()((?:\;?\s*)(const|var|out)?(?:\s*)&?(\w+)(,\s*\w+)*(?:\s*\:\s*)&?((\w*)\.)*(\w+)(\s*\=\s*(''.*''|\w+|\d+))?)*(?:\)))*((?:\:\s*)((\w*)\.)*(\w+))?;
to parse the Delphi syntax for declaration of a routine.
Since the addition of generics to Delphi, the above regular expression no longer works, if and when there is a generic type in the declaration.
If I treat a simple generic type declaration as just an identifier, then it would be simple to expand the above regular expression.
However, it seems to me that a generic type declaration can be yet another generic type expression.
More investigations needed, I think.
A method pointer is now the same as a global procedure, ie, procedure of object = procedure.