+ // __COND_SAT__
+ newCode.add(CodeVariables.SPEC_HASHTABLE + "<" + CodeVariables.BOOLEAN
+ + "> " + CodeVariables.SPEC_CONDITION + ";");
+ // __ID__
+ newCode.add(CodeVariables.SPEC_HASHTABLE + "<" + CodeVariables.SPEC_TAG
+ + "> " + CodeVariables.SPEC_ID + ";");
+
+ // DefineVars
+ for (String interfaceName : _semantics.interfaceName2Construct.keySet()) {
+ InterfaceConstruct iConstruct = (InterfaceConstruct) _semantics.interfaceName2Construct
+ .get(interfaceName).construct;
+ ArrayList<DefineVar> defineVars = iConstruct.action.defineVars;
+ for (int i = 0; i < defineVars.size(); i++) {
+ DefineVar var = defineVars.get(i);
+ newCode.add(CodeVariables.SPEC_HASHTABLE + "<" + var.varType
+ + "> " + var.getNewVarName() + ";");
+ }
+ }
+
+ // Enum of all interface
+ String enumDefinition = "enum " + CodeVariables.SPEC_INTERFACE_ENUM
+ + " {";
+ Iterator<String> iter = _semantics.interfaceName2Construct.keySet()
+ .iterator();
+ String interfaceName;
+ if (iter.hasNext()) {
+ interfaceName = iter.next();
+ enumDefinition = enumDefinition + "_" + interfaceName + "_";
+ }
+ while (iter.hasNext()) {
+ interfaceName = iter.next();
+ enumDefinition = enumDefinition + ", _" + interfaceName + "_";
+ }
+ enumDefinition = enumDefinition + "};";
+ newCode.add(enumDefinition);
+
+ // __interface
+ newCode.add(CodeVariables.SPEC_HASHTABLE + "<enum "
+ + CodeVariables.SPEC_INTERFACE_ENUM + "> "
+ + CodeVariables.SPEC_INTERFACE + ";");
+
+ // Generate constructor (the place to initialize everything!)
+ newCode.add("\n");
+ newCode.add(CodeVariables.SPEC_CLASS + "() {");
+
+ breakCodeLines(newCode, globalCode.initVar);
+ // __COND_SAT__
+ newCode.add(CodeVariables.SPEC_CONDITION + " = "
+ + CodeVariables.SPEC_HASHTABLE + "<" + CodeVariables.BOOLEAN
+ + ">();");
+ // __ID__
+ newCode.add(CodeVariables.SPEC_ID + " = "
+ + CodeVariables.SPEC_HASHTABLE + "<" + CodeVariables.SPEC_TAG
+ + ">();");
+ // __interface
+ newCode.add(CodeVariables.SPEC_INTERFACE + " = "
+ + CodeVariables.SPEC_HASHTABLE + "<enum "
+ + CodeVariables.SPEC_INTERFACE_ENUM + ">();");
+ // FIXME: Pass the happens-before relationship check here
+ newCode.add("}");
+
+ // Generate the sequential functions
+ breakCodeLines(newCode, globalCode.defineFunc);
+