@@ -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
@@ -900,12 +894,17 @@ module Util =
900894 | Fable.NewTuple vals -> makeArray com ctx vals
901895 // Optimization for bundle size: compile list literals as List.ofArray
902896 | Replacements.ListLiteral( exprs, t) ->
903- match exprs with
904- | [] -> makeList com ctx r None
905- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
906- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
897+ [| List.rev exprs |> makeArray com ctx|]
898+ |> libCall com ctx r " List" " newList"
899+ // match exprs with
900+ // | [] -> libCall com ctx r "List" "empty" [||]
901+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
902+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
907903 | Fable.NewList ( headAndTail, _) ->
908- makeList com ctx r headAndTail
904+ match headAndTail with
905+ | None -> libCall com ctx r " List" " empty" [||]
906+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
907+ libCall com ctx r " List" " cons" [| head; tail|]
909908 | Fable.NewOption ( value, t) ->
910909 match value with
911910 | Some ( TransformExpr com ctx e) ->
@@ -1158,10 +1157,12 @@ module Util =
11581157 | Fable.FieldKey field -> get range expr field.Name
11591158
11601159 | Fable.ListHead ->
1161- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1160+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1161+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11621162
11631163 | Fable.ListTail ->
1164- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1164+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1165+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11651166
11661167 | Fable.TupleIndex index ->
11671168 match fableExpr with
@@ -1229,9 +1230,9 @@ module Util =
12291230 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12301231 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12311232 | Fable.ListTest nonEmpty ->
1232- let expr = com.TransformAsExpr( ctx, expr)
1233- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1234- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1233+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1234+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1235+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12351236 | Fable.UnionCaseTest tag ->
12361237 let expected = ofInt tag
12371238 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments