@@ -51,8 +51,11 @@ module ExprTranslationImpl =
5151 member env.BindSubstVal v e =
5252 { env with substVals = env.substVals.Add v e }
5353
54- member env.BindVals vs = ( env, vs) ||> List.fold ( fun env v -> env.BindVal v)
55- member env.BindCurriedVals vsl = ( env, vsl) ||> List.fold ( fun env vs -> env.BindVals vs)
54+ member env.BindVals vs =
55+ ( env, vs) ||> List.fold ( fun env v -> env.BindVal v)
56+
57+ member env.BindCurriedVals vsl =
58+ ( env, vsl) ||> List.fold ( fun env vs -> env.BindVals vs)
5659
5760 exception IgnoringPartOfQuotedTermWarning of string * Range.range
5861
@@ -81,6 +84,8 @@ type E =
8184 | FSharpFieldGet of FSharpExpr option * FSharpType * FSharpField
8285 | FSharpFieldSet of FSharpExpr option * FSharpType * FSharpField * FSharpExpr
8386 | NewUnionCase of FSharpType * FSharpUnionCase * FSharpExpr list
87+ | NewAnonRecord of FSharpType * FSharpExpr list
88+ | AnonRecordGet of FSharpExpr * FSharpType * int
8489 | UnionCaseGet of FSharpExpr * FSharpType * FSharpUnionCase * FSharpField
8590 | UnionCaseSet of FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr
8691 | UnionCaseTag of FSharpExpr * FSharpType
@@ -134,6 +139,8 @@ and [<Sealed>] FSharpExpr (cenv, f: (unit -> FSharpExpr) option, e: E, m:range,
134139 | E.Let ((_ bindingVar, bindingExpr), b) -> [ bindingExpr; b]
135140 | E.LetRec ( ves, b) -> ( List.map snd ves) @ [ b]
136141 | E.NewRecord (_ recordType, es) -> es
142+ | E.NewAnonRecord (_ recordType, es) -> es
143+ | E.AnonRecordGet ( e, _ recordType, _ n) -> [ e]
137144 | E.NewUnionCase (_ unionType, _ unionCase, es) -> es
138145 | E.NewTuple (_ tupleType, es) -> es
139146 | E.TupleGet (_ tupleType, _ itemIndex, tupleExpr) -> [ tupleExpr]
@@ -559,6 +566,11 @@ module FSharpExprConvert =
559566 let argsR = ConvExprs cenv env args
560567 E.NewUnionCase( typR, mkR, argsR)
561568
569+ | TOp.AnonRecd anonInfo, _, _ ->
570+ let typR = ConvType cenv ( mkAnyAnonRecdTy cenv.g anonInfo tyargs)
571+ let argsR = ConvExprs cenv env args
572+ E.NewAnonRecord( typR, argsR)
573+
562574 | TOp.Tuple tupInfo, tyargs, _ ->
563575 let tyR = ConvType cenv ( mkAnyTupledTy cenv.g tupInfo tyargs)
564576 let argsR = ConvExprs cenv env args
@@ -575,6 +587,10 @@ module FSharpExprConvert =
575587 let projR = FSharpField( cenv, ucref, n)
576588 E.UnionCaseGet( ConvExpr cenv env e1, typR, mkR, projR)
577589
590+ | TOp.AnonRecdGet ( anonInfo, n), tyargs, [ e1] ->
591+ let typR = ConvType cenv ( mkAnyAnonRecdTy cenv.g anonInfo tyargs)
592+ E.AnonRecordGet( ConvExpr cenv env e1, typR, n)
593+
578594 | TOp.UnionCaseFieldSet ( ucref, n), tyargs, [ e1; e2] ->
579595 let mkR = ConvUnionCaseRef cenv ucref
580596 let typR = ConvType cenv ( mkAppTy ucref.TyconRef tyargs)
@@ -1282,12 +1298,14 @@ module BasicPatterns =
12821298 let (| Let | _ |) ( e : FSharpExpr ) = match e.E with E.Let (( v, e), b) -> Some (( v, e), b) | _ -> None
12831299 let (| LetRec | _ |) ( e : FSharpExpr ) = match e.E with E.LetRec ( ves, b) -> Some ( ves, b) | _ -> None
12841300 let (| NewRecord | _ |) ( e : FSharpExpr ) = match e.E with E.NewRecord ( ty, es) -> Some ( ty, es) | _ -> None
1301+ let (| NewAnonRecord | _ |) ( e : FSharpExpr ) = match e.E with E.NewAnonRecord ( ty, es) -> Some ( ty, es) | _ -> None
12851302 let (| NewUnionCase | _ |) ( e : FSharpExpr ) = match e.E with E.NewUnionCase ( e, tys, es) -> Some ( e, tys, es) | _ -> None
12861303 let (| NewTuple | _ |) ( e : FSharpExpr ) = match e.E with E.NewTuple ( ty, es) -> Some ( ty, es) | _ -> None
12871304 let (| TupleGet | _ |) ( e : FSharpExpr ) = match e.E with E.TupleGet ( ty, n, es) -> Some ( ty, n, es) | _ -> None
12881305 let (| Call | _ |) ( e : FSharpExpr ) = match e.E with E.Call ( a, b, c, d, e) -> Some ( a, b, c, d, e) | _ -> None
12891306 let (| NewObject | _ |) ( e : FSharpExpr ) = match e.E with E.NewObject ( a, b, c) -> Some ( a, b, c) | _ -> None
12901307 let (| FSharpFieldGet | _ |) ( e : FSharpExpr ) = match e.E with E.FSharpFieldGet ( a, b, c) -> Some ( a, b, c) | _ -> None
1308+ let (| AnonRecordGet | _ |) ( e : FSharpExpr ) = match e.E with E.AnonRecordGet ( a, b, c) -> Some ( a, b, c) | _ -> None
12911309 let (| FSharpFieldSet | _ |) ( e : FSharpExpr ) = match e.E with E.FSharpFieldSet ( a, b, c, d) -> Some ( a, b, c, d) | _ -> None
12921310 let (| UnionCaseGet | _ |) ( e : FSharpExpr ) = match e.E with E.UnionCaseGet ( a, b, c, d) -> Some ( a, b, c, d) | _ -> None
12931311 let (| UnionCaseTag | _ |) ( e : FSharpExpr ) = match e.E with E.UnionCaseTag ( a, b) -> Some ( a, b) | _ -> None
0 commit comments