fparser Reference Guide  0.0.14
fparser.one.block_statements.EndDo Class Reference
Inheritance diagram for fparser.one.block_statements.EndDo:
Collaboration diagram for fparser.one.block_statements.EndDo:

Public Member Functions

def process_item (self)
 

Public Attributes

 isvalid
 

Static Public Attributes

 match
 
 blocktype
 

Detailed Description

END DO [<do-construct-name>]

Definition at line 1252 of file block_statements.py.

Member Function Documentation

◆ process_item()

def fparser.one.block_statements.EndDo.process_item (   self)
Parses the next line assuming it is an "End do" statement.

Overrides method in `EndStatement`.

Definition at line 1260 of file block_statements.py.

References fparser.common.base_classes.Statement.isvalid, fparser.one.block_statements.SubprogramPrefix.isvalid, fparser.common.base_classes.EndStatement.isvalid, fparser.one.block_statements.If.isvalid, fparser.one.block_statements.EndDo.isvalid, fparser.two.Fortran2003.Comment.item, fparser.common.base_classes.Statement.item, fparser.one.block_statements.EndSource.match, fparser.one.block_statements.BeginSource.match, fparser.one.block_statements.EndModule.match, fparser.one.block_statements.Module.match, fparser.one.block_statements.EndPythonModule.match, fparser.one.block_statements.PythonModule.match, fparser.one.block_statements.EndProgram.match, fparser.one.block_statements.EndBlockData.match, fparser.one.block_statements.BlockData.match, fparser.one.block_statements.EndInterface.match, fparser.one.block_statements.Interface.match, fparser.one.block_statements.EndSubroutine.match, fparser.one.block_statements.Subroutine.match, fparser.one.block_statements.EndFunction.match, fparser.one.block_statements.Function.match, fparser.one.block_statements.SubprogramPrefix.match, fparser.one.block_statements.EndSelect.match, fparser.one.block_statements.SelectCase.match, fparser.one.block_statements.SelectType.match, fparser.one.block_statements.EndWhere.match, fparser.one.block_statements.Where.match, fparser.one.block_statements.EndForall.match, fparser.one.block_statements.Forall.match, fparser.one.block_statements.EndIfThen.match, fparser.one.block_statements.IfThen.match, fparser.one.block_statements.If.match, fparser.one.block_statements.EndDo.match, fparser.common.base_classes.Variable.parent, fparser.two.utils.Base.parent, fparser.two.symbol_table.SymbolTable.parent, fparser.common.base_classes.Statement.parent, fparser.common.base_classes.Variable.warning(), fparser.common.base_classes.Statement.warning(), and fparser.common.readfortran.FortranReaderBase.warning().

1260  def process_item(self):
1261  """
1262  Parses the next line assuming it is an "End do" statement.
1263 
1264  Overrides method in `EndStatement`.
1265  """
1266  item = self.item
1267  line = item.get_line()
1268  matched = self.match(line)
1269  # Check for matching labels
1270  found_label = getattr(self.item, "label", None)
1271  expected_label = getattr(self.parent, "endlabel", None)
1272  if expected_label:
1273  if found_label:
1274  if found_label != expected_label:
1275  message = (
1276  'When entering the "do" block {start} was'
1277  + " given as the end label but {end} was found."
1278  )
1279  self.warning(message.format(start=expected_label, end=found_label))
1280  self.isvalid = False
1281  else:
1282  message = (
1283  'A label was specified when entering the "do" '
1284  + " block ({label}) but none was found at the end."
1285  )
1286  self.warning(message.format(label=expected_label))
1287  self.isvalid = False
1288  # Check for matching names
1289  found_name = matched.group("name") or None
1290  expected_name = self.parent.construct_name
1291  if expected_name:
1292  if found_name:
1293  if found_name != expected_name:
1294  message = (
1295  'The "do" block was specified with the name'
1296  + ' "{open}" but was closed with the name'
1297  + ' "{close}".'
1298  )
1299  self.warning(message.format(open=expected_name, close=found_name))
1300  self.isvalid = False
1301  else:
1302  message = (
1303  'A name ("{name}") was specified for the "do" '
1304  + "block but was not given when closing the block."
1305  )
1306  self.warning(message.format(name=expected_name))
1307  self.isvalid = False
1308  else:
1309  if found_name:
1310  message = (
1311  'The name "{name}" was used when closing a "do"'
1312  + "block but none was specified when opening it."
1313  )
1314  self.warning(message.format(name=found_name))
1315  self.isvalid = False
1316  return EndStatement.process_item(self)
1317 
1318 
Here is the call graph for this function:

The documentation for this class was generated from the following file: