Skip to content

Commit f5e0f60

Browse files
Tidy
1 parent cc89eca commit f5e0f60

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

src/Compiler/Checking/CheckExpressions.fs

+27-22
Original file line numberDiff line numberDiff line change
@@ -6666,6 +6666,9 @@ and TcIndexingThen cenv env overallTy mWholeExpr mDot tpenv setInfo synLeftExprO
66666666
/// The `GetSlice` method name.
66676667
let GetSlice = "GetSlice"
66686668

6669+
/// The `SetSlice` method name.
6670+
let SetSlice = "SetSlice"
6671+
66696672
/// The `Slice` method name.
66706673
let Slice = "Slice"
66716674

@@ -6735,35 +6738,35 @@ and TcIndexingThen cenv env overallTy mWholeExpr mDot tpenv setInfo synLeftExprO
67356738

67366739
let parenthesize synExpr = SynExpr.Paren (synExpr, range0, None, idxRange)
67376740

6738-
let tupleIfMultiple expandedIndexArgs =
6739-
match expandedIndexArgs with
6740-
| [arg] -> arg
6741-
| args -> SynExpr.Tuple (false, args, [], idxRange)
6741+
let tupleIfMultiple decodedIndexArgs expandedIndexArgs =
6742+
match decodedIndexArgs, expandedIndexArgs with
6743+
| [IndexArgItem _], [arg] -> arg
6744+
| _, args -> SynExpr.Tuple (false, args, [], idxRange)
67426745

67436746
/// expr1[expr2]
6744-
let mkDelayedIndexedGet indexer =
6747+
let mkDelayedIndexedGet indexer indexArgs =
67456748
[ DelayedDotLookup([ident(indexer, mWholeExpr)], mWholeExpr)
6746-
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple expandedIndexArgs), mWholeExpr) ]
6749+
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple indexArgs expandedIndexArgs), mWholeExpr) ]
67476750

67486751
/// expr1[expr2] <- expr3
6749-
let mkDelayedIndexedSet indexer setArg mOfLeftOfSet =
6752+
let mkDelayedIndexedSet indexer indexArgs setArg mOfLeftOfSet =
67506753
[ DelayedDotLookup([ident(indexer, mOfLeftOfSet)], mOfLeftOfSet)
6751-
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple expandedIndexArgs), mOfLeftOfSet)
6754+
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple indexArgs expandedIndexArgs), mOfLeftOfSet)
67526755
MakeDelayedSet(setArg, mWholeExpr) ]
67536756

67546757
/// expr1[expr2..]
67556758
/// expr1[..expr2]
67566759
/// expr1[expr2..expr3]
6757-
let mkDelayedGetSlice indexer =
6760+
let mkDelayedGetSlice indexer indexArgs =
67586761
[ DelayedDotLookup([ident(indexer, mWholeExpr)], mWholeExpr)
6759-
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (SynExpr.Tuple (false, expandedIndexArgs, [], idxRange)), mWholeExpr) ]
6762+
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple indexArgs expandedIndexArgs), mWholeExpr) ]
67606763

67616764
/// expr1[expr2..] <- expr3
67626765
/// expr1[..expr2] <- expr3
67636766
/// expr1[expr2..expr3] <- expr3
6764-
let mkDelayedSetSlice setArg mOfLeftOfSet =
6765-
[ DelayedDotLookup([ident("SetSlice", mOfLeftOfSet)], mOfLeftOfSet)
6766-
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (SynExpr.Tuple (false, expandedIndexArgs @ [setArg], [], idxRange)), mOfLeftOfSet) ]
6767+
let mkDelayedSetSlice indexArgs setArg mOfLeftOfSet =
6768+
[ DelayedDotLookup([ident(SetSlice, mOfLeftOfSet)], mOfLeftOfSet)
6769+
DelayedApp(ExprAtomicFlag.Atomic, true, synLeftExprOpt, parenthesize (tupleIfMultiple indexArgs (expandedIndexArgs @ [setArg])), mOfLeftOfSet) ]
67676770

67686771
/// Match if we can generate a call to a `Slice` method.
67696772
let (|Sliceable|_|) ((indexArgs, setInfo), exprTy) =
@@ -6774,9 +6777,9 @@ and TcIndexingThen cenv env overallTy mWholeExpr mDot tpenv setInfo synLeftExprO
67746777

