@@ -421,7 +421,7 @@ module Annotation =
421421 makeNativeTypeAnnotation com ctx [ genArg] " Array"
422422
423423 let makeListTypeAnnotation com ctx genArg =
424- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
424+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
425425
426426 let makeUnionTypeAnnotation com ctx genArgs =
427427 List.map ( typeAnnotation com ctx) genArgs
@@ -640,12 +640,6 @@ module Util =
640640 | [] -> expr
641641 | m:: ms -> get None expr m |> getParts ms
642642
643- let makeList com ctx r headAndTail =
644- match headAndTail with
645- | None -> [||]
646- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
647- |> libConsCall com ctx r " Types" " List"
648-
649643 let makeArray ( com : IBabelCompiler ) ctx exprs =
650644 List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
651645 |> ArrayExpression :> Expression
@@ -882,12 +876,17 @@ module Util =
882876 | Fable.NewTuple vals -> makeArray com ctx vals
883877 // Optimization for bundle size: compile list literals as List.ofArray
884878 | Replacements.ListLiteral( exprs, t) ->
885- match exprs with
886- | [] -> makeList com ctx r None
887- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
888- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
879+ [| List.rev exprs |> makeArray com ctx|]
880+ |> libCall com ctx r " List" " newList"
881+ // match exprs with
882+ // | [] -> libCall com ctx r "List" "empty" [||]
883+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
884+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
889885 | Fable.NewList ( headAndTail, _) ->
890- makeList com ctx r headAndTail
886+ match headAndTail with
887+ | None -> libCall com ctx r " List" " empty" [||]
888+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
889+ libCall com ctx r " List" " cons" [| head; tail|]
891890 | Fable.NewOption ( value, t) ->
892891 match value with
893892 | Some ( TransformExpr com ctx e) ->
@@ -1144,10 +1143,12 @@ module Util =
11441143 | Fable.FieldKey field -> get range expr field.Name
11451144
11461145 | Fable.ListHead ->
1147- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1146+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1147+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11481148
11491149 | Fable.ListTail ->
1150- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1150+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1151+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11511152
11521153 | Fable.TupleIndex index ->
11531154 match fableExpr with
@@ -1215,9 +1216,9 @@ module Util =
12151216 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12161217 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12171218 | Fable.ListTest nonEmpty ->
1218- let expr = com.TransformAsExpr( ctx, expr)
1219- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1220- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1219+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1220+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1221+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12211222 | Fable.UnionCaseTest tag ->
12221223 let expected = ofInt tag
12231224 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments