Changeset 14219


Ignore:
Timestamp:
Nov 28, 2019 10:29:23 PM (7 days ago)
Author:
Christian Andersson
Message:

More cleanup of the C-code generation after review comments, ticket:5882

Location:
branches/dev-cw-2719/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-cw-2719/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGen.jrag

    r14218 r14219  
    280280
    281281    eq FVariable.name_C()           = isForIndex() ?
    282                                         C_LOOP_INDEX + "_r1[" + myCodeGenContext().myForLoopDepth() + "]" :
     282                                        C_LOOP_INDEX + "_r1[" + myFVForLoopDepth() + "]" :
    283283                                        name_C("");
    284284    eq FStringVariable.name_C()     = name_C("_s_" + variabilityCausality_C());
  • branches/dev-cw-2719/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenAlgorithms.jrag

    r14218 r14219  
    298298    @Override
    299299    public void FForStmt.prettyPrint_C(CodePrinter p, CodeStream str, String indent) {
    300         this.myCodeGenContext().incrementForLoopDepth();
    301         getIndex().getFVariable().flushCache(); //Needs to be flushed due to that otherwise the specific naming for this loop won't work.
    302         p.printPreSteps(getIndex(), str, indent);
    303         getIndex().printForIndexInit_C(p, str, indent);
     300        p.printPreSteps(getIndex(), str, indent);
     301        getIndex().printForIndexInit_C(p, str, indent, myForLoopDepth());
    304302        str.print(indent);
    305303        str.print("for (");
    306         p.print(getIndex(), str, indent);
     304        getIndex().printForIndex_C(p, str, indent, myForLoopDepth());
    307305        str.print(") {\n");
    308         getIndex().printForIndexNext_C(p, str, p.indent(indent));
     306        getIndex().printForIndexNext_C(p, str, p.indent(indent), myForLoopDepth());
    309307        p.print(getForStmts(), str, p.indent(indent));
    310308        str.print(indent);
    311309        str.print("}\n");
    312310        p.printPostSteps(getIndex(), str, indent);
    313         this.myCodeGenContext().decrementForLoopDepth();
    314     }
    315 
    316     public void FForIndex.printForIndexInit_C(CodePrinter p, CodeStream str, String indent) {
    317         getFExp().printForIndexInit_C(p, str, indent);
    318     }
    319 
    320     public void FExp.printForIndexInit_C(CodePrinter p, CodeStream str, String indent) {}
    321    
    322     public String FExp.forIndexName_C(String suffix) {
    323         return C_LOOP_INDEX + suffix +"[" + myCodeGenContext().myForLoopDepth() + "]";
    324     }
    325 
    326     @Override
    327     public void FRangeExp.printForIndexInit_C(CodePrinter p, CodeStream str, String indent) {
    328         String nameE = forIndexName_C("_i1");
    329         String nameN = forIndexName_C("_i2");
     311    }
     312
     313    public void FForIndex.printForIndexInit_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     314        getFExp().printForIndexInit_C(p, str, indent, myForLoopDepth);
     315    }
     316
     317    public void FExp.printForIndexInit_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {}
     318   
     319    public String FExp.forIndexName_C(String suffix, int myForLoopDepth) {
     320        return C_LOOP_INDEX + suffix +"[" + myForLoopDepth + "]";
     321    }
     322
     323    @Override
     324    public void FRangeExp.printForIndexInit_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     325        String nameE = forIndexName_C("_i1", myForLoopDepth);
     326        String nameN = forIndexName_C("_i2", myForLoopDepth);
    330327
    331328        boolean hasStep = hasStep();
     
    362359        }
    363360    }
    364 
    365     @Override
    366     public void FForIndex.prettyPrint_C(CodePrinter p, CodeStream str, String indent) {
    367         getFExp().printForIndex_C(p, str, indent);
    368     }
    369 
    370     public void FExp.printForIndex_C(CodePrinter p, CodeStream str, String indent) {
     361   
     362    public void FForIndex.printForIndex_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     363        getFExp().printForIndex_C(p, str, indent, myForLoopDepth);
     364    }
     365
     366    public void FExp.printForIndex_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
    371367        throw new UnsupportedOperationException("C code generation for loop index not implemented for class " +
    372368                getClass().getSimpleName());
     
    374370
    375371    @Override
    376     public void FAccessExp.printForIndex_C(CodePrinter p, CodeStream str, String indent) {
    377         String nameE = forIndexName_C("_i1");
     372    public void FAccessExp.printForIndex_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     373        String nameE = forIndexName_C("_i1", myForLoopDepth);
    378374       
    379375        str.format("%1$s = 0; %1$s < jmi_array_size(%2$s, 0); (%1$s)++",
     
    382378
    383379    @Override
    384     public void FRangeExp.printForIndex_C(CodePrinter p, CodeStream str, String indent) {
     380    public void FRangeExp.printForIndex_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
    385381        FExp start = getFExp(0);
    386382        FExp step = getFExp(1);
    387383       
    388         String nameE = forIndexName_C("_i1");
    389         String nameN = forIndexName_C("_i2");
    390         String name = forIndexName_C("_r1");
     384        String nameE = forIndexName_C("_i1", myForLoopDepth);
     385        String nameN = forIndexName_C("_i2", myForLoopDepth);
     386        String name = forIndexName_C("_r1", myForLoopDepth);
    391387       
    392388        /*
     
    416412    }
    417413
    418     public void FForIndex.printForIndexNext_C(CodePrinter p, CodeStream str, String indent) {
    419         getFExp().printForIndexNext_C(p, str, indent);
    420     }
    421 
    422     public void FExp.printForIndexNext_C(CodePrinter p, CodeStream str, String indent) {
    423     }
    424 
    425     @Override
    426     public void FAccessExp.printForIndexNext_C(CodePrinter p, CodeStream str, String indent) {
    427         String nameE = forIndexName_C("_i1");
    428         String name = forIndexName_C("_r1");
     414    public void FForIndex.printForIndexNext_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     415        getFExp().printForIndexNext_C(p, str, indent, myForLoopDepth);
     416    }
     417
     418    public void FExp.printForIndexNext_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     419    }
     420
     421    @Override
     422    public void FAccessExp.printForIndexNext_C(CodePrinter p, CodeStream str, String indent, int myForLoopDepth) {
     423        String nameE = forIndexName_C("_i1", myForLoopDepth);
     424        String name = forIndexName_C("_r1", myForLoopDepth);
    429425
    430426        str.format("%1$s%2$s = jmi_array_val_1(%3$s, %4$s);\n",
  • branches/dev-cw-2719/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenFunction.jrag

    r14218 r14219  
    238238
    239239        if (maxForLoopDepth > 0) {
    240             str.println(indent,  " jmi_real_t ", C_LOOP_INDEX + "_r1", "[", maxForLoopDepth, "];");
    241             str.println(indent,  " jmi_int_t ", C_LOOP_INDEX + "_i1", "[", maxForLoopDepth, "];");
    242             str.println(indent,  " jmi_int_t ", C_LOOP_INDEX + "_i2", "[", maxForLoopDepth, "];");
     240            str.println(indent,  "jmi_real_t ", C_LOOP_INDEX + "_r1", "[", maxForLoopDepth, "];");
     241            str.println(indent,  "jmi_int_t ", C_LOOP_INDEX + "_i1", "[", maxForLoopDepth, "];");
     242            str.println(indent,  "jmi_int_t ", C_LOOP_INDEX + "_i2", "[", maxForLoopDepth, "];");
    243243        }
    244244    }
  • branches/dev-cw-2719/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenNames.jrag

    r14218 r14219  
    5151    eq FFunctionDecl.getChild().myCodeGenContext() = codeGenContext;
    5252    eq FExternalStmt.getChild().myCodeGenContext() = getCodeGenContext();
    53    
     53
    5454    syn int ASTNode.maxForLoopDepth() {
    5555        int max = 0;
     
    6363    }
    6464    eq FForStmt.maxForLoopDepth() = 1 + super.maxForLoopDepth();
     65
     66    inh int FForStmt.myForLoopDepth();
     67    eq FAlgorithm.getChild().myForLoopDepth() = 0;
     68    eq FForStmt.getChild().myForLoopDepth() = myForLoopDepth() + 1;
     69   
     70    inh int FAbstractVariable.myFVForLoopDepth();
     71    eq ASTNode.getChild().myFVForLoopDepth()       = 0;
     72    eq FForStmt.getChild().myFVForLoopDepth() = myForLoopDepth();
     73   
    6574    private CodeGenContext FClass.codeGenContext = new CodeGenContext();
    6675    private CodeGenContext FFunctionDecl.codeGenContext = new CodeGenContext();
     
    7180    public class CodeGenContext {
    7281        private int nextTempNbr_C = 1;
    73         public int currentForLoopDepth = -1;
    7482        private Map<String,String> recordChildTempNames = new HashMap<>();
    75        
    76         public void incrementForLoopDepth() {
    77             currentForLoopDepth++;
    78         }
    79        
    80         public int myForLoopDepth() {
    81             return currentForLoopDepth;
    82         }
    83        
    84         public void decrementForLoopDepth() {
    85             currentForLoopDepth--;
    86         }
    8783       
    8884        public String nextTempName_C() {
Note: See TracChangeset for help on using the changeset viewer.