]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gfc-internals.texi (gfc_code): Document BLOCK and ASSOCIATE.
authorDaniel Kraft <d@domob.eu>
Sun, 4 Jul 2010 18:59:10 +0000 (20:59 +0200)
committerDaniel Kraft <domob@gcc.gnu.org>
Sun, 4 Jul 2010 18:59:10 +0000 (20:59 +0200)
2010-07-04  Daniel Kraft  <d@domob.eu>

* gfc-internals.texi (gfc_code): Document BLOCK and ASSOCIATE.

From-SVN: r161806

gcc/fortran/ChangeLog
gcc/fortran/gfc-internals.texi

index 3dcb42489bbbd69e2fedbf38b4927fdb6366393e..ca29477fb24f02a8a8d1d95f9ca5b2c3aa667140 100644 (file)
@@ -1,3 +1,7 @@
+2010-07-04  Daniel Kraft  <d@domob.eu>
+
+       * gfc-internals.texi (gfc_code): Document BLOCK and ASSOCIATE.
+
 2010-07-04  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/44596
index 90f90fdac5dc4ba6a5d2719fd17d92f366a62dcc..ed4c5ed3d66a5788f29fac485e2212395ce698b3 100644 (file)
@@ -406,6 +406,33 @@ case-block, and @code{extx.case_list} contains the case-values this block
 corresponds to.  The @code{block} member links to the next case in the list.
 
 
+@subsection @code{BLOCK} and @code{ASSOCIATE}
+
+The code related to a @code{BLOCK} statement is stored inside an
+@code{gfc_code} structure (say @var{c})
+with @code{c.op} set to @code{EXEC_BLOCK}.  The
+@code{gfc_namespace} holding the locally defined variables of the
+@code{BLOCK} is stored in @code{c.ext.block.ns}.  The code inside the
+construct is in @code{c.code}.
+
+@code{ASSOCIATE} constructs are based on @code{BLOCK} and thus also have
+the internal storage structure described above (including @code{EXEC_BLOCK}).
+However, for them @code{c.ext.block.assoc} is set additionally and points
+to a linked list of @code{gfc_association_list} structures.  Those
+structures basically store a link of associate-names to target expressions.
+The associate-names themselves are still also added to the @code{BLOCK}'s
+namespace as ordinary symbols, but they have their @code{gfc_symbol}'s
+member @code{assoc} set also pointing to the association-list structure.
+This way associate-names can be distinguished from ordinary variables
+and their target expressions identified.
+
+For association to expressions (as opposed to variables), at the very beginning
+of the @code{BLOCK} construct assignments are automatically generated to
+set the corresponding variables to their target expressions' values, and
+later on the compiler simply disallows using such associate-names in contexts
+that may change the value.
+
+
 @c gfc_expr
 @c --------