@@ -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
@@ -645,12 +645,6 @@ module Util =
645645 | [] -> expr
646646 | m:: ms -> get None expr m |> getParts ms
647647
648- let makeList com ctx r headAndTail =
649- match headAndTail with
650- | None -> [||]
651- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
652- |> libConsCall com ctx r " Types" " List"
653-
654648 let makeArray ( com : IBabelCompiler ) ctx exprs =
655649 List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
656650 |> ArrayExpression :> Expression
@@ -894,12 +888,17 @@ module Util =
894888 | Fable.NewTuple vals -> makeArray com ctx vals
895889 // Optimization for bundle size: compile list literals as List.ofArray
896890 | Replacements.ListLiteral( exprs, t) ->
897- match exprs with
898- | [] -> makeList com ctx r None
899- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
900- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
891+ [| List.rev exprs |> makeArray com ctx|]
892+ |> libCall com ctx r " List" " newList"
893+ // match exprs with
894+ // | [] -> libCall com ctx r "List" "empty" [||]
895+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
896+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
901897 | Fable.NewList ( headAndTail, _) ->
902- makeList com ctx r headAndTail
898+ match headAndTail with
899+ | None -> libCall com ctx r " List" " empty" [||]
900+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
901+ libCall com ctx r " List" " cons" [| head; tail|]
903902 | Fable.NewOption ( value, t) ->
904903 match value with
905904 | Some ( TransformExpr com ctx e) ->
@@ -1153,10 +1152,12 @@ module Util =
11531152 | Fable.FieldKey field -> get range expr field.Name
11541153
11551154 | Fable.ListHead ->
1156- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1155+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1156+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11571157
11581158 | Fable.ListTail ->
1159- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1159+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1160+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11601161
11611162 | Fable.TupleIndex index ->
11621163 match fableExpr with
@@ -1224,9 +1225,9 @@ module Util =
12241225 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12251226 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12261227 | Fable.ListTest nonEmpty ->
1227- let expr = com.TransformAsExpr( ctx, expr)
1228- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1229- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1228+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1229+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1230+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12301231 | Fable.UnionCaseTest tag ->
12311232 let expected = ofInt tag
12321233 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments