add support for unattached ordering points
[cdsspec-compiler.git] / src / edu / uci / eecs / specExtraction / SpecNaming.java
1 package edu.uci.eecs.specExtraction;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashSet;
6
7 /**
8  * <p>
9  * This class contains most of the constant strings that we will be using
10  * throughout the whole annotation extraction and code generation process.
11  * </p>
12  * 
13  * @author Peizhao Ou
14  * 
15  */
16 public class SpecNaming {
17
18         // Specification annotation naming
19
20         // Global construct
21         public static final String DeclareState = "DeclareState";
22         public static final String InitalState = "Initial";
23         public static final String CopyState = "Copy";
24         public static final String ClearState = "Clear";
25         public static final String FinalState = "Final";
26         public static final String PrintState = "Print";
27         public static final String Commutativity = "Commutativity";
28         
29         // Define construct
30         public static final String Define = "Define";
31
32         // Interface construct
33         public static final String Interface = "Interface";
34         public static final String Transition = "Transition";
35         public static final String PreCondition = "PreCondition";
36         public static final String SideEffect = "SideEffect";
37         public static final String PostCondition = "PostCondition";
38         public static final String PrintValue = "Print";
39
40         public static final String PrintStateType = "PRINT_STATE";
41         public static final String PrintValueType = "PRINT_VALUE";
42         public static final String TransitionType = "TRANSITION";
43         public static final String PreConditionType = "PRE_CONDITION";
44         public static final String SideEffectType = "SIDE_EFFECT";
45         public static final String PostConditionType = "POST_CONDITION";
46
47         // Ordering point construct
48         public static final String OPDefine = "OPDefine";
49         public static final String PotentialOP = "PotentialOP";
50         public static final String OPCheck = "OPCheck";
51         public static final String OPClear = "OPClear";
52         public static final String OPClearDefine = "OPClearDefine";
53         // Entry construct
54         public static final String Entry = "Entry";
55
56         // Generated header file name
57         public static final String CDSSpecGeneratedName = "cdsspec-generated";
58         public static final String CDSSpecGeneratedHeader = "\""
59                         + CDSSpecGeneratedName + ".h\"";
60         // Generated hedaer file comment
61         public static final String CDSSpecGeneratedHeaderComment = "This is a header file auto-generated by CDSSpec compiler; together, CDSSpec\n"
62                         + "compiler should have generated the accompanying implementation file that\n"
63                         + "implements the some functions declared in this file. In order to instrument\n"
64                         + "your benchmark for CDSSpec checker to check, you should include this header\n"
65                         + "file in every file you use an CDSSpec annotation. Note that it should be\n"
66                         + "placed in the end of all other header files. Currently we require a C++\n"
67                         + "compiler that supports C++11.";
68
69         // Generated CPP file name
70         public static final String CDSSpecGeneratedCPP = "cdsspec-generated.cc";
71         // Generated CPP file comment
72         public static final String CDSSpecGeneratedCPPComment = "This is an implementation file auto-generated by CDSSpec compiler to\n"
73                         + "instrument your benchmark for CDSSpec checker to check. Currently we require\n"
74                         + "a C++ compiler that supports C++11.";
75
76         // Pre-included header files
77         public static final HashSet<String> includedHeaders;
78         public static final ArrayList<String> includedHeadersList;
79
80         public static final String ATOMIC = "<atomic>";
81         public static final String THREADS = "<threads.h>";
82         public static final String STDATOMIC = "<stdatomic.h>";
83         public static final String STDLIB = "<stdlib.h>";
84         public static final String STDIO = "<stdio.h>";
85
86         public static final String MODELTYPES = "<modeltypes.h>";
87         public static final String CDSANNOTATE = "<cdsannotate.h>";
88         public static final String MYMEMORY = "\"mymemory.h\"";
89         public static final String MODELASSERT = "\"model-assert.h\"";
90         public static final String LIBRACE = "\"librace.h\"";
91         public static final String SPECANNOTATION = "\"specannotation.h\"";
92         public static final String SPEC_COMMON = "\"spec_common.h\"";
93         public static final String CDSSPEC = "\"cdsspec.h\"";
94         public static final String METHODCALL = "\"methodcall.h\"";
95         
96         // Header files to include in the cdsspec-generated.h
97         public static final String SPECANNOTATION_API = "\"specannotation-api.h\"";
98         
99         // Header files to include in the cdsspec-generated.cc
100         // <cdsannotate.h>
101         // "spec_common.h"
102         // "methodcall.h"
103         // "cdsspec.h"
104         // "specannotation.h"
105
106         static {
107                 // Initialize the header set and list
108                 includedHeaders = new HashSet<String>();
109                 includedHeadersList = new ArrayList<String>();
110
111                 // Add each header to the set
112                 includedHeadersList.add(ATOMIC);
113                 includedHeadersList.add(THREADS);
114                 includedHeadersList.add(STDATOMIC);
115                 includedHeadersList.add(STDLIB);
116                 includedHeadersList.add(STDIO);
117
118                 includedHeadersList.add(MODELTYPES);
119                 includedHeadersList.add(CDSANNOTATE);
120                 includedHeadersList.add(MYMEMORY);
121                 includedHeadersList.add(MODELASSERT);
122                 includedHeadersList.add(LIBRACE);
123                 includedHeadersList.add(SPECANNOTATION);
124                 includedHeadersList.add(SPEC_COMMON);
125                 includedHeadersList.add(METHODCALL);
126                 includedHeadersList.add(CDSSPEC);
127
128                 // Add files to list
129                 for (String header : includedHeadersList) {
130                         includedHeaders.add(header);
131                 }
132         }
133
134         public static boolean isPreIncludedHeader(String header) {
135                 return includedHeaders.contains(header)
136                                 || header.equals(CDSSpecGeneratedHeader);
137         }
138
139         // Some CDSSpec keywords and function names
140         public static final String NewSize = "NEW_SIZE";
141         public static final String New = "NEW";
142         // Some CDSSpec types
143         public static final String CString = "CSTR";
144         public static final String EmptyCString = "_EMPTY";
145         public static final String NullFunc = "NULL_FUNC";
146
147         public static final String StateStruct = "StateStruct";
148         public static final String Method = "Method";
149         public static final String MethodValueField = "value";
150         public static final String CommutativityRule = "CommutativityRule";
151         public static final String StateFunctions = "StateFunctions";
152         public static final String NamedFunction = "NamedFunction";
153
154         public static final String SPEC_ANALYSIS = "SPEC_ANALYSIS";
155         // Spec annotations
156         public static final String AnnoInit = "AnnoInit";
157         public static final String AnnoTypeInit = "INIT";
158         public static final String AnnoInterfaceInfo = "AnnoInterfaceInfo";
159         public static final String CAnnoInterfaceInfo = "CAnnoInterfaceInfo";
160         public static final String SpecAnnotation = "SpecAnnotation";
161
162         // Some CDSSpec state functions
163         public static final String InitialFunc = "_Initial";
164         public static final String CopyFunc = "_Copy";
165         public static final String FinalFunc = "_Final";
166         public static final String PrintStateFunc = "_PrintState";
167
168         // Functions for instrumenting annotation
169         public static final String CreateInitAnnoFunc = "_createInitAnnotation";
170         public static final String CreateInterfaceBeginAnnoFunc = "_createInterfaceBeginAnnotation";
171         public static final String SetInterfaceBeginAnnoValueFunc = "_setInterfaceBeginAnnotationValue";
172         public static final String CreateOPDefineAnnoFunc = "_createOPDefineAnnotation";
173         public static final String CreateOPDefineUnattachedFunc = "_createOPDefineUnattached";
174         public static final String CreateOPClearDefineUnattachedFunc = "_createOPClearDefineUnattached";
175         public static final String CreatePotentialOPAnnoFunc = "_createPotentialOPAnnotation";
176         public static final String CreateOPCheckAnnoFunc = "_createOPCheckAnnotation";
177         public static final String CreateOPClearAnnoFunc = "_createOPClearAnnotation";
178         public static final String CreateOPClearDefineAnnoFunc = "_createOPClearDefineAnnotation";
179
180         // Other CDSSpec functions
181         public static final String AddInterfaceFunctions = "addInterfaceFunctions";
182         public static final String CDSAnnotateFunc = "cdsannotate";
183         public static final String PRINT = "PRINT";
184         public static final String PrintContainer = "printContainer";
185         public static final String PrintMap = "printMap";
186
187         // Special instances
188         public static final String Method1 = "_M";
189         public static final String Method2 = "_exec";
190         public static final String StateInst = "state";
191         public static final String OldStateInst = "OLD";
192         public static final String NewStateInst = "NEW";
193         // Specification types and macros
194         public static final String RET = "RET";
195         public static final String InterfaceValueInst = "__value";
196         
197         // The fake ordering point operation
198         public static final String FakeOP = "_FAKE_OP_";
199         
200         // The wrapper prefix that we want to attach to the function name
201         public static final String WrapperPrefix = "Wrapper";
202
203         public static final String CommutativityRuleInst = "commuteRules";
204         public static final String CommutativityRuleSizeInst = "CommuteRuleSize";
205         public static final String StateFunctionsInst = "stateFuncs";
206         public static final String AnnoInitInst = "init";
207         public static final String AnnoInterfaceInfoInst = "info";
208
209         public static String AppendStr(String original) {
210                 return "_" + original + "_str";
211         }
212
213         public static String CheckCommutativity(int ruleNum) {
214                 return "_checkCommutativity" + ruleNum;
215         }
216
217 }