lots of changes
[cdsspec-compiler.git] / src / edu / uci / eecs / specCompiler / codeGenerator / CodeGenerator.java
index 3569e2011abe88c7ef908d8d4eebf6f2eb13ecbf..399c036b15661ab3876d27ccb405f1383dd662de 100644 (file)
@@ -18,9 +18,7 @@ import edu.uci.eecs.specCompiler.specExtraction.GlobalConstruct;
 import edu.uci.eecs.specCompiler.specExtraction.InterfaceConstruct;
 import edu.uci.eecs.specCompiler.specExtraction.PotentialCPDefineConstruct;
 import edu.uci.eecs.specCompiler.specExtraction.SequentialDefineSubConstruct;
-import edu.uci.eecs.specCompiler.specExtraction.SpecConstruct;
 import edu.uci.eecs.specCompiler.specExtraction.SpecExtractor;
-import edu.uci.eecs.specCompiler.specExtraction.SpecNotMatchException;
 
 /**
  * <p>
@@ -52,11 +50,7 @@ public class CodeGenerator {
 
                _extractor = new SpecExtractor();
 
-               try {
-                       _extractor.extract(srcFiles);
-               } catch (SpecNotMatchException e1) {
-                       e1.printStackTrace();
-               }
+               _extractor.extract(srcFiles);
 
                _semantics = new SemanticsChecker(_extractor.getConstructs());
                try {
@@ -96,8 +90,7 @@ public class CodeGenerator {
         * "@Interface" define
         * </p>
         */
-       private void globalConstruct2Code(SpecConstruct inst) {
-               GlobalConstruct construct = (GlobalConstruct) inst.construct;
+       private void globalConstruct2Code(GlobalConstruct construct) {
                ArrayList<String> newCode = CodeVariables.generateGlobalVarDeclaration(
                                _semantics, construct);
                // Record the global content array to generate the new file
@@ -105,11 +98,10 @@ public class CodeGenerator {
        }
 
        // Mainly rename and wrap the interface
-       private void interface2Code(SpecConstruct inst)
+       private void interface2Code(InterfaceConstruct construct)
                        throws InterfaceWrongFormatException {
-               int lineNum = inst.endLineNum + 1;
-               InterfaceConstruct construct = (InterfaceConstruct) inst.construct;
-               
+               int lineNum = construct.begin + 1;
+
                // Rename the interface name
                File file = inst.file;
                String funcDecl = inst.interfaceDeclBody;
@@ -125,7 +117,8 @@ public class CodeGenerator {
                }
 
                // Generate new wrapper
-               ArrayList<String> newCode = CodeVariables.generateInterfaceWrapper(_semantics, inst);
+               ArrayList<String> newCode = CodeVariables.generateInterfaceWrapper(
+                               _semantics, inst);
                // Add it to the codeAdditions
                CodeAddition addition = new CodeAddition(lineNum, newCode);
                if (!codeAdditions.containsKey(inst.file)) {
@@ -135,7 +128,7 @@ public class CodeGenerator {
        }
 
        // Returns the function name that has been renamed and replace the old line
-       private String renameInterface(SpecConstruct inst)
+       private String renameInterface(Construct inst)
                        throws InterfaceWrongFormatException {
                String funcDecl = inst.interfaceDeclBody;
                ArrayList<String> content = contents.get(inst.file);
@@ -149,65 +142,60 @@ public class CodeGenerator {
                }
                IDExtractor idExtractor = new IDExtractor(funcDecl, beginIdx);
                String funcName = idExtractor.getPrevID();
-               int idBeginIdx = idExtractor.getIDBeginIdx(),
-                               idEndIdx = idExtractor.getIDEndIdx(),
-                               idLineBeginIdx = idExtractor.lineBeginIdxOfID(),
-                               idLineEndIdx = idExtractor.lineEndIdxOfID();
+               int idBeginIdx = idExtractor.getIDBeginIdx(), idEndIdx = idExtractor
+                               .getIDEndIdx(), idLineBeginIdx = idExtractor.lineBeginIdxOfID(), idLineEndIdx = idExtractor
+                               .lineEndIdxOfID();
                String newLine = funcDecl.substring(idLineBeginIdx, idBeginIdx)
                                + CodeVariables.SPEC_INTERFACE_WRAPPER + funcName
                                + funcDecl.substring(idEndIdx + 1, idLineEndIdx + 1);
-               
+
                int lineNumOfID = idExtractor.lineNumOfID();
                // Be careful: lineNum - 1 -> index of content array
                content.set(inst.endLineNum + lineNumOfID, newLine);
                return funcName;
        }
 
-       private void potentialCP2Code(SpecConstruct inst) {
-               int lineNum = inst.endLineNum + 1;
-               GlobalConstruct construct = (GlobalConstruct) inst.construct;
+       private void potentialCPDefine2Code(PotentialCPDefineConstruct construct) {
+               int lineNum = construct.beginLineNum;
                ArrayList<String> newCode = new ArrayList<String>();
 
                CodeAddition addition = new CodeAddition(lineNum, newCode);
-               if (!codeAdditions.containsKey(inst.file)) {
-                       codeAdditions.put(inst.file, new ArrayList<CodeAddition>());
+               if (!codeAdditions.containsKey(construct.file)) {
+                       codeAdditions.put(construct.file, new ArrayList<CodeAddition>());
                }
-               codeAdditions.get(inst.file).add(addition);
+               codeAdditions.get(construct.file).add(addition);
        }
 
-       private void CPDefine2Code(SpecConstruct inst) {
-               int lineNum = inst.endLineNum + 1;
-               GlobalConstruct construct = (GlobalConstruct) inst.construct;
+       private void CPDefine2Code(CPDefineConstruct construct) {
+               int lineNum = construct.beginLineNum;
                ArrayList<String> newCode = new ArrayList<String>();
 
                CodeAddition addition = new CodeAddition(lineNum, newCode);
-               if (!codeAdditions.containsKey(inst.file)) {
-                       codeAdditions.put(inst.file, new ArrayList<CodeAddition>());
+               if (!codeAdditions.containsKey(construct.file)) {
+                       codeAdditions.put(construct.file, new ArrayList<CodeAddition>());
                }
-               codeAdditions.get(inst.file).add(addition);
+               codeAdditions.get(construct.file).add(addition);
        }
 
-       private void CPDefineCheck2Code(SpecConstruct inst) {
-               int lineNum = inst.endLineNum + 1;
-               GlobalConstruct construct = (GlobalConstruct) inst.construct;
+       private void CPDefineCheck2Code(CPDefineCheckConstruct construct) {
+               int lineNum = construct.beginLineNum;
                ArrayList<String> newCode = new ArrayList<String>();
 
                CodeAddition addition = new CodeAddition(lineNum, newCode);
-               if (!codeAdditions.containsKey(inst.file)) {
-                       codeAdditions.put(inst.file, new ArrayList<CodeAddition>());
+               if (!codeAdditions.containsKey(construct.file)) {
+                       codeAdditions.put(construct.file, new ArrayList<CodeAddition>());
                }
-               codeAdditions.get(inst.file).add(addition);
+               codeAdditions.get(construct.file).add(addition);
        }
 
        public void generateCode() {
                for (int i = 0; i < _semantics.constructs.size(); i++) {
-                       SpecConstruct inst = _semantics.constructs.get(i);
-                       Construct construct = inst.construct;
+                       Construct construct = _semantics.constructs.get(i);
                        if (construct instanceof GlobalConstruct) {
-                               globalConstruct2Code(inst);
+                               globalConstruct2Code((GlobalConstruct) construct);
                        } else if (construct instanceof InterfaceConstruct) {
                                try {
-                                       interface2Code(inst);
+                                       interface2Code((InterfaceConstruct) construct);
                                } catch (InterfaceWrongFormatException e) {
                                        e.printStackTrace();
                                }