Changeset 14183


Ignore:
Timestamp:
Nov 26, 2019 3:31:25 PM (11 days ago)
Author:
Jonathan Kämpe
Message:

#5883 Handling differentiated composite statements where right hand side becomes zero array.

Location:
branches/dev-jk-2720/Compiler/ModelicaCBackEnd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-jk-2720/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenAlgorithms.jrag

    r14165 r14183  
    5757        p.print(dst, str, indent);
    5858        str.print(", ");
    59         p.print(src, str, indent);
     59        if (isArray()) {
     60            src.genTempArg(p, str, indent);
     61        } else {
     62            p.print(src, str, indent);
     63        }
    6064        str.print(")\n");
    6165    }
     
    248252    }
    249253
     254    public void FAssignStmt.genVarDecls_C(CodePrinter p, CodeStream str, String indent) {
     255        if (getRight().isArray()) {
     256            getRight().genTempArg(p.DeclStep, str, indent);
     257        } else {
     258            super.genVarDecls_C(p, str, indent);
     259        }
     260    }
     261
     262    public void FAssignStmt.genTempVars_C(CodePrinter p, CodeStream str, String indent) {
     263        if (getRight().isArray()) {
     264            getRight().genTempArg(p.PreStep, str, indent);
     265        } else {
     266            super.genTempVars_C(p, str, indent);
     267        }
     268    }
     269
     270    public void FAssignStmt.genTempFree_C(CodePrinter p, CodeStream str, String indent) {
     271        if (getRight().isArray()) {
     272            getRight().genTempArg(p.PostStep, str, indent);
     273        } else {
     274            super.genTempFree_C(p, str, indent);
     275        }
     276    }
     277
    250278    @Override
    251279    public void FAssignStmt.prettyPrint_C(CodePrinter p, CodeStream str, String indent) {
  • branches/dev-jk-2720/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenCompositeStatementTests.mo

    r14182 r14183  
    383383    JMI_ARR(STACK, jmi_real_t, jmi_array_t, y_a, 2, 1)
    384384    JMI_ARR(STACK, jmi_real_t, jmi_array_t, temp_1_a, 2, 1)
     385    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1)
     386    JMI_ARR(STACK, jmi_real_t, jmi_array_t, tmp_2, 2, 1)
    385387    jmi_real_t i1_1i;
    386388    jmi_int_t i1_1ie;
     
    391393    jmi_array_ref_1(temp_1_a, 1) = 1;
    392394    jmi_array_ref_1(temp_1_a, 2) = 2;
    393     JMI_ASG(GEN_ARR, _der_t1_a, zeros(2.0))
     395    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_1, 2, 1, 2)
     396    jmi_array_ref_1(tmp_1, 1) = 0.0;
     397    jmi_array_ref_1(tmp_1, 2) = 0.0;
     398    JMI_ASG(GEN_ARR, _der_t1_a, tmp_1)
    394399    JMI_ASG(GEN_ARR, t1_a, temp_1_a)
    395400    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, t2_a, 2, 1, 2)
    396401    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, _der_t2_a, 2, 1, 2)
    397     JMI_ASG(GEN_ARR, _der_t2_a, {0.0, 0.0})
     402    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, tmp_2, 2, 1, 2)
     403    jmi_array_ref_1(tmp_2, 1) = 0.0;
     404    jmi_array_ref_1(tmp_2, 2) = 0.0;
     405    JMI_ASG(GEN_ARR, _der_t2_a, tmp_2)
    398406    JMI_ASG(GEN_ARR, t2_a, JMI_GLOBAL(CCodeGenCompositeStatementTests_DifferentiatedStmt1_f_c))
    399407    JMI_ARRAY_INIT_1(STACK, jmi_real_t, jmi_array_t, y_a, 2, 1, 2)
Note: See TracChangeset for help on using the changeset viewer.