X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=src%2Fedu%2Fuci%2Feecs%2FspecCompiler%2FcodeGenerator%2FCodeVariables.java;h=47c2e9c3cfbffec404a443200a3f506e8a1d4927;hp=e7aff534043e7e1b263c1d612cb3875919d9a0e5;hb=0332e0e5575b7d717bccad0b53f7a4b87c1ca969;hpb=b5590a7174ba510c646b9033c1df4951f9a1efae diff --git a/src/edu/uci/eecs/specCompiler/codeGenerator/CodeVariables.java b/src/edu/uci/eecs/specCompiler/codeGenerator/CodeVariables.java index e7aff53..47c2e9c 100644 --- a/src/edu/uci/eecs/specCompiler/codeGenerator/CodeVariables.java +++ b/src/edu/uci/eecs/specCompiler/codeGenerator/CodeVariables.java @@ -28,8 +28,8 @@ public class CodeVariables { public static final String HEADER_THREADS = ""; public static final String HEADER_STDINT = ""; public static final String HEADER_MODELMEMORY = ""; - public static final String ThreadIDType = "thrd_t"; - public static final String GET_THREAD_ID = "thrd_current"; + public static final String HEADER_MODELTYPES = ""; + public static final String ThreadIDType = "thread_id_t"; public static final String BOOLEAN = "bool"; public static final String UINT64 = "uint64_t"; @@ -80,12 +80,12 @@ public class CodeVariables { public static final String SPEC_TAG_CURRENT = "current"; public static final String SPEC_TAG_NEXT = "next"; - // Macro public static final String MACRO_ID = "__ID__"; public static final String MACRO_COND = "__COND_SAT__"; public static final String MACRO_RETURN = "__RET__"; public static final String MACRO_ATOMIC_RETURN = "__ATOMIC_RET__"; + public static final String MACRO_THREAD_ID = "__TID__"; public static void printCode(ArrayList code) { for (int i = 0; i < code.size(); i++) { @@ -179,10 +179,31 @@ public class CodeVariables { return code; } - private static ArrayList DEFINE_ID_FUNC(String interfaceName, - String idCode) { + private static ArrayList DEFINE_ID_FUNC( + InterfaceConstruct construct, FunctionHeader header) { + String interfaceName = construct.name; ArrayList code = new ArrayList(); - code.add("inline static " + IDType + " " + interfaceName + "_id() {"); + String idCode = construct.idCode; + code.add("inline static " + IDType + " " + interfaceName + "_id(" + + "void *info, " + ThreadIDType + " " + MACRO_THREAD_ID + ") {"); + + // Read info struct + if (!header.returnType.equals("void") || header.args.size() != 0) { + String infoStructType = interfaceName + "_info", infoStructName = "theInfo"; + code.add(DECLARE_DEFINE(infoStructType + "*", infoStructName, + BRACE(infoStructType + "*") + "info")); + if (!header.returnType.equals("void")) { + code.add((DECLARE_DEFINE(header.returnType, MACRO_RETURN, + GET_FIELD_BY_PTR(infoStructName, MACRO_RETURN)))); + } + for (int i = 0; i < header.args.size(); i++) { + String type = header.args.get(i).type, var = header.args.get(i).name; + code.add((DECLARE_DEFINE(type, var, + GET_FIELD_BY_PTR(infoStructName, var)))); + } + code.add(""); + } + if (!idCode.equals("")) { code.add(DECLARE_DEFINE(IDType, MACRO_ID, idCode)); } else { @@ -198,8 +219,8 @@ public class CodeVariables { String interfaceName = construct.name; ArrayList code = new ArrayList(); code.add("inline static bool " + interfaceName - + "_check_action(void *info, " + IDType + " " + MACRO_ID - + ") {"); + + "_check_action(void *info, " + IDType + " " + MACRO_ID + ", " + + ThreadIDType + " " + MACRO_THREAD_ID + ") {"); code.add(DECLARE("bool", "check_passed")); // Read info struct if (!header.returnType.equals("void") || header.args.size() != 0) { @@ -256,10 +277,11 @@ public class CodeVariables { headers.add(HEADER_STDLIB); headers.add(HEADER_STDINT); headers.add(HEADER_MODELMEMORY); + headers.add(HEADER_MODELTYPES); headers.add(HEADER_SPEC_LIB); headers.add(HEADER_STDINT); headers.add(HEADER_CDSANNOTATE); -// headers.add(HEADER_COMMON); + // headers.add(HEADER_COMMON); headers.add(HEADER_SPECANNOTATION); return headers; } @@ -303,7 +325,6 @@ public class CodeVariables { ArrayList newCode = new ArrayList(); HashSet allHeaders = getAllHeaders(semantics); - SequentialDefineSubConstruct code = construct.code; // User-defined structs first newCode.add(COMMENT("All other user-defined structs")); @@ -347,7 +368,7 @@ public class CodeVariables { // Define ID function newCode.add(COMMENT("ID function of interface: " + interfaceName)); - newCode.addAll(DEFINE_ID_FUNC(interfaceName, iConstruct.idCode)); + newCode.addAll(DEFINE_ID_FUNC(iConstruct, funcHeader)); newCode.add(COMMENT("End of ID function: " + interfaceName)); newCode.add(""); @@ -512,23 +533,25 @@ public class CodeVariables { } // Only generate the declaration of the wrapper, don't do any renaming -// public static ArrayList generateInterfaceWrapperDeclaration( -// SemanticsChecker semantics, InterfaceConstruct construct) { -// ArrayList newCode = new ArrayList(); -// FunctionHeader header = getFunctionHeader(semantics, construct); -// newCode.add(COMMENT("Declaration of the wrapper")); -// String templateStr = header.getTemplateFullStr(); -// newCode.add(templateStr); -// newCode.add(header.getFuncStr() + ";"); -// newCode.add(""); -// -// return newCode; -// } - - public static ArrayList generateInterfaceWrapperDeclaration(SemanticsChecker semantics, InterfaceConstruct construct) { + // public static ArrayList generateInterfaceWrapperDeclaration( + // SemanticsChecker semantics, InterfaceConstruct construct) { + // ArrayList newCode = new ArrayList(); + // FunctionHeader header = getFunctionHeader(semantics, construct); + // newCode.add(COMMENT("Declaration of the wrapper")); + // String templateStr = header.getTemplateFullStr(); + // newCode.add(templateStr); + // newCode.add(header.getFuncStr() + ";"); + // newCode.add(""); + // + // return newCode; + // } + + public static ArrayList generateInterfaceWrapperDeclaration( + SemanticsChecker semantics, InterfaceConstruct construct) { FunctionHeader header = getFunctionHeader(semantics, construct); ArrayList declaration = new ArrayList(); - declaration.add(header.getRenamedHeader(SPEC_INTERFACE_WRAPPER).getDeclaration() + ";"); + declaration.add(header.getRenamedHeader(SPEC_INTERFACE_WRAPPER) + .getDeclaration() + ";"); return declaration; } @@ -551,6 +574,7 @@ public class CodeVariables { newCode.add(STRUCT_NEW_DECLARE_DEFINE(ANNO_INTERFACE_BEGIN, "interface_begin")); newCode.add(ASSIGN_TO_PTR(structName, "interface_num", interfaceNum)); + String anno = "annotation_interface_begin"; newCode.add(STRUCT_NEW_DECLARE_DEFINE(SPEC_ANNOTATION, anno)); newCode.add(ASSIGN_TO_PTR(anno, "type", SPEC_ANNO_TYPE_INTERFACE_BEGIN));