Skip to content

Commit c92f2f0

Browse files
DedSec256baronfel
authored andcommitted
ProvidedExpr handles encapsulation (#8809)
* ProvidedExpr handles encapsulation * fix
1 parent 80fce01 commit c92f2f0

File tree

3 files changed

+154
-309
lines changed

3 files changed

+154
-309
lines changed

src/fsharp/ExtensionTyping.fs

Lines changed: 77 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -631,180 +631,102 @@ module internal ExtensionTyping =
631631
override __.Equals y = assert false; match y with :? ProvidedConstructorInfo as y -> x.Equals y.Handle | _ -> false
632632
override __.GetHashCode() = assert false; x.GetHashCode()
633633

634-
[<RequireQualifiedAccess; Class; AllowNullLiteral; Sealed>]
635-
type ProvidedExpr (x: Quotations.Expr, ctxt) =
634+
type ProvidedExprType =
635+
| ProvidedNewArrayExpr of ProvidedType * ProvidedExpr[]
636+
#if PROVIDED_ADDRESS_OF
637+
| ProvidedAddressOfExpr of ProvidedExpr
638+
#endif
639+
| ProvidedNewObjectExpr of ProvidedConstructorInfo * ProvidedExpr[]
640+
| ProvidedWhileLoopExpr of ProvidedExpr * ProvidedExpr
641+
| ProvidedNewDelegateExpr of ProvidedType * ProvidedVar[] * ProvidedExpr
642+
| ProvidedForIntegerRangeLoopExpr of ProvidedVar * ProvidedExpr * ProvidedExpr * ProvidedExpr
643+
| ProvidedSequentialExpr of ProvidedExpr * ProvidedExpr
644+
| ProvidedTryWithExpr of ProvidedExpr * ProvidedVar * ProvidedExpr * ProvidedVar * ProvidedExpr
645+
| ProvidedTryFinallyExpr of ProvidedExpr * ProvidedExpr
646+
| ProvidedLambdaExpr of ProvidedVar * ProvidedExpr
647+
| ProvidedCallExpr of ProvidedExpr option * ProvidedMethodInfo * ProvidedExpr[]
648+
| ProvidedConstantExpr of obj * ProvidedType
649+
| ProvidedDefaultExpr of ProvidedType
650+
| ProvidedNewTupleExpr of ProvidedExpr[]
651+
| ProvidedTupleGetExpr of ProvidedExpr * int
652+
| ProvidedTypeAsExpr of ProvidedExpr * ProvidedType
653+
| ProvidedTypeTestExpr of ProvidedExpr * ProvidedType
654+
| ProvidedLetExpr of ProvidedVar * ProvidedExpr * ProvidedExpr
655+
| ProvidedVarSetExpr of ProvidedVar * ProvidedExpr
656+
| ProvidedIfThenElseExpr of ProvidedExpr * ProvidedExpr * ProvidedExpr
657+
| ProvidedVarExpr of ProvidedVar
658+
659+
and [<RequireQualifiedAccess; Class; AllowNullLiteral; Sealed>]
660+
ProvidedExpr (x: Quotations.Expr, ctxt) =
636661
member __.Type = x.Type |> ProvidedType.Create ctxt
637662
member __.Handle = x
638663
member __.Context = ctxt
639664
member __.UnderlyingExpressionString = x.ToString()
665+
member __.GetExprType() =
666+
match x with
667+
| Quotations.Patterns.NewObject(ctor, args) ->
668+
Some (ProvidedNewObjectExpr (ProvidedConstructorInfo.Create ctxt ctor, [| for a in args -> ProvidedExpr.Create ctxt a |]))
669+
| Quotations.Patterns.WhileLoop(guardExpr, bodyExpr) ->
670+
Some (ProvidedWhileLoopExpr (ProvidedExpr.Create ctxt guardExpr, ProvidedExpr.Create ctxt bodyExpr))
671+
| Quotations.Patterns.NewDelegate(ty, vs, expr) ->
672+
Some (ProvidedNewDelegateExpr(ProvidedType.Create ctxt ty, ProvidedVar.CreateArray ctxt (List.toArray vs), ProvidedExpr.Create ctxt expr))
673+
| Quotations.Patterns.Call(objOpt, meth, args) ->
674+
Some (ProvidedCallExpr((match objOpt with None -> None | Some obj -> Some (ProvidedExpr.Create ctxt obj)),
675+
ProvidedMethodInfo.Create ctxt meth, [| for a in args -> ProvidedExpr.Create ctxt a |]))
676+
| Quotations.Patterns.DefaultValue ty ->
677+
Some (ProvidedDefaultExpr (ProvidedType.Create ctxt ty))
678+
| Quotations.Patterns.Value(obj, ty) ->
679+
Some (ProvidedConstantExpr (obj, ProvidedType.Create ctxt ty))
680+
| Quotations.Patterns.Coerce(arg, ty) ->
681+
Some (ProvidedTypeAsExpr (ProvidedExpr.Create ctxt arg, ProvidedType.Create ctxt ty))
682+
| Quotations.Patterns.NewTuple args ->
683+
Some (ProvidedNewTupleExpr(ProvidedExpr.CreateArray ctxt (Array.ofList args)))
684+
| Quotations.Patterns.TupleGet(arg, n) ->
685+
Some (ProvidedTupleGetExpr (ProvidedExpr.Create ctxt arg, n))
686+
| Quotations.Patterns.NewArray(ty, args) ->
687+
Some (ProvidedNewArrayExpr(ProvidedType.Create ctxt ty, ProvidedExpr.CreateArray ctxt (Array.ofList args)))
688+
| Quotations.Patterns.Sequential(e1, e2) ->
689+
Some (ProvidedSequentialExpr(ProvidedExpr.Create ctxt e1, ProvidedExpr.Create ctxt e2))
690+
| Quotations.Patterns.Lambda(v, body) ->
691+
Some (ProvidedLambdaExpr (ProvidedVar.Create ctxt v, ProvidedExpr.Create ctxt body))
692+
| Quotations.Patterns.TryFinally(b1, b2) ->
693+
Some (ProvidedTryFinallyExpr (ProvidedExpr.Create ctxt b1, ProvidedExpr.Create ctxt b2))
694+
| Quotations.Patterns.TryWith(b, v1, e1, v2, e2) ->
695+
Some (ProvidedTryWithExpr (ProvidedExpr.Create ctxt b, ProvidedVar.Create ctxt v1, ProvidedExpr.Create ctxt e1, ProvidedVar.Create ctxt v2, ProvidedExpr.Create ctxt e2))
696+
#if PROVIDED_ADDRESS_OF
697+
| Quotations.Patterns.AddressOf e -> Some (ProvidedAddressOfExpr (ProvidedExpr.Create ctxt e))
698+
#endif
699+
| Quotations.Patterns.TypeTest(e, ty) ->
700+
Some (ProvidedTypeTestExpr(ProvidedExpr.Create ctxt e, ProvidedType.Create ctxt ty))
701+
| Quotations.Patterns.Let(v, e, b) ->
702+
Some (ProvidedLetExpr (ProvidedVar.Create ctxt v, ProvidedExpr.Create ctxt e, ProvidedExpr.Create ctxt b))
703+
| Quotations.Patterns.ForIntegerRangeLoop (v, e1, e2, e3) ->
704+
Some (ProvidedForIntegerRangeLoopExpr (ProvidedVar.Create ctxt v, ProvidedExpr.Create ctxt e1, ProvidedExpr.Create ctxt e2, ProvidedExpr.Create ctxt e3))
705+
| Quotations.Patterns.VarSet(v, e) ->
706+
Some (ProvidedVarSetExpr (ProvidedVar.Create ctxt v, ProvidedExpr.Create ctxt e))
707+
| Quotations.Patterns.IfThenElse(g, t, e) ->
708+
Some (ProvidedIfThenElseExpr (ProvidedExpr.Create ctxt g, ProvidedExpr.Create ctxt t, ProvidedExpr.Create ctxt e))
709+
| Quotations.Patterns.Var v ->
710+
Some (ProvidedVarExpr (ProvidedVar.Create ctxt v))
711+
| _ -> None
640712
static member Create ctxt t = match box t with null -> null | _ -> ProvidedExpr (t, ctxt)
641713
static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedExpr.Create ctxt)
642714
override __.Equals y = match y with :? ProvidedExpr as y -> x.Equals y.Handle | _ -> false
643715
override __.GetHashCode() = x.GetHashCode()
644716

