Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit87d53f2

Browse files
forkiKevinRansom
authored andcommitted
Simplify TypeChecker for constants (#3123)
1 parent2fc46fb commit87d53f2

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

‎src/fsharp/TypeChecker.fs‎

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6699,29 +6699,33 @@ and TcConstExpr cenv overallTy env m tpenv c =
66996699

67006700
| SynConst.UserNum (s,suffix) ->
67016701
let expr =
6702-
let modName =("NumericLiteral" + suffix)
6702+
let modName = "NumericLiteral" + suffix
67036703
let ad = env.eAccessRights
67046704
match ResolveLongIndentAsModuleOrNamespace ResultCollectionSettings.AtMostOneResult cenv.amap m OpenQualified env.eNameResEnv ad [ident (modName,m)] with
67056705
| Result []
67066706
| Exception _ -> error(Error(FSComp.SR.tcNumericLiteralRequiresModule(modName),m))
67076707
| Result ((_,mref,_) :: _) ->
67086708
let expr =
67096709
try
6710-
let i32 =int32 s
6711-
if i32 = 0 then SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromZero",SynExpr.Const(SynConst.Unit,m),m)
6712-
elif i32 = 1 then SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromOne",SynExpr.Const(SynConst.Unit,m),m)
6713-
else SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt32",SynExpr.Const(SynConst.Int32 i32,m),m)
6710+
matchint32 swith
6711+
| 0 -> SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromZero",SynExpr.Const(SynConst.Unit,m),m)
6712+
| 1 -> SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromOne",SynExpr.Const(SynConst.Unit,m),m)
6713+
| i32 -> SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt32",SynExpr.Const(SynConst.Int32 i32,m),m)
67146714
with _ ->
6715-
try
6716-
let i64 = int64 s
6717-
SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt64",SynExpr.Const(SynConst.Int64 i64,m),m)
6718-
with _ ->
6719-
SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString",SynExpr.Const(SynConst.String (s,m),m),m)
6720-
let ccu = ccuOfTyconRef mref
6721-
if Option.isSome ccu && ccuEq ccu.Value cenv.g.fslibCcu && suffix = "I" then
6722-
SynExpr.Typed(expr,SynType.LongIdent(LongIdentWithDots(pathToSynLid m ["System";"Numerics";"BigInteger"],[])),m)
6723-
else
6715+
try
6716+
let i64 = int64 s
6717+
SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt64",SynExpr.Const(SynConst.Int64 i64,m),m)
6718+
with _ ->
6719+
SynExpr.App(ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString",SynExpr.Const(SynConst.String (s,m),m),m)
6720+
6721+
if suffix <> "I" then
67246722
expr
6723+
else
6724+
match ccuOfTyconRef mref with
6725+
| Some ccu when ccuEq ccu cenv.g.fslibCcu ->
6726+
SynExpr.Typed(expr,SynType.LongIdent(LongIdentWithDots(pathToSynLid m ["System";"Numerics";"BigInteger"],[])),m)
6727+
| _ ->
6728+
expr
67256729

67266730
TcExpr cenv overallTy env tpenv expr
67276731

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp