Browse Source

[cs] also insert 0 between dot and e in scientific floats (closes #7942)

Dan Korostelev 5 years ago
parent
commit
fea3d93846
2 changed files with 29 additions and 2 deletions
  1. 19 2
      src/generators/gencs.ml
  2. 10 0
      tests/unit/src/unit/issues/Issue7942.hx

+ 19 - 2
src/generators/gencs.ml

@@ -1368,8 +1368,25 @@ let generate con =
 									| _ -> ()
 								*)
 							| TFloat s ->
-								write w s;
-								(if String.get s (String.length s - 1) = '.' then write w "0");
+								let len = String.length s in
+								let rec loop i prev_c =
+									if i >= len then begin
+										write w s;
+										if prev_c = '.' then write w "0"
+									end else begin
+										let c = String.unsafe_get s i in
+										if (c = 'e' || c = 'E') && prev_c = '.' then
+											let first = String.sub s 0 i in
+											let second = String.sub s i (len - i) in
+											write w first;
+											write w "0";
+											write w second
+										else
+											loop (i + 1) c
+									end
+								in
+								loop 0 '#'
+
 								(*match real_type e.etype with
 									| TType( { t_path = ([], "Single") }, [] ) -> write w "f"
 									| _ -> ()

+ 10 - 0
tests/unit/src/unit/issues/Issue7942.hx

@@ -0,0 +1,10 @@
+package unit.issues;
+
+class Issue7942 extends unit.Test {
+	var x = 123.e12;
+	var y = 123.E12;
+
+	function test() {
+		eq(x, y);
+	}
+}