@@ -438,7 +438,7 @@ module Annotation =
438438 makeNativeTypeAnnotation com ctx [ genArg] " Array"
439439
440440 let makeListTypeAnnotation com ctx genArg =
441- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
441+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
442442
443443 let makeUnionTypeAnnotation com ctx genArgs =
444444 List.map ( typeAnnotation com ctx) genArgs
@@ -659,12 +659,6 @@ module Util =
659659 | [] -> expr
660660 | m:: ms -> get None expr m |> getParts ms
661661
662- let makeList com ctx r headAndTail =
663- match headAndTail with
664- | None -> [||]
665- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
666- |> libConsCall com ctx r " Types" " List"
667-
668662 let makeArray ( com : IBabelCompiler ) ctx exprs =
669663 List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
670664 |> ArrayExpression :> Expression
@@ -914,12 +908,17 @@ module Util =
914908 | Fable.NewTuple vals -> makeArray com ctx vals
915909 // Optimization for bundle size: compile list literals as List.ofArray
916910 | Replacements.ListLiteral( exprs, t) ->
917- match exprs with
918- | [] -> makeList com ctx r None
919- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
920- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
911+ [| List.rev exprs |> makeArray com ctx|]
912+ |> libCall com ctx r " List" " newList"
913+ // match exprs with
914+ // | [] -> libCall com ctx r "List" "empty" [||]
915+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
916+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
921917 | Fable.NewList ( headAndTail, _) ->
922- makeList com ctx r headAndTail
918+ match headAndTail with
919+ | None -> libCall com ctx r " List" " empty" [||]
920+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
921+ libCall com ctx r " List" " cons" [| head; tail|]
923922 | Fable.NewOption ( value, t) ->
924923 match value with
925924 | Some ( TransformExpr com ctx e) ->
@@ -1174,10 +1173,12 @@ module Util =
11741173 | Fable.FieldKey field -> get range expr field.Name
11751174
11761175 | Fable.ListHead ->
1177- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1176+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1177+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11781178
11791179 | Fable.ListTail ->
1180- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1180+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1181+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11811182
11821183 | Fable.TupleIndex index ->
11831184 match fableExpr with
@@ -1245,9 +1246,9 @@ module Util =
12451246 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12461247 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12471248 | Fable.ListTest nonEmpty ->
1248- let expr = com.TransformAsExpr( ctx, expr)
1249- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1250- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1249+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1250+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1251+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12511252 | Fable.UnionCaseTest tag ->
12521253 let expected = ofInt tag
12531254 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments