@@ -438,7 +438,7 @@ module Annotation =
438
438
makeNativeTypeAnnotation com ctx [ genArg] " Array"
439
439
440
440
let makeListTypeAnnotation com ctx genArg =
441
- makeImportTypeAnnotation com ctx [ genArg] " Types " " List"
441
+ makeImportTypeAnnotation com ctx [ genArg] " List " " List"
442
442
443
443
let makeUnionTypeAnnotation com ctx genArgs =
444
444
List.map ( typeAnnotation com ctx) genArgs
@@ -663,12 +663,6 @@ module Util =
663
663
| [] -> expr
664
664
| m:: ms -> get None expr m |> getParts ms
665
665
666
- let makeList com ctx r headAndTail =
667
- match headAndTail with
668
- | None -> [||]
669
- | Some( TransformExpr com ctx head, TransformExpr com ctx tail) -> [| head; tail|]
670
- |> libConsCall com ctx r " Types" " List"
671
-
672
666
let makeArray ( com : IBabelCompiler ) ctx exprs =
673
667
List.mapToArray ( fun e -> com.TransformAsExpr( ctx, e)) exprs
674
668
|> ArrayExpression :> Expression
@@ -931,27 +925,39 @@ module Util =
931
925
| Fable.NewArray ( values, typ) -> makeTypedArray com ctx typ values
932
926
| Fable.NewArrayFrom ( size, typ) -> makeTypedAllocatedFrom com ctx typ size
933
927
| Fable.NewTuple vals -> makeArray com ctx vals
934
- | Fable.NewList ( headAndTail, _) when List.contains " FABLE_LIBRARY" com.Options.Define ->
935
- makeList com ctx r headAndTail
928
+ // | Fable.NewList (headAndTail, _) when List.contains "FABLE_LIBRARY" com.Options.Define ->
929
+ // makeList com ctx r headAndTail
936
930
// Optimization for bundle size: compile list literals as List.ofArray
931
+ | Replacements.ListLiteral( exprs, t) ->
932
+ [| List.rev exprs |> makeArray com ctx|]
933
+ |> libCall com ctx r " List" " newList"
934
+ // match exprs with
935
+ // | [] -> libCall com ctx r "List" "empty" [||]
936
+ // | [TransformExpr com ctx expr] -> libCall com ctx r "List" "singleton" [|expr|]
937
+ // | exprs -> [|makeArray com ctx exprs|] |> libCall com ctx r "List" "ofArray"
937
938
| Fable.NewList ( headAndTail, _) ->
938
- let rec getItems acc = function
939
- | None -> List.rev acc, None
940
- | Some( head, Fable.Value( Fable.NewList( tail, _),_)) -> getItems ( head:: acc) tail
941
- | Some( head, tail) -> List.rev ( head:: acc), Some tail
942
- match getItems [] headAndTail with
943
- | [], None ->
944
- libCall com ctx r " List" " empty" [||]
945
- | [ TransformExpr com ctx expr], None ->
946
- libCall com ctx r " List" " singleton" [| expr|]
947
- | exprs, None ->
948
- [| makeArray com ctx exprs|]
949
- |> libCall com ctx r " List" " ofArray"
950
- | [ TransformExpr com ctx head], Some( TransformExpr com ctx tail) ->
939
+ match headAndTail with
940
+ | None -> libCall com ctx r " List" " empty" [||]
941
+ | Some( TransformExpr com ctx head, TransformExpr com ctx tail) ->
951
942
libCall com ctx r " List" " cons" [| head; tail|]
952
- | exprs, Some( TransformExpr com ctx tail) ->
953
- [| makeArray com ctx exprs; tail|]
954
- |> libCall com ctx r " List" " ofArrayWithTail"
943
+
944
+ // let rec getItems acc = function
945
+ // | None -> List.rev acc, None
946
+ // | Some(head, Fable.Value(Fable.NewList(tail, _),_)) -> getItems (head::acc) tail
947
+ // | Some(head, tail) -> List.rev (head::acc), Some tail
948
+ // match getItems [] headAndTail with
949
+ // | [], None ->
950
+ // libCall com ctx r "List" "empty" [||]
951
+ // | [TransformExpr com ctx expr], None ->
952
+ // libCall com ctx r "List" "singleton" [|expr|]
953
+ // | exprs, None ->
954
+ // [|makeArray com ctx exprs|]
955
+ // |> libCall com ctx r "List" "ofArray"
956
+ // | [TransformExpr com ctx head], Some(TransformExpr com ctx tail) ->
957
+ // libCall com ctx r "List" "cons" [|head; tail|]
958
+ // | exprs, Some(TransformExpr com ctx tail) ->
959
+ // [|makeArray com ctx exprs; tail|]
960
+ // |> libCall com ctx r "List" "ofArrayWithTail"
955
961
| Fable.NewOption ( value, t) ->
956
962
match value with
957
963
| Some ( TransformExpr com ctx e) ->
@@ -1205,10 +1211,12 @@ module Util =
1205
1211
| Fable.FieldKey field -> get range expr field.Name
1206
1212
1207
1213
| Fable.ListHead ->
1208
- get range ( com.TransformAsExpr( ctx, fableExpr)) " head"
1214
+ // get range (com.TransformAsExpr(ctx, fableExpr)) "head"
1215
+ libCall com ctx range " List" " head" [| com.TransformAsExpr( ctx, fableExpr)|]
1209
1216
1210
1217
| Fable.ListTail ->
1211
- get range ( com.TransformAsExpr( ctx, fableExpr)) " tail"
1218
+ // get range (com.TransformAsExpr(ctx, fableExpr)) "tail"
1219
+ libCall com ctx range " List" " tail" [| com.TransformAsExpr( ctx, fableExpr)|]
1212
1220
1213
1221
| Fable.TupleIndex index ->
1214
1222
match fableExpr with
@@ -1271,9 +1279,9 @@ module Util =
1271
1279
let op = if nonEmpty then BinaryUnequal else BinaryEqual
1272
1280
upcast BinaryExpression( op, com.TransformAsExpr( ctx, expr), NullLiteral(), ?loc= range)
1273
1281
| Fable.ListTest nonEmpty ->
1274
- let expr = com.TransformAsExpr( ctx, expr)
1275
- let op = if nonEmpty then BinaryUnequal else BinaryEqual
1276
- upcast BinaryExpression ( op , get None expr " tail " , NullLiteral (), ?loc= range)
1282
+ // let expr = get range ( com.TransformAsExpr(ctx, expr)) "IsEmpty"
1283
+ let expr = libCall com ctx range " List " " isEmpty " [| com.TransformAsExpr ( ctx , expr )|]
1284
+ if nonEmpty then upcast UnaryExpression ( UnaryNot , expr, ?loc= range) else expr
1277
1285
| Fable.UnionCaseTest tag ->
1278
1286
let expected = ofInt tag
1279
1287
let actual = com.TransformAsExpr( ctx, expr) |> getUnionExprTag None
0 commit comments