-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathGenericNotes.txt
109 lines (81 loc) · 2.45 KB
/
GenericNotes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Presolving Base Class with Generic from Parent class
Resolutions
// SomeBase<string> is completely resolved
class SomeClass : SomeBase<string>
// SomeClass<T> is unresolved
// SomeBase<T> is unresolved
class SomeClass<T> : SomeBase<T>
// SomeClass<T> is unresolved
// SomeBase<string, T> is partly resolved
class SomeClass<T> : SomeBase<string, T>
// SomeClass<T> is unresolved
// T SomeField is unresolved
// T SomeMethod() is unresolved
class SomeClass<T>
{
T SomeField;
T SomeMethod();
}
// M SomeMethod<M>() is unresolved
class SomeClass
{
M SomeMethod<M>();
}
// SomeClass<T> is unresolved
// void SomeMethod<M>(T someParameter1, M someParameter2) is unresolved
class SomeClass<T>
{
void SomeMethod<M>(T someParameter1, M someParameter2);
}
// SomeClass<T> is unresolved
// void SomeMethod<M>(T someParameter1, M someParameter2) is unresolved
// T someLocal1 is unresolved
// M someLocal2 is unresolved
class SomeClass<T>
{
void SomeMethod<M>(T someParameter1, M someParameter2)
{
T someLocal1;
M someLocal2;
}
}
// SomeBase<T> is unresolved
// SomeOtherBase<T> is unresolved (recursion)
class SomeBase<T> : SomeOtherBase<T> { }
// SomeClass<T> is unresolved
// SomeBase<T> is unresolved (recursion)
// T SomeField is unresolved
// Dictionary<T, M> SomeMethod<M>(T someParameter1, M someParameter2) is unresolved
// T someLocal1 is unresolved
// M someLocal2 is unresolved
// T[] someArray1 = new T[] is unresolved (array types)
// M[] someArray2 = new M[] is unresolved (array types)
// Dictionary<T, M> someDictionary = new Dictionary<T, M>() is unresolved (recursive, newarr and other instruction targets)
class SomeClass<T> : SomeBase<T>
{
T SomeField;
Dictionary<T, M> SomeMethod<M>(T someParameter1, M someParameter2)
{
T someLocal1;
M someLocal2;
T[] someArray1 = new T[];
M[] someArray2 = new M[];
Dictionary<T, M> someDictionary = new Dictionary<T, M>();
}
}
Cloning (Temporary Generic versions to be Substituted after Resolutions)
Types
Fields
Parameters
Locals
Instructions
Linearized Locations
Substitutions
Types
Base Types (From Parent Types)
Fields (From Parent Types)
Parameters (From Parent Types and Parent Method Types)
Locals (From Parent Types and Parent Method Types)
Instruction Arguments (From Parent Types and Parent Method Types)
Instruction Linearized Locations (From Parent Types and Parent Method Types)
System.Array.Internal_GetGenericEnumerator