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

Commit7b73f62

Browse files
TIHanKevinRansom
authored andcommitted
Checking assembly when checking for String.Concat in Optimizer (dotnet#6051)
* Checking assembly when checking for String.Concat in Optimizer* Don't call TypeRef directly as we don't know if it's a nominal type
1 parent609244c commit7b73f62

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

‎src/fsharp/Optimizer.fs‎

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1763,16 +1763,23 @@ let TryDetectQueryQuoteAndRun cenv (expr:Expr) =
17631763
|_->
17641764
//printfn "Not eliminating because no Run found"
17651765
None
1766+
1767+
letIsILMethodRefDeclaringTypeSystemString(ilg:ILGlobals)(mref:ILMethodRef)=
1768+
mref.DeclaringTypeRef.Scope.IsAssemblyRef&&
1769+
mref.DeclaringTypeRef.Scope.AssemblyRef.Name= ilg.typ_String.TypeRef.Scope.AssemblyRef.Name&&
1770+
mref.DeclaringTypeRef.BasicQualifiedName= ilg.typ_String.BasicQualifiedName
17661771

1767-
letIsSystemStringConcatOverload(methRef:ILMethodRef)=
1768-
methRef.Name="Concat"&& methRef.DeclaringTypeRef.FullName="System.String"&&
1769-
methRef.ReturnType.BasicQualifiedName="System.String"&&
1770-
methRef.ArgTypes|> List.forall(fun ilty-> ilty.BasicQualifiedName="System.String")
1771-
1772-
letIsSystemStringConcatArray(methRef:ILMethodRef)=
1773-
methRef.Name="Concat"&& methRef.DeclaringTypeRef.FullName="System.String"&&
1774-
methRef.ReturnType.BasicQualifiedName="System.String"&&
1775-
methRef.ArgTypes.Length=1&& methRef.ArgTypes.Head.BasicQualifiedName="System.String[]"
1772+
letIsILMethodRefSystemStringConcatOverload(ilg:ILGlobals)(mref:ILMethodRef)=
1773+
IsILMethodRefDeclaringTypeSystemString ilg mref&&
1774+
mref.Name="Concat"&&
1775+
mref.ReturnType.BasicQualifiedName= ilg.typ_String.BasicQualifiedName&&
1776+
mref.ArgCount>=2&& mref.ArgCount<=4&& mref.ArgTypes|> List.forall(fun ilty-> ilty.BasicQualifiedName= ilg.typ_String.BasicQualifiedName)
1777+
1778+
letIsILMethodRefSystemStringConcatArray(ilg:ILGlobals)(mref:ILMethodRef)=
1779+
IsILMethodRefDeclaringTypeSystemString ilg mref&&
1780+
mref.Name="Concat"&&
1781+
mref.ReturnType.BasicQualifiedName= ilg.typ_String.BasicQualifiedName&&
1782+
mref.ArgCount=1&& mref.ArgTypes.Head.BasicQualifiedName="System.String[]"
17761783

17771784
//-------------------------------------------------------------------------
17781785
// The traversal
@@ -1887,10 +1894,10 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) =
18871894
andMakeOptimizedSystemStringConcatCall cenv env m args=
18881895
let recoptimizeArg e accArgs=
18891896
match e, accArgswith
1890-
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,methRef,_,_,_),_,[ Expr.Op(TOp.Array,_, args,_)],_),_whenIsSystemStringConcatArray methRef->
1897+
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,mref,_,_,_),_,[ Expr.Op(TOp.Array,_, args,_)],_),_whenIsILMethodRefSystemStringConcatArray cenv.g.ilg mref->
18911898
optimizeArgs args accArgs
18921899

1893-
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,methRef,_,_,_),_, args,_),_whenIsSystemStringConcatOverload methRef->
1900+
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,mref,_,_,_),_, args,_),_whenIsILMethodRefSystemStringConcatOverload cenv.g.ilg mref->
18941901
optimizeArgs args accArgs
18951902

18961903
// Optimize string constants, e.g. "1" + "2" will turn into "12"
@@ -1920,7 +1927,7 @@ and MakeOptimizedSystemStringConcatCall cenv env m args =
19201927
mkStaticCall_String_Concat_Array cenv.g m arg
19211928

19221929
match ewith
1923-
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,methRef,_,_,_)as op, tyargs, args, m)whenIsSystemStringConcatOverload methRef||IsSystemStringConcatArray methRef->
1930+
| Expr.Op(TOp.ILCall(_,_,_,_,_,_,_,mref,_,_,_)as op, tyargs, args, m)whenIsILMethodRefSystemStringConcatOverload cenv.g.ilg mref||IsILMethodRefSystemStringConcatArray cenv.g.ilg mref->
19241931
OptimizeExprOpReductions cenv env(op, tyargs, args, m)
19251932
|_->
19261933
OptimizeExpr cenv env e
@@ -1993,9 +2000,9 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) =
19932000
| TOp.ILAsm([],[ty]),_,[a]when typeEquiv cenv.g(tyOfExpr cenv.g a) ty-> OptimizeExpr cenv env a
19942001

19952002
// Optimize calls when concatenating strings, e.g. "1" + "2" + "3" + "4" .. etc.
1996-
| TOp.ILCall(_,_,_,_,_,_,_,methRef,_,_,_),_,[ Expr.Op(TOp.Array,_, args,_)]whenIsSystemStringConcatArray methRef->
2003+
| TOp.ILCall(_,_,_,_,_,_,_,mref,_,_,_),_,[ Expr.Op(TOp.Array,_, args,_)]whenIsILMethodRefSystemStringConcatArray cenv.g.ilg mref->
19972004
MakeOptimizedSystemStringConcatCall cenv env m args
1998-
| TOp.ILCall(_,_,_,_,_,_,_,methRef,_,_,_),_, argswhenIsSystemStringConcatOverload methRef->
2005+
| TOp.ILCall(_,_,_,_,_,_,_,mref,_,_,_),_, argswhenIsILMethodRefSystemStringConcatOverload cenv.g.ilg mref->
19992006
MakeOptimizedSystemStringConcatCall cenv env m args
20002007

20012008
|_->

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp