std::optional<DataEdit> GetNextDataEdit(
IoStatementState &, int maxRepeat = 1);
+ // Each NAMELIST input item is a distinct "list-directed"
+ // input statement. This member function resets this state
+ // so that repetition and null values work correctly for each
+ // successive NAMELIST input item.
+ void ResetForNextNamelistItem() {
+ remaining_ = 0;
+ isFirstItem_ = true;
+ realPart_ = imaginaryPart_ = false;
+ }
+
private:
int remaining_{0}; // for "r*" repetition
std::int64_t initialRecordNumber_;
ConnectionState &connection{io.GetConnectionState()};
connection.modes.inNamelist = true;
IoErrorHandler &handler{io.GetIoErrorHandler()};
+ auto *listInput{io.get_if<ListDirectedStatementState<Direction::Input>>()};
+ RUNTIME_CHECK(handler, listInput != nullptr);
// Check the group header
std::optional<char32_t> next{io.GetNextNonBlank()};
if (!next || *next != '&') {
}
io.HandleRelativePosition(1);
// Read the values into the descriptor
+ listInput->ResetForNextNamelistItem();
if (!descr::DescriptorIO<Direction::Input>(io, *useDescriptor)) {
return false;
}