@@ -427,7 +427,7 @@ module Annotation =
427427 makeNativeTypeAnnotation com ctx [ genArg] " Array"
428428
429429 let makeListTypeAnnotation com ctx genArg =
430- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
430+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
431431
432432 let makeUnionTypeAnnotation com ctx genArgs =
433433 List.map ( typeAnnotation com ctx) genArgs
@@ -648,12 +648,6 @@ module Util =
648648 | [] -> expr
649649 | m:: ms -> get None expr m |> getParts ms
650650
651- let makeList com ctx r headAndTail =
652- match headAndTail with
653- | None -> [||]
654- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
655- |> libConsCall com ctx r " Types" " List"
656-
657651 let makeArray ( com : IBabelCompiler ) ctx exprs =
658652 List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
659653 |> ArrayExpression :> Expression
@@ -903,12 +897,17 @@ module Util =
903897 | Fable.NewTuple vals -> makeArray com ctx vals
904898 // Optimization for bundle size: compile list literals as List.ofArray
905899 | Replacements.ListLiteral( exprs, t) ->
906- match exprs with
907- | [] -> makeList com ctx r None
908- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
909- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
900+ [| List.rev exprs |> makeArray com ctx|]
901+ |> libCall com ctx r " List" " newList"
902+ // match exprs with
903+ // | [] -> libCall com ctx r "List" "empty" [||]
904+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
905+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
910906 | Fable.NewList ( headAndTail, _) ->
911- makeList com ctx r headAndTail
907+ match headAndTail with
908+ | None -> libCall com ctx r " List" " empty" [||]
909+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
910+ libCall com ctx r " List" " cons" [| head; tail|]
912911 | Fable.NewOption ( value, t) ->
913912 match value with
914913 | Some ( TransformExpr com ctx e) ->
@@ -1163,10 +1162,12 @@ module Util =
11631162 | Fable.FieldKey field -> get range expr field.Name
11641163
11651164 | Fable.ListHead ->
1166- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1165+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1166+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
11671167
11681168 | Fable.ListTail ->
1169- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1169+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1170+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
11701171
11711172 | Fable.TupleIndex index ->
11721173 match fableExpr with
@@ -1234,9 +1235,9 @@ module Util =
12341235 let op = if nonEmpty then BinaryUnequal else BinaryEqual
12351236 upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
12361237 | Fable.ListTest nonEmpty ->
1237- let expr = com.TransformAsExpr( ctx, expr)
1238- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1239- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1238+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1239+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1240+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
12401241 | Fable.UnionCaseTest tag ->
12411242 let expected = ofInt tag
12421243 let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments