Releases: fortesg/fortrancallgraph
Fix OpenMP
Fix release
- Support INTERFACEs within Subroutine definitions
- Bug fixes
- More tests
A little bit of Fortran77
- Support for some Fortran77 syntax
- Prevent tracking of a global variable that is shadowed by a local variable
- Bug fixes
- More tests
Semicolons
- Support for the semicolon syntax. Attention! I have not changed the fact that the LHS of an assignment will be tracked starting from the line following the assignment. That means, in the following statements the use of
a%c1
will be missed by the analysis. Needs to be fixed in the future (#13).
p => a ; b = p%c1
- Added more default filename patterns: Module files will now be found automatically when they follow one of the following patterns (assembler files accordingly with
.s
ending):
moduleName + '.f90'
moduleName + '.F90'
moduleName + '_mod.f90'
moduleName + '_mod.F90'
moduleName.replace('_mod', '') + '.f90'
moduleName.replace('_mod', '') + '.F90'
-
Bug fixes
-
More tests
-
Refactorings
Full Types
Always Full Types
Introduced new config variable ALWAYS_FULL_TYPES
. There, one can choose some types for which always all components shall be considered as "used".
Example
Assume you have a the following type:
TYPE :: my_type
INTEGER :: i1, i2
END my_type
TYPE :: other_type
REAL :: r
END my_type
and in your FCG configuration:
ALWAYS_FULL_TYPES = {'my_type', 'other_type'}
For every argument of type my_type
the components %i1
and %i2
are considered to be used in the analyzed subroutine without any further tracking, and accordingly for %r
of other_type
. When there is global variable or a component of another argument or global variable with type my_type
(or other_type
) and this global variable or component appears somewhere in the subroutine, the (sub-)components %i1
and %i2
(or %r
) are considered to be used without any further tracking.
Plus
- Bug fixes
- More tests
- Refactorings
Abstract Types
Handling of Abstract Types
Introduced new config variable ABSTRACT_TYPE_IMPLEMENTATIONS
. There, one can choose for some abstract types the one and only implementing subtypes.
Example
ABSTRACT_TYPE_IMPLEMENTATIONS = {'my_abstract_type':('my_subtype_module','my_subtype'),
'other_abstract_type':('other_subtype_module','other_subtype'),
...}
FCG will than handle every variable with type CLASS(my_abstract_type)
as if it were actually TYPE(my_subtype)
and every variable with type CLASS(other_abstract_type)
as if it were actually TYPE(other_subtype)
and so on....
Only helps when my_subtype
or other_subtype
are actually the chosen one, for example depending on some configuration. When during run time objects of several subtypes of my_abstract_type
or other_abstract_type
come along, it is not very helpful. (In future, maybe multiple subtypes will be supported, including automatic retrieval of all existing subtypes.)
Plus
- Bug fixes
- More tests
Python 3
Minor changes
- Bug fixes
- Code clean up
- New test suite
Function Results
- Type components of function results are now analyzed
- Added option
-a result
- Enhanced parsing of variable declaration
- Refactorings
- Added tests
- Code clean up
- Fixes #5
- Updated documentation