Răsfoiți Sursa

* catch exceptions in all variants of TextToFloat properly
* force x87 exceptions to be thrown on all platforms using x87

git-svn-id: trunk@44070 -

florian 5 ani în urmă
părinte
comite
f1eccca3a6
1 a modificat fișierele cu 13 adăugiri și 2 ștergeri
  1. 13 2
      rtl/objpas/sysutils/sysstr.inc

+ 13 - 2
rtl/objpas/sysutils/sysstr.inc

@@ -1213,7 +1213,18 @@ Begin
   P:=Pos(FormatSettings.DecimalSeparator,S);
   If (P<>0) Then
     S[P] := '.';
-  Val(trim(S),Value,E);
+  try
+    Val(trim(S),Value,E);
+  { on x87, a floating point exception may be pending in case of an invalid
+    input value -> trigger it now }
+{$if defined(cpui386) or (defined(cpux86_64) and not(defined(win64))) or defined(cpui8086)}
+    asm
+      fwait
+    end;
+{$endif}
+  except
+    E:=1;
+  end;
   Result:=(E=0);
 End;
 
@@ -1273,7 +1284,7 @@ Begin
     end;
   { on x87, a floating point exception may be pending in case of an invalid
     input value -> trigger it now }
-{$ifdef cpux86}
+{$if defined(cpui386) or (defined(cpux86_64) and not(defined(win64))) or defined(cpui8086)}
     asm
       fwait
     end;