-
Notifications
You must be signed in to change notification settings - Fork 4
/
StaticAnalysis.cs
91 lines (82 loc) · 3.33 KB
/
StaticAnalysis.cs
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
#pragma warning disable 1591
using System;
namespace JSIL.Meta {
/// <summary>
/// If applied to a field, specifies that you wish for JSIL to treat the specified field as if it is immutable.
/// Struct copies will not be generated for the annotated field or any of its members.
/// If applied to a class/struct, the class/struct and all its fields are treated as if they are immutable.
/// </summary>
[AttributeUsage(
AttributeTargets.Field | AttributeTargets.Class | AttributeTargets.Struct
)]
public class JSImmutable : Attribute {
}
/// <summary>
/// Specifies that this method should be treated as if it is pure when optimizing javascript.
/// </summary>
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property
)]
public class JSIsPure : Attribute {
}
/// <summary>
/// Specifies that this method's return value does not need to be copied if it is a struct.
/// </summary>
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property
)]
public class JSResultIsNew : Attribute {
}
/// <summary>
/// Provides a list of the names of the arguments mutated by this method for the purposes of javascript optimization.
/// </summary>
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property
)]
public class JSMutatedArguments : Attribute {
public JSMutatedArguments (params string[] argumentNames) {
}
}
/// <summary>
/// Provides a list of the names of the arguments that escape from this method for the purposes of javascript optimization.
/// </summary>
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property
)]
public class JSEscapingArguments : Attribute {
public JSEscapingArguments (params string[] argumentNames) {
}
}
/// <summary>
/// Tells the static analyzer to treat calls to the Dispose method on this type as pure and subject to optimization.
/// </summary>
[AttributeUsage(
AttributeTargets.Class | AttributeTargets.Struct
)]
public class JSPureDispose : Attribute {
}
/// <summary>
/// Tells the static analyzer that this class represents an array enumerator, and provides the names of the array,
/// index and length members so that uses of the enumerator can be replaced with a for-loop or while-loop.
/// </summary>
[AttributeUsage(
AttributeTargets.Class | AttributeTargets.Struct
)]
public class JSIsArrayEnumerator : Attribute {
public JSIsArrayEnumerator (string arrayMember, string indexMember, string lengthMember) {
}
}
/// <summary>
/// Tells the static analyzer that the enumerator returned by this method represents an underlying array
/// of elements stored in class pointed to by the method's this-reference.
/// This enables the static analyzer to entirely remove the call to this method and replace it with
/// direct access to the array.
/// </summary>
[AttributeUsage(
AttributeTargets.Method
)]
public class JSUnderlyingArray : Attribute {
public JSUnderlyingArray (string arrayMember, string countMember) {
}
}
}