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):
1262 Parses the next line assuming it is an "End do" statement. 1264 Overrides method in `EndStatement`. 1267 line = item.get_line()
1268 matched = self.match(line)
1270 found_label = getattr(self.item,
"label",
None)
1271 expected_label = getattr(self.parent,
"endlabel",
None)
1274 if found_label != expected_label:
1276 'When entering the "do" block {start} was' 1277 +
" given as the end label but {end} was found." 1279 self.warning(message.format(start=expected_label, end=found_label))
1280 self.isvalid =
False 1283 'A label was specified when entering the "do" ' 1284 +
" block ({label}) but none was found at the end." 1286 self.warning(message.format(label=expected_label))
1287 self.isvalid =
False 1289 found_name = matched.group(
"name")
or None 1290 expected_name = self.parent.construct_name
1293 if found_name != expected_name:
1295 'The "do" block was specified with the name' 1296 +
' "{open}" but was closed with the name' 1299 self.warning(message.format(open=expected_name, close=found_name))
1300 self.isvalid =
False 1303 'A name ("{name}") was specified for the "do" ' 1304 +
"block but was not given when closing the block." 1306 self.warning(message.format(name=expected_name))
1307 self.isvalid =
False 1311 'The name "{name}" was used when closing a "do"' 1312 +
"block but none was specified when opening it." 1314 self.warning(message.format(name=found_name))
1315 self.isvalid =
False 1316 return EndStatement.process_item(self)