提交 29281b99 编写于 作者: M Marek Safar

Keep imported indexer parameters (they can contain non-inflated type parameters)

上级 76368b52
......@@ -377,8 +377,6 @@ namespace Mono.CSharp
//
public PropertySpec CreateProperty (PropertyInfo pi, TypeSpec declaringType, MethodSpec get, MethodSpec set)
{
var definition = new ImportedMemberDefinition (pi);
Modifiers mod = 0;
AParametersCollection param = null;
TypeSpec type = null;
......@@ -472,11 +470,11 @@ namespace Mono.CSharp
}
if (is_valid_property)
spec = new IndexerSpec (declaringType, definition, type, param, pi, mod);
spec = new IndexerSpec (declaringType, new ImportedIndexerDefinition (pi, param), type, param, pi, mod);
}
if (spec == null)
spec = new PropertySpec (MemberKind.Property, declaringType, definition, type, pi, mod);
spec = new PropertySpec (MemberKind.Property, declaringType, new ImportedMemberDefinition (pi), type, pi, mod);
if (!is_valid_property) {
spec.IsNotRealProperty = true;
......@@ -1042,6 +1040,33 @@ namespace Mono.CSharp
#endregion
}
class ImportedIndexerDefinition : ImportedMemberDefinition, IParametersMember
{
readonly AParametersCollection parameters;
public ImportedIndexerDefinition (PropertyInfo provider, AParametersCollection parameters)
: base (provider)
{
this.parameters = parameters;
}
#region Properties
public AParametersCollection Parameters {
get {
return parameters;
}
}
public TypeSpec MemberType {
get {
throw new NotImplementedException ();
}
}
#endregion
}
class ImportedGenericMethodDefinition : ImportedMethodDefinition, IGenericMethodDefinition
{
TypeParameterSpec[] tparams;
......
// Compiler options: -t:library
public class A<T>
{
public int this [T arg] {
get {
return 1;
}
}
public int this [string arg] {
get {
return 2;
}
}
}
// Compiler options: -r:gtest-165-lib.dll
class C
{
public static int Main ()
{
var a = new A<string>();
if (a ["s"] != 2)
return 1;
return 0;
}
}
\ No newline at end of file
......@@ -4367,6 +4367,16 @@
</method>
</type>
</test>
<test name="gtest-165.cs">
<type name="C">
<method name="Int32 Main()">
<size>27</size>
</method>
<method name="Void .ctor()">
<size>7</size>
</method>
</type>
</test>
<test name="gtest-166.cs">
<type name="C">
<method name="Void .ctor()">
......@@ -41572,7 +41582,7 @@
<test name="test-789.cs">
<type name="Program">
<method name="Void Main()">
<size>50</size>
<size>76</size>
</method>
<method name="Void &lt;Main&gt;m__0()">
<size>7</size>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册