1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | |
---|
4 | namespace Microsoft.Cci { |
---|
5 | |
---|
6 | /// <summary> |
---|
7 | /// A range of CLR IL operations that comprise a lexical scope, specified as an IL offset and a length. |
---|
8 | /// </summary> |
---|
9 | public interface ILocalScope { |
---|
10 | /// <summary> |
---|
11 | /// The offset of the first operation in the scope. |
---|
12 | /// </summary> |
---|
13 | uint Offset { get; } |
---|
14 | |
---|
15 | /// <summary> |
---|
16 | /// The length of the scope. Offset+Length equals the offset of the first operation outside the scope, or equals the method body length. |
---|
17 | /// </summary> |
---|
18 | uint Length { get; } |
---|
19 | } |
---|
20 | |
---|
21 | /// <summary> |
---|
22 | /// A description of the lexical scope in which a namespace type has been nested. This scope is tied to a particular |
---|
23 | /// method body, so that partial types can be accommodated. |
---|
24 | /// </summary> |
---|
25 | public interface INamespaceScope { |
---|
26 | |
---|
27 | /// <summary> |
---|
28 | /// Zero or more used namespaces. These correspond to using clauses in C#. |
---|
29 | /// </summary> |
---|
30 | IEnumerable<IUsedNamespace> UsedNamespaces { get; } |
---|
31 | |
---|
32 | } |
---|
33 | |
---|
34 | |
---|
35 | /// <summary> |
---|
36 | /// A namespace that is used (imported) inside a namespace scope. |
---|
37 | /// </summary> |
---|
38 | public interface IUsedNamespace { |
---|
39 | /// <summary> |
---|
40 | /// An alias for a namespace. For example the "x" of "using x = y.z;" in C#. Empty if no alias is present. |
---|
41 | /// </summary> |
---|
42 | IName Alias { get; } |
---|
43 | |
---|
44 | /// <summary> |
---|
45 | /// The name of a namepace that has been aliased. For example the "y.z" of "using x = y.z;" or "using y.z" in C#. |
---|
46 | /// </summary> |
---|
47 | IName NamespaceName { get; } |
---|
48 | } |
---|
49 | |
---|
50 | /// <summary> |
---|
51 | /// The name of an entity. Typically name instances come from a common pool. Within the pool no two distinct instances will have the same Value or UniqueKey. |
---|
52 | /// </summary> |
---|
53 | public interface IName { |
---|
54 | /// <summary> |
---|
55 | /// An integer that is unique within the pool from which the name instance has been allocated. Useful as a hashtable key. |
---|
56 | /// </summary> |
---|
57 | int UniqueKey { |
---|
58 | get; |
---|
59 | //^ ensures result > 0; |
---|
60 | } |
---|
61 | |
---|
62 | /// <summary> |
---|
63 | /// An integer that is unique within the pool from which the name instance has been allocated. Useful as a hashtable key. |
---|
64 | /// All name instances in the pool that have the same string value when ignoring the case of the characters in the string |
---|
65 | /// will have the same key value. |
---|
66 | /// </summary> |
---|
67 | int UniqueKeyIgnoringCase { |
---|
68 | get; |
---|
69 | //^ ensures result > 0; |
---|
70 | } |
---|
71 | |
---|
72 | /// <summary> |
---|
73 | /// The string value corresponding to this name. |
---|
74 | /// </summary> |
---|
75 | string Value { get; } |
---|
76 | } |
---|
77 | } |
---|