1 package edu.uci.eecs.specExtraction;
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashSet;
9 * This class contains most of the constant strings that we will be using
10 * throughout the whole annotation extraction and code generation process.
16 public class SpecNaming {
18 // Specification annotation naming
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";
30 public static final String Define = "Define";
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";
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";
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";
54 public static final String Entry = "Entry";
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.";
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.";
76 // Pre-included header files
77 public static final HashSet<String> includedHeaders;
78 public static final ArrayList<String> includedHeadersList;
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>";
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\"";
96 // Header files to include in the cdsspec-generated.h
97 public static final String SPECANNOTATION_API = "\"specannotation-api.h\"";
99 // Header files to include in the cdsspec-generated.cc
104 // "specannotation.h"
107 // Initialize the header set and list
108 includedHeaders = new HashSet<String>();
109 includedHeadersList = new ArrayList<String>();
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);
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);
129 for (String header : includedHeadersList) {
130 includedHeaders.add(header);
134 public static boolean isPreIncludedHeader(String header) {
135 return includedHeaders.contains(header)
136 || header.equals(CDSSpecGeneratedHeader);
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";
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";
154 public static final String SPEC_ANALYSIS = "SPEC_ANALYSIS";
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";
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";
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 CreatePotentialOPAnnoFunc = "_createPotentialOPAnnotation";
174 public static final String CreateOPCheckAnnoFunc = "_createOPCheckAnnotation";
175 public static final String CreateOPClearAnnoFunc = "_createOPClearAnnotation";
176 public static final String CreateOPClearDefineAnnoFunc = "_createOPClearDefineAnnotation";
178 // Other CDSSpec functions
179 public static final String AddInterfaceFunctions = "addInterfaceFunctions";
180 public static final String CDSAnnotateFunc = "cdsannotate";
181 public static final String PRINT = "PRINT";
182 public static final String PrintContainer = "printContainer";
183 public static final String PrintMap = "printMap";
186 public static final String Method1 = "_M";
187 public static final String Method2 = "_exec";
188 public static final String StateInst = "state";
189 public static final String OldStateInst = "OLD";
190 public static final String NewStateInst = "NEW";
191 // Specification types and macros
192 public static final String RET = "RET";
193 public static final String InterfaceValueInst = "__value";
195 // The wrapper prefix that we want to attach to the function name
196 public static final String WrapperPrefix = "Wrapper";
198 public static final String CommutativityRuleInst = "commuteRules";
199 public static final String CommutativityRuleSizeInst = "CommuteRuleSize";
200 public static final String StateFunctionsInst = "stateFuncs";
201 public static final String AnnoInitInst = "init";
202 public static final String AnnoInterfaceInfoInst = "info";
204 public static String AppendStr(String original) {
205 return "_" + original + "_str";
208 public static String CheckCommutativity(int ruleNum) {
209 return "_checkCommutativity" + ruleNum;