67756778
/// Match if the given expression is or is equivalent to System.Int32,
67766779
/// ignoring units of measure if present.
6777-
let (|Int32|_|) expr =
6778-
let expr, tpenv = TcExpr cenv (MustEqual (NewInferenceType g)) env tpenv expr
6779-
if typeEquivAux EraseMeasures g (tyOfExpr g expr) g.int32_ty then Some (Int32 (expr, tpenv))
6780+
let (|Int32|_|) synExpr =
6781+
let expr, ty, tpenv = TcExprOfUnknownType cenv env tpenv synExpr
6782+
if typeEquivAux EraseMeasures g ty g.int32_ty then Some (Int32 (expr, tpenv))
67806783
else None
67816784

67826785
match indexArgs with
@@ -6963,36 +6966,38 @@ and TcIndexingThen cenv env overallTy mWholeExpr mDot tpenv setInfo synLeftExprO
69636966
let propagateThenTcDelayed tpenv expr exprTy delayed =
69646967
PropagateThenTcDelayed cenv overallTy env tpenv mDot (MakeApplicableExprNoFlex cenv expr) exprTy ExprAtomicFlag.Atomic delayed
69656968

6966-
match (DecodeIndexArgs cenv indexArgs, setInfo), exprTy with
6969+
let decodedIndexArgs = DecodeIndexArgs cenv indexArgs
6970+
6971+
match (decodedIndexArgs, setInfo), exprTy with
69676972
// Look for FSharp.Core array and string indexing/slicing helpers.
69686973
| (_, Array) & (ArrayIndexerOrSlicer (path, meth, args), _)
69696974
| (_, String) & (StringIndexerOrSlicer (path, meth, args), _) -> tcArrayOrStringIndexing (path, meth, args)
69706975

69716976
// Look for an indexer property or method, or delay lookup while assuming `Item`.
69726977
| (Indexing, Getting), Indexable indexer
69736978
| (Indexing, Getting), (Array | Nominal) & PossiblyIndexable indexer ->
6974-
propagateThenTcDelayed tpenv expr exprTy (mkDelayedIndexedGet indexer @ delayed)
6979+
propagateThenTcDelayed tpenv expr exprTy (mkDelayedIndexedGet indexer decodedIndexArgs @ delayed)
69756980

69766981
// Look for `GetSlice`.
69776982
| (Slicing, Getting), Nominal & GetSliceable slicer ->
6978-
propagateThenTcDelayed tpenv expr exprTy (mkDelayedGetSlice slicer @ delayed)
6983+
propagateThenTcDelayed tpenv expr exprTy (mkDelayedGetSlice slicer decodedIndexArgs @ delayed)
69796984

69806985
// In the absence of `GetSlice`, look for `Slice`.
69816986
| ((Slicing, Getting), Nominal) & Sliceable (tpenv, expr, exprTy) ->
69826987
propagateThenTcDelayed tpenv expr exprTy delayed
69836988

69846989
// In the immediate absence of either, delay lookup while assuming `GetSlice`.
69856990
| (Slicing, Getting), PossiblyGetSliceable slicer ->
6986-
propagateThenTcDelayed tpenv expr exprTy (mkDelayedGetSlice slicer @ delayed)
6991+
propagateThenTcDelayed tpenv expr exprTy (mkDelayedGetSlice slicer decodedIndexArgs @ delayed)
69876992

69886993
// Look for an indexer property or method, or delay lookup while assuming `Item`.
69896994
| (Indexing, Setting (setArg, mOfLeftOfSet)), Indexable indexer
69906995
| (Indexing, Setting (setArg, mOfLeftOfSet)), (Array | Nominal) & PossiblyIndexable indexer ->
6991-
propagateThenTcDelayed tpenv expr exprTy (mkDelayedIndexedSet indexer setArg mOfLeftOfSet @ delayed)
6996+
propagateThenTcDelayed tpenv expr exprTy (mkDelayedIndexedSet indexer decodedIndexArgs setArg mOfLeftOfSet @ delayed)
69926997

69936998
// Delay lookup of `SetSlice`.
69946999
| (Slicing, Setting (setArg, mOfLeftOfSet)), (Array | Nominal) ->
6995-
propagateThenTcDelayed tpenv expr exprTy (mkDelayedSetSlice setArg mOfLeftOfSet @ delayed)
7000+
propagateThenTcDelayed tpenv expr exprTy (mkDelayedSetSlice decodedIndexArgs setArg mOfLeftOfSet @ delayed)
69967001

69977002
| _ ->
69987003
// deprecated constrained lookup

0 commit comments

Comments
 (0)