|
|
|
@ -676,6 +676,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
@@ -676,6 +676,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
|
|
|
|
|
MakeExactInference(pU.GetTypeArgument(i), pV.GetTypeArgument(i)); |
|
|
|
|
} |
|
|
|
|
Log.Unindent(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// Handle pointer types:
|
|
|
|
|
if (U is PointerType ptrU && V is PointerType ptrV) |
|
|
|
|
{ |
|
|
|
|
MakeExactInference(ptrU.ElementType, ptrV.ElementType); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (U is FunctionPointerType fnPtrU && V is FunctionPointerType fnPtrV) |
|
|
|
|
{ |
|
|
|
|
MakeExactInference(fnPtrU.ReturnType, fnPtrV.ReturnType); |
|
|
|
|
foreach (var (ptU, ptV) in fnPtrU.ParameterTypes.Zip(fnPtrV.ParameterTypes)) |
|
|
|
|
{ |
|
|
|
|
MakeExactInference(ptU, ptV); |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -792,6 +808,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
@@ -792,6 +808,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Log.Unindent(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// Handle pointer types:
|
|
|
|
|
if (U is PointerType ptrU && V is PointerType ptrV) |
|
|
|
|
{ |
|
|
|
|
MakeExactInference(ptrU.ElementType, ptrV.ElementType); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (U is FunctionPointerType fnPtrU && V is FunctionPointerType fnPtrV) |
|
|
|
|
{ |
|
|
|
|
MakeLowerBoundInference(fnPtrU.ReturnType, fnPtrV.ReturnType); |
|
|
|
|
foreach (var (ptU, ptV) in fnPtrU.ParameterTypes.Zip(fnPtrV.ParameterTypes)) |
|
|
|
|
{ |
|
|
|
|
MakeUpperBoundInference(ptU, ptV); |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -897,6 +929,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
@@ -897,6 +929,22 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Log.Unindent(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// Handle pointer types:
|
|
|
|
|
if (U is PointerType ptrU && V is PointerType ptrV) |
|
|
|
|
{ |
|
|
|
|
MakeExactInference(ptrU.ElementType, ptrV.ElementType); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (U is FunctionPointerType fnPtrU && V is FunctionPointerType fnPtrV) |
|
|
|
|
{ |
|
|
|
|
MakeUpperBoundInference(fnPtrU.ReturnType, fnPtrV.ReturnType); |
|
|
|
|
foreach (var (ptU, ptV) in fnPtrU.ParameterTypes.Zip(fnPtrV.ParameterTypes)) |
|
|
|
|
{ |
|
|
|
|
MakeLowerBoundInference(ptU, ptV); |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|