645-
[<RequireQualifiedAccess; Class; AllowNullLiteral; Sealed>]
646-
type ProvidedVar (x: Quotations.Var, ctxt) =
717+
and [<RequireQualifiedAccess; Class; AllowNullLiteral; Sealed>]
718+
ProvidedVar (x: Quotations.Var, ctxt) =
647719
member __.Type = x.Type |> ProvidedType.Create ctxt
648720
member __.Name = x.Name
649721
member __.IsMutable = x.IsMutable
650722
member __.Handle = x
651723
member __.Context = ctxt
652724
static member Create ctxt t = match box t with null -> null | _ -> ProvidedVar (t, ctxt)
653-
static member Fresh (nm, ty: ProvidedType) = ProvidedVar.Create ty.Context (new Quotations.Var(nm, ty.Handle))
725+
static member Fresh (nm, ty: ProvidedType) = ProvidedVar.Create ty.Context (Quotations.Var(nm, ty.Handle))
654726
static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedVar.Create ctxt)
655727
override __.Equals y = match y with :? ProvidedVar as y -> x.Equals y.Handle | _ -> false
656728
override __.GetHashCode() = x.GetHashCode()
657729

658-
659-
/// Detect a provided new-object expression
660-
let (|ProvidedNewObjectExpr|_|) (x: ProvidedExpr) =
661-
match x.Handle with
662-
| Quotations.Patterns.NewObject(ctor, args) ->
663-
Some (ProvidedConstructorInfo.Create x.Context ctor, [| for a in args -> ProvidedExpr.Create x.Context a |])
664-
| _ -> None
665-
666-
/// Detect a provided while-loop expression
667-
let (|ProvidedWhileLoopExpr|_|) (x: ProvidedExpr) =
668-
match x.Handle with
669-
| Quotations.Patterns.WhileLoop(guardExpr, bodyExpr) ->
670-
Some (ProvidedExpr.Create x.Context guardExpr, ProvidedExpr.Create x.Context bodyExpr)
671-
| _ -> None
672-
673-
/// Detect a provided new-delegate expression
674-
let (|ProvidedNewDelegateExpr|_|) (x: ProvidedExpr) =
675-
match x.Handle with
676-
| Quotations.Patterns.NewDelegate(ty, vs, expr) ->
677-
Some (ProvidedType.Create x.Context ty, ProvidedVar.CreateArray x.Context (List.toArray vs), ProvidedExpr.Create x.Context expr)
678-
| _ -> None
679-
680-
/// Detect a provided call expression
681-
let (|ProvidedCallExpr|_|) (x: ProvidedExpr) =
682-
match x.Handle with
683-
| Quotations.Patterns.Call(objOpt, meth, args) ->
684-
Some ((match objOpt with None -> None | Some obj -> Some (ProvidedExpr.Create x.Context obj)),
685-
ProvidedMethodInfo.Create x.Context meth,
686-
[| for a in args -> ProvidedExpr.Create x.Context a |])
687-
| _ -> None
688-
689-
/// Detect a provided default-value expression
690-
let (|ProvidedDefaultExpr|_|) (x: ProvidedExpr) =
691-
match x.Handle with
692-
| Quotations.Patterns.DefaultValue ty -> Some (ProvidedType.Create x.Context ty)
693-
| _ -> None
694-
695-
/// Detect a provided constant expression
696-
let (|ProvidedConstantExpr|_|) (x: ProvidedExpr) =
697-
match x.Handle with
698-
| Quotations.Patterns.Value(obj, ty) -> Some (obj, ProvidedType.Create x.Context ty)
699-
| _ -> None
700-
701-
/// Detect a provided type-as expression
702-
let (|ProvidedTypeAsExpr|_|) (x: ProvidedExpr) =
703-
match x.Handle with
704-
| Quotations.Patterns.Coerce(arg, ty) ->
705-
Some (ProvidedExpr.Create x.Context arg, ProvidedType.Create x.Context ty)
706-
| _ -> None
707-
708-
/// Detect a provided new-tuple expression
709-
let (|ProvidedNewTupleExpr|_|) (x: ProvidedExpr) =
710-
match x.Handle with
711-
| Quotations.Patterns.NewTuple args -> Some (ProvidedExpr.CreateArray x.Context (Array.ofList args))
712-
| _ -> None
713-
714-
/// Detect a provided tuple-get expression
715-
let (|ProvidedTupleGetExpr|_|) (x: ProvidedExpr) =
716-
match x.Handle with
717-
| Quotations.Patterns.TupleGet(arg, n) -> Some (ProvidedExpr.Create x.Context arg, n)
718-
| _ -> None
719-
720-
/// Detect a provided new-array expression
721-
let (|ProvidedNewArrayExpr|_|) (x: ProvidedExpr) =
722-
match x.Handle with
723-
| Quotations.Patterns.NewArray(ty, args) ->
724-
Some (ProvidedType.Create x.Context ty, ProvidedExpr.CreateArray x.Context (Array.ofList args))
725-
| _ -> None
726-
727-
/// Detect a provided sequential expression
728-
let (|ProvidedSequentialExpr|_|) (x: ProvidedExpr) =
729-
match x.Handle with
730-
| Quotations.Patterns.Sequential(e1, e2) ->
731-
Some (ProvidedExpr.Create x.Context e1, ProvidedExpr.Create x.Context e2)
732-
| _ -> None
733-
734-
/// Detect a provided lambda expression
735-
let (|ProvidedLambdaExpr|_|) (x: ProvidedExpr) =
736-
match x.Handle with
737-
| Quotations.Patterns.Lambda(v, body) ->
738-
Some (ProvidedVar.Create x.Context v, ProvidedExpr.Create x.Context body)
739-
| _ -> None
740-
741-
/// Detect a provided try/finally expression
742-
let (|ProvidedTryFinallyExpr|_|) (x: ProvidedExpr) =
743-
match x.Handle with
744-
| Quotations.Patterns.TryFinally(b1, b2) ->
745-
Some (ProvidedExpr.Create x.Context b1, ProvidedExpr.Create x.Context b2)
746-
| _ -> None
747-
748-
/// Detect a provided try/with expression
749-
let (|ProvidedTryWithExpr|_|) (x: ProvidedExpr) =
750-
match x.Handle with
751-
| Quotations.Patterns.TryWith(b, v1, e1, v2, e2) ->
752-
Some (ProvidedExpr.Create x.Context b, ProvidedVar.Create x.Context v1, ProvidedExpr.Create x.Context e1,
753-
ProvidedVar.Create x.Context v2, ProvidedExpr.Create x.Context e2)
754-
| _ -> None
755-
756-
#if PROVIDED_ADDRESS_OF
757-
let (|ProvidedAddressOfExpr|_|) (x: ProvidedExpr) =
758-
match x.Handle with
759-
| Quotations.Patterns.AddressOf e -> Some (ProvidedExpr.Create x.Context e)
760-
| _ -> None
761-
#endif
762-
763-
/// Detect a provided type-test expression
764-
let (|ProvidedTypeTestExpr|_|) (x: ProvidedExpr) =
765-
match x.Handle with
766-
| Quotations.Patterns.TypeTest(e, ty) ->
767-
Some (ProvidedExpr.Create x.Context e, ProvidedType.Create x.Context ty)
768-
| _ -> None
769-
770-
/// Detect a provided 'let' expression
771-
let (|ProvidedLetExpr|_|) (x: ProvidedExpr) =
772-
match x.Handle with
773-
| Quotations.Patterns.Let(v, e, b) ->
774-
Some (ProvidedVar.Create x.Context v, ProvidedExpr.Create x.Context e, ProvidedExpr.Create x.Context b)
775-
| _ -> None
776-
777-
778-
/// Detect a provided expression which is a for-loop over integers
779-
let (|ProvidedForIntegerRangeLoopExpr|_|) (x: ProvidedExpr) =
780-
match x.Handle with
781-
| Quotations.Patterns.ForIntegerRangeLoop (v, e1, e2, e3) ->
782-
Some (ProvidedVar.Create x.Context v,
783-
ProvidedExpr.Create x.Context e1,
784-
ProvidedExpr.Create x.Context e2,
785-
ProvidedExpr.Create x.Context e3)
786-
| _ -> None
787-
788-
/// Detect a provided 'set variable' expression
789-
let (|ProvidedVarSetExpr|_|) (x: ProvidedExpr) =
790-
match x.Handle with
791-
| Quotations.Patterns.VarSet(v, e) ->
792-
Some (ProvidedVar.Create x.Context v, ProvidedExpr.Create x.Context e)
793-
| _ -> None
794-
795-
/// Detect a provided 'IfThenElse' expression
796-
let (|ProvidedIfThenElseExpr|_|) (x: ProvidedExpr) =
797-
match x.Handle with
798-
| Quotations.Patterns.IfThenElse(g, t, e) ->
799-
Some (ProvidedExpr.Create x.Context g, ProvidedExpr.Create x.Context t, ProvidedExpr.Create x.Context e)
800-
| _ -> None
801-
802-
/// Detect a provided 'Var' expression
803-
let (|ProvidedVarExpr|_|) (x: ProvidedExpr) =
804-
match x.Handle with
805-
| Quotations.Patterns.Var v -> Some (ProvidedVar.Create x.Context v)
806-
| _ -> None
807-
808730
/// Get the provided invoker expression for a particular use of a method.
809731
let GetInvokerExpression (provider: ITypeProvider, methodBase: ProvidedMethodBase, paramExprs: ProvidedVar[]) =
810732
provider.GetInvokerExpression(methodBase.Handle, [| for p in paramExprs -> Quotations.Expr.Var (p.Handle) |]) |> ProvidedExpr.Create methodBase.Context

src/fsharp/ExtensionTyping.fsi

Lines changed: 30 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -242,86 +242,48 @@ module internal ExtensionTyping =
242242
and [<AllowNullLiteral; Class; Sealed>]
243243
ProvidedConstructorInfo =
244244
inherit ProvidedMethodBase
245+
246+
type ProvidedExprType =
247+
| ProvidedNewArrayExpr of ProvidedType * ProvidedExpr[]
248+
#if PROVIDED_ADDRESS_OF
249+
| ProvidedAddressOfExpr of ProvidedExpr
250+
#endif
251+
| ProvidedNewObjectExpr of ProvidedConstructorInfo * ProvidedExpr[]
252+
| ProvidedWhileLoopExpr of ProvidedExpr * ProvidedExpr
253+
| ProvidedNewDelegateExpr of ProvidedType * ProvidedVar[] * ProvidedExpr
254+
| ProvidedForIntegerRangeLoopExpr of ProvidedVar * ProvidedExpr * ProvidedExpr * ProvidedExpr
255+
| ProvidedSequentialExpr of ProvidedExpr * ProvidedExpr
256+
| ProvidedTryWithExpr of ProvidedExpr * ProvidedVar * ProvidedExpr * ProvidedVar * ProvidedExpr
257+
| ProvidedTryFinallyExpr of ProvidedExpr * ProvidedExpr
258+
| ProvidedLambdaExpr of ProvidedVar * ProvidedExpr
259+
| ProvidedCallExpr of ProvidedExpr option * ProvidedMethodInfo * ProvidedExpr[]
260+
| ProvidedConstantExpr of obj * ProvidedType
261+
| ProvidedDefaultExpr of ProvidedType
262+
| ProvidedNewTupleExpr of ProvidedExpr[]
263+
| ProvidedTupleGetExpr of ProvidedExpr * int
264+
| ProvidedTypeAsExpr of ProvidedExpr * ProvidedType
265+
| ProvidedTypeTestExpr of ProvidedExpr * ProvidedType
266+
| ProvidedLetExpr of ProvidedVar * ProvidedExpr * ProvidedExpr
267+
| ProvidedVarSetExpr of ProvidedVar * ProvidedExpr
268+
| ProvidedIfThenElseExpr of ProvidedExpr * ProvidedExpr * ProvidedExpr
269+
| ProvidedVarExpr of ProvidedVar
245270

246-
[<RequireQualifiedAccess; Class; Sealed; AllowNullLiteral>]
247-
type ProvidedExpr =
271+
and [<RequireQualifiedAccess; Class; Sealed; AllowNullLiteral>]
272+
ProvidedExpr =
248273
member Type : ProvidedType
249274
/// Convert the expression to a string for diagnostics
250275
member UnderlyingExpressionString : string
276+
member GetExprType : unit -> ProvidedExprType option
251277

252-
[<RequireQualifiedAccess; Class; Sealed; AllowNullLiteral>]
253-
type ProvidedVar =
278+
and [<RequireQualifiedAccess; Class; Sealed; AllowNullLiteral>]
279+
ProvidedVar =
254280
member Type : ProvidedType
255281
member Name : string
256282
member IsMutable : bool
257283
static member Fresh : string * ProvidedType -> ProvidedVar
258284
override Equals : obj -> bool
259285
override GetHashCode : unit -> int
260286

261-
/// Detect a provided new-array expression
262-
val (|ProvidedNewArrayExpr|_|) : ProvidedExpr -> (ProvidedType * ProvidedExpr[]) option
263-
264-
#if PROVIDED_ADDRESS_OF
265-
val (|ProvidedAddressOfExpr|_|) : ProvidedExpr -> ProvidedExpr option
266-
#endif
267-
268-
/// Detect a provided new-object expression
269-
val (|ProvidedNewObjectExpr|_|) : ProvidedExpr -> (ProvidedConstructorInfo * ProvidedExpr[]) option
270-
271-
/// Detect a provided while-loop expression
272-
val (|ProvidedWhileLoopExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedExpr) option
273-
274-
/// Detect a provided new-delegate expression
275-
val (|ProvidedNewDelegateExpr|_|) : ProvidedExpr -> (ProvidedType * ProvidedVar[] * ProvidedExpr) option
276-
277-
/// Detect a provided expression which is a for-loop over integers
278-
val (|ProvidedForIntegerRangeLoopExpr|_|) : ProvidedExpr -> (ProvidedVar * ProvidedExpr * ProvidedExpr * ProvidedExpr) option
279-
280-
/// Detect a provided sequential expression
281-
val (|ProvidedSequentialExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedExpr) option
282-
283-
/// Detect a provided try/with expression
284-
val (|ProvidedTryWithExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedVar * ProvidedExpr * ProvidedVar * ProvidedExpr) option
285-
286-
/// Detect a provided try/finally expression
287-
val (|ProvidedTryFinallyExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedExpr) option
288-
289-
/// Detect a provided lambda expression
290-
val (|ProvidedLambdaExpr|_|) : ProvidedExpr -> (ProvidedVar * ProvidedExpr) option
291-
292-
/// Detect a provided call expression
293-
val (|ProvidedCallExpr|_|) : ProvidedExpr -> (ProvidedExpr option * ProvidedMethodInfo * ProvidedExpr[]) option
294-
295-
/// Detect a provided constant expression
296-
val (|ProvidedConstantExpr|_|) : ProvidedExpr -> (obj * ProvidedType) option
297-
298-
/// Detect a provided default-value expression
299-
val (|ProvidedDefaultExpr|_|) : ProvidedExpr -> ProvidedType option
300-
301-
/// Detect a provided new-tuple expression
302-
val (|ProvidedNewTupleExpr|_|) : ProvidedExpr -> ProvidedExpr[] option
303-
304-
/// Detect a provided tuple-get expression
305-
val (|ProvidedTupleGetExpr|_|) : ProvidedExpr -> (ProvidedExpr * int) option
306-
307-
/// Detect a provided type-as expression
308-
val (|ProvidedTypeAsExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedType) option
309-
310-
/// Detect a provided type-test expression
311-
val (|ProvidedTypeTestExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedType) option
312-
313-
/// Detect a provided 'let' expression
314-
val (|ProvidedLetExpr|_|) : ProvidedExpr -> (ProvidedVar * ProvidedExpr * ProvidedExpr) option
315-
316-
/// Detect a provided 'set variable' expression
317-
val (|ProvidedVarSetExpr|_|) : ProvidedExpr -> (ProvidedVar * ProvidedExpr) option
318-
319-
/// Detect a provided 'IfThenElse' expression
320-
val (|ProvidedIfThenElseExpr|_|) : ProvidedExpr -> (ProvidedExpr * ProvidedExpr * ProvidedExpr) option
321-
322-
/// Detect a provided 'Var' expression
323-
val (|ProvidedVarExpr|_|) : ProvidedExpr -> ProvidedVar option
324-
325287
/// Get the provided expression for a particular use of a method.
326288
val GetInvokerExpression : ITypeProvider * ProvidedMethodBase * ProvidedVar[] -> ProvidedExpr
327289

0 commit comments

Comments
 (0)