loki.transformations.extract.internal
Functions
|
Extract a single internal procedure with name |
|
This transform creates "standalone" |
|
Extract a single internal procedure with name |
|
This transform creates "standalone" |
- extract_contained_procedures(procedure)
This transform creates “standalone”
Subroutine`s from the internal procedures (subroutines or functions) of ``procedure`
.A list of
Subroutine`s corresponding to each internal subroutine of ``procedure`
is returned andprocedure
itself is modified (see below). This function does the following transforms: 1. all global bindings from the point of view of the internal procedures(s) are introduced as imports or dummy arguments to the modified internal procedures(s) to make them standalone. 2. all calls or invocations of the internal procedures in parent are modified accordingly. 3. All procedures are removed from the CONTAINS block ofprocedure
.As a basic example of this transformation, the Fortran subroutine:
subroutine outer() integer :: y integer :: o o = 0 y = 1 call inner(o) contains subroutine inner(o) integer, intent(inout) :: o integer :: x x = 4 o = x + y ! Note, 'y' is "global" here! end subroutine inner end subroutine outer
is modified to:
subroutine outer() integer :: y integer :: o o = 0 y = 1 call inner(o, y) ! 'y' now passed as argument. contains end subroutine outer
and the (modified) child:
subroutine inner(o, y) integer, intent(inout) :: o integer, intent(inout) :: y integer :: x x = 4 o = x + y ! Note, 'y' is no longer "global" end subroutine inner
is returned.
- extract_contained_procedure(procedure, name)
Extract a single internal procedure with name
name
from the parent procedureprocedure
.This function does the following transforms: 1. all global bindings from the point of view of the internal procedure are introduced as imports or dummy arguments to the modified internal procedure returned from this function. 2. all calls or invocations of the internal procedure in the parent are modified accordingly.
See also the “driver” function
extract_internal_procedures
, which applies this function to each internal procedure of a parent procedure and additionally empties the CONTAINS section of subroutines.
- extract_internal_procedures(procedure)
This transform creates “standalone”
Subroutine`s from the internal procedures (subroutines or functions) of ``procedure`
.A list of
Subroutine`s corresponding to each internal subroutine of ``procedure`
is returned andprocedure
itself is modified (see below). This function does the following transforms: 1. all global bindings from the point of view of the internal procedures(s) are introduced as imports or dummy arguments to the modified internal procedures(s) to make them standalone. 2. all calls or invocations of the internal procedures in parent are modified accordingly. 3. All procedures are removed from the CONTAINS block ofprocedure
.As a basic example of this transformation, the Fortran subroutine:
subroutine outer() integer :: y integer :: o o = 0 y = 1 call inner(o) contains subroutine inner(o) integer, intent(inout) :: o integer :: x x = 4 o = x + y ! Note, 'y' is "global" here! end subroutine inner end subroutine outer
is modified to:
subroutine outer() integer :: y integer :: o o = 0 y = 1 call inner(o, y) ! 'y' now passed as argument. contains end subroutine outer
and the (modified) child:
subroutine inner(o, y) integer, intent(inout) :: o integer, intent(inout) :: y integer :: x x = 4 o = x + y ! Note, 'y' is no longer "global" end subroutine inner
is returned.
- extract_internal_procedure(procedure, name)
Extract a single internal procedure with name
name
from the parent procedureprocedure
.This function does the following transforms: 1. all global bindings from the point of view of the internal procedure are introduced as imports or dummy arguments to the modified internal procedure returned from this function. 2. all calls or invocations of the internal procedure in the parent are modified accordingly.
See also the “driver” function
extract_internal_procedures
, which applies this function to each internal procedure of a parent procedure and additionally empties the CONTAINS section of subroutines.