Skip to content

Commit 9e657d7

Browse files
committed
Fix emitting unary minus for floats in case of negative constants.
1 parent a554d33 commit 9e657d7

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

jscomp/core/js_dump.ml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,10 @@ and expression_desc cxt ~(level : int) f x : cxt =
666666
expression ~level:13 cxt f e
667667
| Bin
668668
( Minus,
669-
{ expression_desc = Number (Int { i = 0l; _ } | Float { f = "0." }) },
669+
{
670+
expression_desc =
671+
Number ((Int { i = 0l; _ } | Float { f = "0." }) as desc);
672+
},
670673
e )
671674
(* TODO:
672675
Handle multiple cases like
@@ -675,7 +678,7 @@ and expression_desc cxt ~(level : int) f x : cxt =
675678
{[ 0.000 - x ]}
676679
*) ->
677680
P.cond_paren_group f (level > 13) 1 (fun _ ->
678-
P.string f "-";
681+
P.string f (match desc with Float _ -> "- " | _ -> "-");
679682
expression ~level:13 cxt f e)
680683
| Bin (op, e1, e2) ->
681684
let out, lft, rght = Js_op_util.op_prec op in
@@ -718,8 +721,10 @@ and expression_desc cxt ~(level : int) f x : cxt =
718721
Js_op.Lit (Ext_ident.convert x))))
719722
(*name convention of Record is slight different from modules*)
720723
| Caml_block (el, mutable_flag, _, Blk_record { fields; record_repr }) -> (
721-
if Array.length fields <> 0 && Ext_array.for_alli fields (fun i v -> string_of_int i = v) then
722-
expression_desc cxt ~level f (Array (el, mutable_flag))
724+
if
725+
Array.length fields <> 0
726+
&& Ext_array.for_alli fields (fun i v -> string_of_int i = v)
727+
then expression_desc cxt ~level f (Array (el, mutable_flag))
723728
else
724729
match record_repr with
725730
| Record_regular ->

jscomp/test/format_test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ List.iter((function (param) {
189189
scan_float("File \"format_test.ml\", line 122, characters 13-20", param[1], param[0]);
190190
}), literals);
191191

192+
var f1 = - -9.9;
193+
194+
eq("File \"format_test.ml\", line 128, characters 5-12", f1, 9.9);
195+
192196
Mt.from_pair_suites("Format_test", suites.contents);
193197

194198
exports.suites = suites;

jscomp/test/format_test.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ let () =
122122
scan_float __LOC__ b a
123123
) literals
124124

125-
125+
let () =
126+
let f = -9.9 in
127+
let f1 = -.f in
128+
eq __LOC__ f1 9.9
126129

127130
let () = Mt.from_pair_suites __MODULE__ !suites

0 commit comments

Comments
 (0)