From a18617bbd16e8bdcb6055d1b563ad8ee237c9f7b Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 11 Mar 2020 19:54:51 +0100
Subject: [PATCH] ENH: add line number for dictionary getCheck errors

---
 applications/test/dictionary2/Test-dictionary2.C |  4 +++-
 src/OpenFOAM/db/dictionary/dictionary.C          | 13 +++++++++----
 src/OpenFOAM/db/dictionary/dictionary.H          |  2 +-
 src/OpenFOAM/db/dictionary/dictionaryTemplates.C |  8 ++++----
 4 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/applications/test/dictionary2/Test-dictionary2.C b/applications/test/dictionary2/Test-dictionary2.C
index 744831fa088..2f3a58da37c 100644
--- a/applications/test/dictionary2/Test-dictionary2.C
+++ b/applications/test/dictionary2/Test-dictionary2.C
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2017-2019 OpenCFD Ltd.
+    Copyright (C) 2017-2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -352,6 +352,7 @@ int main(int argc, char *argv[])
             (
                 "good 3.14159;\n"
                 "negative -3.14159;\n"
+                "neg2 -3.14159;\n"
                 "empty;\n"
                 // "bad  text;\n"            // always fails
                 // "bad  3.14159 1234;\n"    // fails for readScalar
@@ -386,6 +387,7 @@ int main(int argc, char *argv[])
 
             try_getCheckScalar(dict2, "good", scalarRange::gt0());
             try_getCheckScalar(dict2, "negative", scalarRange::gt0());
+            try_getCheckScalar(dict2, "neg2", scalarRange::gt0());
 
             try_getCheckScalar(dict2, "good", greaterOp1<scalar>(0));
             try_getCheckScalar(dict2, "negative", greaterOp1<scalar>(0));
diff --git a/src/OpenFOAM/db/dictionary/dictionary.C b/src/OpenFOAM/db/dictionary/dictionary.C
index 4b07aca7fc4..75c74cc9096 100644
--- a/src/OpenFOAM/db/dictionary/dictionary.C
+++ b/src/OpenFOAM/db/dictionary/dictionary.C
@@ -338,7 +338,11 @@ void Foam::dictionary::checkITstream
 }
 
 
-void Foam::dictionary::raiseBadInput(const word& keyword) const
+void Foam::dictionary::raiseBadInput
+(
+    const ITstream& is,
+    const word& keyword
+) const
 {
     // Can use FatalIOError instead of SafeFatalIOError
     // since predicate checks are not used at the earliest stages
@@ -347,10 +351,11 @@ void Foam::dictionary::raiseBadInput(const word& keyword) const
         "",                 // functionName
         "",                 // sourceFileName
         0,                  // sourceFileLineNumber
-        *this               // ios
+        this->name(),       // ioFileName
+        is.lineNumber(),    // ioStartLineNumber
+        -1                  // ioEndLineNumber
     )
-        << "Entry '" << keyword << "' with invalid input in dictionary "
-        << name() << nl << nl
+        << "Entry '" << keyword << "' with invalid input" << nl
         << exit(FatalIOError);
 }
 
diff --git a/src/OpenFOAM/db/dictionary/dictionary.H b/src/OpenFOAM/db/dictionary/dictionary.H
index 9df99994ef0..22f8a84f95d 100644
--- a/src/OpenFOAM/db/dictionary/dictionary.H
+++ b/src/OpenFOAM/db/dictionary/dictionary.H
@@ -357,7 +357,7 @@ private:
 
 
         //- Emit IOError about bad input for the entry
-        void raiseBadInput(const word& keyword) const;
+        void raiseBadInput(const ITstream& is, const word& keyword) const;
 
         //- The case-relative dictionary name. Uses FOAM_CASE
         fileName relativeName(const bool caseTag=false) const;
diff --git a/src/OpenFOAM/db/dictionary/dictionaryTemplates.C b/src/OpenFOAM/db/dictionary/dictionaryTemplates.C
index e08f1e83e66..4d5f38bc17c 100644
--- a/src/OpenFOAM/db/dictionary/dictionaryTemplates.C
+++ b/src/OpenFOAM/db/dictionary/dictionaryTemplates.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2017-2019 OpenCFD Ltd.
+    Copyright (C) 2017-2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -229,7 +229,7 @@ T Foam::dictionary::getCheckOrDefault
 
         if (!pred(val))
         {
-            raiseBadInput(keyword);
+            raiseBadInput(is, keyword);
         }
 
         return val;
@@ -284,7 +284,7 @@ T Foam::dictionary::getCheckOrAdd
 
         if (!pred(val))
         {
-            raiseBadInput(keyword);
+            raiseBadInput(is, keyword);
         }
 
         return val;
@@ -362,7 +362,7 @@ bool Foam::dictionary::readCheck
 
         if (!pred(val))
         {
-            raiseBadInput(keyword);
+            raiseBadInput(is, keyword);
         }
 
         return true;
-- 
GitLab