camfort / fortran-src

Fortran parsing and static analysis infrastructure
https://hackage.haskell.org/package/fortran-src
Other
48 stars 20 forks source link

Limit mutual recursion in core Fortran AST types #222

Open raehik opened 2 years ago

raehik commented 2 years ago

The Fortran syntax representation we use is highly mutually recursive. To summarise the core types:

However, as of 2022-05-11, Expressions are mutually recursive with ProgramUnits. This can introduce surprises, and makes instance derivation awkward. In particular, generic derivation likely won't work unless every type up to ProgramUnit also has an instance derived.

It would be more sensible to limit the two-way recursion where possible. Note there might be some unexpected behaviour by doing so. For example, Expressions are only connected to Statements through one constructor -- altering a data type stored in there removes the mutual recursion, but caused issues with block/flow analysis https://github.com/camfort/fortran-src/pull/221 .