From b42395ec8d0e9634f57ebf7f62e8d1480616fb53 Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Sat, 15 Aug 2020 17:30:55 +0100
Subject: [PATCH] Attempt to fix locale issue with decimal separator in rules.

---
 common/libeval_compiler/libeval_compiler.cpp | 12 ++++++------
 pcbnew/pcb_expr_evaluator.cpp                |  6 +++---
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/common/libeval_compiler/libeval_compiler.cpp b/common/libeval_compiler/libeval_compiler.cpp
index 35aa1d79d2..48c9da201a 100644
--- a/common/libeval_compiler/libeval_compiler.cpp
+++ b/common/libeval_compiler/libeval_compiler.cpp
@@ -372,10 +372,10 @@ int COMPILER::resolveUnits()
 
 bool COMPILER::lexDefault( T_TOKEN& aToken )
 {
-    T_TOKEN     retval;
+    T_TOKEN  retval;
     wxString current;
-    int         convertFrom;
-    wxString    msg;
+    int      convertFrom;
+    wxString msg;
 
     retval.value.str = nullptr;
     retval.token = G_ENDS;
@@ -396,8 +396,8 @@ bool COMPILER::lexDefault( T_TOKEN& aToken )
     auto extractNumber =
             [&]()
             {
-                bool haveSeparator = false;
-                wxUniChar ch             = m_tokenizer.GetChar();
+                bool      haveSeparator = false;
+                wxUniChar ch = m_tokenizer.GetChar();
 
                 do
                 {
@@ -865,7 +865,7 @@ bool COMPILER::generateUCode( UCODE* aCode, CONTEXT* aPreflightContext )
             }
             else
             {
-                value = wxAtof( *node->value.str );
+                value = DoubleValueFromString( EDA_UNITS::MILLIMETRES, *node->value.str );
             }
 
             node->SetUop( TR_UOP_PUSH_VALUE, value );
diff --git a/pcbnew/pcb_expr_evaluator.cpp b/pcbnew/pcb_expr_evaluator.cpp
index e5f870656e..3930cab220 100644
--- a/pcbnew/pcb_expr_evaluator.cpp
+++ b/pcbnew/pcb_expr_evaluator.cpp
@@ -361,9 +361,9 @@ public:
 
         switch( unitId )
         {
-        case 0:  return Mils2iu( v );
-        case 1:  return Millimeter2iu( v );
-        case 2:  return Mils2iu( v * 1000.0 );
+        case 0:  return DoubleValueFromString( EDA_UNITS::INCHES, aString, true );
+        case 1:  return DoubleValueFromString( EDA_UNITS::MILLIMETRES, aString );
+        case 2:  return DoubleValueFromString( EDA_UNITS::INCHES, aString, false );
         default: return v;
         }
     };