@@ -426,7 +426,7 @@ module Annotation =
426
426
makeNativeTypeAnnotation com ctx [ genArg] " Array"
427
427
428
428
let makeListTypeAnnotation com ctx genArg =
429
- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
429
+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
430
430
431
431
let makeUnionTypeAnnotation com ctx genArgs =
432
432
List.map ( typeAnnotation com ctx) genArgs
@@ -647,12 +647,6 @@ module Util =
647
647
| [] -> expr
648
648
| m:: ms -> get None expr m |> getParts ms
649
649
650
- let makeList com ctx r headAndTail =
651
- match headAndTail with
652
- | None -> [||]
653
- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
654
- |> libConsCall com ctx r " Types" " List"
655
-
656
650
let makeArray ( com : IBabelCompiler ) ctx exprs =
657
651
List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
658
652
|> ArrayExpression :> Expression
@@ -902,12 +896,17 @@ module Util =
902
896
| Fable.NewTuple vals -> makeArray com ctx vals
903
897
// Optimization for bundle size: compile list literals as List.ofArray
904
898
| Replacements.ListLiteral( exprs, t) ->
905
- match exprs with
906
- | [] -> makeList com ctx r None
907
- | [ expr] -> Some( expr, Fable.Value( Fable.NewList ( None, t), None)) |> makeList com ctx r
908
- | exprs -> [| makeArray com ctx exprs|] |> libCall com ctx r " List" " ofArray"
899
+ [| List.rev exprs |> makeArray com ctx|]
900
+ |> libCall com ctx r " List" " newList"
901
+ // match exprs with
902
+ // | [] -> libCall com ctx r "List" "empty" [||]
903
+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
904
+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
909
905
| Fable.NewList ( headAndTail, _) ->
910
- makeList com ctx r headAndTail
906
+ match headAndTail with
907
+ | None -> libCall com ctx r " List" " empty" [||]
908
+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
909
+ libCall com ctx r " List" " cons" [| head; tail|]
911
910
| Fable.NewOption ( value, t) ->
912
911
match value with
913
912
| Some ( TransformExpr com ctx e) ->
@@ -1162,10 +1161,12 @@ module Util =
1162
1161
| Fable.FieldKey field -> get range expr field.Name
1163
1162
1164
1163
| Fable.ListHead ->
1165
- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1164
+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1165
+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
1166
1166
1167
1167
| Fable.ListTail ->
1168
- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1168
+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1169
+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
1169
1170
1170
1171
| Fable.TupleIndex index ->
1171
1172
match fableExpr with
@@ -1233,9 +1234,9 @@ module Util =
1233
1234
let op = if nonEmpty then BinaryUnequal else BinaryEqual
1234
1235
upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
1235
1236
| Fable.ListTest nonEmpty ->
1236
- let expr = com.TransformAsExpr( ctx, expr)
1237
- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1238
- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1237
+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1238
+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1239
+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
1239
1240
| Fable.UnionCaseTest tag ->
1240
1241
let expected = ofInt tag
1241
1242
let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments