Skip to content

Support CallerArgumentExpression (without #line) #17519

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 82 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
9d3917a
Support CallerArgumentExpression
ijklam Jun 11, 2024
b698a3b
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Aug 11, 2024
dec3d3e
fix for fsi
ijklam Aug 11, 2024
e5d7763
revert unnecessary changes
ijklam Aug 11, 2024
5119bb6
Read and store file content before compilation
ijklam Aug 11, 2024
c914672
Change test; Add release note
ijklam Aug 11, 2024
5fe3495
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Aug 11, 2024
536cf34
Add tests
ijklam Aug 11, 2024
b270e16
Merge branch 'SupportCallerArgumentExpression' of https://github.com/…
ijklam Aug 11, 2024
3fc4642
fix build; format
ijklam Aug 11, 2024
550daa4
Support `#line`
ijklam Aug 15, 2024
5cecb20
format
ijklam Aug 15, 2024
1b6cd56
support callee side optional arg
ijklam Aug 16, 2024
08d958b
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Aug 16, 2024
68f2f61
format code
ijklam Aug 16, 2024
ec3b97f
Merge branch 'SupportCallerArgumentExpression' of https://github.com/…
ijklam Aug 16, 2024
7e93270
fix build
ijklam Aug 16, 2024
5790db9
fix test
ijklam Aug 16, 2024
46c4d46
try fix tests
ijklam Aug 25, 2024
8d792fa
fix build
ijklam Aug 25, 2024
65a4acc
test
ijklam Aug 25, 2024
1bdae47
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Sep 26, 2024
9e46116
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Feb 3, 2025
f379b7f
simplify code
ijklam Feb 3, 2025
843c71a
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Feb 3, 2025
6d1a30d
simplify code; fix test
ijklam Feb 4, 2025
5f499a5
fix range
ijklam Feb 4, 2025
470b993
fix tests
ijklam Feb 4, 2025
477ed6e
fix tests
ijklam Feb 4, 2025
6fb6548
fix
ijklam Feb 4, 2025
c8ca45b
test
ijklam Feb 4, 2025
b5f22fb
test
ijklam Feb 4, 2025
271985b
test
ijklam Feb 4, 2025
31e7bb2
fix tests
ijklam Feb 26, 2025
d47ee7e
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Feb 26, 2025
424b83c
update baselines
ijklam Feb 26, 2025
77697cd
fix tests
ijklam Feb 26, 2025
1e43eff
test
ijklam Feb 26, 2025
2d38b2a
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Mar 11, 2025
52a0fc0
fix named arguments didn't trigger the feature
ijklam Mar 11, 2025
24a9494
baseline
ijklam Mar 11, 2025
935af15
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Mar 11, 2025
31125f5
add new tests; improve err msg
ijklam Mar 13, 2025
49c46b1
adjust code; add and update tests
ijklam Mar 13, 2025
983f180
baseline
ijklam Mar 13, 2025
cf2085b
fix test
ijklam Mar 14, 2025
52a4d53
fmt
ijklam Mar 14, 2025
6e6dd39
Support for user defined CallerArgumentExpressionAttribute
ijklam Mar 15, 2025
9c5d917
replace the way get substring text
ijklam Mar 15, 2025
795c64a
test
ijklam Mar 15, 2025
98d8708
fix build
ijklam Mar 15, 2025
d68a6f7
fix test
ijklam Mar 15, 2025
9ac37e6
test
ijklam Mar 15, 2025
2cfba8d
Merge branch 'main' into SupportCallerArgumentExpression
psfinaki Mar 17, 2025
262ed24
revert the modify to `range`
ijklam Mar 17, 2025
9c24123
fix test and add new test
ijklam Mar 17, 2025
081a36b
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Mar 17, 2025
1999506
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Mar 20, 2025
2e7121d
add a new test
ijklam Mar 20, 2025
fb8a3d0
add test
ijklam Mar 20, 2025
70f5630
change the position to get code file content
ijklam Mar 21, 2025
1cc4395
refractor
ijklam Mar 21, 2025
3c1deb4
new test
ijklam Mar 21, 2025
a5a4b8b
refactor
ijklam Mar 25, 2025
5cba8ca
fmt
ijklam Mar 25, 2025
0b02f01
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Mar 25, 2025
1258816
baseline; fix test
ijklam Mar 25, 2025
95a4930
fix test
ijklam Mar 25, 2025
c3baed5
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Mar 25, 2025
5e1e27c
try fix cannot determine in C# method with non BCL attr
ijklam Mar 25, 2025
199d4b5
refactor
ijklam Mar 26, 2025
5e3e596
fix test
ijklam Mar 26, 2025
607f2d1
ilverify
ijklam Mar 26, 2025
1194359
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Mar 26, 2025
f792bfa
Merge remote-tracking branch 'upstream/main' into SupportCallerArgume…
ijklam Apr 14, 2025
5aff4b2
fix build
ijklam Apr 14, 2025
173d748
Change the approach to implement the feature
ijklam Apr 19, 2025
499bb33
Merge branch 'main' into SupportCallerArgumentExpression
ijklam Apr 19, 2025
a215efa
change the way to pass the source text in
ijklam Apr 19, 2025
10b37d1
ilverify
ijklam Apr 19, 2025
f0da587
fmt
ijklam Apr 19, 2025
6d76a8e
make `cenv.Create(..., sourceText)` param not optional
ijklam Apr 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/release-notes/.FSharp.Compiler.Service/9.0.300.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
* Add a switch to determine whether to generate a default implementation body for overridden method when completing. [PR #18341](https://github.com/dotnet/fsharp/pull/18341)
* Use a more accurate range for CE Combine methods. [PR #18394](https://github.com/dotnet/fsharp/pull/18394)

* Support `CallerArgumentExpression` ([Language Suggestion #966](https://github.com/fsharp/fslang-suggestions/issues/966), [PR #17519](https://github.com/dotnet/fsharp/pull/17519))

### Changed
* FSharpCheckFileResults.ProjectContext.ProjectOptions will not be available when using the experimental Transparent Compiler feature. ([PR #18205](https://github.com/dotnet/fsharp/pull/18205))
Expand Down
1 change: 1 addition & 0 deletions docs/release-notes/.Language/preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* Added type conversions cache, only enabled for compiler runs ([PR#17668](https://github.com/dotnet/fsharp/pull/17668))
* Support ValueOption + Struct attribute as optional parameter for methods ([Language suggestion #1136](https://github.com/fsharp/fslang-suggestions/issues/1136), [PR #18098](https://github.com/dotnet/fsharp/pull/18098))
* Warn when `unit` is passed to an `obj`-typed argument ([PR #18330](https://github.com/dotnet/fsharp/pull/18330))
* Support `CallerArgumentExpression` ([Language Suggestion #966](https://github.com/fsharp/fslang-suggestions/issues/966), [PR #17519](https://github.com/dotnet/fsharp/pull/17519))

### Fixed

Expand Down
6 changes: 5 additions & 1 deletion src/Compiler/Checking/CheckBasics.fs
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,8 @@ type TcFileState =

// forward call
TcComputationExpression: TcFileState -> TcEnv -> OverallTy -> UnscopedTyparEnv -> range * Expr * TType * SynExpr -> Expr * UnscopedTyparEnv

SourceText: ISourceText option
}

/// Create a new compilation environment
Expand All @@ -344,7 +346,8 @@ type TcFileState =
tcSimplePats,
tcSequenceExpressionEntry,
tcArrayOrListSequenceExpression,
tcComputationExpression) =
tcComputationExpression,
sourceText: ISourceText option) =

let niceNameGen = NiceNameGenerator()
let infoReader = InfoReader(g, amap)
Expand Down Expand Up @@ -376,6 +379,7 @@ type TcFileState =
TcSequenceExpressionEntry = tcSequenceExpressionEntry
TcArrayOrListComputedExpression = tcArrayOrListSequenceExpression
TcComputationExpression = tcComputationExpression
SourceText = sourceText
}

override _.ToString() = "<cenv>"
6 changes: 5 additions & 1 deletion src/Compiler/Checking/CheckBasics.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,9 @@ type TcFileState =
-> UnscopedTyparEnv
-> range * Expr * TType * SynExpr
-> Expr * UnscopedTyparEnv

/// The impl file content. Used to support `CallerArgumentExpression` feature.
SourceText: ISourceText option
}

static member Create:
Expand Down Expand Up @@ -356,5 +359,6 @@ type TcFileState =
-> OverallTy
-> UnscopedTyparEnv
-> range * Expr * TType * SynExpr
-> Expr * UnscopedTyparEnv) ->
-> Expr * UnscopedTyparEnv) *
sourceText: ISourceText option ->
TcFileState
9 changes: 6 additions & 3 deletions src/Compiler/Checking/CheckDeclarations.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5751,7 +5751,8 @@ let CheckOneImplFile
env,
rootSigOpt: ModuleOrNamespaceType option,
synImplFile,
diagnosticOptions) =
diagnosticOptions,
sourceText: ISourceText option) =

let (ParsedImplFileInput (fileName, isScript, qualNameOfFile, scopedPragmas, _, implFileFrags, isLastCompiland, _, _)) = synImplFile
let infoReader = InfoReader(g, amap)
Expand All @@ -5774,7 +5775,8 @@ let CheckOneImplFile
tcSimplePats=TcSimplePats,
tcSequenceExpressionEntry=TcSequenceExpressionEntry,
tcArrayOrListSequenceExpression=TcArrayOrListComputedExpression,
tcComputationExpression=TcComputationExpression)
tcComputationExpression=TcComputationExpression,
sourceText=sourceText)

let envinner, moduleTyAcc = MakeInitialEnv env

Expand Down Expand Up @@ -5919,7 +5921,8 @@ let CheckOneSigFile (g, amap, thisCcu, checkForErrors, conditionalDefines, tcSin
tcSimplePats=TcSimplePats,
tcSequenceExpressionEntry=TcSequenceExpressionEntry,
tcArrayOrListSequenceExpression=TcArrayOrListComputedExpression,
tcComputationExpression=TcComputationExpression)
tcComputationExpression=TcComputationExpression,
sourceText=None)

let envinner, moduleTyAcc = MakeInitialEnv tcEnv
let m = sigFile.QualifiedName.Range
Expand Down
3 changes: 2 additions & 1 deletion src/Compiler/Checking/CheckDeclarations.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ val CheckOneImplFile:
TcEnv *
ModuleOrNamespaceType option *
ParsedImplFileInput *
FSharpDiagnosticOptions ->
FSharpDiagnosticOptions *
ISourceText option ->
Cancellable<TopAttribs * CheckedImplFile * TcEnv * bool>

val CheckOneSigFile:
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/Checking/Expressions/CheckExpressions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10282,7 +10282,7 @@ and TcMethodApplication

let objArgPreBinder, objArgs, allArgsPreBinders, allArgs, allArgsCoerced, optArgPreBinder, paramArrayPreBinders, outArgExprs, outArgTmpBinds =
let tcVal = LightweightTcValForUsingInBuildMethodCall g
AdjustCallerArgs tcVal TcFieldInit env.eCallerMemberName cenv.infoReader ad finalCalledMeth objArgs lambdaVars mItem mMethExpr
AdjustCallerArgs tcVal TcFieldInit env.eCallerMemberName cenv.SourceText cenv.infoReader ad finalCalledMeth objArgs lambdaVars mItem mMethExpr

// Record the resolution of the named argument for the Language Service
allArgs |> List.iter (fun assignedArg ->
Expand Down
59 changes: 44 additions & 15 deletions src/Compiler/Checking/MethodCalls.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1443,9 +1443,22 @@ let AdjustCallerArgExpr tcVal (g: TcGlobals) amap infoReader ad isOutArg calledA
/// matter what order they are applied in as long as they are all composed together.
let emptyPreBinder (e: Expr) = e

/// Try to pick the code text of an argument with the given parameter name from a list of assigned arguments.
let tryPickArgumentCodeText (sourceText: ISourceText option) assignedArgs paramName =
assignedArgs
|> List.tryPick (fun { CalledArg=called; CallerArg=caller } ->
match called.NameOpt with
| Some x when x.idText = paramName ->
sourceText
|> Option.bind (fun sourceText ->
let code = sourceText.GetSubTextFromRange caller.Range
if System.String.IsNullOrEmpty code then None
else Some code)
| _ -> None)

/// Get the expression that must be inserted on the caller side for a CallerSide optional arg,
/// i.e. one where there is no corresponding caller arg.
let rec GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g (calledArg: CalledArg) currCalledArgTy currDfltVal eCallerMemberName mMethExpr =
let rec GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g (calledArg: CalledArg) currCalledArgTy currDfltVal eCallerMemberName sourceText mMethExpr assignedArgs =
match currDfltVal with
| MissingValue ->
// Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr.
Expand All @@ -1462,7 +1475,7 @@ let rec GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g (calledArg: C
let ctorArgs = [Expr.Const (tcFieldInit mMethExpr fieldInit, mMethExpr, inst)]
emptyPreBinder, Expr.Op (TOp.ILCall (false, false, true, true, NormalValUse, false, false, ctor, [inst], [], [currCalledArgTy]), [], ctorArgs, mMethExpr)
| ByrefTy g inst ->
GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg inst (PassByRef(inst, currDfltVal)) eCallerMemberName mMethExpr
GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg inst (PassByRef(inst, currDfltVal)) eCallerMemberName sourceText mMethExpr assignedArgs
| _ ->
match calledArg.CallerInfo, eCallerMemberName with
| CallerLineNumber, _ when typeEquiv g currCalledArgTy g.int_ty ->
Expand All @@ -1472,6 +1485,14 @@ let rec GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g (calledArg: C
emptyPreBinder, Expr.Const (Const.String fileName, mMethExpr, currCalledArgTy)
| CallerMemberName, Some callerName when (typeEquiv g currCalledArgTy g.string_ty) ->
emptyPreBinder, Expr.Const (Const.String callerName, mMethExpr, currCalledArgTy)

| CallerArgumentExpression param, _ when g.langVersion.SupportsFeature LanguageFeature.SupportCallerArgumentExpression && typeEquiv g currCalledArgTy g.string_ty ->
let stringConst =
match tryPickArgumentCodeText sourceText assignedArgs param with
| Some code -> Const.String code
| None -> tcFieldInit mMethExpr fieldInit
emptyPreBinder, Expr.Const (stringConst, mMethExpr, currCalledArgTy)

| _ ->
emptyPreBinder, Expr.Const (tcFieldInit mMethExpr fieldInit, mMethExpr, currCalledArgTy)

Expand All @@ -1495,13 +1516,13 @@ let rec GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g (calledArg: C

| PassByRef (ty, dfltVal2) ->
let v, _ = mkCompGenLocal mMethExpr "defaultByrefArg" ty
let wrapper2, rhs = GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg currCalledArgTy dfltVal2 eCallerMemberName mMethExpr
let wrapper2, rhs = GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg currCalledArgTy dfltVal2 eCallerMemberName sourceText mMethExpr assignedArgs
(wrapper2 >> mkCompGenLet mMethExpr v rhs), mkValAddr mMethExpr false (mkLocalValRef v)

/// Get the expression that must be inserted on the caller side for a CalleeSide optional arg where
/// no caller argument has been provided. Normally this is 'None', however CallerMemberName and friends
/// can be used with 'CalleeSide' optional arguments
let GetDefaultExpressionForCalleeSideOptionalArg g (calledArg: CalledArg) eCallerMemberName (mMethExpr: range) =
let GetDefaultExpressionForCalleeSideOptionalArg g (calledArg: CalledArg) eCallerMemberName sourceText (mMethExpr: range) assignedArgs =
let calledArgTy = calledArg.CalledArgumentType
let calledNonOptTy = tryDestOptionalTy g calledArgTy

Expand All @@ -1516,31 +1537,39 @@ let GetDefaultExpressionForCalleeSideOptionalArg g (calledArg: CalledArg) eCalle
| CallerMemberName, Some(callerName) when typeEquiv g calledNonOptTy g.string_ty ->
let memberNameExpr = Expr.Const (Const.String callerName, mMethExpr, calledNonOptTy)
mkOptionalSome g calledArgTy calledNonOptTy memberNameExpr mMethExpr

| CallerArgumentExpression param, _ when g.langVersion.SupportsFeature LanguageFeature.SupportCallerArgumentExpression && typeEquiv g calledNonOptTy g.string_ty ->
match tryPickArgumentCodeText sourceText assignedArgs param with
| Some code ->
let expr = Expr.Const(Const.String code, mMethExpr, calledNonOptTy)
mkOptionalSome g calledArgTy calledNonOptTy expr mMethExpr
| None -> mkOptionalNone g calledArgTy calledNonOptTy mMethExpr

| _ ->
mkOptionalNone g calledArgTy calledNonOptTy mMethExpr


/// Get the expression that must be inserted on the caller side for an optional arg where
/// no caller argument has been provided.
let GetDefaultExpressionForOptionalArg tcFieldInit g (calledArg: CalledArg) eCallerMemberName mItem (mMethExpr: range) =
let GetDefaultExpressionForOptionalArg tcFieldInit g (calledArg: CalledArg) eCallerMemberName sourceText mItem (mMethExpr: range) assignedArgs =
let calledArgTy = calledArg.CalledArgumentType
let preBinder, expr =
match calledArg.OptArgInfo with
| NotOptional ->
error(InternalError("Unexpected NotOptional", mItem))

| CallerSide dfltVal ->
GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg calledArgTy dfltVal eCallerMemberName mMethExpr
GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg calledArgTy dfltVal eCallerMemberName sourceText mMethExpr assignedArgs

| CalleeSide ->
emptyPreBinder, GetDefaultExpressionForCalleeSideOptionalArg g calledArg eCallerMemberName mMethExpr
emptyPreBinder, GetDefaultExpressionForCalleeSideOptionalArg g calledArg eCallerMemberName sourceText mMethExpr assignedArgs

// Combine the variable allocators (if any)
let callerArg = CallerArg(calledArgTy, mMethExpr, false, expr)
preBinder, { NamedArgIdOpt = None; CalledArg = calledArg; CallerArg = callerArg }

// Adjust all the optional arguments, filling in values for defaults,
let AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName (infoReader: InfoReader) ad (assignedArg: AssignedCalledArg<_>) =
let AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName sourceText (infoReader: InfoReader) ad (assignedArg: AssignedCalledArg<_>) =
let g = infoReader.g
let amap = infoReader.amap
let callerArg = assignedArg.CallerArg
Expand Down Expand Up @@ -1587,7 +1616,7 @@ let AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName (infoReader:
mkOptionToNullable g m (destOptionTy g callerArgTy) callerArgExpr
else
// CSharpMethod(?x=b) when 'b' has optional type and 'x' has non-nullable type --> CSharpMethod(x=Option.defaultValue DEFAULT v)
let _wrapper, defaultExpr = GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg calledArgTy dfltVal eCallerMemberName m
let _wrapper, defaultExpr = GetDefaultExpressionForCallerSideOptionalArg tcFieldInit g calledArg calledArgTy dfltVal eCallerMemberName sourceText m [assignedArg]
let ty = destOptionTy g callerArgTy
mkOptionDefaultValue g m ty defaultExpr callerArgExpr
else
Expand Down Expand Up @@ -1637,7 +1666,7 @@ let AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName (infoReader:
// - VB also allows you to pass intrinsic values as optional values to parameters
// typed as Object. What we do in this case is we box the intrinsic value."
//
let AdjustCallerArgsForOptionals tcVal tcFieldInit eCallerMemberName (infoReader: InfoReader) ad (calledMeth: CalledMeth<_>) mItem mMethExpr =
let AdjustCallerArgsForOptionals tcVal tcFieldInit eCallerMemberName (infoReader: InfoReader) ad (calledMeth: CalledMeth<_>) mItem mMethExpr sourceText =
let g = infoReader.g

let assignedNamedArgs = calledMeth.ArgSets |> List.collect (fun argSet -> argSet.AssignedNamedArgs)
Expand All @@ -1651,11 +1680,11 @@ let AdjustCallerArgsForOptionals tcVal tcFieldInit eCallerMemberName (infoReader
// i.e. there is no corresponding caller arg.
let optArgs, optArgPreBinder =
(emptyPreBinder, calledMeth.UnnamedCalledOptArgs) ||> List.mapFold (fun preBinder calledArg ->
let preBinder2, arg = GetDefaultExpressionForOptionalArg tcFieldInit g calledArg eCallerMemberName mItem mMethExpr
let preBinder2, arg = GetDefaultExpressionForOptionalArg tcFieldInit g calledArg eCallerMemberName sourceText mItem mMethExpr (assignedNamedArgs @ unnamedArgs)
arg, (preBinder >> preBinder2))

let adjustedNormalUnnamedArgs = List.map (AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName infoReader ad) unnamedArgs
let adjustedAssignedNamedArgs = List.map (AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName infoReader ad) assignedNamedArgs
let adjustedNormalUnnamedArgs = List.map (AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName sourceText infoReader ad) unnamedArgs
let adjustedAssignedNamedArgs = List.map (AdjustCallerArgForOptional tcVal tcFieldInit eCallerMemberName sourceText infoReader ad) assignedNamedArgs

optArgs, optArgPreBinder, adjustedNormalUnnamedArgs, adjustedAssignedNamedArgs

Expand Down Expand Up @@ -1703,7 +1732,7 @@ let AdjustParamArrayCallerArgs tcVal g amap infoReader ad (calledMeth: CalledMet
/// Build the argument list for a method call. Adjust for param array, optional arguments, byref arguments and coercions.
/// For example, if you pass an F# reference cell to a byref then we must get the address of the
/// contents of the ref. Likewise lots of adjustments are made for optional arguments etc.
let AdjustCallerArgs tcVal tcFieldInit eCallerMemberName (infoReader: InfoReader) ad (calledMeth: CalledMeth<_>) objArgs lambdaVars mItem mMethExpr =
let AdjustCallerArgs tcVal tcFieldInit eCallerMemberName sourceText (infoReader: InfoReader) ad (calledMeth: CalledMeth<_>) objArgs lambdaVars mItem mMethExpr =
let g = infoReader.g
let amap = infoReader.amap
let calledMethInfo = calledMeth.Method
Expand All @@ -1725,7 +1754,7 @@ let AdjustCallerArgs tcVal tcFieldInit eCallerMemberName (infoReader: InfoReader
AdjustParamArrayCallerArgs tcVal g amap infoReader ad calledMeth mMethExpr

let optArgs, optArgPreBinder, adjustedNormalUnnamedArgs, adjustedFinalAssignedNamedArgs =
AdjustCallerArgsForOptionals tcVal tcFieldInit eCallerMemberName infoReader ad calledMeth mItem mMethExpr
AdjustCallerArgsForOptionals tcVal tcFieldInit eCallerMemberName infoReader ad calledMeth mItem mMethExpr sourceText

let outArgs, outArgExprs, outArgTmpBinds =
AdjustOutCallerArgs g calledMeth mMethExpr
Expand Down
1 change: 1 addition & 0 deletions src/Compiler/Checking/MethodCalls.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ val AdjustCallerArgs:
tcVal: (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) ->
tcFieldInit: (range -> AbstractIL.IL.ILFieldInit -> Const) ->
eCallerMemberName: string option ->
sourceText: ISourceText option ->
infoReader: InfoReader ->
ad: AccessorDomain ->
calledMeth: CalledMeth<Expr> ->
Expand Down
Loading