@@ -426,7 +426,7 @@ module Annotation =
426426 makeNativeTypeAnnotation com ctx [ genArg] " Array"
427427
428428 let makeListTypeAnnotation com ctx genArg =
429- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
429+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
430430
431431 let makeUnionTypeAnnotation com ctx genArgs =
432432 List.map ( typeAnnotation com ctx) genArgs
@@ -647,12 +647,6 @@ module Util =
647647 | [] -> expr
648648 | m:: ms -> get None expr m |> getParts ms
649649
650- let makeList com ctx r headAndTail =
651- match headAndTail with
652- | None -> [||]
653- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
654- |> libConsCall com ctx r " Types" " List"
655-
656650 let makeArray ( com : IBabelCompiler ) ctx exprs =
657651 List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
658652 |> ArrayExpression :> Expression
@@ -902,12 +896,17 @@ module Util =
902896 | Fable.NewTuple vals -> makeArray com ctx vals
903897 // Optimization for bundle size: compile list literals as List.ofArray
904898 | Replacements.ListLiteral( exprs, t) ->
905- match exprs with
906- | [] -> makeList com ctx r None
907- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
908- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
899+ [| List.rev exprs |> makeArray com ctx|]
900+ |> libCall com ctx r " List" " newList"
901+ // match exprs with
902+ // | [] -> libCall com ctx r "List" "empty" [||]
903+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
904+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
909905 | Fable.NewList ( headAndTail, _) ->
910- makeList com ctx r headAndTail
906+ match headAndTail with
907+ | None -> libCall com ctx r " List" " empty" [||]
908+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
909+ libCall com ctx r " List" " cons" [| head; tail|]
911910 | Fable.NewOption ( value, t) ->
912911 match value with
913912 | Some ( TransformExpr com ctx e) ->
@@ -1162,10 +1161,12 @@ module Util =
11621161 | Fable.FieldKey field -> get range expr field.Name
11631162
11641163 | Fable.ListHead ->
1165- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1164+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1165+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11661166
11671167 | Fable.ListTail ->
1168- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1168+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1169+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11691170
11701171 | Fable.TupleIndex index ->
11711172 match fableExpr with
@@ -1233,9 +1234,9 @@ module Util =
12331234 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12341235 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12351236 | Fable.ListTest nonEmpty ->
1236- let expr = com.TransformAsExpr( ctx, expr)
1237- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1238- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1237+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1238+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1239+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12391240 | Fable.UnionCaseTest tag ->
12401241 let expected = ofInt tag
12411242 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments