Changeset 13773


Ignore:
Timestamp:
Oct 16, 2019 3:00:08 PM (4 weeks ago)
Author:
jwedin
Message:

Refactored the code generation for initializing delay expression. #5852

Location:
branches/dev-1247-jw/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-1247-jw/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenExpressions.jrag

    r13653 r13773  
    13521352        p.printVarDecls(myMaxDelayExp(), str, indent);
    13531353    }
    1354 
    1355     /**
    1356      * Generates the first part of a delay_init call
    1357      */
    1358     private void FDelayExp.genInit_C_Header(CodePrinter p, CodeStream str, String indent, FExp maxDelayExp, boolean fixed,
    1359             int delayIndex) {
     1354   
     1355    private void FClass.genDelayInitVarDecls(CodePrinter p, CodeStream str, String indent) { // Hook to facilitate extensions
     1356        for (FDelayExp d : myDelayExps()) {
     1357            d.genInitVarDecls_C(p, str, indent);
     1358        }
     1359        for (FSpatialDistExp d : mySpatialDistExps()) {
     1360            d.genInitVarDecls_C(p, str, indent);
     1361        }
     1362    }
     1363
     1364    private void FClass.genDelayInitAssignments(CodePrinter p, CodeStream str, String indent) { // Hook to facilitate extensions
     1365        for (FDelayExp d : myDelayExps()) {
     1366            d.genInit_C(p, str, indent);
     1367        }
     1368        for (FSpatialDistExp d : mySpatialDistExps()) {
     1369            d.genInit_C(p, str, indent);
     1370        }
     1371    }
     1372   
     1373    public void FClass.genDelayInit_C(CodeStream genPrinter) {
     1374        CodePrinter p = ASTNode.printer_C;
     1375        String indent = p.indent("");
     1376        genDelayInitVarDecls(p, genPrinter, indent);
     1377        genDelayInitAssignments(p, genPrinter, indent);
     1378    }
     1379
     1380    private void FDelayExp.prepareInit_C(CodePrinter p, CodeStream str, String indent, int delayIndex) {
     1381        FExp maxDelayExp = myMaxDelayExp();
     1382        boolean fixed = isTimeEventGenerating();
    13601383        p.printPreSteps(getFExp(), str, indent);
    13611384        p.printPreSteps(maxDelayExp, str, indent);
     
    13671390        p.print(fixed ? getDelay() : maxDelayExp, str, indent); // jmi_real_t max_delay
    13681391        str.print(", ");
    1369     }
     1392
     1393    }
     1394
     1395    private void FDelayExp.finalizeInit_C(CodePrinter p, CodeStream str, String indent) {
     1396        str.println(");");
     1397        p.printPostSteps(getFExp(), str, indent);
     1398        p.printPostSteps(myMaxDelayExp(), str, indent);
     1399    }
    13701400   
    13711401    /**
     
    13731403     */
    13741404    public void FDelayExp.genInit_C(CodePrinter p, CodeStream str, String indent) {
    1375         FExp maxDelayExp = myMaxDelayExp();
    1376         boolean fixed = isTimeEventGenerating();
    1377 
    1378         genInit_C_Header(p, str, indent, maxDelayExp, fixed, myDelayIndex());
     1405        prepareInit_C(p, str, indent, myDelayIndex());
    13791406        p.print(getFExp(), str, indent); // jmi_real_t y0
    1380         str.println(");");
    1381 
    1382         p.printPostSteps(getFExp(), str, indent);
    1383         p.printPostSteps(maxDelayExp, str, indent);
     1407        finalizeInit_C(p, str, indent);
    13841408    }
    13851409    syn FExp FDelayExp.myMaxDelayExp() = hasMax() ? getMax() : getDelay();
  • branches/dev-1247-jw/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CGenerator.jrag

    r13653 r13773  
    13061306       
    13071307        public void generate(CodeStream genPrinter) {
    1308             CodePrinter p = ASTNode.printer_C;
    1309             String indent = p.indent("");
    1310             for (FDelayExp d : fclass.myDelayExps()) {
    1311                 d.genInitVarDecls_C(p, genPrinter, indent);
    1312             }
    1313             for (FSpatialDistExp d : fclass.mySpatialDistExps()) {
    1314                 d.genInitVarDecls_C(p, genPrinter, indent);
    1315             }
    1316             for (FDelayExp d : fclass.myDelayExps()) {
    1317                 d.genInit_C(p, genPrinter, indent);
    1318             }
    1319             for (FSpatialDistExp d : fclass.mySpatialDistExps()) {
    1320                 d.genInit_C(p, genPrinter, indent);
    1321             }
     1308            fclass.genDelayInit_C(genPrinter);
    13221309        }
    13231310    }
Note: See TracChangeset for help on using the changeset viewer.