Changeset 12469


Ignore:
Timestamp:
Mar 15, 2019 9:17:27 AM (9 months ago)
Author:
Zimon Kuhs
Message:

#5745

Catchup merge from trunk.

Location:
branches/dev-zk-1971
Files:
39 edited
3 copied

Legend:

Unmodified
Added
Removed
  • branches/dev-zk-1971

  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenExpressions.jrag

    r11676 r12469  
    772772    public void FReinit.genTempVars_C(CodePrinter p, CodeStream str, String indent) {
    773773        super.genTempVars_C(p, str, indent);
    774         p.printAssign(type(), str, indent, this, getFExp());
     774        String next = indent;
     775        if (p.inBlock()) {
     776            str.format("%sif (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {\n", indent);
     777            next = p.indent(indent);
     778        }
     779        p.printAssign(type(), str, next, this, getFExp());
     780        genReinitWritebacks_C(p, str, next, true, true);
     781        if (p.inBlock()) {
     782            str.format("%s}\n", indent);
     783        }
    775784    }
    776785
  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenGlobals.jrag

    r12268 r12469  
    182182     * no if guard here, that is controlled from the actual reinit statement.
    183183     */
    184     public void AbstractEquationBlock.genReinitWritebacks_C(CodePrinter p, String indent, CodeStream str) {
     184    public void AbstractEquationBlock.genReinitWritebacks_C(CodePrinter p, String indent, CodeStream str) {}
     185   
     186    public void SimpleEquationBlock.genReinitWritebacks_C(CodePrinter p, String indent, CodeStream str) {
    185187        Map<String, ArrayList<FReinit>> map = new LinkedHashMap<>();
    186188        for (FReinit r : collectReinits_C(p)) {
  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CGenerator.jrag

    r11966 r12469  
    708708                @Override
    709709                public void genPost(AbstractEquationBlock element) {
    710                     element.genReinitWritebacks_C(p, indent, str);
     710                    //element.genReinitWritebacks_C(p, indent, str);
    711711                }
    712712            };
     
    766766                @Override
    767767                public void genPost(AbstractEquationBlock element) {
    768                     element.genReinitWritebacks_C(p, indent, str);
     768                    //element.genReinitWritebacks_C(p, indent, str);
    769769                }
    770770            };
  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenGlobalsTests.mo

    r11759 r12469  
    5959    }
    6060    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    61     if (JMI_GLOBAL(tmp_1) != _x_0) {
    62         _x_0 = JMI_GLOBAL(tmp_1);
    63         jmi->reinit_triggered = 1;
    64     }
    6561    JMI_DYNAMIC_FREE()
    6662    return ef;
     
    10399        }
    104100        if (LOG_EXP_AND(_temp_1_1, LOG_EXP_NOT(pre_temp_1_1))) {
    105             JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     101            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     102                JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     103                if (JMI_GLOBAL(tmp_1) != _x_0) {
     104                    _x_0 = JMI_GLOBAL(tmp_1);
     105                    jmi->reinit_triggered = 1;
     106                }
     107            }
    106108        }
    107109        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    167169    }
    168170    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[1]);
    169     if (JMI_GLOBAL(tmp_1) != _x_0) {
    170         _x_0 = JMI_GLOBAL(tmp_1);
    171         jmi->reinit_triggered = 1;
    172     }
    173     if (JMI_GLOBAL(tmp_2) != _y_1) {
    174         _y_1 = JMI_GLOBAL(tmp_2);
    175         jmi->reinit_triggered = 1;
    176     }
    177171    JMI_DYNAMIC_FREE()
    178172    return ef;
     
    222216        }
    223217        if (LOG_EXP_AND(_temp_1_2, LOG_EXP_NOT(pre_temp_1_2))) {
    224             JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     218            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     219                JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     220                if (JMI_GLOBAL(tmp_1) != _x_0) {
     221                    _x_0 = JMI_GLOBAL(tmp_1);
     222                    jmi->reinit_triggered = 1;
     223                }
     224            }
    225225        }
    226226        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    250250        }
    251251        if (LOG_EXP_AND(_temp_2_3, LOG_EXP_NOT(pre_temp_2_3))) {
    252             JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     252            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     253                JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     254                if (JMI_GLOBAL(tmp_2) != _y_1) {
     255                    _y_1 = JMI_GLOBAL(tmp_2);
     256                    jmi->reinit_triggered = 1;
     257                }
     258            }
    253259        }
    254260        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    312318    }
    313319    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    314     if (JMI_GLOBAL(tmp_1) != _x_0) {
    315         _x_0 = JMI_GLOBAL(tmp_1);
    316         jmi->reinit_triggered = 1;
    317     }
    318     if (JMI_GLOBAL(tmp_2) != _y_1) {
    319         _y_1 = JMI_GLOBAL(tmp_2);
    320         jmi->reinit_triggered = 1;
    321     }
    322320    JMI_DYNAMIC_FREE()
    323321    return ef;
     
    375373        }
    376374        if (LOG_EXP_AND(_temp_1_2, LOG_EXP_NOT(pre_temp_1_2))) {
    377             JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     375            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     376                JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     377                if (JMI_GLOBAL(tmp_1) != _x_0) {
     378                    _x_0 = JMI_GLOBAL(tmp_1);
     379                    jmi->reinit_triggered = 1;
     380                }
     381            }
    378382        } else {
    379383            if (LOG_EXP_AND(_temp_2_3, LOG_EXP_NOT(pre_temp_2_3))) {
    380                 JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     384                if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     385                    JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     386                    if (JMI_GLOBAL(tmp_2) != _y_1) {
     387                        _y_1 = JMI_GLOBAL(tmp_2);
     388                        jmi->reinit_triggered = 1;
     389                    }
     390                }
    381391            }
    382392        }
     
    445455    dae_block_0_set_up(jmi);
    446456    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    447     if (JMI_GLOBAL(tmp_1) != _x_0) {
    448         _x_0 = JMI_GLOBAL(tmp_1);
    449         jmi->reinit_triggered = 1;
    450     }
    451457    JMI_DYNAMIC_FREE()
    452458    return ef;
     
    499505            JMI_ARRAY_INIT_1(STAT, jmi_real_t, jmi_array_t, tmp_4, 1, 1, 1)
    500506            jmi_array_ref_1(tmp_4, 1) = AD_WRAP_LITERAL(1);
    501             JMI_GLOBAL(tmp_1) = JMI_CACHED(tmp_2, func_CCodeGenGlobalsTests_Reinit_ReinitCTest4_f_exp0(tmp_4));
     507            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     508                JMI_GLOBAL(tmp_1) = JMI_CACHED(tmp_2, func_CCodeGenGlobalsTests_Reinit_ReinitCTest4_f_exp0(tmp_4));
     509                if (JMI_GLOBAL(tmp_1) != _x_0) {
     510                    _x_0 = JMI_GLOBAL(tmp_1);
     511                    jmi->reinit_triggered = 1;
     512                }
     513            }
    502514        }
    503515        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    552564    if (_atInitial) {
    553565        JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
    554     }
    555     if (JMI_GLOBAL(tmp_2) != _x_0) {
    556         _x_0 = JMI_GLOBAL(tmp_2);
    557         jmi->reinit_triggered = 1;
     566        if (JMI_GLOBAL(tmp_2) != _x_0) {
     567            _x_0 = JMI_GLOBAL(tmp_2);
     568            jmi->reinit_triggered = 1;
     569        }
    558570    }
    559571    JMI_DYNAMIC_FREE()
     
    622634    }
    623635    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    624     if (JMI_GLOBAL(tmp_2) != _x_0) {
    625         _x_0 = JMI_GLOBAL(tmp_2);
    626         jmi->reinit_triggered = 1;
    627     }
    628636    JMI_DYNAMIC_FREE()
    629637    return ef;
     
    643651    _x_0 = 0.0;
    644652    JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
    645     pre_temp_1_1 = JMI_FALSE;
    646653    if (JMI_GLOBAL(tmp_1) != _x_0) {
    647654        _x_0 = JMI_GLOBAL(tmp_1);
    648655        jmi->reinit_triggered = 1;
    649656    }
     657    pre_temp_1_1 = JMI_FALSE;
    650658    JMI_DYNAMIC_FREE()
    651659    return ef;
     
    672680        }
    673681        if (LOG_EXP_OR(_atInitial, LOG_EXP_AND(_temp_1_1, LOG_EXP_NOT(pre_temp_1_1)))) {
    674             JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     682            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     683                JMI_GLOBAL(tmp_2) = AD_WRAP_LITERAL(1);
     684                if (JMI_GLOBAL(tmp_2) != _x_0) {
     685                    _x_0 = JMI_GLOBAL(tmp_2);
     686                    jmi->reinit_triggered = 1;
     687                }
     688            }
    675689        }
    676690        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    705719-----
    706720$C_ode_derivatives$
     721-----
     722$C_dae_blocks_residual_functions$
    707723",
    708724            generatedCode="
     
    725741    }
    726742    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    727     if (JMI_GLOBAL(tmp_1) != _x_0) {
    728         _x_0 = JMI_GLOBAL(tmp_1);
    729         jmi->reinit_triggered = 1;
    730     } else if (JMI_GLOBAL(tmp_2) != _x_0) {
    731         _x_0 = JMI_GLOBAL(tmp_2);
    732         jmi->reinit_triggered = 1;
     743    JMI_DYNAMIC_FREE()
     744    return ef;
     745}
     746
     747-----
     748static int dae_block_0(jmi_t* jmi, jmi_real_t* x, jmi_real_t* residual, int evaluation_mode) {
     749    /***** Block: 1 *****/
     750    jmi_real_t** res = &residual;
     751    int ef = 0;
     752    JMI_DYNAMIC_INIT()
     753    if (evaluation_mode == JMI_BLOCK_SOLVED_NON_REAL_VALUE_REFERENCE) {
     754        x[0] = 536870917;
     755        x[1] = 536870916;
     756    } else if (evaluation_mode == JMI_BLOCK_DIRECTLY_IMPACTING_NON_REAL_VALUE_REFERENCE) {
     757        x[0] = 536870916;
     758        x[1] = 536870917;
     759    } else if (evaluation_mode & JMI_BLOCK_EVALUATE || evaluation_mode & JMI_BLOCK_WRITE_BACK) {
     760        if ((evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) == 0) {
     761        }
     762        if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     763            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     764                _sw(1) = jmi_turn_switch(jmi, _x_0 - (0.7), _sw(1), JMI_REL_LT);
     765            }
     766            _temp_2_2 = _sw(1);
     767        }
     768        if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     769            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     770                _sw(0) = jmi_turn_switch(jmi, _x_0 - (0.9), _sw(0), JMI_REL_LT);
     771            }
     772            _temp_1_1 = _sw(0);
     773        }
     774        if (LOG_EXP_AND(_temp_1_1, LOG_EXP_NOT(pre_temp_1_1))) {
     775            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     776                JMI_GLOBAL(tmp_1) = 0.8;
     777                if (JMI_GLOBAL(tmp_1) != _x_0) {
     778                    _x_0 = JMI_GLOBAL(tmp_1);
     779                    jmi->reinit_triggered = 1;
     780                }
     781            }
     782        } else {
     783            if (LOG_EXP_AND(_temp_2_2, LOG_EXP_NOT(pre_temp_2_2))) {
     784                if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     785                    JMI_GLOBAL(tmp_2) = 0.4;
     786                    if (JMI_GLOBAL(tmp_2) != _x_0) {
     787                        _x_0 = JMI_GLOBAL(tmp_2);
     788                        jmi->reinit_triggered = 1;
     789                    }
     790                }
     791            }
     792        }
     793        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     794        }
    733795    }
    734796    JMI_DYNAMIC_FREE()
     
    767829-----
    768830$C_ode_derivatives$
     831-----
     832$C_dae_blocks_residual_functions$
    769833",
    770834            generatedCode="
     
    802866    }
    803867    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    804     if (JMI_GLOBAL(tmp_1) != _x_0) {
    805         _x_0 = JMI_GLOBAL(tmp_1);
    806         jmi->reinit_triggered = 1;
    807     } else if (JMI_GLOBAL(tmp_4) != _x_0) {
    808         _x_0 = JMI_GLOBAL(tmp_4);
    809         jmi->reinit_triggered = 1;
    810     } else if (JMI_GLOBAL(tmp_6) != _x_0) {
    811         _x_0 = JMI_GLOBAL(tmp_6);
    812         jmi->reinit_triggered = 1;
    813     }
    814     if (JMI_GLOBAL(tmp_2) != _y_1) {
    815         _y_1 = JMI_GLOBAL(tmp_2);
    816         jmi->reinit_triggered = 1;
    817     } else if (JMI_GLOBAL(tmp_7) != _y_1) {
    818         _y_1 = JMI_GLOBAL(tmp_7);
    819         jmi->reinit_triggered = 1;
    820     }
    821     if (JMI_GLOBAL(tmp_3) != _z_2) {
    822         _z_2 = JMI_GLOBAL(tmp_3);
    823         jmi->reinit_triggered = 1;
    824     } else if (JMI_GLOBAL(tmp_5) != _z_2) {
    825         _z_2 = JMI_GLOBAL(tmp_5);
    826         jmi->reinit_triggered = 1;
     868    JMI_DYNAMIC_FREE()
     869    return ef;
     870}
     871
     872-----
     873static int dae_block_0(jmi_t* jmi, jmi_real_t* x, jmi_real_t* residual, int evaluation_mode) {
     874    /***** Block: 1 *****/
     875    jmi_real_t** res = &residual;
     876    int ef = 0;
     877    JMI_DYNAMIC_INIT()
     878    if (evaluation_mode == JMI_BLOCK_SOLVED_NON_REAL_VALUE_REFERENCE) {
     879        x[0] = 536870922;
     880        x[1] = 536870921;
     881        x[2] = 536870920;
     882    } else if (evaluation_mode == JMI_BLOCK_DIRECTLY_IMPACTING_NON_REAL_VALUE_REFERENCE) {
     883        x[0] = 536870920;
     884        x[1] = 536870921;
     885        x[2] = 536870922;
     886    } else if (evaluation_mode & JMI_BLOCK_EVALUATE || evaluation_mode & JMI_BLOCK_WRITE_BACK) {
     887        if ((evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) == 0) {
     888        }
     889        if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     890            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     891                _sw(2) = jmi_turn_switch(jmi, _x_0 - (0.5), _sw(2), JMI_REL_LT);
     892            }
     893            _temp_3_5 = _sw(2);
     894        }
     895        if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     896            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     897                _sw(1) = jmi_turn_switch(jmi, _x_0 - (0.7), _sw(1), JMI_REL_LT);
     898            }
     899            _temp_2_4 = _sw(1);
     900        }
     901        if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     902            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     903                _sw(0) = jmi_turn_switch(jmi, _x_0 - (0.9), _sw(0), JMI_REL_LT);
     904            }
     905            _temp_1_3 = _sw(0);
     906        }
     907        if (LOG_EXP_AND(_temp_1_3, LOG_EXP_NOT(pre_temp_1_3))) {
     908            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     909                JMI_GLOBAL(tmp_1) = 0.8;
     910                if (JMI_GLOBAL(tmp_1) != _x_0) {
     911                    _x_0 = JMI_GLOBAL(tmp_1);
     912                    jmi->reinit_triggered = 1;
     913                }
     914            }
     915            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     916                JMI_GLOBAL(tmp_2) = 1.8;
     917                if (JMI_GLOBAL(tmp_2) != _y_1) {
     918                    _y_1 = JMI_GLOBAL(tmp_2);
     919                    jmi->reinit_triggered = 1;
     920                }
     921            }
     922        } else {
     923            if (LOG_EXP_AND(_temp_2_4, LOG_EXP_NOT(pre_temp_2_4))) {
     924                if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     925                    JMI_GLOBAL(tmp_3) = 2.4;
     926                    if (JMI_GLOBAL(tmp_3) != _z_2) {
     927                        _z_2 = JMI_GLOBAL(tmp_3);
     928                        jmi->reinit_triggered = 1;
     929                    }
     930                }
     931                if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     932                    JMI_GLOBAL(tmp_4) = 0.4;
     933                    if (JMI_GLOBAL(tmp_4) != _x_0) {
     934                        _x_0 = JMI_GLOBAL(tmp_4);
     935                        jmi->reinit_triggered = 1;
     936                    }
     937                }
     938            } else {
     939                if (LOG_EXP_AND(_temp_3_5, LOG_EXP_NOT(pre_temp_3_5))) {
     940                    if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     941                        JMI_GLOBAL(tmp_5) = 2.1;
     942                        if (JMI_GLOBAL(tmp_5) != _z_2) {
     943                            _z_2 = JMI_GLOBAL(tmp_5);
     944                            jmi->reinit_triggered = 1;
     945                        }
     946                    }
     947                    if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     948                        JMI_GLOBAL(tmp_6) = 0.1;
     949                        if (JMI_GLOBAL(tmp_6) != _x_0) {
     950                            _x_0 = JMI_GLOBAL(tmp_6);
     951                            jmi->reinit_triggered = 1;
     952                        }
     953                    }
     954                    if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     955                        JMI_GLOBAL(tmp_7) = 1.1;
     956                        if (JMI_GLOBAL(tmp_7) != _y_1) {
     957                            _y_1 = JMI_GLOBAL(tmp_7);
     958                            jmi->reinit_triggered = 1;
     959                        }
     960                    }
     961                }
     962            }
     963        }
     964        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     965        }
    827966    }
    828967    JMI_DYNAMIC_FREE()
     
    8741013    }
    8751014    ef |= jmi_solve_block_residual(jmi->dae_block_residuals[0]);
    876     if (JMI_GLOBAL(tmp_1) != _x_0) {
    877         _x_0 = JMI_GLOBAL(tmp_1);
    878         jmi->reinit_triggered = 1;
    879     }
    8801015    JMI_DYNAMIC_FREE()
    8811016    return ef;
     
    9271062        if (_z_2) {
    9281063            if (LOG_EXP_AND(_z_2, LOG_EXP_NOT(pre_z_2))) {
    929                 JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     1064                if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     1065                    JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     1066                    if (JMI_GLOBAL(tmp_1) != _x_0) {
     1067                        _x_0 = JMI_GLOBAL(tmp_1);
     1068                        jmi->reinit_triggered = 1;
     1069                    }
     1070                }
    9301071            }
    9311072        }
     
    9411082")})));
    9421083end ReinitCTest9;
     1084
     1085model ReinitCTest10
     1086    Boolean b = true;
     1087    Real x;
     1088equation
     1089    der(x) = 2;
     1090    when b then
     1091        reinit(x, 1);
     1092    end when;
     1093
     1094annotation(__JModelica(UnitTesting(tests={
     1095    CCodeGenTestCase(
     1096        name="Reinit_ReinitCTest10",
     1097        description="",
     1098        template="
     1099$C_ode_derivatives$
     1100",
     1101        generatedCode="
     1102int model_ode_derivatives_base(jmi_t* jmi) {
     1103    int ef = 0;
     1104    JMI_DYNAMIC_INIT()
     1105    JMI_GLOBAL(tmp_1) = _x_1;
     1106    _der_x_2 = 2;
     1107    if (JMI_FALSE) {
     1108        JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     1109        if (JMI_GLOBAL(tmp_1) != _x_1) {
     1110            _x_1 = JMI_GLOBAL(tmp_1);
     1111            jmi->reinit_triggered = 1;
     1112        }
     1113    }
     1114    JMI_DYNAMIC_FREE()
     1115    return ef;
     1116}
     1117")})));
     1118end ReinitCTest10;
     1119
    9431120
    9441121end Reinit;
  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenTests.mo

    r12184 r12469  
    1185211852        }
    1185311853        func_CCodeGenTests_BlockTest20_f_b_def0(_time + _y_0, tmp_1);
    11854         _temp_2_1 = (tmp_1->x);
     11854        _temp_1_x_1 = (tmp_1->x);
    1185511855        _temp_1_b_2 = (tmp_1->b);
    1185611856        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
    11857             (*res)[0] = (COND_EXP_EQ(_temp_1_b_2, JMI_TRUE, _temp_2_1 * _temp_2_1, _temp_2_1)) - (_y_0);
     11857            (*res)[0] = (COND_EXP_EQ(_temp_1_b_2, JMI_TRUE, _temp_1_x_1 * _temp_1_x_1, _temp_1_x_1)) - (_y_0);
    1185811858        }
    1185911859    }
     
    1359513595        }
    1359613596        if (LOG_EXP_AND(_temp_1_5, LOG_EXP_NOT(pre_temp_1_5))) {
    13597             JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     13597            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     13598                JMI_GLOBAL(tmp_1) = AD_WRAP_LITERAL(1);
     13599                if (JMI_GLOBAL(tmp_1) != _x_0) {
     13600                    _x_0 = JMI_GLOBAL(tmp_1);
     13601                    jmi->reinit_triggered = 1;
     13602                }
     13603            }
    1359813604        }
    1359913605        _zz_3 = - _y_1 + 0.1;
     
    1532715333",
    1532815334            generatedCode="
    15329 
    1533015335    jmi_real_t nSamp;
    15331 
    15332 
    1533315336
    1533415337
     
    1533815341    _b_1 = cos(_time);
    1533915342    if (jmi->atInitial || jmi->atEvent) {
     15343        _sw(0) = jmi_turn_switch(jmi, _b_1 - (AD_WRAP_LITERAL(0.0)), _sw(0), JMI_REL_GT);
     15344    }
     15345    _a_0 = COND_EXP_EQ(_sw(0), JMI_TRUE, _b_1, - _b_1);
     15346    if (jmi->atInitial || jmi->atEvent) {
    1534015347        _sw(1) = jmi_turn_switch(jmi, _b_1 - (AD_WRAP_LITERAL(0.0)), _sw(1), JMI_REL_GT);
    1534115348    }
    15342     _a_0 = COND_EXP_EQ(_sw(1), JMI_TRUE, _b_1, - _b_1);
    15343     if (jmi->atInitial || jmi->atEvent) {
    15344         _sw(0) = jmi_turn_switch(jmi, _b_1 - (AD_WRAP_LITERAL(0.0)), _sw(0), JMI_REL_GT);
    15345     }
    15346     _c_2 = COND_EXP_EQ(_sw(0), JMI_TRUE, _b_1, - _b_1);
     15349    _c_2 = COND_EXP_EQ(_sw(1), JMI_TRUE, _b_1, - _b_1);
    1534715350    JMI_DYNAMIC_FREE()
    1534815351    return ef;
  • branches/dev-zk-1971/Compiler/ModelicaCBackEnd/test/modelica/SplitCodeTests.mo

    r12268 r12469  
    8282            JMI_ARRAY_INIT_1(STAT, jmi_real_t, jmi_array_t, tmp_2, 1, 1, 1)
    8383            jmi_array_ref_1(tmp_2, 1) = AD_WRAP_LITERAL(1);
    84             JMI_GLOBAL(tmp_3) = JMI_CACHED(tmp_1, func_SplitCodeTests_BlockSetupSplit1_f_exp0(tmp_2));
     84            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     85                JMI_GLOBAL(tmp_3) = JMI_CACHED(tmp_1, func_SplitCodeTests_BlockSetupSplit1_f_exp0(tmp_2));
     86                if (JMI_GLOBAL(tmp_3) != _x_0) {
     87                    _x_0 = JMI_GLOBAL(tmp_3);
     88                    jmi->reinit_triggered = 1;
     89                }
     90            }
    8591        }
    8692        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    117123            JMI_ARRAY_INIT_1(STAT, jmi_real_t, jmi_array_t, tmp_5, 1, 1, 1)
    118124            jmi_array_ref_1(tmp_5, 1) = AD_WRAP_LITERAL(2);
    119             JMI_GLOBAL(tmp_6) = JMI_CACHED(tmp_4, func_SplitCodeTests_BlockSetupSplit1_f_exp0(tmp_5));
     125            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     126                JMI_GLOBAL(tmp_6) = JMI_CACHED(tmp_4, func_SplitCodeTests_BlockSetupSplit1_f_exp0(tmp_5));
     127                if (JMI_GLOBAL(tmp_6) != _y_1) {
     128                    _y_1 = JMI_GLOBAL(tmp_6);
     129                    jmi->reinit_triggered = 1;
     130                }
     131            }
    120132        }
    121133        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    196208            JMI_ARRAY_INIT_1(STAT, jmi_real_t, jmi_array_t, tmp_2, 1, 1, 1)
    197209            jmi_array_ref_1(tmp_2, 1) = AD_WRAP_LITERAL(1);
    198             JMI_GLOBAL(tmp_3) = JMI_CACHED(tmp_1, func_SplitCodeTests_BlockSetupSplit2_f_exp0(tmp_2));
     210            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     211                JMI_GLOBAL(tmp_3) = JMI_CACHED(tmp_1, func_SplitCodeTests_BlockSetupSplit2_f_exp0(tmp_2));
     212                if (JMI_GLOBAL(tmp_3) != _x_0) {
     213                    _x_0 = JMI_GLOBAL(tmp_3);
     214                    jmi->reinit_triggered = 1;
     215                }
     216            }
    199217        }
    200218        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
     
    231249            JMI_ARRAY_INIT_1(STAT, jmi_real_t, jmi_array_t, tmp_5, 1, 1, 1)
    232250            jmi_array_ref_1(tmp_5, 1) = AD_WRAP_LITERAL(2);
    233             JMI_GLOBAL(tmp_6) = JMI_CACHED(tmp_4, func_SplitCodeTests_BlockSetupSplit2_f_exp0(tmp_5));
     251            if (evaluation_mode & JMI_BLOCK_EVALUATE_NON_REALS) {
     252                JMI_GLOBAL(tmp_6) = JMI_CACHED(tmp_4, func_SplitCodeTests_BlockSetupSplit2_f_exp0(tmp_5));
     253                if (JMI_GLOBAL(tmp_6) != _y_1) {
     254                    _y_1 = JMI_GLOBAL(tmp_6);
     255                    jmi->reinit_triggered = 1;
     256                }
     257            }
    234258        }
    235259        if (evaluation_mode & JMI_BLOCK_EVALUATE) {
  • branches/dev-zk-1971/Compiler/ModelicaCompiler/src/jastadd/DiagnosticsGenerator.jrag

    r11676 r12469  
    2424
    2525aspect DiagnosticsGeneration {
     26
     27    /**
     28     *  Write index.html.
     29     */
     30    public void DiagnosticsGenerator.writeDiagnostics(FClass fc) {
     31       
     32        writeIndexFile(fc);
     33       
     34        // Create BLT diagnostics file (if equation_sorting is true)
     35        writeBLTFile(fc);
     36       
     37        // Create BLT table diagnostics file (if equation_sorting is true)
     38        writeBLTTableFile(fc);
     39       
     40        // Create connection set information file
     41        writeConnectionsFile(fc);
     42       
     43        // Create a file for alias information
     44        writeAliasFile(fc);
     45    }
     46
    2647
    2748/**
     
    441462    public void setModelDiagnosticsBeforeTransform(String s) {
    442463        modelDiagnosticsBeforeTransform = s;
    443     }
    444 
    445     /**
    446      *  Write index.html.
    447      */
    448     public void writeDiagnostics(FClass fc) {
    449        
    450         writeIndexFile(fc);
    451        
    452         // Create BLT diagnostics file (if equation_sorting is true)
    453         writeBLTFile(fc);
    454        
    455         // Create BLT table diagnostics file (if equation_sorting is true)
    456         writeBLTTableFile(fc);
    457        
    458         // Create connection set information file
    459         writeConnectionsFile(fc);
    460        
    461         // Create a file for alias information
    462         writeAliasFile(fc);
    463464    }
    464465
     
    523524                    }
    524525                    out.println("</p>");
    525                     if (EquationBlockFactory.canTear(fc.myOptions())) {
     526                    if (EquationBlockFactory.canTear(fc.myStepUtil())) {
    526527                        unsolvedDAEInitBlockSizes = fc.getDAEInitBLT().unsolvedBlockIterationSizes();
    527528                        out.print("<p>Number of unsolved equation blocks in DAE initialization system after tearing: " +
  • branches/dev-zk-1971/Compiler/ModelicaFlatTree/src/jastadd/Arrays.jrag

    r12243 r12469  
    5252     */
    5353    public Index FArraySubscripts.createIndex() {
     54        return createIndex(defaultVariableEvaluator());
     55    }
     56
     57    /**
     58     * Return an Index with these array subscripts.
     59     *
     60     * This version is not cached, to allow indices to be re-evaluated at each use
     61     * during function evaluation.
     62     *
     63     * @throws ConstantEvaluationException  if the subscripts can't be evaluated to
     64     *                                      constant Integer values.
     65     */
     66    public Index FArraySubscripts.createIndex(VariableEvaluator evaluator) {
    5467        if (numSubscript() == 0) {
    5568            return Index.NULL;
    5669        }
    57         int[] i = new int[numSubscript()];
    58         int j = 0;
    59         for (Subscript s : subscripts())
    60             i[j++] = s.value();
    61         return new Index(i);
    62     }
     70        int[] i = new int[numSubscript()];
     71        int j = 0;
     72        for (Subscript s : subscripts())
     73            i[j++] = s.value(evaluator);
     74        return new Index(i);
     75    }
    6376
    6477    public interface Subscript {
  • branches/dev-zk-1971/Compiler/ModelicaFlatTree/src/jastadd/ConstantEvaluation/ConstantEvaluation.jrag

    r12306 r12469  
    1515*/
    1616
     17import java.util.ArrayList;
     18import java.util.Collections;
    1719import java.util.HashMap;
    1820import java.util.Iterator;
    1921import java.util.Locale;
    2022import java.util.Map;
     23import java.util.Set;
    2124
    2225import org.jmodelica.util.BinaryOperation;
     
    10761079        }
    10771080       
     1081       /**
     1082         * Is this array is sufficiently large to to represent the given index.
     1083         */
     1084        public boolean hasCell(Index i) {
     1085            return indices.isValid(i);
     1086        }
     1087       
    10781088        /**
    10791089         * Set the value of the next free cell of an array constant value.
     
    10981108         */
    10991109        public CValue getCell(Index i) {
    1100             if (!indices.isValid(i))
     1110            if (!hasCell(i))
    11011111                return UNKNOWN;
    11021112            return values[i.internal(indices)];
     
    20962106    }
    20972107
     2108
     2109    syn Set<String> FExp.collectAccessNames() {
     2110        final Set<String> names = new HashSet<>();
     2111        collectAccessNames(names);
     2112        return names;
     2113    }
     2114
     2115    public void FExp.collectAccessNames(Set<String> collectedNames) {
     2116        for (FExp child : childFExps()) {
     2117            child.collectAccessNames(collectedNames);
     2118        }
     2119    }
     2120
     2121    @Override
     2122    public void FTimeExp.collectAccessNames(Set<String> collectedNames) {
     2123        collectedNames.add("time");
     2124    }
     2125
     2126    @Override
     2127    public void InstAccessExp.collectAccessNames(Set<String> collectedNames) {
     2128        getInstAccess().collectAccessNames(collectedNames);
     2129        getInstAccess().collectAccessNamesInArraySubscripts(collectedNames);
     2130    }
     2131
     2132    @Override
     2133    public void InstFunctionCall.collectAccessNames(Set<String> collectedNames) {
     2134      for (InstFunctionArgument arg : getArgList()) {
     2135          arg.getFExp().collectAccessNames(collectedNames);
     2136      }
     2137    }
     2138
     2139
     2140    public abstract void InstAccess.collectAccessNames(Set<String> collectedNames);
     2141   
     2142    @Override
     2143    public void InstDot.collectAccessNames(Set<String> collectedNames) {
     2144        getFirstInstAccess().collectAccessNames(collectedNames);
     2145    }
     2146
     2147    @Override
     2148    public void InstGlobalAccess.collectAccessNames(Set<String> collectedNames) {
     2149        getInstAccess().collectAccessNames(collectedNames);
     2150    }
     2151
     2152    @Override
     2153    public void InstArrayAccess.collectAccessNames(Set<String> collectedNames) {
     2154        myInstComponentDecl().collectScalarPrimitives(collectedNames);
     2155    }
     2156
     2157    @Override
     2158    public void InstClassAccess.collectAccessNames(Set<String> collectedNames) {
     2159    }
     2160
     2161    @Override
     2162    public void InstScalarAccess.collectAccessNames(Set<String> collectedNames) {
     2163        myInstComponentDecl().collectScalarPrimitives(collectedNames);
     2164    }
     2165
     2166    public void InstComponentDecl.collectScalarPrimitives(Set<String> collectedNames) {
     2167        for (InstComponentDecl instComponentDecl : getInstComponentDecls()) {
     2168            instComponentDecl.collectScalarPrimitives(collectedNames);
     2169        }
     2170    }
     2171
     2172    @Override
     2173    public void InstPrimitive.collectScalarPrimitives(Set<String> collectedNames) {
     2174        String qualifiedName = qualifiedName();
     2175        if (isArray()) {
     2176            for (Index index : Indices.create(size())) {
     2177                collectedNames.add(qualifiedName + index);
     2178            }
     2179        } else if (!isForIndex()) {
     2180            collectedNames.add(qualifiedName);
     2181        }
     2182    }
     2183
     2184    public void FArraySubscripts.collectAccessNames(Set<String> collectedNames) {
     2185    }
     2186
     2187    @Override
     2188    public void FArrayExpSubscripts.collectAccessNames(Set<String> collectedNames) {
     2189        for (FSubscript sub : getFSubscripts()) {
     2190            sub.collectAccessNames(collectedNames);
     2191        }
     2192    }
     2193
     2194
     2195    public void FSubscript.collectAccessNames(Set<String> collectedNames) {
     2196    }
     2197
     2198    @Override
     2199    public void FExpSubscript.collectAccessNames(Set<String> collectedNames) {
     2200        getFExp().collectAccessNames(collectedNames);
     2201    }
     2202
     2203    @Override
     2204    public void FIterExp.collectAccessNames(Set<String> collectedNames) {
     2205        for (CommonForIndex cfi : getForIndexs()) {
     2206            cfi.collectAccessNames(collectedNames);
     2207        }
     2208       
     2209        getFExp().collectAccessNames(collectedNames);
     2210    }
     2211
     2212    public abstract void CommonForIndex.collectAccessNames(Set<String> collectedNames);
     2213
     2214    @Override
     2215    public void FForIndex.collectAccessNames(Set<String> collectedNames) {
     2216        throw new UnsupportedOperationException();
     2217    }
     2218
     2219    @Override
     2220    public void InstForIndexWithExp.collectAccessNames(Set<String> collectedNames) {
     2221        getFExp().collectAccessNames(collectedNames);
     2222    }
     2223
     2224    @Override
     2225    public void InstForIndexNoExp.collectAccessNames(Set<String> collectedNames) {
     2226    }
     2227
     2228    public void InstAccess.collectAccessNamesInArraySubscripts(Set<String> collectedNames) {
     2229    }
     2230
     2231    @Override
     2232    public void InstDot.collectAccessNamesInArraySubscripts(Set<String> collectedNames) {
     2233        for (InstAccess access : getInstAccesss()) {
     2234            access.collectAccessNamesInArraySubscripts(collectedNames);
     2235        }
     2236    }
     2237
     2238    @Override
     2239    public void InstGlobalAccess.collectAccessNamesInArraySubscripts(Set<String> collectedNames) {
     2240        getInstAccess().collectAccessNamesInArraySubscripts(collectedNames);
     2241    }
     2242
     2243    @Override
     2244    public void InstArrayAccess.collectAccessNamesInArraySubscripts(Set<String> collectedNames) {
     2245        getFArraySubscripts().collectAccessNames(collectedNames);
     2246    }
     2247
     2248
    20982249    /**
    20992250     * If this is an overloaded operator expression, evaluate it as such, otherwise return null.
     
    21252276          }
    21262277    }
    2127    
    21282278   
    21292279    /**
     
    21632313     * This needs to be overridden for subclasses of FExp.
    21642314     */
    2165     syn CValue FExp.cevalCalc(VariableEvaluator evaluator) = CValue.UNSUPPORTED;
    2166    
     2315    syn CValue FExp.cevalCalc(VariableEvaluator evaluator);
     2316    eq FUnsupportedExp.cevalCalc(VariableEvaluator evaluator) = CValue.UNSUPPORTED;
     2317    eq FAbstractArrayExp.cevalCalc(VariableEvaluator evaluator) { throw new ConstantEvaluationException(null, "Can not evaluate scalar array expression ");}
     2318    eq InstPreExp.cevalCalc(VariableEvaluator evaluator) = CValue.UNSUPPORTED;
     2319    eq FNoExp.cevalCalc(VariableEvaluator evaluator) = CValue.UNSUPPORTED;
     2320
    21672321    eq FTimeExp.cevalCalc(VariableEvaluator evaluator) = evaluator.timeValue();
    21682322   
     
    22032357    }
    22042358
    2205     syn CValue FBinExp.cevalEval(CValue left, CValue right) { throw new ConstantEvaluationException(null, "Unimplemented attribute"); }
     2359    syn CValue FBinExp.cevalEval(CValue left, CValue right);
    22062360    eq FDotAddExp.cevalEval(CValue left, CValue right) = type().add(left, right);
    22072361    eq FDotSubExp.cevalEval(CValue left, CValue right) = type().sub(left, right);
     
    22242378    eq FUnaryExp.cevalCalc(VariableEvaluator evaluator) = evaluator.evalUnOp(this, getFExp().ceval(evaluator));
    22252379   
    2226     syn CValue FUnaryExp.cevalEval(CValue val) { throw new ConstantEvaluationException(null, "Unimplemented attribute"); }
     2380    syn CValue FUnaryExp.cevalEval(CValue val);
     2381    eq InstDerExp.cevalEval(CValue val) {
     2382        throw new ConstantEvaluationException(null,
     2383                 "Doesn't support evaluation of derivatives." + System.lineSeparator() +
     2384                 "Replace expression with a variable and provide the value.");
     2385    }
     2386   
     2387    /**
     2388     * Doesn't support evaluation of derivatives due to potential problems with
     2389     * use of the Differentiation framework in the instance tree before the transformation steps.
     2390     */
     2391    eq InstDerExp.cevalCalc(VariableEvaluator evaluator) {
     2392        throw new ConstantEvaluationException(null,
     2393                 "Doesn't support evaluation of derivatives." + System.lineSeparator() +
     2394                 "Replace expression with a variable and provide the value.");
     2395    }
     2396   
     2397
    22272398    eq FNegExp.cevalEval(CValue val) = type().neg(val);
    22282399    eq FNotExp.cevalEval(CValue val) = type().not(val);
     
    22752446   
    22762447    eq FSubscriptedExp.cevalCalc(VariableEvaluator evaluator) {
    2277         Index i = getFArraySubscripts().createIndex();
     2448        Index i = getFArraySubscripts().createIndex(evaluator);
    22782449        return getFExp().ceval(evaluator, i).array().getCell(i);
    22792450    }
     
    24362607            Index i = Index.NULL;
    24372608            if (var.ndims() > 0 && hasFArraySubscripts()) {
    2438                 i = getFArraySubscripts().createIndex();
     2609                i = getFArraySubscripts().createIndex(evaluator);
    24392610            }
    24402611            if (i != Index.NULL) {
     
    24702641        if (res.isUnknown()) return CValue.UNKNOWN;
    24712642        if (prefix.hasFArraySubscripts())
    2472           res = res.array().getCell(prefix.getFArraySubscripts().createIndex());
     2643          res = res.array().getCell(prefix.getFArraySubscripts().createIndex(evaluator));
    24732644        if (res.isUnknown()) return CValue.UNKNOWN;
    24742645        return res.record().getMember(last);
     
    25042675          if (isSlice()) {
    25052676              FArraySubscripts fas = getFArraySubscripts();
    2506               iHere = fas.createIndex();
     2677              iHere = fas.createIndex(evaluator);
    25072678              i = iHere.expand(i);
    25082679          }
     
    26832854    eq FIntegerSubscript.value() = getValue();
    26842855   
     2856    public int Subscript.value(VariableEvaluator evaluator);
     2857    public int FSubscript.value(VariableEvaluator evaluator) { return ceval(evaluator).intValue();}
     2858    public int IntegerSubscript.value(VariableEvaluator evaluator) { return value();}
     2859
    26852860    syn CValue InstComponentDecl.ceval() = ceval(defaultVariableEvaluator());
    26862861    syn CValue InstComponentDecl.ceval(VariableEvaluator evaluator) =
     
    32573432        public String qualifiedName();
    32583433        public Size size();
     3434        public boolean isInstClassConstant();
     3435        public boolean isInstPackageConstant();
     3436        public boolean inSameInstClass(InstNode instNode);
    32593437        public TypePrefixVariability variability();
    32603438
     
    32713449        public FAbstractVariable asFAbstractVariable();
    32723450    }
     3451   
     3452    public boolean FAbstractVariable.isInstClassConstant() { return false;}
     3453    public boolean InstComponentDecl.isInstClassConstant() { return isConstant() && enclosingInstComponentDecl() == null;}
     3454   
     3455    public boolean FAbstractVariable.isInstPackageConstant() { return false;}
     3456    public boolean InstComponentDecl.isInstPackageConstant() { return isInstClassConstant() && enclosingInstClassDecl().isPackage();}
     3457   
     3458    public boolean FAbstractVariable.inSameInstClass(InstNode instNode) { return false;}
     3459    public boolean InstComponentDecl.inSameInstClass(InstNode instNode) {
     3460        InstNode classDecl = instNode;
     3461        if (!classDecl.isClassDecl()) {
     3462            classDecl = classDecl.containingInstClass();
     3463        }
     3464        InstNode node = containingEntity();
     3465        if (node.equals(classDecl)) {
     3466            return true;
     3467        }
     3468        return false;
     3469    }
     3470   
     3471   
    32733472   
    32743473    FAbstractVariable implements CommonVariableDecl;
     
    45944793
    45954794aspect SourceCeval {
     4795    /**
     4796     * Source Constant evaluations only implemented for the most basic expressions.
     4797     */
    45964798    syn CValue SrcExp.ceval()        = CValue.UNKNOWN;
    45974799    eq SrcStringLitExp.ceval()       = new CValueString(unEscape());
     
    46334835     */
    46344836    syn CValue SrcExp.ceval(VariableEvaluator evaluator) = ceval();
    4635 
     4837   
    46364838    syn int SrcExp.ndimsCeval() {
    46374839        List<? extends SrcExp> exps = arrayChildrenForCeval();
     
    47054907        public CValue ceval(CommonVariableDecl variable) {
    47064908            return variable.ceval(this);
     4909        }
     4910       
     4911        /**
     4912         * Works only for supporting evaluators.
     4913         */
     4914        public CValue ceval(String name) {
     4915            throw new ConstantEvaluationException(null, "This evaluator doesn't support this type of value lookup");
    47074916        }
    47084917       
  • branches/dev-zk-1971/Compiler/ModelicaFlatTree/src/jastadd/FlatAPI/FlatAPI.jrag

    r12184 r12469  
    37693769        str.append("\n"); 
    37703770       
    3771         str.append(getConnectionSetManager().printConnectionSets());
     3771        str.append(connectionSetDiagnostics());
    37723772       
    37733773        return str.toString();
     
    41024102    }
    41034103
     4104    public String FClass.connectionSetDiagnostics() {
     4105        return getConnectionSetManager().printConnectionSets();
     4106    }
     4107   
    41044108    public String FClass.incidence() {
    41054109        return incidence(false);
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/errorcheck/TypeCheck.jrag

    r12244 r12469  
    15051505        }
    15061506        if (!typeOk) {
    1507             if (getBoundInput() == null) {
    1508                 error(nonBoundArgumentTypeError());
     1507            String msg = argumentTypeError();
     1508            if (msg != null) {
     1509                error(msg);
    15091510            } else {
    1510                 String msg = argumentTypeError();
    1511                 if (msg != null)
    1512                     error(msg);
    1513                 else
    1514                     error("%s: types of %s and input %s are not compatible\n" +
    1515                           "    type of '%s' is %s\n" +
    1516                           "    expected type is %s",
    1517                           functionCallDecription(), argumentDesc(), getBoundInput().name(),
    1518                           getFExp(), getFExp().type(),
    1519                           argumentDefinedTypeValid() ? getBoundInput().type().toString() : expectedArgumentType());
     1511                error("%s: types of %s and input %s are not compatible\n" +
     1512                      "    type of '%s' is %s\n" +
     1513                      "    expected type is %s",
     1514                      functionCallDecription(), argumentDesc(), getBoundInput().name(),
     1515                      getFExp(), getFExp().type(),
     1516                      argumentDefinedTypeValid() ? getBoundInput().type().toString() : expectedArgumentType());
    15201517            }
    15211518        }
     
    15431540    public void InstDefaultArgument.typeCheck(ErrorCheckType checkType) {}
    15441541
    1545     inh String InstFunctionArgument.nonBoundArgumentTypeError();
    1546     eq FExp.getChild().nonBoundArgumentTypeError() {
    1547         throw new UnsupportedOperationException("Method nonBoundArgumentTypeError() not implemented for type " + getClass().getSimpleName());
    1548     }
    1549     eq FArrayDimAsArgsExp.getOriginalArg(int i).nonBoundArgumentTypeError() =
    1550         functionCallDecription() + ": type of positional argument " + i + " is not compatible with Integer";
    1551  
    15521542  inh String InstFunctionArgument.argumentTypeError();
    15531543  eq FExp.getChild().argumentTypeError()         = null;
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/instance/InstFunctionBinding.jrag

    r11364 r12469  
    8282     */
    8383    syn InstComponentDecl InstFunctionArgument.getBoundInput() =
    84         isInstRecordConstructorArg() ? myRecordConstructorVirtualInstComponentDecl() : boundInput;
     84        isInstRecordConstructorArg() ? myRecordConstructorVirtualInstComponentDecl() :
     85            boundInput == null ? unknownInstComponentDecl() : boundInput;
    8586
    8687    /**
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/source/Parser.jrag

    r12354 r12469  
    219219    }
    220220
    221     public SrcExp ParserHandler.parseModelicaExpString(String str, boolean preservFormatting)
     221    public SrcExp ParserHandler.parseModelicaExpString(String str, boolean preserveFormatting)
    222222            throws ParserException, beaver.Parser.Exception, IOException {
    223223        AbstractModelicaScanner<ASTNode<?>> scanner = createModelicaScanner(new StringReader(str));
    224224        beaver.Parser parser = createModelicaParser(scanner, EXP_FILENAME);
    225225        SrcExp exp = (SrcExp) parser.parse(scanner, expModelicaGoal());
    226         if (preservFormatting) {
     226        if (preserveFormatting) {
    227227            scanner.getFormattingRecorder().postParsing(exp);
    228228        }
     
    242242    }
    243243
    244     public SrcElement ParserHandler.parseElemet(String code, String parentSourceFile)
    245             throws ParserException, beaver.Parser.Exception, IOException {
    246         return parseElemet(code, parentSourceFile, false);
    247     }
    248 
    249     public SrcElement ParserHandler.parseElemet(String code, String parentSourceFile, boolean preservFormatting)
     244    public SrcElement ParserHandler.parseElement(String code, String parentSourceFile)
     245            throws ParserException, beaver.Parser.Exception, IOException {
     246        return parseElement(code, parentSourceFile, false);
     247    }
     248
     249    public SrcElement ParserHandler.parseElement(String code, String parentSourceFile, boolean preserveFormatting)
    250250            throws ParserException, beaver.Parser.Exception, IOException {
    251251        AbstractModelicaScanner<ASTNode<?>> scanner = createModelicaScanner(new StringReader(code));
    252252        beaver.Parser parser = createModelicaParser(scanner, parentSourceFile);
    253253        SrcElement elem = (SrcElement) parser.parse(scanner, elementGoal());
    254         if (preservFormatting) {
     254        if (preserveFormatting) {
    255255            scanner.getFormattingRecorder().postParsing(elem);
    256256        }
     
    263263    }
    264264    public SrcAbstractEquation ParserHandler.parseAbstractEquation(String code, String parentSourceFile,
    265             boolean preservFormatting) throws ParserException, beaver.Parser.Exception, IOException {
     265            boolean preserveFormatting) throws ParserException, beaver.Parser.Exception, IOException {
    266266        AbstractModelicaScanner scanner = createModelicaScanner(new StringReader(code));
    267267        beaver.Parser parser = createModelicaParser(scanner, parentSourceFile);
    268268        SrcAbstractEquation eqn = (SrcAbstractEquation) parser.parse(scanner, abstractEquationGoal());
    269         if (preservFormatting) {
     269        if (preserveFormatting) {
    270270            scanner.getFormattingRecorder().postParsing(eqn);
    271271        }
     
    278278    }
    279279    public SrcArgument ParserHandler.parseModifier(String code, String parentSourceFile,
    280             boolean preservFormatting) throws ParserException, beaver.Parser.Exception, IOException {
     280            boolean preserveFormatting) throws ParserException, beaver.Parser.Exception, IOException {
    281281        AbstractModelicaScanner scanner = createModelicaScanner(new StringReader(code));
    282282        beaver.Parser parser = createModelicaParser(scanner, parentSourceFile);
    283283        SrcArgument eqn = (SrcArgument) parser.parse(scanner, modifierGoal());
    284         if (preservFormatting) {
     284        if (preserveFormatting) {
    285285            scanner.getFormattingRecorder().postParsing(eqn);
    286286        }
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/source/PredefinedTypes.jrag

    r11192 r12469  
    1616
    1717aspect PredefinedTypes {
     18
     19    inh boolean SrcClassDecl.isBuiltInClass();
     20    eq SourceRoot.getChild().isBuiltInClass()        = false;
     21    eq Program.getPredefinedType().isBuiltInClass()  = true;
     22    eq Program.getBuiltInType().isBuiltInClass()     = true;
     23    eq Program.getBuiltInFunction().isBuiltInClass() = true;
    1824
    1925    public List SourceRoot.computePredefinedType() {
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/source/SimpleLookup.jrag

    r11516 r12469  
    4949    * Find the SrcClassDecl referenced by this access.
    5050    */
    51     syn SrcClassDecl SrcAccess.findClassDecl();
    52     syn lazy SrcClassDecl SrcNamedAccess.findClassDecl() {
     51    syn SrcClassDecl SrcAccess.findClassDecl() = resolveAccess().getClassDecl();
     52   
     53    syn ResolvedAccess SrcAccess.resolveAccess();
     54    syn lazy ResolvedAccess SrcNamedAccess.resolveAccess() {
    5355        if (duringFindClassDecl) {
    54             return unknownClassDecl();
     56            return unknownAccess();
    5557        }
    5658        duringFindClassDecl = true;
    5759        try {
    58             return simpleLookupClassHelper(getID());
     60            return simpleLookupHelper(getID());
    5961        } finally {
    6062            duringFindClassDecl = false;
    6163        }
    6264    }
    63     eq SrcDot.findClassDecl()          = getLastAccess().findClassDecl();
    64     eq SrcGlobalAccess.findClassDecl() = getSrcAccess().findClassDecl();
     65    eq SrcDot.resolveAccess()          = getLastAccess().resolveAccess();
     66    eq SrcGlobalAccess.resolveAccess() = getSrcAccess().resolveAccess();
    6567
    6668    /**
     
    9092        SrcClassDecl cd = this;
    9193        if (qName.isGlobal()) {
    92             cd = simpleLookupClassGlobalScope(qName.next());
     94            cd = simpleLookupGlobalScope(qName.next()).getClassDecl();
    9395        }else {
    94             cd = simpleLookupClassIncludeImports(qName.next());
     96            cd = simpleLookupIncludeImports(qName.next()).getClassDecl();
    9597        }
    9698
    9799        while (cd != null && qName.hasNext()) {
    98             cd = cd.simpleLookupClassMemberScope(qName.next());
     100            cd = cd.simpleLookupMemberScope(qName.next()).getClassDecl();
    99101            if (cd == null) {
    100102                return null;
     
    111113    public SrcClassDecl Program.simpleLookupClass(String name) {
    112114        QualifiedName qName = new QualifiedName(name);
    113         SrcClassDecl cd = simpleLookupClassDefaultScope(qName.next());
     115        SrcClassDecl cd = simpleLookupDefaultScope(qName.next()).getClassDecl();
    114116        if (!qName.hasNext()) {
    115117            return cd;
    116118        }
    117119        while (cd != null && qName.hasNext()) {
    118             cd = cd.simpleLookupClassMemberScope(qName.next());
     120            cd = cd.simpleLookupMemberScope(qName.next()).getClassDecl();
    119121            if (cd == null) {
    120122                return null;
     
    124126    }
    125127
     128
     129    syn ResolvedAccess ASTNode.unknownAccess()         = root().unknownAccess();
     130    syn lazy ResolvedAccess SourceRoot.unknownAccess() = new UnknownAccess(unknownClassDecl(), unknownComponentDecl());
     131   
     132    public ResolvedAccess ASTNode.createResolvedAccess(SrcClassDecl decl, String context) {
     133        return new ClassAccess(decl, unknownComponentDecl(), context, decl.isProtected());
     134    }
     135    public ResolvedAccess ASTNode.createResolvedAccess(SrcComponentDecl decl, String context) {
     136        return new ComponentAccess(unknownClassDecl(), decl, context, decl.isProtected());
     137    }
     138
     139    public abstract class ResolvedAccess {
     140
     141        private SrcClassDecl classDecl;
     142        private SrcComponentDecl componentDecl;
     143        private String context;
     144        private boolean isProtected;
     145       
     146        public ResolvedAccess(SrcClassDecl classDecl, SrcComponentDecl componentDecl, String context, boolean isProtected) {
     147            this.classDecl = classDecl;
     148            this.componentDecl = componentDecl;
     149            this.context = context;
     150            this.isProtected = isProtected;
     151        }
     152       
     153        public abstract String name();
     154        public abstract boolean isUnknown();
     155        public abstract ResolvedAccess fromContext(String context, boolean isProtected);
     156        public abstract ResolvedAccess simpleLookupMemberScope(String name);
     157       
     158        public boolean isClassDecl() {
     159            return false;
     160        }
     161       
     162        public boolean isComponentDecl() {
     163            return false;
     164        }
     165       
     166        public SrcClassDecl getClassDecl() {
     167            return classDecl;
     168        }
     169        public SrcComponentDecl getComponentDecl() {
     170            return componentDecl;
     171        }
     172        public boolean isProtected() {
     173            return isProtected;
     174        }
     175        public String qualifiedName() {
     176            return context != null ? context + "." + name() : name();
     177        }
     178        public String globalAccess() {
     179            return "." + qualifiedName();
     180        }
     181        public String toString() {
     182            return qualifiedName();
     183        }
     184    }
     185
     186    public class UnknownAccess extends ResolvedAccess {
     187       
     188        public UnknownAccess(SrcClassDecl classDecl, SrcComponentDecl componentDecl) {
     189            super(classDecl, componentDecl, null, false);
     190        }
     191
     192        @Override
     193        public String name() {
     194            return "Unknown";
     195        }
     196        @Override
     197        public boolean isUnknown() {
     198            return true;
     199        }
     200        @Override
     201        public ResolvedAccess fromContext(String context, boolean isProtected) {
     202            return this;
     203        }
     204        @Override
     205        public ResolvedAccess simpleLookupMemberScope(String name) {
     206            return this;
     207        }
     208    }
     209
     210    public class ClassAccess extends ResolvedAccess {
     211       
     212        public ClassAccess(SrcClassDecl classDecl, SrcComponentDecl componentDecl, String context, boolean isProtected) {
     213            super(classDecl, componentDecl, context, isProtected);
     214        }
     215       
     216        @Override
     217        public String name() {
     218            return getClassDecl().name();
     219        }
     220       
     221        @Override
     222        public boolean isUnknown() {
     223            return getClassDecl().isUnknown();
     224        }
     225       
     226        @Override
     227        public ResolvedAccess fromContext(String context, boolean isProtected) {
     228            return new ClassAccess(getClassDecl(), getComponentDecl(), context, isProtected || isProtected());
     229        }
     230       
     231        @Override
     232        public ResolvedAccess simpleLookupMemberScope(String name) {
     233            return getClassDecl().simpleLookupMemberScope(name);
     234        }
     235       
     236        @Override
     237        public boolean isClassDecl() {
     238            return true;
     239        }
     240    }
     241
     242    public class ComponentAccess extends ResolvedAccess {
     243       
     244        public ComponentAccess(SrcClassDecl classDecl, SrcComponentDecl componentDecl, String context, boolean isProtected) {
     245            super(classDecl, componentDecl, context, isProtected);
     246        }
     247       
     248        @Override
     249        public String name() {
     250            return getComponentDecl().name();
     251        }
     252       
     253        @Override
     254        public boolean isUnknown() {
     255            return getComponentDecl().isUnknown();
     256        }
     257
     258        @Override
     259        public ResolvedAccess fromContext(String context, boolean isProtected) {
     260            return new ComponentAccess(getClassDecl(), getComponentDecl(), context, isProtected || isProtected());
     261        }
     262
     263        @Override
     264        public ResolvedAccess simpleLookupMemberScope(String name) {
     265            return getComponentDecl().findClassDecl().simpleLookupMemberScope(name);
     266        }
     267       
     268        @Override
     269        public boolean isComponentDecl() {
     270            return true;
     271        }
     272    }
     273
    126274    /**
    127275    * Lookup helper method for SrcAccess and SrcClassDecl. Obtain the SrcClassDecl
    128276    * by looking after the target class one "name" piece at a time in the correct scope.
    129277    */
    130     inh SrcClassDecl SrcAccess.simpleLookupClassHelper(String name);
    131     inh SrcClassDecl SrcClassDecl.simpleLookupClassHelper(String name);
    132     eq SrcDot.getSrcAccess(int i).simpleLookupClassHelper(String name)          =
    133         (i == 0) ? simpleLookupClassHelper(name) : getSrcAccess(i - 1).findClassDecl().simpleLookupClassMemberScope(name);
    134     eq SrcGlobalAccess.getSrcAccess().simpleLookupClassHelper(String name)      = simpleLookupClassGlobalScope(name);
    135     eq SrcImportClause.getPackageName().simpleLookupClassHelper(String name) = simpleLookupClassGlobalScope(name);
    136     eq SrcExtendsClause.getChild().simpleLookupClassHelper(String name)      = simpleLookupClassFromExtends(name);
    137     eq SrcFullClassDecl.getChild().simpleLookupClassHelper(String name)      = simpleLookupClassDefaultScope(name);
    138     eq Program.getChild().simpleLookupClassHelper(String name)            = simpleLookupClassDefaultScope(name);
     278    inh ResolvedAccess ASTNode.simpleLookupHelper(String name);
     279    eq SrcDot.getSrcAccess(int i).simpleLookupHelper(String name)             = simpleLookupDot(name, i);
     280    eq SrcGlobalAccess.getSrcAccess().simpleLookupHelper(String name)         = simpleLookupGlobalScope(name);
     281    eq SrcArrayAccess.getSrcArraySubscripts().simpleLookupHelper(String name) = simpleLookupBypassDot(name);
     282    eq SrcImportClause.getPackageName().simpleLookupHelper(String name)       = simpleLookupGlobalScope(name);
     283    eq SrcExtendsClause.getSuper().simpleLookupHelper(String name)            = simpleLookupFromExtends(name);
     284    eq SrcFullClassDecl.getChild().simpleLookupHelper(String name)            = simpleLookupDefaultScope(name);
     285    eq Program.getChild().simpleLookupHelper(String name)                     = simpleLookupDefaultScope(name);
     286    eq SrcForStmt.getChild().simpleLookupHelper(String name)                  = simpleLookupForStmt(name);
     287    eq SrcComponentDecl.getSrcModification().simpleLookupHelper(String name)  = simpleLookupFromModification(name);
     288    eq SrcValueModification.getSrcExp().simpleLookupHelper(String name)       = simpleLookupFromValue(name);
     289    eq SrcComponentRedeclare.getSrcComponentClause().simpleLookupHelper(String name) = simpleLookupFromValue(name);
     290    eq SrcClassRedeclare.getSrcBaseClassDecl().simpleLookupHelper(String name)       = simpleLookupFromValue(name);
     291   
     292    inh ResolvedAccess SrcModification.simpleLookupFromValue(String name);
     293    eq SrcComponentDecl.getChild().simpleLookupFromValue(String name)         = simpleLookupHelper(name);
     294    eq SrcExtendsClause.getChild().simpleLookupFromValue(String name)         = simpleLookupHelper(name);
     295    eq SrcConstrainingClause.getChild().simpleLookupFromValue(String name)    = simpleLookupHelper(name);
     296    eq SrcFullClassDecl.getChild().simpleLookupFromValue(String name)         = simpleLookupDefaultScope(name);
    139297
    140298    /**
    141299    * Lookup helper method for SrcExtendsClause. Obtain the SrcClassDecl
    142     * with the given name. Has to be a unqualified classname.
    143     */
    144     inh SrcClassDecl SrcExtendsClause.simpleLookupClassFromExtends(String name);
    145     eq SrcFullClassDecl.getChild().simpleLookupClassFromExtends(String name) = simpleLookupClassLocalScope(name);
    146     eq Program.getChild().simpleLookupClassFromExtends(String name)       = simpleLookupClassDefaultScope(name);
    147 
    148     /**
    149     * Lookup simple name in global scope. Has to be a unqualified classname.
    150     */
    151     inh SrcClassDecl SrcAccess.simpleLookupClassGlobalScope(String name);
    152     inh SrcClassDecl SrcClassDecl.simpleLookupClassGlobalScope(String name);
    153     inh SrcClassDecl SrcImportClause.simpleLookupClassGlobalScope(String name);
    154     eq Program.getChild().simpleLookupClassGlobalScope(String name) = simpleLookupClassDefaultScope(name);
    155 
    156     /**
    157     * Lookup simple name in global scope. Has to be a unqualified classname.
    158     */
    159     syn lazy SrcClassDecl Program.simpleLookupClassDefaultScope(String name) {
     300    * with the given name. Has to be an unqualified classname.
     301    */
     302    inh ResolvedAccess SrcExtendsClause.simpleLookupFromExtends(String name);
     303    eq SrcFullClassDecl.getChild().simpleLookupFromExtends(String name) = simpleLookupLocalScope(name);
     304    eq Program.getChild().simpleLookupFromExtends(String name)       = simpleLookupDefaultScope(name);
     305
     306    /**
     307    * Lookup simple name in global scope. Has to be an unqualified classname.
     308    */
     309    inh ResolvedAccess SrcAccess.simpleLookupGlobalScope(String name);
     310    inh ResolvedAccess SrcClassDecl.simpleLookupGlobalScope(String name);
     311    inh ResolvedAccess SrcImportClause.simpleLookupGlobalScope(String name);
     312    eq Program.getChild().simpleLookupGlobalScope(String name) = simpleLookupDefaultScope(name);
     313
     314    /**
     315    * Lookup simple name in global scope. Has to be an unqualified classname.
     316    */
     317    syn lazy ResolvedAccess Program.simpleLookupDefaultScope(String name) {
    160318        for (SrcStoredDefinition sd : getUnstructuredEntitys()) {
    161319            for (SrcClassDecl cd : sd.getSrcClassDecls()) {
    162320                if (cd.matches(name)) {
    163                     return cd;
     321                    return createResolvedAccess(cd, null);
    164322                }
    165323            }
    166324        }
    167325       
    168         SrcClassDecl res = simpleLookupInClassList(getPredefinedTypes(), name);
    169         if (res != null) {
     326        ResolvedAccess res = simpleLookupPredefined(name);
     327        if (!res.isUnknown()) {
    170328            return res;
    171329        }
    172330
    173         res = simpleLookupInClassList(getBuiltInTypes(), name);
    174         if (res != null) {
     331        return simpleLookupInLibNodeList(getSrcLibNodes(), name);
     332    }
     333
     334    /**
     335     * Lookup in contained elements, extended classes, imports and surrounding classes.
     336     *  Has to be an unqualified classname.
     337     */
     338    syn lazy ResolvedAccess SrcFullClassDecl.simpleLookupDefaultScope(String name) {
     339        ResolvedAccess res = simpleLookupIncludeImports(name);
     340        if (res.isUnknown()) {
     341            return isEncapsulated() ? simpleLookupPredefined(name) : simpleLookupHelper(name);
     342        }
     343        return res;
     344    }
     345
     346    /**
     347     * Lookup a predefined type, function or operator in global scope. Has to be an unqualified classname.
     348     */
     349    inh ResolvedAccess SrcClassDecl.simpleLookupPredefined(String name);
     350    eq Program.getChild().simpleLookupPredefined(String name) = simpleLookupPredefined(name);
     351
     352    /**
     353     * Lookup a predefined type, function or operator in global scope. Has to be an unqualified classname.
     354     */
     355    syn ResolvedAccess Program.simpleLookupPredefined(String name) {
     356        ResolvedAccess res = simpleLookupInClassList(getPredefinedTypes(), name, null);
     357        if (!res.isUnknown()) {
    175358            return res;
    176359        }
    177360
    178         res = simpleLookupInClassList(getBuiltInFunctions(), name);
    179         if (res != null) {
     361        res = simpleLookupInClassList(getBuiltInTypes(), name, null);
     362        if (!res.isUnknown()) {
    180363            return res;
    181364        }
    182         res = simpleLookupInLibNodeList(getSrcLibNodes(), name);
    183         return (res != null) ? res : getSrcUnknownClassDecl();
     365
     366        return simpleLookupInClassList(getBuiltInFunctions(), name, null);
    184367    }
    185368
     
    188371     * Has to be an unqualified classname.
    189372     */
    190     syn SrcClassDecl SrcClassDecl.simpleLookupClassIncludeImports(String name) = simpleLookupClassMemberScope(name);
    191     eq SrcFullClassDecl.simpleLookupClassIncludeImports(String name) {
    192         SrcClassDecl res = simpleLookupClassMemberScope(name);
     373    syn ResolvedAccess SrcClassDecl.simpleLookupIncludeImports(String name) = simpleLookupMemberScope(name);
     374    eq SrcFullClassDecl.simpleLookupIncludeImports(String name) {
     375        ResolvedAccess res = simpleLookupMemberScope(name);
    193376        if (res.isUnknown()) {
    194             res = simpleLookupClassInImports(name);
     377            res = simpleLookupInImports(name);
    195378        }
    196379        return res;
     
    198381
    199382    /**
    200      * Lookup in contained classes, extended classes, imports and surrounding classes.
    201      *  Has to be an unqualified classname.
    202      */
    203     syn lazy SrcClassDecl SrcFullClassDecl.simpleLookupClassDefaultScope(String name) {
    204         SrcClassDecl res = simpleLookupClassIncludeImports(name);
    205         return res.isUnknown() ? simpleLookupClassHelper(name) : res;
    206     }
    207 
    208     /**
    209      * Lookup in contained classes, imports and surrounding classes. Has to be a unqualified classname.
    210      */
    211     syn lazy SrcClassDecl SrcFullClassDecl.simpleLookupClassLocalScope(String name) {
     383     * Lookup in contained classes, imports and surrounding classes. Has to be an unqualified classname.
     384     */
     385    syn lazy ResolvedAccess SrcFullClassDecl.simpleLookupLocalScope(String name) {
    212386        if (duringFindClassDeclRevisits > MAX_FIND_CLASS_DECL_REVISITS) {
    213             return unknownClassDecl();
     387            return unknownAccess();
    214388        }
    215389        duringFindClassDeclRevisits++;
    216390
    217         SrcClassDecl res = simpleLookupInClassList(classes(), name);
    218         if (res == null) {
    219             res = simpleLookupClassInImports(name);
     391        ResolvedAccess res = simpleLookupInClassList(classes(), name, qualifiedName());
     392        if (res.isUnknown()) {
     393            res = simpleLookupInComponentList(components(), name, qualifiedName());
     394            if (res.isUnknown()) {
     395                res = simpleLookupInImports(name);
     396            }
    220397        }
    221398        duringFindClassDeclRevisits--;
    222         return res.isUnknown() ? simpleLookupClassHelper(name) : res;
    223     }
    224 
    225 
    226     /**
    227      * Lookup in contained classes and extended classes. Has to be a unqualified classname.
    228      */
    229     syn SrcClassDecl SrcClassDecl.simpleLookupClassMemberScope(String name) = unknownClassDecl();
    230     eq SrcUnknownClassDecl.simpleLookupClassMemberScope(String name)     = unknownClassDecl();
     399        if (res.isUnknown()) {
     400            return isEncapsulated() ? simpleLookupPredefined(name) : simpleLookupHelper(name);
     401        }
     402        return res;
     403    }
     404
     405
     406    /**
     407     * Lookup in contained classes and extended classes. Has to be an unqualified classname.
     408     */
     409    syn ResolvedAccess SrcClassDecl.simpleLookupMemberScope(String name);
     410    eq SrcBadClassDecl.simpleLookupMemberScope(String name)      = unknownAccess();
     411    eq SrcBuiltInClassDecl.simpleLookupMemberScope(String name)  = unknownAccess();
     412    eq SrcUnknownClassDecl.simpleLookupMemberScope(String name)  = unknownAccess();
    231413
    232414    /**
    233415     * Lookup in contained classes and extended classes.
    234      * Has to be a unqualified classname.
     416     * Has to be an unqualified classname.
    235417     * This method returns the unknown class when the class isn't found.
    236418     */
    237     syn lazy SrcClassDecl SrcFullClassDecl.simpleLookupClassMemberScope(String name) {
     419    syn lazy ResolvedAccess SrcFullClassDecl.simpleLookupMemberScope(String name) {
    238420        if (duringFindClassDeclRevisits > MAX_FIND_CLASS_DECL_REVISITS) {
    239             return unknownClassDecl();
     421            return unknownAccess();
    240422        }
    241423        duringFindClassDeclRevisits++;
    242424
    243         SrcClassDecl res = simpleLookupInClassList(classes(), name);
    244         if (res == null) {
    245             res = simpleLookupClassInExtends(name);
     425        ResolvedAccess res = simpleLookupInClassList(classes(), name, qualifiedName());
     426        if (res.isUnknown()) {
     427            res = simpleLookupInComponentList(components(), name, qualifiedName());
     428            if (res.isUnknown()) {
     429                res = simpleLookupInExtends(name);
     430            }
    246431        }
    247432        duringFindClassDeclRevisits--;
    248433        return res;
    249434    }
    250     eq SrcLibClassDecl.simpleLookupClassMemberScope(String name) {
     435    eq SrcLibClassDecl.simpleLookupMemberScope(String name) {
    251436        if (duringFindClassDeclRevisits > MAX_FIND_CLASS_DECL_REVISITS) {
    252             return unknownClassDecl();
     437            return unknownAccess();
    253438        }
    254439        duringFindClassDeclRevisits++;
    255440
    256441
    257         SrcClassDecl res = super.simpleLookupClassMemberScope(name);
     442        ResolvedAccess res = super.simpleLookupMemberScope(name);
    258443        if (res.isUnknown()) {
    259             SrcClassDecl libRes = simpleLookupInLibNodeList(getSrcLibNodes(), name);
    260             if (libRes != null) {
     444            ResolvedAccess libRes = simpleLookupInLibNodeList(getSrcLibNodes(), name);
     445            if (!libRes.isUnknown()) {
    261446                res = libRes;
    262447            }
     
    266451    }
    267452
    268     eq SrcShortClassDecl.simpleLookupClassMemberScope(String name) =
    269         getSrcExtendsClauseShortClass().findClassDecl().simpleLookupClassMemberScope(name);
    270     eq SrcLibNode.simpleLookupClassMemberScope(String name)        =
    271         myClass().simpleLookupClassMemberScope(name);
     453    eq SrcShortClassDecl.simpleLookupMemberScope(String name) =
     454        getSrcExtendsClauseShortClass().findClassDecl().simpleLookupMemberScope(name);
     455    eq SrcLibNode.simpleLookupMemberScope(String name)        =
     456        myClass().simpleLookupMemberScope(name);
     457
     458    syn ResolvedAccess SrcForStmt.simpleLookupForStmt(String name) {
     459        for (SrcForIndex index : getSrcForIndexs()) {
     460            SrcForIndexDecl indexDecl = index.getSrcForIndexDecl();
     461            if (indexDecl.name().equals(name)) {
     462                return createResolvedAccess(indexDecl, indexDecl.enclosingClassDecl().qualifiedName());
     463            }
     464        }
     465        return simpleLookupHelper(name);
     466    }
     467
     468    syn ResolvedAccess SrcDot.simpleLookupDot(String name, int i) {
     469        if (i == 0) {
     470            return simpleLookupHelper(name);
     471        }
     472        ResolvedAccess access = getSrcAccess(i - 1).resolveAccess();
     473        return access.simpleLookupMemberScope(name).fromContext(access.qualifiedName(), access.isProtected());
     474    }
     475
     476    inh ResolvedAccess SrcAccess.simpleLookupBypassDot(String name);
     477    eq BaseNode.getChild(int i).simpleLookupBypassDot(String name) = getChild(i).simpleLookupHelper(name);
     478    eq SrcDot.getSrcAccess().simpleLookupBypassDot(String name)    = simpleLookupHelper(name);
     479
    272480
    273481    /**
    274482    * Helper method which search for the class in the imported class.
    275     * Has to be a unqualified classname.
    276     */
    277     syn SrcClassDecl SrcImportClause.simpleLookupClassInImport(String name) =
    278         matches(name) ? findClassDecl() : unknownClassDecl();
    279     eq SrcImportClauseUnqualified.simpleLookupClassInImport(String name) =
    280         findClassDecl().simpleLookupClassMemberScope(name);
     483    * Has to be an unqualified classname.
     484    */
     485    syn ResolvedAccess SrcImportClause.simpleLookupInImport(String name) =
     486        matches(name) ? getPackageName().resolveAccess() : unknownAccess();
     487    eq SrcImportClauseUnqualified.simpleLookupInImport(String name) =
     488        getPackageName().resolveAccess().simpleLookupMemberScope(name);
    281489
    282490
    283491    /**
    284492     * Helper method which looks for the class with the given name among this class's imported classes.
    285      * Has to be a unqualified classname.
     493     * Has to be an unqualified classname.
    286494     * This method returns the unknown class when the class isn't found.
    287495     */
    288     protected SrcClassDecl SrcFullClassDecl.simpleLookupClassInImports(String name) {
    289         SrcClassDecl res;
     496    protected ResolvedAccess SrcFullClassDecl.simpleLookupInImports(String name) {
     497        ResolvedAccess res;
    290498        for (SrcImportClause imp : imports()) {
    291             res = imp.simpleLookupClassInImport(name);
     499            res = imp.simpleLookupInImport(name);
    292500            if (!res.isUnknown()) {
    293501                return res;
     
    295503        }
    296504       
    297         return unknownClassDecl();
    298     }
    299 
    300     /**
    301      * Helper method which looks for the class with the given name among this class's imported classes.
    302      * Has to be a unqualified classname.
     505        return unknownAccess();
     506    }
     507
     508    /**
     509     * Helper method which looks for the class with the given name among this class's super classes.
     510     * Has to be an unqualified classname.
    303511     * This method returns the unknown class when the class isn't found.
    304512     */
    305     protected SrcClassDecl SrcFullClassDecl.simpleLookupClassInExtends(String name) {
    306         SrcClassDecl res;
    307         for (SrcExtendsClause sup : superClasses()) {
    308             res = sup.findClassDecl().simpleLookupClassMemberScope(name);
     513    protected ResolvedAccess SrcFullClassDecl.simpleLookupInExtends(String name) {
     514        ResolvedAccess res;
     515        for (SrcExtendsClause superClass : superClasses()) {
     516            res = superClass.findClassDecl().simpleLookupMemberScope(name);
    309517            if (!res.isUnknown()) {
    310                 return res;
    311             }
    312         }
    313        
    314         return unknownClassDecl();
     518                return res.fromContext(qualifiedName(), superClass.isProtected());
     519            }
     520        }
     521       
     522        return unknownAccess();
     523    }
     524
     525    protected ResolvedAccess SrcComponentDecl.simpleLookupFromModification(String name) {
     526        ResolvedAccess res = findClassDecl().simpleLookupMemberScope(name);
     527        if (!res.isUnknown()) {
     528            return res.fromContext(enclosingClassDecl().qualifiedName() + "." + name(), isProtected());
     529        }
     530        return simpleLookupHelper(name);
    315531    }
    316532
    317533    /**
    318534     * Convenience method for looking up a class in a list of SrcClassDecls.
    319      * Has to be a unqualified classname.
     535     * Has to be an unqualified classname.
    320536     * This method returns null when the class isn't found.
    321537     */
    322     public static SrcClassDecl ASTNode.simpleLookupInClassList(Iterable<? extends SrcClassDecl> list, String name) {
     538    public ResolvedAccess ASTNode.simpleLookupInClassList(Iterable<? extends SrcClassDecl> list, String name, String enclosingClass) {
    323539        for (SrcClassDecl cd : list) {
    324540            if (cd.matches(name)) {
    325                 return cd;
    326             }
    327         }
    328         return null;
     541                return createResolvedAccess(cd, enclosingClass);
     542            }
     543        }
     544        return unknownAccess();
     545    }
     546
     547    /**
     548     * Convenience method for looking up a component in a list of SrcComponentDecls.
     549     * Has to be an unqualified name.
     550     * This method returns null when the component isn't found.
     551     */
     552    public ResolvedAccess ASTNode.simpleLookupInComponentList(Iterable<? extends SrcComponentDecl> list,
     553            String name, String enclosingElement) {
     554        for (SrcComponentDecl cd : list) {
     555            if (cd.matches(name)) {
     556                return createResolvedAccess(cd, enclosingElement);
     557            }
     558        }
     559        return unknownAccess();
    329560    }
    330561
    331562    /**
    332563     * Convenience method for looking up a class in the given list of SrcLibNodes.
    333      * Has to be a unqualified classname.
     564     * Has to be an unqualified classname.
    334565     * This method returns null when the class isn't found.
    335566     */
    336     public static SrcClassDecl ASTNode.simpleLookupInLibNodeList(List<SrcLibNode> list, String name) {
     567    public ResolvedAccess ASTNode.simpleLookupInLibNodeList(List<SrcLibNode> list, String name) {
    337568        for (SrcLibNode ln : list) {
    338569            if (ln.matches(name)) {
    339                 return (SrcClassDecl) ln;
    340             }
    341         }
    342         return null;
     570                return createResolvedAccess((SrcClassDecl) ln, null);
     571            }
     572        }
     573        return unknownAccess();
    343574    }
    344575
     
    348579    eq SrcIdDecl.matches(String str)                = getID().equals(str);
    349580    eq SrcBaseClassDecl.matches(String str)         = getName().matches(str);
     581    eq SrcComponentDecl.matches(String str)         = getName().matches(str);
    350582    eq SrcImportClauseRename.matches(String str)    = getSrcIdDecl().matches(str);
    351583    eq SrcImportClauseQualified.matches(String str) =
     
    360592    /**
    361593    * Test the lookup of classes for classes in a model.
    362     * This method is only for use by JUnit tests testing the simpleLookup functionality.
     594    * This method is only for use by JUnit tests testing the simpleLookupClass functionality.
    363595    *
    364596    * The required input is pairs of class to start from and the class which should be search for in an array.
     
    381613    /**
    382614    * Test the lookup of all extends, imports and components which can be looked up in a given class.
    383     * This method is only for use by JUnit tests testing the simpleLookup functionality.
     615    * This method is only for use by JUnit tests testing the simpleLookupClass functionality.
    384616    */
    385617    public String SourceRoot.testFindMyClassDecl(String whichClass) {
     
    394626
    395627    /**
    396     * This method is only for use by JUnit tests testing the simpleLookup functionality.
     628    * This method is only for use by JUnit tests testing the simpleLookupClass functionality.
    397629    */
    398630    private void SourceRoot.testLookupAllClassDecls(StringBuilder sb, ASTNode node) {
     
    404636        }
    405637    }
     638
     639    /**
     640     * Find the SrcComponentDecl referenced by this access, if the access references a constant.
     641     */
     642    syn SrcComponentDecl SrcAccess.findConstantDecl() = findConstant().getComponentDecl();
     643   
     644    syn ResolvedAccess SrcAccess.findConstant() {
     645        ResolvedAccess access = resolveAccess();
     646        if (access.getComponentDecl().isConstant()) {
     647            return access;
     648        }
     649        return unknownAccess();
     650    }
     651   
     652
     653
     654    public String InstClassDecl.testFindConstant() {
     655        SrcClassDecl sourceClass = getSrcClassDecl();
     656        StringBuilder sb = new StringBuilder();
     657        sourceClass.testFindConstant(sb);
     658        return sb.toString();
     659    }
     660
     661    public void ASTNode.testFindConstant(StringBuilder sb) {
     662        for (ASTNode child : this) {
     663            child.testFindConstant(sb);
     664        }
     665    }
     666
     667    public void SrcNamedAccess.testFindConstant(StringBuilder sb) {
     668        SrcClassDecl classDecl = findClassDecl();
     669        if (classDecl.isUnknown()) {
     670            sb.append(getID());
     671            sb.append("=");
     672            sb.append(findConstant());
     673            sb.append('\n');
     674        }
     675    }
     676
     677    public void SrcArrayAccess.testFindConstant(StringBuilder sb) {
     678        super.testFindConstant(sb);
     679        getSrcArraySubscripts().testFindConstant(sb);
     680    }
     681
     682    public void SrcParseAnnotation.testFindConstant(StringBuilder sb) {
     683    }
    406684}
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/util/Annotations.jrag

    r12327 r12469  
    6767    eq SrcFullClassDecl.annotation(InstContext instContext)           = annotationOfChild(getSrcAnnotationOpt(), instContext);
    6868    eq InstClassDecl.annotation(InstContext instContext)              = getSrcClassDecl().annotation(instContext);
     69    eq InstAbstractShortClassDecl.annotation(InstContext instContext) = !isFunction() ? mySrcAnnotatable().annotation(instContext) : getSrcClassDecl().annotation(instContext);
    6970    eq SrcShortClassDecl.annotation(InstContext instContext)          = getSrcExtendsClauseShortClass().annotation(instContext);
    7071    eq SrcLibNode.annotation(InstContext instContext)                 = myClass().annotation(instContext);
     
    7374    eq SrcAbstractEquation.annotation(InstContext instContext) = getSrcComment().annotation(instContext);
    7475
    75     eq SrcComponentDecl.annotation(InstContext instContext)  = getSrcComment().annotation(instContext);
     76    eq SrcComponentDecl.annotation(InstContext instContext) {
     77        SrcComment comment = myComponentClause().getSrcComment();
     78        if (comment.hasSrcAnnotation()) {
     79            return new CombinedAnnotationNode(comment.annotation(instContext), getSrcComment().annotation(instContext));
     80        }
     81        return getSrcComment().annotation(instContext);
     82    }
    7683    eq InstComponentDecl.annotation(InstContext instContext) = mySrcAnnotatable().annotation(instContext);
    7784
     
    234241        ArrayList<SrcExp> exps = new ArrayList<>();
    235242        for (AnnotationNode annotation : annotations()) {
    236             annotation.ast().collectExps(exps);
     243            annotation.collectExps(exps);
    237244        }
    238245        return exps;
     
    10021009
    10031010        /**
     1011         * Collects expressions in this annotation for instantiation and evaluation.
     1012         */
     1013        public void collectExps(ArrayList<SrcExp> exps) {
     1014            ast().collectExps(exps);
     1015        }
     1016
     1017        /**
    10041018         * Iterates over the annotation nodes representing the nodes in the list.
    10051019         */
     
    12181232     */
    12191233    public abstract class RootAnnotationNode extends AnnotationNode {
     1234       
     1235        @Override
     1236        public void collectExps(ArrayList<SrcExp> exps) {
     1237        }
    12201238    }
    12211239
     
    18521870            attrs.addFAttribute(attr);
    18531871            return new FAttributeAnnotationNode(attr, instContext);
     1872        }
     1873    }
     1874
     1875    public class CombinedAnnotationNode extends AnnotationNode {
     1876       
     1877        private final AnnotationNode first;
     1878        private final AnnotationNode second;
     1879       
     1880        public CombinedAnnotationNode(AnnotationNode first, AnnotationNode second) {
     1881            this.first  = first;
     1882            this.second = second;
     1883        }
     1884       
     1885        @Override
     1886        protected ASTNode ast() {
     1887            return first.ast();
     1888        }
     1889
     1890        @Override
     1891        public Iterator<AnnotationNode> attributeIterator() {
     1892            return new ChainedIterator<AnnotationNode>(first.attributeIterator(), second.attributeIterator());
     1893        }
     1894
     1895        @Override
     1896        protected AnnotationNode lookup(String path) {
     1897            AnnotationNode first  = this.first.lookup(path);
     1898            AnnotationNode second = this.second.lookup(path);
     1899            if (first != null && first.exists()) {
     1900                if (second != null && second.exists()) {
     1901                    return new CombinedAnnotationNode(first, second);
     1902                }
     1903                return first;
     1904            }
     1905            return second;
     1906        }
     1907
     1908        @Override
     1909        public AnnotationNode addNode(String path) {
     1910            return first.addNode(path);
     1911        }
     1912       
     1913        @Override
     1914        public void collectExps(ArrayList<SrcExp> exps) {
     1915            first.collectExps(exps);
     1916            second.collectExps(exps);
    18541917        }
    18551918    }
     
    20402103    eq InstReplacingComposite.orginalAnnotatable() = getOriginalDecl();
    20412104    eq InstReplacingPrimitive.orginalAnnotatable() = getOriginalDecl();
     2105    eq InstReplacingRecord.orginalAnnotatable()    = getOriginalDecl();
    20422106   
    20432107    public SrcAnnotatable InstReplacingShortClassDecl.orginalAnnotatable() {
     
    20632127    }
    20642128
    2065 
     2129    /**
     2130     * Obtain the SrcAnnotationProvider respecting the inheritance if this class is not a function.
     2131     */
     2132    public SrcAnnotationProvider InstClassDecl.myAnnotation() {
     2133        return getSrcClassDecl().srcAnnotationProvider();
     2134    }
     2135   
     2136    public SrcAnnotationProvider InstAbstractShortClassDecl.myAnnotation() {
     2137        return !isFunction() ? mySrcAnnotatable().srcAnnotationProvider() : getSrcClassDecl().srcAnnotationProvider();
     2138    }
     2139   
    20662140    public SrcAnnotatable InstComponentDecl.mySrcAnnotatable() {
    20672141        boolean hasAnnotations = getSrcComponentDecl().srcAnnotationProvider().hasAnnotation();
     
    20792153    }
    20802154   
     2155    /**
     2156     * Obtain the source node which is responsable for providing the annotation.
     2157     * A match against this with the same qualifiedName and same fullyQualifiedName is made in the
     2158     * Enviroment.
     2159     */
     2160    public SrcAnnotatable InstAbstractShortClassDecl.mySrcAnnotatable() {
     2161        boolean hasAnnotations = getSrcClassDecl().srcAnnotationProvider().hasAnnotation();
     2162        if (!hasAnnotations) {
     2163            SrcAnnotatable annotatable = srcannotatableFromEnviroment();
     2164            if (annotatable != null) {
     2165                return annotatable;
     2166            }
     2167            return orginalAnnotatable();
     2168        }
     2169        return getSrcClassDecl();
     2170    }
     2171   
     2172    /**
     2173     * Obtain the source node which is responsable for providing the annotation.
     2174     */
     2175    public SrcAnnotatable InstClassDecl.mySrcAnnotatable() {
     2176        return getSrcClassDecl();
     2177    }
    20812178
    20822179    /**
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/jastadd/util/Util.jrag

    r12325 r12469  
    883883    }
    884884
     885    syn boolean InstNode.isLibNode() = false;
     886    eq InstLibNode.isLibNode()       = true;
     887
     888    /**
     889     * Any closest ancestor instClass but not stopping at InstComponents and returning it's class
     890     * as opposed to enclosingInstClassDecl().
     891     */
     892    inh InstClassDecl InstNode.containingInstClass();
     893    eq InstClassDecl.getChild().containingInstClass() = this;
     894    eq InstRoot.getChild().containingInstClass()      = null;
     895
     896    inh InstNode InstNode.enclosingInstNode();
     897    eq InstNode.getChild().enclosingInstNode() = this;
     898   
    885899    inh InstClassDecl ASTNode.enclosingInstClassDecl();
    886900    eq SourceRoot.getProgram().enclosingInstClassDecl()      = null;
     
    906920   
    907921    inh Set<SrcClassDecl> SrcClassDecl.enclosingClassDecls();
     922    inh Set<SrcClassDecl> SrcComponentDecl.enclosingClassDecls();
    908923    eq Root.getChild().enclosingClassDecls() = Collections.emptySet();
    909924    eq SrcClassDecl.getChild().enclosingClassDecls() {
     
    11851200aspect Visibility {
    11861201
    1187     inh boolean SrcClassDecl.isPublic();
     1202    inh boolean SrcElement.isPublic();
    11881203    inh boolean SrcComponentDecl.isPublic();
     1204    inh boolean SrcExtendsClause.isPublic();
    11891205    eq SrcPublicElementList.getSrcElement().isPublic()    = true;
    11901206    eq SrcProtectedElementList.getSrcElement().isPublic() = false;
     
    11921208    eq Root.getChild().isPublic()                   = true;
    11931209
    1194     syn boolean InstClassDecl.isPublic()     = getSrcClassDecl().isPublic();
    1195     syn boolean InstComponentDecl.isPublic() = getSrcComponentDecl().isPublic();
    1196 
    1197     syn boolean SrcClassDecl.isProtected()         = !isPublic();
    1198     syn boolean SrcComponentDecl.isProtected()     = !isPublic();
     1210    syn boolean InstNode.isPublic();
     1211    eq InstRoot.isPublic()          = true;
     1212    eq InstClassDecl.isPublic()     = getSrcClassDecl().isPublic();
     1213    eq InstComponentDecl.isPublic() = getSrcComponentDecl().isPublic();
     1214    eq InstExtends.isPublic()       = getSrcExtendsClause().isPublic();
     1215
     1216    syn boolean SrcElement.isProtected()        = !isPublic();
     1217    syn boolean SrcComponentDecl.isProtected()  = !isPublic();
    11991218    syn boolean InstClassDecl.isProtected()     = getSrcClassDecl().isProtected();
    12001219    syn boolean InstComponentDecl.isProtected() = getSrcComponentDecl().isProtected();
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/src/java/org/jmodelica/common/ast/prefixes/VisibilityType.java

    r12133 r12469  
    4242    }
    4343
     44    public static VisibilityType mostRestrictive(VisibilityType v1, VisibilityType v2) {
     45        return values()[Math.min(v1.ordinal(), v2.ordinal())];
     46    }
     47
    4448}
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/test/junit/org/jmodelica/test/common/TestLogger.java

    r10908 r12469  
    1111    public TestLogger() {
    1212        super(Level.INFO);
     13    }
     14   
     15    public TestLogger(Level loglevel) {
     16        super(loglevel);
    1317    }
    1418
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/test/modelica/AnnotationTests.mo

    r12327 r12469  
    116116        end ModelNoAnnotation;
    117117       
     118        model FunctionTest
     119            replaceable function BaseFunction
     120                input Real i;
     121                input Real k;
     122                output Real o;
     123            algorithm
     124                o := i + k + 20;
     125                annotation(Inline=true, X="A");
     126            end BaseFunction;
     127        end FunctionTest;
     128       
     129        model ExtendedFunction
     130            extends FunctionTest(redeclare function BaseFunction = BaseFunction(i=200));
     131                annotation(__JModelica(UnitTesting(tests={
     132            InstClassMethodTestCase(
     133                name="extendedFunction",
     134                description="Check that the annotation is from the replaceable.",
     135                methodName="testElementAnnotations",
     136                arguments={"BaseFunction"},
     137                methodResult="
     138    ")})));         
     139        end ExtendedFunction;
     140       
     141        model ReplacedFunction
     142            extends FunctionTest(redeclare function BaseFunction = BaseFunction(i=200) annotation(Inline=false, X="B"));
     143                annotation(__JModelica(UnitTesting(tests={
     144            InstClassMethodTestCase(
     145                name="replacedFunction",
     146                description="Check that the annotation is from the replaceable.",
     147                methodName="testElementAnnotations",
     148                arguments={"BaseFunction"},
     149                methodResult="
     150Inline=false
     151    ")})));                 
     152        end ReplacedFunction;
     153       
    118154        model BaseWithAnnotation
    119155            replaceable package testPackage = BaseNoAnnotation annotation(Dialog(tab="a", group="b"));
     
    124160                description="Check that the annotation is from the replaceable.",
    125161                methodName="testElementAnnotations",
    126                 arguments={"testComponent"},
    127                 methodResult="
    128     Dialog(tab = \"ac\", group = \"b\")
     162                arguments={"testPackage"},
     163                methodResult="
     164    Dialog(tab = \"a\", group = \"b\")
    129165    ")})));
    130166        end BaseWithAnnotation;
     
    137173                description="Check that the annotation is inherited.",
    138174                methodName="testElementAnnotations",
    139                 arguments={"testComponent"},
    140                 methodResult="
    141     Dialog(tab = \"ac\", group = \"b\")
     175                arguments={"testPackage"},
     176                methodResult="
     177    Dialog(tab = \"a\", group = \"b\")
    142178    ")})));
    143179        end B;
     
    155191                description="Check that the new annotation is used.",
    156192                methodName="testElementAnnotations",   
    157                 arguments={"testComponent"},
    158                 methodResult="Dialog(tab = \"cc\", group = \"new\")")})));
     193                arguments={"testPackage"},
     194                methodResult="Dialog(tab = \"c\", group = \"new\")")})));
    159195        end C;
    160196       
     
    167203                description="Check that the inherited annotation is used.",
    168204                methodName="testElementAnnotations",
    169                 arguments={"testComponent"},
    170                 methodResult="Dialog(tab = \"cc\", group = \"new\")")})));
     205                arguments={"testPackage"},
     206                methodResult="Dialog(tab = \"c\", group = \"new\")")})));
    171207        end C2;
    172208       
     
    203239                description="Check that the empty annotation is used.",
    204240                methodName="testElementAnnotations",
    205                 arguments={"testComponent"},
     241                arguments={"testPackage"},
    206242                methodResult="")})));
    207243        end C3;
     
    219255                description="Check that the latest annotation is used.",
    220256                methodName="testElementAnnotations",
     257                arguments={"testPackage"},
     258                methodResult="Dialog(tab = \"c4\", group = \"extends\")")})));
     259        end C4;
     260           
     261        model C5
     262            extends C4;
     263            annotation(__JModelica(UnitTesting(tests={
     264            InstClassMethodTestCase(
     265                name="extendExtendReplacement",
     266                description="Check that the latest annotation is used.",
     267                methodName="testElementAnnotations",
     268                arguments={"testPackage"},
     269                methodResult="Dialog(tab = \"c4\", group = \"extends\")")})));
     270        end C5;
     271       
     272        model D
     273            extends BaseWithAnnotation(
     274                redeclare replaceable package testPackage = BaseNoAnnotation annotation());
     275           
     276            annotation(__JModelica(UnitTesting(tests={
     277            InstClassMethodTestCase(
     278                name="emptyExtendReplace",
     279                description="Check that the latest annotation is used.",
     280                methodName="testElementAnnotations",
     281                arguments={"testPackage"},
     282                methodResult="")})));
     283        end D;
     284       
     285        model D2
     286            extends D;
     287            annotation(__JModelica(UnitTesting(tests={
     288            InstClassMethodTestCase(
     289                name="extendEmptyFromExtend",
     290                description="Check that the latest annotation is used.",
     291                methodName="testElementAnnotations",
     292                arguments={"testPackage"},
     293                methodResult="")})));
     294        end D2;
     295       
     296        model E
     297            extends BaseWithAnnotation(
     298                redeclare replaceable package testPackage = BaseNoAnnotation
     299                );
     300            annotation(__JModelica(UnitTesting(tests={
     301            InstClassMethodTestCase(
     302                name="noneReplacingRedeclaration",
     303                description="Check that the latest inherited annotation is used.",
     304                methodName="testElementAnnotations",
     305                arguments={"testPackage"},
     306                methodResult="
     307    Dialog(tab = \"a\", group = \"b\")
     308    ")})));
     309        end E;
     310   
     311        model E2
     312            extends E;
     313            annotation(__JModelica(UnitTesting(tests={
     314            InstClassMethodTestCase(
     315                name="extendNoneReplacingRedeclaration",
     316                description="Check that the latest inherited annotation is used.",
     317                methodName="testElementAnnotations",
     318                arguments={"testPackage"},
     319                methodResult="
     320    Dialog(tab = \"a\", group = \"b\")
     321    ")})));
     322        end E2;
     323    end classes;
     324   
     325    package classesGetComponents
     326        package BaseNoAnnotation
     327        end BaseNoAnnotation;
     328
     329        model ModelNoAnnotation
     330        end ModelNoAnnotation;
     331       
     332        model BaseWithAnnotation
     333            replaceable package testPackage = BaseNoAnnotation annotation(Dialog(tab="a", group="b"));
     334            replaceable BaseNoAnnotation testComponent() annotation(Dialog(tab="ac", group="b"));
     335                annotation(__JModelica(UnitTesting(tests={
     336            InstClassMethodTestCase(
     337                name="instAnnotationFromRedeclare",
     338                description="Check that the annotation is from the replaceable.",
     339                methodName="testElementAnnotations",
     340                arguments={"testComponent"},
     341                methodResult="
     342    Dialog(tab = \"ac\", group = \"b\")
     343    ")})));
     344        end BaseWithAnnotation;
     345       
     346        model B
     347            extends BaseWithAnnotation;
     348            annotation(__JModelica(UnitTesting(tests={
     349            InstClassMethodTestCase(
     350                name="extendedHaveAnnotation",
     351                description="Check that the annotation is inherited.",
     352                methodName="testElementAnnotations",
     353                arguments={"testComponent"},
     354                methodResult="
     355    Dialog(tab = \"ac\", group = \"b\")
     356    ")})));
     357        end B;
     358       
     359        model C
     360            extends BaseWithAnnotation(
     361                redeclare replaceable package testPackage
     362                    = BaseNoAnnotation annotation(Dialog(tab="c", group="new")),
     363                redeclare replaceable BaseNoAnnotation testComponent()
     364                    annotation(Dialog(tab="cc", group="new")));
     365                   
     366            annotation(__JModelica(UnitTesting(tests={
     367            InstClassMethodTestCase(
     368                name="replacedInExtend",
     369                description="Check that the new annotation is used.",
     370                methodName="testElementAnnotations",   
     371                arguments={"testComponent"},
     372                methodResult="Dialog(tab = \"cc\", group = \"new\")")})));
     373        end C;
     374       
     375        model C2
     376            extends C(redeclare replaceable BaseNoAnnotation testComponent(),
     377                      redeclare replaceable package testPackage = BaseNoAnnotation);
     378            annotation(__JModelica(UnitTesting(tests={
     379            InstClassMethodTestCase(
     380                name="extendNoRedeclare",
     381                description="Check that the inherited annotation is used.",
     382                methodName="testElementAnnotations",
     383                arguments={"testComponent"},
     384                methodResult="Dialog(tab = \"cc\", group = \"new\")")})));
     385        end C2;
     386       
     387        model A2
     388            package BaseAnnotation
     389                replaceable model TestModel = ModelNoAnnotation;
     390            end BaseAnnotation;
     391            BaseAnnotation.TestModel testModel;
     392        end A2;
     393       
     394        package BaseAnnotationAlt
     395                replaceable model TestModel = ModelNoAnnotation annotation(Dialog(group="altPackage"));
     396            end BaseAnnotationAlt;
     397       
     398        model AnnotationFromReplacedContainingPackage
     399            extends A2(redeclare replaceable package BaseAnnotation = BaseAnnotationAlt);
     400            annotation(__JModelica(UnitTesting(tests={
     401            InstClassMethodTestCase(
     402                name="AnnotationFromReplacedContainingPackage",
     403                description="Check that the annotation from the alt class is used.",
     404                methodName="testElementAnnotations",
     405                arguments={"BaseAnnotation.TestModel"},
     406                methodResult="Dialog(group=\"altPackage\")")})));
     407        end AnnotationFromReplacedContainingPackage;
     408       
     409        model C3
     410            extends C(
     411                        redeclare replaceable BaseNoAnnotation testComponent() annotation(),
     412                        redeclare replaceable package testPackage = BaseNoAnnotation annotation()
     413                     );
     414            annotation(__JModelica(UnitTesting(tests={
     415            InstClassMethodTestCase(
     416                name="extendsEmptyReplace",
     417                description="Check that the empty annotation is used.",
     418                methodName="testElementAnnotations",
     419                arguments={"testComponent"},
     420                methodResult="")})));
     421        end C3;
     422       
     423        model C4
     424            extends C(
     425                redeclare replaceable package testPackage
     426                    = BaseNoAnnotation annotation(Dialog(tab="c4", group="extends")),
     427                redeclare replaceable BaseNoAnnotation testComponent()
     428                    annotation(Dialog(tab="cc4", group="extends"))
     429                    );
     430            annotation(__JModelica(UnitTesting(tests={
     431            InstClassMethodTestCase(
     432                name="extendedReplacement",
     433                description="Check that the latest annotation is used.",
     434                methodName="testElementAnnotations",
    221435                arguments={"testComponent"},
    222436                methodResult="Dialog(tab = \"cc4\", group = \"extends\")")})));
     
    286500    Dialog(tab = \"ac\", group = \"b\")
    287501    ")})));
    288         end E2;
    289     end classes;
    290    
     502        end E2;   
     503    end classesGetComponents;
    291504   
    292505    package components
     
    296509            annotation(__JModelica(UnitTesting(tests={
    297510                InstClassMethodTestCase(
    298                     name="redeclaredWithAnnotationInExtends",
    299                     description="Annotation from Extends for component inner component.",
    300                     methodName="testElementAnnotations",
    301                     arguments={"redeclaredWithAnnotationInExtends.testComponent"},
    302                     methodResult="
    303         Dialog(tab = \"cc\", group = \"new\")
     511                    name="redeclaredClassWithAnnotationInExtends",
     512                    description="Annotation from Extends for class inside component.",
     513                    methodName="testElementAnnotations",
     514                    arguments={"redeclaredWithAnnotationInExtends.testPackage"},
     515                    methodResult="
     516        Dialog(tab = \"c\", group = \"new\")
    304517        ")}))); 
    305518        end  redeclaredWithAnnotationInExtends;
     
    309522            annotation(__JModelica(UnitTesting(tests={
    310523                InstClassMethodTestCase(
    311                     name="redeclaredWithNoAnnotationInExtends",
    312                     description="Check that the components have correct annotation.",
    313                     methodName="testElementAnnotations",
    314                     arguments={"redeclaredWithNoAnnotationInExtends.testComponent"},
    315                     methodResult="
    316         Dialog(tab = \"cc\", group = \"new\")
     524                    name="redeclaredClassWithNoAnnotationInExtends",
     525                    description="Check that the components have correct annotation.",
     526                    methodName="testElementAnnotations",
     527                    arguments={"redeclaredWithNoAnnotationInExtends.testPackage"},
     528                    methodResult="
     529        Dialog(tab = \"c\", group = \"new\")
    317530        ")}))); 
    318531        end redeclaredWithNoAnnotationInExtends;
     
    322535            annotation(__JModelica(UnitTesting(tests={
    323536                InstClassMethodTestCase(
    324                     name="redeclaredWithEmptyAnnotationInExtends",
    325                     description="Check that the components have correct annotation.",
    326                     methodName="testElementAnnotations",
    327                     arguments={"redeclaredWithEmptyAnnotationInExtends.testComponent"},
     537                    name="redeclaredClassWithEmptyAnnotationInExtends",
     538                    description="Check that the components have correct annotation.",
     539                    methodName="testElementAnnotations",
     540                    arguments={"redeclaredWithEmptyAnnotationInExtends.testPackage"},
    328541                    methodResult="
    329542
     
    335548            annotation(__JModelica(UnitTesting(tests={
    336549                InstClassMethodTestCase(
    337                     name="redeclaredInOwnAndAncestorsExtends",
    338                     description="Check that the components have correct annotation.",
    339                     methodName="testElementAnnotations",
    340                     arguments={"redeclaredInOwnAndAncestorsExtends.testComponent"},
    341                     methodResult="
    342         Dialog(tab = \"cc4\", group = \"extends\")
     550                    name="redeclaredClassInOwnAndAncestorsExtends",
     551                    description="Check that the components have correct annotation.",
     552                    methodName="testElementAnnotations",
     553                    arguments={"redeclaredInOwnAndAncestorsExtends.testPackage"},
     554                    methodResult="
     555        Dialog(tab = \"c4\", group = \"extends\")
    343556        ")})));             
    344557        end redeclaredInOwnAndAncestorsExtends;
     
    348561            annotation(__JModelica(UnitTesting(tests={
    349562                InstClassMethodTestCase(
    350                     name="redeclaredInParentExtends",
    351                     description="Check that the components have correct annotation.",
    352                     methodName="testElementAnnotations",
    353                     arguments={"redeclaredInParentExtends.testComponent"},
    354                     methodResult="
    355         Dialog(tab = \"cc4\", group = \"extends\")
     563                    name="redeclaredClassInParentExtends",
     564                    description="Check that the components have correct annotation.",
     565                    methodName="testElementAnnotations",
     566                    arguments={"redeclaredInParentExtends.testPackage"},
     567                    methodResult="
     568        Dialog(tab = \"c4\", group = \"extends\")
    356569        ")}))); 
    357570        end redeclaredInParentExtends;
     
    363576            annotation(__JModelica(UnitTesting(tests={
    364577                InstClassMethodTestCase(
    365                     name="redeclaredInDeclarationNoAnnotation",
    366                     description="Check that the components have correct annotation.",
    367                     methodName="testElementAnnotations",
    368                     arguments={"redeclaredInDeclarationNoAnnotation.testComponent"},
    369                     methodResult="
    370         Dialog(tab=\"cc4\", group=\"extends\")
     578                    name="redeclaredClassInDeclarationNoAnnotation",
     579                    description="Check that the components have correct annotation.",
     580                    methodName="testElementAnnotations",
     581                    arguments={"redeclaredInDeclarationNoAnnotation.testPackage"},
     582                    methodResult="
     583        Dialog(tab=\"c4\", group=\"extends\")
    371584        ")})));                 
    372585        end redeclaredInDeclarationNoAnnotation;
     
    378591            annotation(__JModelica(UnitTesting(tests={
    379592                InstClassMethodTestCase(
    380                     name="redeclaredInDeclarationWithEmptyAnnotation",
    381                     description="Check that the components have correct annotation.",
    382                     methodName="testElementAnnotations",
    383                     arguments={"redeclaredInDeclarationWithEmptyAnnotation.testComponent"},
     593                    name="redeclaredClassInDeclarationWithEmptyAnnotation",
     594                    description="Check that the components have correct annotation.",
     595                    methodName="testElementAnnotations",
     596                    arguments={"redeclaredInDeclarationWithEmptyAnnotation.testPackage"},
    384597                    methodResult="
    385598
     
    396609            annotation(__JModelica(UnitTesting(tests={
    397610                InstClassMethodTestCase(
     611                    name="redeclaredClassInDeclaration",
     612                    description="Check that the components have correct annotation.",
     613                    methodName="testElementAnnotations",
     614                    arguments={"redeclaredInDeclaration.testPackage"},
     615                    methodResult="
     616        Dialog(tab = \"redeclaredInDeclaration\", group = \"extends\")
     617        ")}))); 
     618        end redeclaredInDeclaration;
     619         
     620    end components;
     621       
     622    package componentsGetComponents
     623        import AnnotationTests.inheritance.classes.*;
     624        model redeclaredWithAnnotationInExtends
     625            C redeclaredWithAnnotationInExtends;
     626            annotation(__JModelica(UnitTesting(tests={
     627                InstClassMethodTestCase(
     628                    name="redeclaredWithAnnotationInExtends",
     629                    description="Annotation from Extends for component inner component.",
     630                    methodName="testElementAnnotations",
     631                    arguments={"redeclaredWithAnnotationInExtends.testComponent"},
     632                    methodResult="
     633        Dialog(tab = \"cc\", group = \"new\")
     634        ")}))); 
     635        end  redeclaredWithAnnotationInExtends;
     636       
     637        model redeclaredWithNoAnnotationInExtends
     638            C2 redeclaredWithNoAnnotationInExtends;
     639            annotation(__JModelica(UnitTesting(tests={
     640                InstClassMethodTestCase(
     641                    name="redeclaredWithNoAnnotationInExtends",
     642                    description="Check that the components have correct annotation.",
     643                    methodName="testElementAnnotations",
     644                    arguments={"redeclaredWithNoAnnotationInExtends.testComponent"},
     645                    methodResult="
     646        Dialog(tab = \"cc\", group = \"new\")
     647        ")}))); 
     648        end redeclaredWithNoAnnotationInExtends;
     649       
     650        model redeclaredWithEmptyAnnotationInExtends
     651            C3 redeclaredWithEmptyAnnotationInExtends;
     652            annotation(__JModelica(UnitTesting(tests={
     653                InstClassMethodTestCase(
     654                    name="redeclaredWithEmptyAnnotationInExtends",
     655                    description="Check that the components have correct annotation.",
     656                    methodName="testElementAnnotations",
     657                    arguments={"redeclaredWithEmptyAnnotationInExtends.testComponent"},
     658                    methodResult="
     659
     660        ")})));             
     661        end redeclaredWithEmptyAnnotationInExtends;
     662       
     663        model redeclaredInOwnAndAncestorsExtends
     664            C4 redeclaredInOwnAndAncestorsExtends;
     665            annotation(__JModelica(UnitTesting(tests={
     666                InstClassMethodTestCase(
     667                    name="redeclaredInOwnAndAncestorsExtends",
     668                    description="Check that the components have correct annotation.",
     669                    methodName="testElementAnnotations",
     670                    arguments={"redeclaredInOwnAndAncestorsExtends.testComponent"},
     671                    methodResult="
     672        Dialog(tab = \"cc4\", group = \"extends\")
     673        ")})));             
     674        end redeclaredInOwnAndAncestorsExtends;
     675       
     676        model redeclaredInParentExtends
     677            C5 redeclaredInParentExtends;
     678            annotation(__JModelica(UnitTesting(tests={
     679                InstClassMethodTestCase(
     680                    name="redeclaredInParentExtends",
     681                    description="Check that the components have correct annotation.",
     682                    methodName="testElementAnnotations",
     683                    arguments={"redeclaredInParentExtends.testComponent"},
     684                    methodResult="
     685        Dialog(tab = \"cc4\", group = \"extends\")
     686        ")}))); 
     687        end redeclaredInParentExtends;
     688       
     689        model redeclaredInDeclarationNoAnnotation
     690            C5 redeclaredInDeclarationNoAnnotation(
     691                    redeclare replaceable package testPackage = BaseNoAnnotation,
     692                    redeclare replaceable BaseNoAnnotation testComponent());
     693            annotation(__JModelica(UnitTesting(tests={
     694                InstClassMethodTestCase(
     695                    name="redeclaredInDeclarationNoAnnotation",
     696                    description="Check that the components have correct annotation.",
     697                    methodName="testElementAnnotations",
     698                    arguments={"redeclaredInDeclarationNoAnnotation.testComponent"},
     699                    methodResult="
     700        Dialog(tab=\"cc4\", group=\"extends\")
     701        ")})));                 
     702        end redeclaredInDeclarationNoAnnotation;
     703       
     704        model redeclaredInDeclarationWithEmptyAnnotation
     705            C5 redeclaredInDeclarationWithEmptyAnnotation(
     706                    redeclare replaceable package testPackage = BaseNoAnnotation annotation(),
     707                    redeclare replaceable BaseNoAnnotation testComponent() annotation());
     708            annotation(__JModelica(UnitTesting(tests={
     709                InstClassMethodTestCase(
     710                    name="redeclaredInDeclarationWithEmptyAnnotation",
     711                    description="Check that the components have correct annotation.",
     712                    methodName="testElementAnnotations",
     713                    arguments={"redeclaredInDeclarationWithEmptyAnnotation.testComponent"},
     714                    methodResult="
     715
     716        ")})));           
     717        end redeclaredInDeclarationWithEmptyAnnotation;
     718       
     719        model redeclaredInDeclaration
     720            C5  redeclaredInDeclaration(
     721                    redeclare replaceable package testPackage = BaseNoAnnotation
     722                        annotation(Dialog(tab="redeclaredInDeclaration", group="extends")),
     723                    redeclare replaceable BaseNoAnnotation testComponent()
     724                        annotation(Dialog(tab="redeclaredInDeclaration", group="component"))
     725                    );
     726            annotation(__JModelica(UnitTesting(tests={
     727                InstClassMethodTestCase(
    398728                    name="redeclaredInDeclaration",
    399729                    description="Check that the components have correct annotation.",
     
    425755        ")}))); 
    426756        end componentNoAnnotationFromClass;
    427     end components;
     757    end componentsGetComponents;
    428758end inheritance;
    429759
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/test/modelica/NonFixedParameterPropagation.mo

    r8852 r12469  
    214214 initial parameter Real p2[1];
    215215 initial parameter Real p2[2];
    216  initial parameter Real temp_6;
    217  initial parameter Real temp_7;
    218 initial equation
     216initial equation
    219217 p1[1] = time;
    220218 p1[2] = time * 2;
    221  p2[1] = temp_6 + temp_7;
    222  p2[2] = temp_6 * temp_7;
    223  temp_6 = p1[1];
    224  temp_7 = p1[2];
     219 p2[1] = p1[1] + p1[2];
     220 p2[2] = p1[1] * p1[2];
    225221end NonFixedParameterPropagation.FunctionCall2;
    226222")})));
  • branches/dev-zk-1971/Compiler/ModelicaFrontEnd/test/modelica/SimpleLookup.mo

    r11971 r12469  
    217217end RelativeLookup;
    218218
     219
     220package FindConstant
     221   
     222    constant Real C = 1;
     223   
     224    package Constants
     225        constant Real[2] array = 1:2;
     226    end Constants;
     227   
     228    model TestFindConstant1
     229        Real a = C;
     230        annotation(__JModelica(UnitTesting(tests={
     231        InstClassMethodTestCase(
     232            name="TestFindConstant1",
     233            description="Tests the method SrcAccess.findConstant",
     234            methodName="testFindConstant",
     235            methodResult="C=SimpleLookup.FindConstant.C"
     236        )})));
     237    end TestFindConstant1;
     238   
     239    model TestFindConstant2
     240        constant Real C = 1;
     241        Real a = C;
     242        annotation(__JModelica(UnitTesting(tests={
     243        InstClassMethodTestCase(
     244            name="TestFindConstant2",
     245            description="Tests the method SrcAccess.findConstant",
     246            methodName="testFindConstant",
     247            methodResult="C=SimpleLookup.FindConstant.TestFindConstant2.C"
     248        )})));
     249    end TestFindConstant2;
     250   
     251    model TestFindConstant3
     252        extends TestFindConstant2;
     253        Real b = C;
     254        annotation(__JModelica(UnitTesting(tests={
     255        InstClassMethodTestCase(
     256            name="TestFindConstant3",
     257            description="Tests the method SrcAccess.findConstant, inherited constant",
     258            methodName="testFindConstant",
     259            methodResult="C=SimpleLookup.FindConstant.TestFindConstant3.C"
     260        )})));
     261    end TestFindConstant3;
     262   
     263    model TestFindConstant4
     264        Real a;
     265    algorithm
     266        for C in 1:2 loop
     267            a := C;
     268        end for;
     269        annotation(__JModelica(UnitTesting(tests={
     270        InstClassMethodTestCase(
     271            name="TestFindConstant4",
     272            description="Tests the method SrcAccess.findConstant, constant shadowed by loop variable",
     273            methodName="testFindConstant",
     274            methodResult="
     275                a=Unknown
     276                C=Unknown"
     277        )})));
     278    end TestFindConstant4;
     279   
     280    model TestFindConstant5
     281        constant Integer a = 1;
     282        Real b = Constants.array[a];
     283        annotation(__JModelica(UnitTesting(tests={
     284        InstClassMethodTestCase(
     285            name="TestFindConstant5",
     286            description="Tests the method SrcAccess.findConstant, dot access with access in array subscripts",
     287            methodName="testFindConstant",
     288            methodResult="
     289                array=SimpleLookup.FindConstant.Constants.array
     290                a=SimpleLookup.FindConstant.TestFindConstant5.a"
     291        )})));
     292    end TestFindConstant5;
     293   
     294    model TestFindConstant6
     295        Real a = .SimpleLookup.FindConstant.C;
     296        annotation(__JModelica(UnitTesting(tests={
     297        InstClassMethodTestCase(
     298            name="TestFindConstant6",
     299            description="Tests the method SrcAccess.findConstant, global access",
     300            methodName="testFindConstant",
     301            methodResult="C=SimpleLookup.FindConstant.C"
     302        )})));
     303    end TestFindConstant6;
     304   
     305    model TestFindConstant7
     306        extends TestFindConstant2(C = 2);
     307        annotation(__JModelica(UnitTesting(tests={
     308        InstClassMethodTestCase(
     309            name="TestFindConstant7",
     310            description="Tests the method SrcAccess.findConstant, from extends",
     311            methodName="testFindConstant",
     312            methodResult="C=SimpleLookup.FindConstant.TestFindConstant7.C"
     313        )})));
     314    end TestFindConstant7;
     315   
     316    encapsulated package EncapulatedPackage
     317       
     318        model TestFindConstantEncapsulated
     319            Real a = C;
     320            annotation(__JModelica(UnitTesting(tests={
     321            InstClassMethodTestCase(
     322                name="TestFindConstantEncapsulated",
     323                description="Tests the method SrcAccess.findConstant, constant outside encapsulation",
     324                methodName="testFindConstant",
     325                methodResult="C=Unknown"
     326            )})));
     327        end TestFindConstantEncapsulated;
     328       
     329        model TestFindConstantQualifiedImport
     330            import .SimpleLookup.FindConstant.C;
     331            Real a = C;
     332            annotation(__JModelica(UnitTesting(tests={
     333            InstClassMethodTestCase(
     334                name="TestFindConstantQualifiedImport",
     335                description="Tests the method SrcAccess.findConstant, imported constant",
     336                methodName="testFindConstant",
     337                methodResult="
     338                    C=SimpleLookup.FindConstant.C
     339                    C=SimpleLookup.FindConstant.C
     340                ")})));
     341        end TestFindConstantQualifiedImport;
     342       
     343        model TestFindConstantUnqualifiedImport
     344            import .SimpleLookup.FindConstant.*;
     345            Real a = C;
     346            annotation(__JModelica(UnitTesting(tests={
     347            InstClassMethodTestCase(
     348                name="TestFindConstantUnqualifiedImport",
     349                description="Tests the method SrcAccess.findConstant, imported constant",
     350                methodName="testFindConstant",
     351                methodResult="C=SimpleLookup.FindConstant.C"
     352            )})));
     353        end TestFindConstantUnqualifiedImport;
     354       
     355    end EncapulatedPackage;
     356   
     357end FindConstant;
     358
    219359end SimpleLookup;
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/TransformCanonical.jrag

    r11721 r12469  
    501501   
    502502    public void FClass.complianceCheckBLT() {
    503         getDAEBLT().complianceCheck(ErrorCheckType.COMPILE, myOptions());
    504         getDAEInitBLT().complianceCheck(ErrorCheckType.COMPILE, myOptions());
     503        getDAEBLT().complianceCheck(ErrorCheckType.COMPILE, myStepUtil());
     504        getDAEInitBLT().complianceCheck(ErrorCheckType.COMPILE, myStepUtil());
    505505    }
    506506   
     
    585585        // Make sure that we don't do this if any errors have been reported
    586586        breakOnErrors();
    587 
    588         log.verbose("Flat tree before matching and BLT:");
    589         log.verbose(this);
     587        StepUtil stepUtil = myStepUtil();
     588
     589        logVerbose("Flat tree before matching and BLT:");
     590        logVerbose(this);
    590591
    591592        BiPGraph g;
    592593        if (DAEBiPGraph == null) {
    593594            g = computeMatchedDAEBiPGraph();
    594             log.verbose("DAE BiPGraph");
    595             log.verbose(g);
    596             log.verbose("DAE BiPGraph matching");
    597             log.verbose(g.printMatchingObj());
     595            logVerbose("DAE BiPGraph");
     596            logVerbose(g);
     597            logVerbose("DAE BiPGraph matching");
     598            logVerbose(g.printMatchingObj());
    598599        } else {
    599600            g = DAEBiPGraph;
     
    601602        }
    602603       
    603         log.verbose(g);
     604        g.setStepLogger(stepUtil.getStepLogger()); //TODO refactor to setStepUtil
     605        logVerbose(g);
    604606       
    605607        // If no complete matching found, then fail
     
    615617            BLT daeBLT;
    616618            try {
    617                 daeBLT = g.computeDAEBLT(myOptions());
     619                daeBLT = g.computeDAEBLT(stepUtil);
    618620                if (blockFunctionExtraction(daeBLT, g)) {
    619                     daeBLT = g.computeDAEBLT(myOptions());
     621                    daeBLT = g.computeDAEBLT(stepUtil);
    620622                }
    621623            } catch (BLTException e) {
     
    624626            }
    625627            setDAEBLT(daeBLT);
    626             log.verbose(getDAEStructuredBLT());
    627             log.verbose(getDAEBLT());
     628            logVerbose(getDAEStructuredBLT());
     629            logVerbose(getDAEBLT());
    628630        } else {
    629631            setDAEBLT(BLT.EMPTY_BLT);
     
    701703        }
    702704       
    703         log.verbose(g);
     705        logVerbose(g);
    704706       
    705707        g.addEquations(initialEquations(), VAR_TYPES_ALL);
    706708       
    707709        g.maximumMatching(false, prePropagationEquations.keySet());
    708         log.verbose("Init DAE BiPGraph");
    709         log.verbose(g);
    710         log.verbose("Init BiPGraph matching");
    711         log.verbose(g.printMatchingObj());
     710        logVerbose("Init DAE BiPGraph");
     711        logVerbose(g);
     712        logVerbose("Init BiPGraph matching");
     713        logVerbose(g.printMatchingObj());
    712714       
    713715        g = overdeterminedInitialSystem(g);
     
    732734           
    733735            g.maximumMatching(false);
    734             log.verbose("Init DAE BiPGraph after addition of initial equations");
    735             log.verbose(g);
    736             log.verbose("Init BiPGraph matching after addition of initial equations");
    737             log.verbose(g.printMatchingObj());
     736            logVerbose("Init DAE BiPGraph after addition of initial equations");
     737            logVerbose(g);
     738            logVerbose("Init BiPGraph matching after addition of initial equations");
     739            logVerbose(g.printMatchingObj());
    738740        }
    739741       
     
    756758            BLT daeInitBLT;
    757759            try {
    758                 daeInitBLT = g.computeInitDAEBLT(myOptions());
     760                daeInitBLT = g.computeInitDAEBLT(stepUtil);
    759761                if (blockFunctionExtraction(daeInitBLT, g)) {
    760                     daeInitBLT = g.computeInitDAEBLT(myOptions());
     762                    daeInitBLT = g.computeInitDAEBLT(stepUtil);
    761763                }
    762764            } catch (BLTException e) {
     
    765767            }
    766768            setDAEInitBLT(daeInitBLT);
    767             log.verbose(daeInitBLT);
     769            logVerbose(daeInitBLT);
    768770        } else {
    769771            setDAEInitBLT(BLT.EMPTY_BLT);
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/optimizations/AliasElimination.jrag

    r12133 r12469  
    543543    syn boolean FVariable.shouldEliminateTemporary() =
    544544        isTemporary() &&
    545         nonDefiningUses().size() <= 1 &&
    546545        definingUses().size() <= 1 &&
     546        (nonDefiningUses().size() <= 1 || (definingUses().size() == 1 && definingUses().iterator().next().myFEquation().isCopyAssignment())) &&
    547547        !isPreVariable() && myPreVariable().isUnknown() &&
    548548        (definingUses().isEmpty() || !definingUses().iterator().next().myFEquation().generatesEvents()) &&
    549549        !isDifferentiatedVariable() && !isDerivativeVariable();
     550
     551    syn boolean FAbstractEquation.isCopyAssignment() = false;
     552    eq FEquation.isCopyAssignment() = getRight().isAccess();
    550553
    551554    /**
     
    573576                return false;
    574577            }
    575         }
    576        
    577         if (nonDefiningUses().isEmpty())
    578             value.removeFromUses();
    579         value.parent = null;
    580        
    581         for (FAccessExp use : nonDefiningUses())
    582             use.replaceMe(value.unboundCopy());
     578        }
     579       
     580        if (value.isAccess()) {
     581            for (FAccessExp use : nonDefiningUses()) {
     582                FExp copy = value.treeCopy();
     583                value.asFAccessExp().myFV().nonDefiningUses().add(copy.asFAccessExp());
     584                value.asFAccessExp().myFV().uses().add(copy.asFAccessExp());
     585                use.replaceMe(copy);
     586            }
     587            value.removeFromUses();
     588        } else {
     589            if (nonDefiningUses().isEmpty()) {
     590                value.removeFromUses();
     591            }
     592            value.parent = null;
     593            for (FAccessExp use : nonDefiningUses()) {
     594                use.replaceMe(value.unboundCopy());
     595            }
     596        }
    583597        return true;
    584598    }
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/optimizations/InlineFunctions.jrag

    r12184 r12469  
    156156        private FlatVariableMap lookupMap;
    157157        private Map<String,FType> typeMap;
    158         private Queue<FAbstractEquation> outerMostWorklist = null;
    159158        public TypePrefixVariability contextVariability = Variability.CONTINUOUS;
    160159       
     
    164163         * Inline all function calls that we can from a specific list of equations.
    165164         */
    166         public List<FAbstractEquation> inline(List<FAbstractEquation> oldEquationList) {
    167             List<FAbstractEquation> newEquationList = new List();
     165        public Collection<FAbstractEquation> inline(List<FAbstractEquation> oldEquationList) {
     166            Collection<FAbstractEquation> newEquationList = new ArrayList<>();
    168167            inline(oldEquationList, newEquationList);
    169168            return newEquationList;
     
    173172         * Inline all function calls that we can from a specific list of equations.
    174173         */
    175         public void inline(List<FAbstractEquation> oldEquationList, List<FAbstractEquation> newEquationList) {
    176             Queue<FAbstractEquation> worklist = new ArrayDeque<FAbstractEquation>(oldEquationList.getNumChild());
    177             if (outerMostWorklist == null) {
    178                 outerMostWorklist = worklist;
    179             }
    180             for (FAbstractEquation eqn : oldEquationList) {
    181                 worklist.add(eqn);
    182             }
    183             while (!worklist.isEmpty()) {
    184                 inline(worklist.poll(), newEquationList);
    185             }
    186             if (outerMostWorklist == worklist) {
    187                 outerMostWorklist = null;
    188             }
    189         }
    190 
    191         private void inline(FAbstractEquation eqn, List newEquationList) {
    192             if (eqn.hasInlinableFunctions(this)) {
    193                 Collection<FAbstractEquation> res = eqn.inlineFunctions(this);
    194                 for (FAbstractEquation inlinedEqn : res) {
    195                     inline(inlinedEqn, newEquationList);
    196                 }
    197             } else {
    198                 newEquationList.add(eqn);
    199             }
    200         }
     174        public abstract void inline(List<FAbstractEquation> oldEquationList, Collection<FAbstractEquation> newEquationList);
    201175       
    202176        public void setContextVariability(TypePrefixVariability v) {
     
    205179       
    206180        public TypePrefixVariability contextVariability(FExp e) {
    207             return contextVariability.combineDown(e.variability());
     181            TypePrefixVariability res = e.variability();
     182            if (!res.knownParameterOrLess()) {
     183                res = contextVariability;
     184                if (res.continuousVariability() && e.variability().discreteVariability()) {
     185                    res = e.variability();
     186                }
     187            }
     188            return res;
    208189        }
    209190
     
    301282            value.resetOriginalReferences();
    302283            FEquation eqn = new FEquation(var.createAccessExp(), value);
    303             addEquation(eqn, variability);
     284            addEquation(eqn);
    304285        }
    305286
     
    346327                    eqn.addLeft(left);
    347328                }
    348                 addEquation(eqn, variability);
    349             }
    350         }
    351 
    352         protected void addEquation(FAbstractEquation eqn, TypePrefixVariability variability) {
    353             outerMostWorklist.add(eqn);
    354         }
     329                addEquation(eqn);
     330            }
     331        }
     332       
     333        protected abstract void addEquation(FAbstractEquation eqn);
    355334       
    356335        protected abstract String nextTempVarName();
     
    392371        private FClass fc;
    393372        private List<FVariable> vars;
    394         private List<FAbstractEquation> initialEqns = new List<FAbstractEquation>();
    395         private List<FAbstractEquation> normalEqns  = new List<FAbstractEquation>();
    396         private List<FAbstractEquation> paramEqns   = new List<FAbstractEquation>();
    397 
     373       
     374        Stack<Collection<FAbstractEquation>> worklistStack = new Stack<Collection<FAbstractEquation>>();
     375       
     376        private List<FAbstractEquation> currentOldList = null;
     377        private Collection<FAbstractEquation> currentNewList = null;
     378       
    398379        public FunctionInliner(FClass fc, String level, boolean late) {
    399380            this.fc = fc;
     
    420401        }
    421402
     403        public void pushWorklist() {
     404            worklistStack.push(new ArrayDeque<FAbstractEquation>());
     405        }
     406
     407        public void pushWorklist(List<FAbstractEquation> eqs) {
     408            Collection<FAbstractEquation> worklist = new ArrayList<FAbstractEquation>(eqs.getNumChild());
     409            for (FAbstractEquation eqn : eqs) {
     410                worklist.add(eqn);
     411            }
     412            worklistStack.push(worklist);
     413        }
     414
     415        public void addToWorklist(Collection<FAbstractEquation> eqs) {
     416            worklistStack.peek().addAll(eqs);
     417        }
     418
     419        public void addToWorklist(FAbstractEquation equation) {
     420            worklistStack.peek().add(equation);
     421        }
     422
     423        /**
     424         * Inline all function calls that we can from a specific list of equations.
     425         */
     426        public void inline(List<FAbstractEquation> oldEquationList, Collection<FAbstractEquation> newEquationList) {
     427            pushWorklist(oldEquationList);
     428            popWorklist(newEquationList);
     429        }
     430
     431        public void popWorklist(Collection<FAbstractEquation> newEquationList) {
     432            Collection<FAbstractEquation> worklist = worklistStack.pop();
     433            for (FAbstractEquation equation : worklist) {
     434                inline(equation, newEquationList);
     435            }
     436        }
     437
     438        private void inline(FAbstractEquation eqn, Collection<FAbstractEquation> newEquationList) {
     439            if (eqn.hasInlinableFunctions(this)) {
     440                pushWorklist();
     441                Collection<FAbstractEquation> res = eqn.inlineFunctions(this);
     442                popWorklist(currentNewList);
     443                pushWorklist();
     444                addToWorklist(res);
     445                popWorklist(newEquationList);
     446            } else {
     447                newEquationList.add(eqn);
     448            }
     449        }
     450
    422451        @Override
    423         protected void addEquation(FAbstractEquation eqn, TypePrefixVariability variability) {
    424             List<FAbstractEquation> toList = variability.selectEquations(initialEqns, paramEqns, normalEqns);
    425             if (currentNewList == toList) {
    426                 currentOldList.add(eqn);
    427                 super.addEquation(eqn, variability);
    428             } else {
    429                 toList.add(eqn);
    430             }
     452        protected void addEquation(FAbstractEquation eqn) {
     453            currentOldList.add(eqn); /* Providing context for the equation */
     454            addToWorklist(eqn);
    431455        }
    432456       
     
    447471         */
    448472        public void inline() {
     473            ArrayList<FAbstractEquation> initialEqns = new ArrayList<>();
     474            ArrayList<FAbstractEquation> normalEqns = new ArrayList<>();
     475            ArrayList<FAbstractEquation> paramEqns = new ArrayList<>();
     476           
    449477            setContextVariability(Variability.INITIALPARAMETER);
    450478            inlineFCList(fc.getFInitialEquations(), initialEqns);
     
    456484            inlineFCList(fc.getParameterEquations(), paramEqns);
    457485           
    458             fc.setFInitialEquationList(initialEqns);
    459             fc.setFAbstractEquationList(normalEqns);
    460             fc.setParameterEquationList(paramEqns);
    461         }
    462        
    463         private List<FAbstractEquation> currentOldList = null;
    464         private List<FAbstractEquation> currentNewList = null;
    465        
    466         public void inlineFCList(List<FAbstractEquation> oldEquationList, List<FAbstractEquation> newEquationList) {
     486            fc.setFInitialEquationList(new List<>(initialEqns));
     487            fc.setFAbstractEquationList(new List<>(normalEqns));
     488            fc.setParameterEquationList(new List<>(paramEqns));
     489        }
     490       
     491        public void inlineFCList(List<FAbstractEquation> oldEquationList, Collection<FAbstractEquation> newEquationList) {
    467492            currentOldList = oldEquationList;
    468493            currentNewList = newEquationList;
     
    506531            List<FFunctionCallLeft> l = new List<FFunctionCallLeft>();
    507532            l.add(new FFunctionCallLeft(new Opt<FExp>(exp)));
    508             fi.addEquation(new FFunctionCallEquation(l, fullCopy()), v);
     533            fi.addEquation(new FFunctionCallEquation(l, treeCopy()));
    509534        } else {
    510535            super.addInliningVarsAndEqns(fi, oldName, noEvent);
     
    833858    @Override
    834859    public Collection<FAbstractEquation> FIfWhenElseEquation.inlineFunctions(AbstractFunctionInliner fi) {
    835         setFAbstractEquationList(fi.inline(getFAbstractEquations()));
     860        setFAbstractEquationList(new List<>(fi.inline(getFAbstractEquations())));
    836861        return Collections.singletonList((FAbstractEquation)this);
    837862    }
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/scalarization/Scalarization.jrag

    r12243 r12469  
    611611        private TypePrefixVariability variability;
    612612       
     613        private VisibilityType visibility;
     614       
    613615        // Binding expression
    614616        private FExp bExp;
     
    626628       
    627629        private ScalarizingVariableInstance(String name, Map<String, FAttribute> mattrs, FExp be,
    628                 TypePrefixVariability variability, TypePrefixInputOutput inputOutput, Index i)  {
     630                TypePrefixVariability variability, VisibilityType visibility, TypePrefixInputOutput inputOutput, Index i)  {
    629631            bExp = be;
    630632            this.name = name;
     
    632634            this.mattrs = mattrs;
    633635            this.variability = variability;
     636            this.visibility = visibility;
    634637            this.inputOutput = inputOutput;
    635638        }
    636639       
    637640        private ScalarizingVariableInstance(String name, List<FAttribute> attrs, FExp be,
    638                 TypePrefixVariability variability, TypePrefixInputOutput inputOutput, Index i)  {
    639             this(name, ScalarizingVariableInstance.mapped(attrs), be, variability, inputOutput, i);
     641                TypePrefixVariability variability, VisibilityType visibility, TypePrefixInputOutput inputOutput, Index i)  {
     642            this(name, ScalarizingVariableInstance.mapped(attrs), be, variability, visibility, inputOutput, i);
    640643        }
    641644       
     
    643646            this(fv.name(), fv.getFAttributes(),
    644647                    fv.hasBindingExp() ? fv.getBindingExp().dynamicFExp(fv.getBindingExp().scalarize(s.select(fv.variability()))) : null,
    645                     fv.variability(), fv.getTypePrefixInputOutput(), Index.NULL);
     648                    fv.variability(), fv.getVisibilityType(), fv.getTypePrefixInputOutput(), Index.NULL);
    646649        }
    647650       
     
    676679            }
    677680            return new ScalarizingVariableInstance(i.ndims() > 0 ? name + i : name, mattrs, nbexp, variability,
    678                     inputOutput, ti);
     681                    visibility, inputOutput, ti);
    679682        }
    680683       
     
    702705            }
    703706           
    704             return new ScalarizingVariableInstance(name + "." + cName, attrs, nbexp, nv, inputOutput, index);
     707            return new ScalarizingVariableInstance(name + "." + cName, attrs, nbexp, nv, visibility, inputOutput, index);
    705708        }
    706709       
     
    709712            Index cell = index.subIndex(index.ndims() - comp.ndims());
    710713            FVariable fv = comp.copyForName(s, name, cell);
     714            fv.setVisibilityType(VisibilityType.mostRestrictive(fv.getVisibilityType(), visibility));
    711715            if (bExp != null) {
    712716                bExp.resetOriginalReferences(); /* Workaround for test RecordArray12 */
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/BLT.jrag

    r11676 r12469  
    101101         * a real or mixed equation block is created.
    102102         */
    103         public static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> AbstractEquationBlock createEquationBlock(SCCBlock<E, V> component, BlockProducer producer, OptionRegistry options, boolean isInitial) {
     103        public static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> AbstractEquationBlock createEquationBlock(SCCBlock<E, V> component, BlockProducer producer, StepUtil stepUtil, boolean isInitial) {
    104104            if (component.containsDynamicStates())
    105                 return computeDynamicStateBlock(component, producer, options);
     105                return computeDynamicStateBlock(component, producer, stepUtil);
    106106           
    107107            SimpleEquationBlock seb = createSimpleEquationBlock(component, producer, true);
     
    110110           
    111111            BiPGraph g = new BiPGraph(component.getMembers(), isInitial);
    112             Collection<SCCBlock<Eq, Var>> subBlocks = g.tarjan(options, false);
     112            Collection<SCCBlock<Eq, Var>> subBlocks = g.tarjan(stepUtil, false);
    113113           
    114114            errorCheckWhenEquations(subBlocks);
     
    133133            boolean torn = false;
    134134            if (producer.useTearing() && realEquations.size() > 1) {
    135                 eqnBlock = tear(component, producer, options, isInitial);
     135                eqnBlock = tear(component, producer, stepUtil, isInitial);
    136136                if (eqnBlock != null && !eqnBlock.solvedBlocks().isEmpty()) {
    137137                    block = eqnBlock;
     
    175175                } else {
    176176                    BiPGraph nonRealG = new BiPGraph(nonRealEquations, isInitial);
    177                     Collection<SimpleEquationBlock> nonRealBlocks = nonRealG.computeNonRealBlocks(producer, options);
     177                    Collection<SimpleEquationBlock> nonRealBlocks = nonRealG.computeNonRealBlocks(producer, stepUtil);
    178178                    eqnBlock = new EquationBlock(producer, component.computeBlockDependency(), nonRealBlocks, createSimpleBlocks(groupComponent(realEquations), producer));
    179179                    block = eqnBlock;
     
    287287       
    288288        public static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>, T extends BLT>
    289         T computeBLT(OptionRegistry options, EquationBlockFactory.BlockProducer producer, T blt, boolean inInitial,
     289        T computeBLT(StepUtil stepUtil, EquationBlockFactory.BlockProducer producer, T blt, boolean inInitial,
    290290                boolean handleHomotopy, boolean mergePre, Collection<? extends SCCBlock<E, V>> components) {
    291             blt = computeInnerBLT(options, producer, blt, inInitial, handleHomotopy, mergePre, components);
     291            blt = computeInnerBLT(stepUtil, producer, blt, inInitial, handleHomotopy, mergePre, components);
    292292            blt.setLabels();
    293293            return blt;
     
    295295   
    296296        public static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>, T extends BLT>
    297         T computeInnerBLT(OptionRegistry options, EquationBlockFactory.BlockProducer producer, T blt, boolean inInitial,
     297        T computeInnerBLT(StepUtil stepUtil, EquationBlockFactory.BlockProducer producer, T blt, boolean inInitial,
    298298                boolean handleHomotopy, boolean mergePre, Collection<? extends SCCBlock<E, V>> components) {
    299299            Set<SCCBlock<E,V>> homotopyComponents = Collections.emptySet();
    300300            if (inInitial && handleHomotopy) {
    301                 ASTNode.log.verbose("Initial system contains homotopy, computing homotopy block components...");
     301                stepUtil.getStepLogger().logVerbose("Initial system contains homotopy, computing homotopy block components...");
    302302                homotopyComponents = computeHomotopyComponents(components);
    303                 ASTNode.log.verbose("... block components computed: %s", homotopyComponents);
     303                stepUtil.getStepLogger().logVerbose("... block components computed: %s", homotopyComponents);
    304304            }
    305305            if (!inInitial && mergePre) {
    306                 blt = computeBLTWithPreMerge(options, producer, blt, components);
     306                blt = computeBLTWithPreMerge(stepUtil, producer, blt, components);
    307307            } else {
    308308                int homotopyCounter = 0;
     
    312312                            continue;
    313313                        }
    314                         blt.add(computeHomotopyBlock(homotopyComponents, producer, options));
     314                        blt.add(computeHomotopyBlock(homotopyComponents, producer, stepUtil));
    315315                    } else {
    316                         blt.add(component.createEquationBlock(producer, options, inInitial));
     316                        blt.add(component.createEquationBlock(producer, stepUtil, inInitial));
    317317                    }
    318318                }
     
    428428    }
    429429
    430     public <T extends BLT> T AbstractBiPGraph.computeBLT(OptionRegistry options, EquationBlockFactory.BlockProducer producer,
     430    public <T extends BLT> T AbstractBiPGraph.computeBLT(StepUtil stepUtil, EquationBlockFactory.BlockProducer producer,
    431431            T blt, boolean handleHomotopy, boolean mergePre, Collection<SCCContributor> extraContributors) {
    432432        ASTNode.beginStep("computeBLT()");
    433433        try {
    434             Collection<C> components = tarjan(options, extraContributors, true);
    435             ASTNode.log.debug("BLT Components:");
     434            Collection<C> components = tarjan(stepUtil, extraContributors, true);
     435            stepUtil.getStepLogger().logDebug("BLT Components:");
    436436            for (C component : components) {
    437                 ASTNode.log.debug(component);
    438             }
    439             return EquationBlockFactory.computeBLT(options, producer, blt, isInitialSystem(), handleHomotopy, mergePre, components);
     437                stepUtil.getStepLogger().logDebug(component);
     438            }
     439            return EquationBlockFactory.computeBLT(stepUtil, producer, blt, isInitialSystem(), handleHomotopy, mergePre, components);
    440440        } finally {
    441441            ASTNode.endStep("computeBLT()");
     
    443443    }
    444444
    445     public BLT AbstractBiPGraph.computeDAEBLT(OptionRegistry options) {
    446         return computeBLT(options, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, new BLT(), true, true, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
    447     }
    448 
    449     public BLT AbstractBiPGraph.computeInitDAEBLT(OptionRegistry options) {
    450         return computeBLT(options, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, new BLT(), true, false, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
    451     }
    452    
    453     public <T extends BLT> T AbstractBiPGraph.computeBLT(OptionRegistry options, EquationBlockFactory.BlockProducer producer, T blt, boolean handleHomotopy) {
    454         return computeBLT(options, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, blt, handleHomotopy, false, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
    455     }
    456 
    457     public Collection<SimpleEquationBlock> AbstractBiPGraph.computeNonRealBlocks(EquationBlockFactory.BlockProducer producer, OptionRegistry options) {
    458         Collection<C> components = tarjan(options, false);
     445    public BLT AbstractBiPGraph.computeDAEBLT(StepUtil stepUtil) {
     446        return computeBLT(stepUtil, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, new BLT(), true, true, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
     447    }
     448
     449    public BLT AbstractBiPGraph.computeInitDAEBLT(StepUtil stepUtil) {
     450        return computeBLT(stepUtil, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, new BLT(), true, false, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
     451    }
     452   
     453    public <T extends BLT> T AbstractBiPGraph.computeBLT(StepUtil stepUtil, EquationBlockFactory.BlockProducer producer, T blt, boolean handleHomotopy) {
     454        return computeBLT(stepUtil, EquationBlockFactory.DEFAULT_BLOCK_PRODUCER, blt, handleHomotopy, false, Collections.<AbstractBiPGraph.SCCContributor>emptyList());
     455    }
     456
     457    public Collection<SimpleEquationBlock> AbstractBiPGraph.computeNonRealBlocks(EquationBlockFactory.BlockProducer producer, StepUtil stepUtil) {
     458        Collection<C> components = tarjan(stepUtil, false);
    459459        Collection<SimpleEquationBlock> blocks = new ArrayList<SimpleEquationBlock>();
    460460        for (C component : components) {
     
    482482    public static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>>
    483483        AbstractEquationBlock EquationBlockFactory.computeHomotopyBlock(Collection<SCCBlock<E, V>> components,
    484         BlockProducer producer, OptionRegistry options) {
     484        BlockProducer producer, StepUtil stepUtil) {
    485485        SCCBlock<E, V> mergedComponent = new SCCBlock<E, V>();
    486486        for (SCCBlock<E, V> component : components) {
     
    491491        }
    492492       
    493         BLT homotopyBLT = computeBLT(options, producer, new BLT(), true, false, false, components);
     493        BLT homotopyBLT = computeBLT(stepUtil, producer, new BLT(), true, false, false, components);
    494494        HomotopySubBlock homotopySubBlock = new HomotopySubBlock(producer, mergedComponent.computeBlockDependency(), homotopyBLT);
    495         ASTNode.log.debug("Homotopy sub block:");
    496         ASTNode.log.debug(homotopySubBlock);
     495        stepUtil.getStepLogger().logDebug("Homotopy sub block:");
     496        stepUtil.getStepLogger().logDebug(homotopySubBlock);
    497497       
    498498        BiPGraph graph = new BiPGraph(mergedComponent.getMembers(), true);
    499499        graph.setAsHomotopySimplified();
    500500        graph.maximumMatching(true);
    501         BLT simplifiedBLT = graph.computeBLT(options, producer, new BLT(), false);
    502         ASTNode.log.debug("Simplified BLT:");
    503         ASTNode.log.debug(simplifiedBLT);
     501        BLT simplifiedBLT = graph.computeBLT(stepUtil, producer, new BLT(), false);
     502        stepUtil.getStepLogger().logDebug("Simplified BLT:");
     503        stepUtil.getStepLogger().logDebug(simplifiedBLT);
    504504       
    505505        return new HomotopyBlock(producer, mergedComponent.computeBlockDependency(), homotopySubBlock, simplifiedBLT);
     
    578578        }
    579579
    580         public void complianceCheck(ErrorCheckType checkType, OptionRegistry options) {
     580        public void complianceCheck(ErrorCheckType checkType, StepUtil stepUtil) {
    581581        }
    582582
     
    33263326            }
    33273327
    3328             public boolean active(OptionRegistry options) {
    3329                 return options.getBooleanOption(option);
     3328            public boolean active(StepUtil stepUtil) {
     3329                return stepUtil.getOptionRegistry().getBooleanOption(option);
    33303330            }
    33313331
     
    33343334            }
    33353335
    3336             public abstract <E extends AbstractEq<E,V>, V extends AbstractVar<E,V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, OptionRegistry options, boolean isInitial);
    3337         }
    3338        
    3339         public static <E extends AbstractEq<E,V>, V extends AbstractVar<E,V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, OptionRegistry options, boolean isInitial) {
    3340             TearingAlgorithm algorithm = getActiveAlgorithm(options);
     3336            public abstract <E extends AbstractEq<E,V>, V extends AbstractVar<E,V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, StepUtil stepUtil, boolean isInitial);
     3337        }
     3338       
     3339        public static <E extends AbstractEq<E,V>, V extends AbstractVar<E,V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, StepUtil stepUtil, boolean isInitial) {
     3340            TearingAlgorithm algorithm = getActiveAlgorithm(stepUtil);
    33413341            if (algorithm == null)
    33423342                return null;
    33433343            else
    3344                 return algorithm.tear(block, producer, options, isInitial);
    3345         }
    3346        
    3347         public static TearingAlgorithm getActiveAlgorithm(OptionRegistry options) {
     3344                return algorithm.tear(block, producer, stepUtil, isInitial);
     3345        }
     3346       
     3347        public static TearingAlgorithm getActiveAlgorithm(StepUtil stepUtil) {
    33483348            for (TearingAlgorithm algorithm : tearingAlgorithms)
    3349                 if (algorithm.active(options))
     3349                if (algorithm.active(stepUtil))
    33503350                    return algorithm;
    33513351            return null;
    33523352        }
    33533353       
    3354         public static boolean canTear(OptionRegistry options) {
    3355             return getActiveAlgorithm(options) != null;
     3354        public static boolean canTear(StepUtil stepUtil) {
     3355            return getActiveAlgorithm(stepUtil) != null;
    33563356        }
    33573357    }
     
    33893389
    33903390            @Override
    3391             public <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, OptionRegistry options, boolean isInitial) {
     3391            public <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> TornEquationBlock tear(SCCBlock<E, V> block, BlockProducer producer, StepUtil stepUtil, boolean isInitial) {
    33923392                TornEquationBlock teb = new TornEquationBlock(producer, block.computeBlockDependency());
    3393                 tear(block, teb, isInitial);
     3393                tear(block, teb, stepUtil, isInitial);
    33943394                return teb;
    33953395            }
    33963396           
    3397             private <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> void tear(SCCBlock<E, V> block, TornEquationBlock eb, boolean isInitial) {
     3397            private <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> void tear(SCCBlock<E, V> block, TornEquationBlock eb, StepUtil stepUtil, boolean isInitial) {
    33983398                SolvingBiPGraph g = new SolvingBiPGraph(block.getMembers(), isInitial);
    33993399                if (isInitial)
    34003400                    g.setAsInitialSystem();
    34013401               
    3402                 ASTNode.log.verbose("Starting automatic tearing");
    3403                 ASTNode.log.verbose(g);
    3404                 ASTNode.log.verbose("Initial matching");
    3405                 ASTNode.log.verbose(g.printMatchingObj());
     3402                stepUtil.getStepLogger().logVerbose("Starting automatic tearing");
     3403                stepUtil.getStepLogger().logVerbose(g);
     3404                stepUtil.getStepLogger().logVerbose("Initial matching");
     3405                stepUtil.getStepLogger().logVerbose(g.printMatchingObj());
    34063406               
    34073407                // Obtain Maximum Solvable Matching in two steps (greedy and augmenting paths)
     
    34193419                }
    34203420
    3421                 ASTNode.log.verbose("Matching after initial manipulation");
    3422                 ASTNode.log.verbose(g.printMatchingObj());
     3421                stepUtil.getStepLogger().logVerbose("Matching after initial manipulation");
     3422                stepUtil.getStepLogger().logVerbose(g.printMatchingObj());
    34233423                // Now we have a Maximum Solvable Matching
    34243424
     
    34293429                        eb.addSolvedBlock(tearBlock);
    34303430                    } else {
    3431                         tearInner(g, eb);
     3431                        tearInner(stepUtil, g, eb);
    34323432                    }
    34333433                } else {
     
    35303530                                            eb.addSolvedBlock(tearBlock);
    35313531                                        } else {
    3532                                             tearInner(new SolvingBiPGraph(bInnerInner.getMembers(), isInitial), eb);
     3532                                            tearInner(stepUtil, new SolvingBiPGraph(bInnerInner.getMembers(), isInitial), eb);
    35333533                                        }
    35343534                                    }
    35353535                                } else {
    3536                                     tearInner(new SolvingBiPGraph(bInner.getMembers(), isInitial), eb);
     3536                                    tearInner(stepUtil, new SolvingBiPGraph(bInner.getMembers(), isInitial), eb);
    35373537                                }
    35383538                            } else {
    35393539                                // Reuse the already constructed graph
    3540                                 tearInner(gInner, eb);
     3540                                tearInner(stepUtil, gInner, eb);
    35413541                            }
    35423542                        }
     
    35483548                    }
    35493549                    for (int i = 0; i < tearings.size(); i++) {
    3550                         ASTNode.log.verbose("Automatic tearing pair, equation: %s, tearing with variable: %s", residuals.get(i).getEquation(), tearings.get(i).getName());
     3550                        stepUtil.getStepLogger().logVerbose("Automatic tearing pair, equation: %s, tearing with variable: %s", residuals.get(i).getEquation(), tearings.get(i).getName());
    35513551                        eb.addUnsolvedBlock(EquationBlockFactory.createSimpleEquationBlock(residuals.get(i), tearings.get(i), AUTOMATIC_TEARING_BLOCK_PRODUCER));
    35523552                    }
     
    35543554            }
    35553555           
    3556             private static void tearInner(SolvingBiPGraph g, TornEquationBlock eb){
     3556            private static void tearInner(StepUtil stepUtil, SolvingBiPGraph g, TornEquationBlock eb){
    35573557                SolvingVar bestIter = null;
    35583558                for (SolvingEq e : g.getEquations()) {
     
    35673567                bestIter.isIter(true);
    35683568                res.isRes(true);
    3569                 ASTNode.log.verbose("Automatic tearing pair, equation: %s, tearing with variable: %s", res.getEquation(), bestIter.getVariable().displayName());
     3569                stepUtil.getStepLogger().logVerbose("Automatic tearing pair, equation: %s, tearing with variable: %s", res.getEquation(), bestIter.getVariable().displayName());
    35703570                eb.addUnsolvedBlock(EquationBlockFactory.createSimpleEquationBlock(res, bestIter, AUTOMATIC_TEARING_BLOCK_PRODUCER));
    35713571                Collection<SCCBlock<SolvingEq, SolvingVar>> blt = g.tarjan(false);
     
    35753575                        eb.addSolvedBlock(tearBlock);
    35763576                    } else {
    3577                         tearInner(new SolvingBiPGraph(block.getMembers(), g.isInitialSystem()), eb);
     3577                        tearInner(stepUtil, new SolvingBiPGraph(block.getMembers(), g.isInitialSystem()), eb);
    35783578                    }
    35793579                }
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/DynamicStates.jrag

    r11676 r12469  
    738738   
    739739    public class EquationBlockFactory {
    740         private static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> DynamicStateBlock computeDynamicStateBlock(SCCBlock<E, V> component, BlockProducer producer, OptionRegistry options) {
     740        private static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>> DynamicStateBlock computeDynamicStateBlock(SCCBlock<E, V> component, BlockProducer producer, StepUtil stepUtil) {
    741741            Map<DynamicStateSet, FDynamicAlgebraicVariable[]> setVarMap = new LinkedHashMap<DynamicStateSet, FDynamicAlgebraicVariable[]>();
    742742            Collection<V> otherVars = new ArrayList<V>();
     
    830830                DynamicStateBLT blt = new DynamicStateBLT(setVarMap.keySet(), states, algebraics);
    831831                if (graph.isComplete()) {
    832                     blt = graph.computeBLT(options, producer, blt, false);
     832                    blt = graph.computeBLT(stepUtil, producer, blt, false);
    833833                } else {
    834834                    ASTNode.log.verbose("  This combination does not have a valid solution!");
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/Graphs.jadd

    r11676 r12469  
    362362            for (V var : vars()) {
    363363                if (log) {
    364                     ASTNode.log.verbose("*** %s", var);
     364                    getStepLogger().logVerbose("*** %s", var);
    365365                }
    366366                addEdge(eqn, var);
     
    10661066        }
    10671067
    1068         public boolean isActive(OptionRegistry options) {
    1069             return option == null || options != null && options.getBooleanOption(option);
     1068        public boolean isActive(StepUtil stepUtil) {
     1069            return option == null || stepUtil != null && stepUtil.getOptionRegistry().getBooleanOption(option);
    10701070        }
    10711071
     
    11721172   
    11731173
    1174     public Collection<C> tarjan(OptionRegistry options, boolean forceGroupMembersIntoSameBlock) {
    1175         return tarjan(options, Collections.<SCCContributor>emptyList(), forceGroupMembersIntoSameBlock);
    1176     }
    1177 
    1178     public Collection<C> tarjan(OptionRegistry options, Collection<SCCContributor> extraContributors,
     1174    public Collection<C> tarjan(StepUtil stepUtil, boolean forceGroupMembersIntoSameBlock) {
     1175        return tarjan(stepUtil, Collections.<SCCContributor>emptyList(), forceGroupMembersIntoSameBlock);
     1176    }
     1177
     1178    public Collection<C> tarjan(StepUtil stepUtil, Collection<SCCContributor> extraContributors,
    11791179            boolean forceGroupMembersIntoSameBlock) {
    11801180        tarjanReset();
     
    11891189        Collection<SCCContributor> contributors = new ArrayList<SCCContributor>();
    11901190        for (SCCContributor contributor : new ChainedIterable<SCCContributor>(getSCCContributors(), groupMemberContributers, extraContributors)) {
    1191             if (!contributor.isActive(options))
     1191            if (!contributor.isActive(stepUtil))
    11921192                continue;
    11931193            contributors.add(contributor);
     
    15561556    }
    15571557   
    1558     public AbstractEquationBlock createEquationBlock(EquationBlockFactory.BlockProducer producer, OptionRegistry options, boolean isInitial) {
    1559         return EquationBlockFactory.createEquationBlock(this, producer, options, isInitial);
     1558    public AbstractEquationBlock createEquationBlock(EquationBlockFactory.BlockProducer producer, StepUtil stepUtil, boolean isInitial) {
     1559        return EquationBlockFactory.createEquationBlock(this, producer, stepUtil, isInitial);
    15601560    }
    15611561}
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/IndexReduction.jrag

    r11676 r12469  
    7272     */
    7373    private void FClass.reduceIndex() {
    74         log.verbose("Flat tree before index reduction");
    75         log.verbose(this);
    76         log.verbose("Index reduction starts...");
     74        logVerbose("Flat tree before index reduction");
     75        logVerbose(this);
     76        logVerbose("Index reduction starts...");
    7777        IndexReductionResult result;
    7878        while (true) {
    7979            IndexReductionBiPGraph g = new IndexReductionBiPGraph();
     80            g.setStepLogger(this);
    8081            // Only do index reduction based on real variables and equations
    8182            g.addVariables(this, VAR_TYPES_REAL);
    8283            g.addEquations(continuousNonMetaEquations(), VAR_TYPES_REAL);
    83             log.verbose(g);
     84            logVerbose(g);
    8485            g.maximumMatching(true);
    85             log.verbose("DAE system real variables only");
    86             log.verbose(g.printMatchingObj());
     86            logVerbose("DAE system real variables only");
     87            logVerbose(g.printMatchingObj());
    8788           
    8889            try {
    8990                boolean printPantelidesSteps = g.getEquations().size() <= myOptions().getIntegerOption("diagnostics_limit");
    9091                if (!printPantelidesSteps) {
    91                     log.verbose("The BiPGraph will not be printed during pantelides, the model is too big. "
     92                    logVerbose("The BiPGraph will not be printed during pantelides, the model is too big. "
    9293                            + "Limit, compiler option 'diagnostics_limit', is set to %d and model size is %d. ",
    9394                            myOptions().getIntegerOption("diagnostics_limit"), g.getEquations().size());
     
    99100                break;
    100101            } catch (EquationDifferentiationException e) {
    101                 ASTNode.log.verbose("Unable to differentiate equation:\n%s", e.equation);
     102                logVerbose("Unable to differentiate equation:\n%s", e.equation);
    102103                if (ssPreferVars == null || ssPreferVars.isEmpty())
    103104                    throw e;
     
    105106                if (removableVars.isEmpty())
    106107                    throw e;
    107                 log.verbose("Retrying index reduction without the following state select prefer derivatives:");
     108                logVerbose("Retrying index reduction without the following state select prefer derivatives:");
    108109                for (FVariable var : removableVars) {
    109                     log.verbose("  %s", var.name());
     110                    logVerbose("  %s", var.name());
    110111                    ssPreferVars.remove(var.getMeIntegrated());
    111112                }
    112                 log.verbose("");
     113                logVerbose("");
    113114               
    114115                // Remove SS=prefer derivatives
     
    168169        applyDynamicStateResult(result);
    169170       
    170         log.verbose(this);
     171        logVerbose(this);
    171172       
    172173        enableFHDerRewrite();
     
    182183        root().flushAllRecursive();
    183184
    184         log.verbose(this);
    185         log.verbose(aliasManager);
     185        logVerbose(this);
     186        logVerbose(aliasManager);
    186187
    187188        // Produce errors and warnings:
     
    208209                fv.warning(fv.name() + " has stateSelect=always, but could not be selected as state");
    209210
    210         log.info(stateDiagnosticsObj());
     211        logInfo(stateDiagnosticsObj());
    211212       
    212213        DAEBiPGraph = computeMatchedDAEBiPGraph();
    213         log.verbose("BiPGraph after index reduction");
    214         log.verbose(DAEBiPGraph);
    215         log.verbose("BiPGraph matching after index reduction");
    216         log.verbose(DAEBiPGraph.printMatchingObj());
     214        logVerbose("BiPGraph after index reduction");
     215        logVerbose(DAEBiPGraph);
     216        logVerbose("BiPGraph matching after index reduction");
     217        logVerbose(DAEBiPGraph.printMatchingObj());
    217218
    218219        if (!DAEBiPGraph.isComplete()) {
     
    596597
    597598        @Override
    598         protected void addEquation(FAbstractEquation eqn, TypePrefixVariability variability) {
     599        protected void addEquation(FAbstractEquation eqn) {
    599600            eqn.flushAllRecursiveClearFinal();
    600601            dynamicEquation(eqn);
    601602            newEquations.add(eqn);
     603        }
     604
     605        @Override
     606        public void inline(List<FAbstractEquation> oldEquationList, Collection<FAbstractEquation> newEquationList) {
     607            throw new UnsupportedOperationException();
    602608        }
    603609
     
    728734            return;
    729735       
    730         ASTNode.log.verbose("Differentiating %s", baseEqn);
     736        getStepLogger().logVerbose("Differentiating %s", baseEqn);
    731737       
    732738        // Go through all group members and collect all unique AST equations.
     
    761767        Collection<FAbstractEquation> extraEquations = new ArrayList<FAbstractEquation>();
    762768        for (FAbstractEquation fEqn : baseEqn.getExtraEquations()) {
    763             ASTNode.log.verbose("  Extra equation: %s", fEqn);
     769            getStepLogger().logVerbose("  Extra equation: %s", fEqn);
    764770            extraEquations.add(fEqn);
    765771            if (baseEqn.diffExtraEqn(fEqn)) {
    766772                FAbstractEquation diffedFEqn = differentiateEquation(fEqn, inliner);
    767                 ASTNode.log.verbose("    Diffed into: %s", diffedFEqn);
     773                getStepLogger().logVerbose("    Diffed into: %s", diffedFEqn);
    768774                if (diffedFEqn.isContinuous()) {
    769775                    diffedFEqns.add(diffedFEqn);
    770776                } else {
    771                     ASTNode.log.verbose("    Diffed not added!");
     777                    getStepLogger().logVerbose("    Diffed not added!");
    772778                }
    773779            } else {
    774                 ASTNode.log.verbose("    Not diffed!");
     780                getStepLogger().logVerbose("    Not diffed!");
    775781            }
    776782        }
     
    878884            for (int i = 0; i < newEqn.numScalarEquations(); i++) {
    879885                IndexReductionEq original = eqnIt.next();
    880                 ASTNode.log.verbose("About to add equation: %s", newEqn);
     886                getStepLogger().logVerbose("About to add equation: %s", newEqn);
    881887                // Add the differentiated equation
    882888                IndexReductionEq diffedEqn = addEquation(newEqn, i, diffedOriginalEqs, incMap.variability(i), incMap.type(i), original.getName() + "_d");
     
    892898                diffedEqn.setMeIntegrated(original);
    893899               
    894                 ASTNode.log.verbose("Added equation: %s, %s", diffedEqn, diffedEqn.printEquation());
     900                getStepLogger().logVerbose("Added equation: %s, %s", diffedEqn, diffedEqn.printEquation());
    895901               
    896902                if (original.getMatching() != null && !match(diffedEqn, original.getMatching().getMeDifferentiated()))
    897903                    eqToMatchStack.add(diffedEqn);
    898904            }
    899             ASTNode.log.verbose("Equation added");
     905            getStepLogger().logVerbose("Equation added");
    900906        }
    901907       
     
    984990            Collection<IndexReductionEq> visitedEquations = getVisitedEquations();
    985991            Collection<IndexReductionVar> visitedVariables = getVisitedVariables();
    986             ASTNode.log.verbose("*************");
    987             ASTNode.log.verbose("Looking for augmented path starting in equation: %s", eqToMatch);
     992            getStepLogger().logVerbose("*************");
     993            getStepLogger().logVerbose("Looking for augmented path starting in equation: %s", eqToMatch);
    988994            if (pathFound)
    989                 ASTNode.log.verbose("Path found!");
     995                getStepLogger().logVerbose("Path found!");
    990996            else
    991                 ASTNode.log.verbose("Path not found!");
    992            
    993             ASTNode.log.verbose("Visisted equations:");
     997                getStepLogger().logVerbose("Path not found!");
     998           
     999            getStepLogger().logVerbose("Visisted equations:");
    9941000            for (IndexReductionEq ee : visitedEquations)
    995                 ASTNode.log.verbose("  %s", ee.printEquation());
    996            
    997             ASTNode.log.verbose("Visisted variables:");
     1001                getStepLogger().logVerbose("  %s", ee.printEquation());
     1002           
     1003            getStepLogger().logVerbose("Visisted variables:");
    9981004            for (IndexReductionVar vv : visitedVariables)
    999                 ASTNode.log.verbose("  %s", vv);
     1005                getStepLogger().logVerbose("  %s", vv);
    10001006           
    10011007            if (!pathFound) { // Step 3b-5
     
    10241030                eqToMatchStack.push(eqToMatch);
    10251031                if (printPantelidesSteps) {
    1026                     ASTNode.log.verbose("Graph after addition of equations and variables:");
    1027                     ASTNode.log.verbose(this);
     1032                    getStepLogger().logVerbose("Graph after addition of equations and variables:");
     1033                    getStepLogger().logVerbose(this);
    10281034                }
    10291035            }
    10301036            if (printPantelidesSteps) {
    1031                 ASTNode.log.verbose("Matching:");
    1032                 ASTNode.log.verbose(printMatchingObj());
    1033                 ASTNode.log.verbose("*************");
     1037                getStepLogger().logVerbose("Matching:");
     1038                getStepLogger().logVerbose(printMatchingObj());
     1039                getStepLogger().logVerbose("*************");
    10341040            }
    10351041        }
     
    10461052            removeEquation(e);
    10471053       
    1048         ASTNode.log.verbose("Index reduction done!");
    1049         ASTNode.log.verbose(this);
    1050         ASTNode.log.verbose("Matching:");
    1051         ASTNode.log.verbose(printMatchingObj());
     1054        getStepLogger().logVerbose("Index reduction done!");
     1055        getStepLogger().logVerbose(this);
     1056        getStepLogger().logVerbose("Matching:");
     1057        getStepLogger().logVerbose(printMatchingObj());
    10521058       
    10531059        if (getUnmatchedEquations().size() > 0 || getUnmatchedVariables().size() > 0)
     
    10551061       
    10561062        if (result.getEquations().isEmpty()) {
    1057             ASTNode.log.verbose("Index reduction did not change the system. Munkres is skipped.");
     1063            getStepLogger().logVerbose("Index reduction did not change the system. Munkres is skipped.");
    10581064            return result;
    10591065        }
     
    10771083        */
    10781084       
    1079         Collection<IndexReductionSCCBlock> components = tarjan(fclass.myOptions(), true);
     1085        Collection<IndexReductionSCCBlock> components = tarjan(fclass.myStepUtil(), true);
    10801086   
    10811087        Set<IndexReductionVar> varsToKeep = new HashSet<IndexReductionVar>();
     
    10841090        for (IndexReductionSCCBlock block : components) {
    10851091            if (block.containsDifferentatedComponents()) {
    1086                 ASTNode.log.verbose(" ********* Found block containing diffed equations ***********");
    1087                 ASTNode.log.verbose(block);
     1092                getStepLogger().logVerbose(" ********* Found block containing diffed equations ***********");
     1093                getStepLogger().logVerbose(block);
    10881094                for (IndexReductionEq eqn : block.getMembers())
    10891095                    for (IndexReductionVar var : eqn.getVariables())
     
    11131119        // Iterate
    11141120        while (remainingDifferentiatedEquations) {
    1115             ASTNode.log.verbose("----------------");
     1121            getStepLogger().logVerbose("----------------");
    11161122            // Step 3: Remove equations that aren't differentiated.
    11171123            for (IndexReductionEq eqn : new ArrayList<IndexReductionEq>(getEquations()))
     
    11201126           
    11211127            // Step 4: Select independent columns.
    1122             ASTNode.log.verbose(this);
     1128            getStepLogger().logVerbose(this);
    11231129           
    11241130            // Compute weights for variables based on state select, linearity
     
    11331139                boolean fixed = fv.getTopIntegrated().isFixed();
    11341140                IndexReductionCost weight = new IndexReductionCost(fv.stateSelection(), fixed, fv.order(), linearity);
    1135                 ASTNode.log.verbose("Weight: %s %s", var, weight);
     1141                getStepLogger().logVerbose("Weight: %s %s", var, weight);
    11361142                weights.put(var, weight);
    11371143            }
     
    11501156                ASTNode.endStep("Munkres");
    11511157            }
    1152             ASTNode.log.verbose(printMatchingObj());
     1158            getStepLogger().logVerbose(printMatchingObj());
    11531159            Set<IndexReductionVar> dsVars = Collections.emptySet();
    11541160            if (computeDynamicStates)
    11551161                dsVars = computeDynamicStateSets(coefficientsMatrix, result);
    1156             ASTNode.log.verbose(printMatchingObj());
     1162            getStepLogger().logVerbose(printMatchingObj());
    11571163           
    11581164            // Step 5: prepare for next iteration
     
    11611167            // to zHat.
    11621168            Collection<IndexReductionVar> varsToRemove = new ArrayList<IndexReductionVar>();
    1163             ASTNode.log.verbose(" Dummy derivatives selected in iteration: ");
     1169            getStepLogger().logVerbose(" Dummy derivatives selected in iteration: ");
    11641170            for (IndexReductionVar var : new ArrayList<IndexReductionVar>(getVariables())) {
    11651171                varsToRemove.add(var);
    11661172                if (var.getMatching() != null) {
    11671173                    if (!dsVars.contains(var)) {
    1168                         ASTNode.log.verbose("   %s", var);
     1174                        getStepLogger().logVerbose("   %s", var);
    11691175                        zHat.add(var.getVariable());
    11701176                    }
     
    11721178                }
    11731179            }
    1174             ASTNode.log.verbose("");
     1180            getStepLogger().logVerbose("");
    11751181           
    11761182            // Add the "integrated" equation for all equations in the graph and
     
    11971203        }
    11981204       
    1199         ASTNode.log.verbose(" Dummy derivatives: ");
     1205        getStepLogger().logVerbose(" Dummy derivatives: ");
    12001206        for (FVariable var : zHat) {
    12011207            result.addDummyDerivative(var);
    1202             ASTNode.log.verbose("   %s", var);
    1203         }
    1204         ASTNode.log.verbose("");
     1208            getStepLogger().logVerbose("   %s", var);
     1209        }
     1210        getStepLogger().logVerbose("");
    12051211       
    12061212        return result;
     
    14541460
    14551461        IndexReductionCost opt_cost = IndexReductionCost.zeroCost();
    1456         ASTNode.log.verbose("Munkres result:");
     1462        getStepLogger().logVerbose("Munkres result:");
    14571463        for (int i = 0; i < result.length; i++) {
    14581464            opt_cost.add(cost[result[i][0]][result[i][1]]);
     
    14611467            if (!match(eqn, var))
    14621468                throw new IndexReductionException("Munkres matched to unmatchable incidence, unable to match " + eqn + " with " + var);
    1463             ASTNode.log.verbose("%s: %s %s", eqn, var, cost[result[i][0]][result[i][1]]);
    1464         }
    1465         ASTNode.log.verbose("Optimal cost: %s", opt_cost);
     1469            getStepLogger().logVerbose("%s: %s %s", eqn, var, cost[result[i][0]][result[i][1]]);
     1470        }
     1471        getStepLogger().logVerbose("Optimal cost: %s", opt_cost);
    14661472    }
    14671473
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/OverdeterminedInitialSystem.jrag

    r12006 r12469  
    6767         */
    6868        public OISResult overdeterminedInitialSystem() {
    69             ASTNode.log.verbose("Analysing initial system for redundant equations to remove.");
    70             OISVariableEvaluator evaluator = new OISVariableEvaluator();
     69            getStepLogger().logVerbose("Analysing initial system for redundant equations to remove.");
     70            OISVariableEvaluator evaluator = new OISVariableEvaluator(getStepLogger());
    7171            boolean allIsGood = true;
    7272            for (E eqn : unmatchedEquationsIterable()) {
    73                 ASTNode.log.verbose("Checking unmatched equation %s", eqn);
     73                getStepLogger().logVerbose("Checking unmatched equation %s", eqn);
    7474                FAbstractEquation equation = eqn.getEquation();
    7575                if (!equation.isInitial()) {
    76                     ASTNode.log.verbose("  Not an initial equation");
     76                    getStepLogger().logVerbose("  Not an initial equation");
    7777                    allIsGood = false;
    78                 } else if (equation.OIS_consistencyCheck(evaluator)) {
    79                     ASTNode.log.verbose("  Consistent");
     78                } else if (equation.OIS_consistencyCheck(evaluator,stepLogger)) {
     79                    getStepLogger().logVerbose("  Consistent");
    8080                } else {
    8181                    allIsGood = false;
    82                     ASTNode.log.verbose("  Unable to verify or different values were calculated");
     82                    getStepLogger().logVerbose("  Unable to verify or different values were calculated");
    8383                }
    8484            }
    8585            if (!allIsGood) {
    86                 ASTNode.log.verbose("Unable to verify all unmatched initial equations");
     86                getStepLogger().logVerbose("Unable to verify all unmatched initial equations");
    8787                return null;
    8888            }
    8989            Collection<E> results = new ArrayList<E>();
    90             ASTNode.log.verbose("All seems to be ok!");
     90            getStepLogger().logVerbose("All seems to be ok!");
    9191            return new OISResult(getUnmatchedEquations(), evaluator.visitedParameters);
    9292        }
     
    112112            private Set<FVariable> visitedParameters = new LinkedHashSet<FVariable>();
    113113           
    114             public OISVariableEvaluator() {
     114            private StepLogger stepLogger;
     115           
     116            public OISVariableEvaluator(StepLogger stepLogger) {
    115117                super(true);
     118                this.stepLogger = stepLogger;
     119            }
     120           
     121            public StepLogger getStepLogger() {
     122                return stepLogger;
    116123            }
    117124           
    118125            @Override
    119126            public CValue ceval(CommonVariableDecl variable) {
    120                 ASTNode.log.verbose("    %s", variable.name());
     127                getStepLogger().logVerbose("    %s", variable.name());
    121128                CValue val = evaluationCache.get(variable);
    122129                if (val != null)
     
    179186     * equal to the right hand side.
    180187     */
    181     syn boolean FAbstractEquation.OIS_consistencyCheck(VariableEvaluator evaluator) = false;
    182     eq FEquation.OIS_consistencyCheck(VariableEvaluator evaluator) {
     188    syn boolean FAbstractEquation.OIS_consistencyCheck(VariableEvaluator evaluator, StepLogger stepLogger) = false;
     189    eq FEquation.OIS_consistencyCheck(VariableEvaluator evaluator, StepLogger stepLogger) {
    183190        try {
    184             log.verbose("  Right:");
     191            stepLogger.logVerbose("  Right:");
    185192            CValue right = getRight().ceval(evaluator);
    186             log.verbose("    Calculated value: %s", right);
    187             log.verbose("  Left:");
     193            stepLogger.logVerbose("    Calculated value: %s", right);
     194            stepLogger.logVerbose("  Left:");
    188195            CValue left = getLeft().ceval(evaluator);
    189             log.verbose("    Calculated value: %s", left);
     196            stepLogger.logVerbose("    Calculated value: %s", left);
    190197            CValue equ = type().equ(left, right);
    191198            return equ.hasBooleanValue() && equ.booleanValue();
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/src/jastadd/structural/PreBlockHandling.jrag

    r10829 r12469  
    3535
    3636        private static <E extends AbstractEq<E, V>, V extends AbstractVar<E, V>, C extends SCCBlock<E, V>, T extends BLT>
    37         T computeBLTWithPreMerge(OptionRegistry options, BlockProducer producer, T blt,
     37        T computeBLTWithPreMerge(StepUtil stepUtil, BlockProducer producer, T blt,
    3838                Collection<C> components) {
    3939            Collection<TarjanComponent<C>> tarjanRes = computePreBlocks(components);
    4040            for (TarjanComponent<C> block : tarjanRes) {
    4141                if (block.getMembers().size() == 1) {
    42                     blt.add(block.iterator().next().createEquationBlock(producer, options, false));
     42                    blt.add(block.iterator().next().createEquationBlock(producer, stepUtil, false));
    4343                } else {
    4444                    SCCBlock<E, V> aggr  = new SCCBlock<E, V>();
     
    5050                    }
    5151                    BiPGraph g = new BiPGraph(aggr.getMembers(), false);
    52                     Collection<SCCBlock<Eq, Var>> sortedBlocks = g.tarjan(options, false);
    53                     blt.add(new PrePropagationEquationBlock(producer, aggr.computeBlockDependency(), computeInnerBLT(options, producer, new BLT(), false, false, false, sortedBlocks)));
     52                    Collection<SCCBlock<Eq, Var>> sortedBlocks = g.tarjan(stepUtil, false);
     53                    blt.add(new PrePropagationEquationBlock(producer, aggr.computeBlockDependency(), computeInnerBLT(stepUtil, producer, new BLT(), false, false, false, sortedBlocks)));
    5454                }
    5555            }
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/test/modelica/DynamicStates.mo

    r10839 r12469  
    19791979_der_b := 1.0
    19801980
    1981 --- Solved equation ---
    1982 temp_3 := _der_b
    1983 
    19841981--- Dynamic state block ---
    19851982  --- States: _der_y, y ---
     
    19871984    dynDer(y) := ds(1, _der_y)
    19881985
    1989     --- Torn system (Block 1(_der_y, y).1) of 2 iteration variables and 4 solved variables ---
     1986    --- Torn system (Block 1(_der_y, y).1) of 2 iteration variables and 3 solved variables ---
    19901987    Torn variables:
    19911988      c
     1989      dynDer(t)
    19921990      t
    1993       temp_6
    1994       dynDer(t)
    19951991
    19961992    Iteration variables:
     
    20001996    Torn equations:
    20011997      c := cos(_der_x)
     1998      dynDer(t) := DynamicStates.Special.NoDerivative1.F(_der_b * c, c)
    20021999      t := DynamicStates.Special.NoDerivative1.F(b, c)
    2003       temp_6 := c
    2004       dynDer(t) := DynamicStates.Special.NoDerivative1.F(temp_3 * temp_6, temp_6)
    20052000
    20062001    Residual equations:
     
    20192014
    20202015    --- Solved equation ---
    2021     temp_6 := c
    2022 
    2023     --- Solved equation ---
    2024     dynDer(t) := DynamicStates.Special.NoDerivative1.F(temp_3 * temp_6, temp_6)
     2016    dynDer(t) := DynamicStates.Special.NoDerivative1.F(_der_b * c, c)
    20252017
    20262018    --- Solved equation ---
     
    20502042
    20512043    --- Unsolved equation (Block 1(_der_t, y).1) ---
    2052     dynDer(t) = DynamicStates.Special.NoDerivative1.F(temp_3 * temp_6, temp_6)
    2053       Computed variables: temp_6
    2054 
    2055     --- Solved equation ---
    2056     c := temp_6
     2044    dynDer(t) = DynamicStates.Special.NoDerivative1.F(_der_b * c, c)
     2045      Computed variables: c
    20572046
    20582047    --- Solved equation ---
     
    21012090  _der_vx := a * x
    21022091  _der_c := - sin(_der_x) * _der_vx
    2103   dynDer(_der_t) := DynamicStates.Special.NoDerivative1.F((temp_3 * _der_c + _der_der_b * temp_6) * temp_6, temp_6)
     2092  dynDer(_der_t) := DynamicStates.Special.NoDerivative1.F((_der_b * _der_c + _der_der_b * c) * c, c)
    21042093
    21052094Residual equations:
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/test/modelica/EventGeneration.mo

    r10324 r12469  
    118118 pre(temp_2) = 0.0;
    119119equation
     120 temp_2 = temp_1 * 3.14;
    120121 x = temp_2 - noEvent(floor(temp_2 / 2)) * 2;
    121122 temp_1 = if 0.9 + time / 10 < pre(temp_1) or 0.9 + time / 10 >= pre(temp_1) + 1 or initial() then integer(0.9 + time / 10) else pre(temp_1);
    122123 _eventIndicator_1 = 0.9 + time / 10 - pre(temp_1);
    123124 _eventIndicator_2 = 0.9 + time / 10 - (pre(temp_1) + 1);
    124  temp_2 = temp_1 * 3.14;
    125125end EventGeneration.InFunctionCall;
    126126")})));
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/test/modelica/FunctionInlining.mo

    r12184 r12469  
    2424        algorithm
    2525            b := a;
    26             end f;
     26        end f;
    2727       
    2828        Real x = f(1);
     
    119119 Real temp_4;
    120120equation
    121  x = temp_4 ^ temp_3 - temp_4 - temp_3 - temp_4 + 1;
    122  y = time;
    123121 temp_1 = y + 1;
    124122 temp_3 = 2 * temp_1 + temp_1;
    125123 temp_4 = temp_3 / 3 + 1;
     124 x = temp_4 ^ temp_3 - temp_4 - temp_3 - temp_4 + 1;
     125 y = time;
    126126end FunctionInlining.BasicInline3;
    127127")})));
     
    204204 Real temp_14;
    205205equation
     206 temp_6 = y[1] .+ 2;
     207 temp_7 = y[2] .+ 2;
     208 temp_8 = y[3] .+ 2;
     209 temp_14 = y[1] * temp_6 + y[2] * temp_7 + y[3] * temp_8;
    206210 x[1] = temp_14 * (y[1] + temp_6);
    207211 x[2] = temp_14 * (y[2] + temp_7);
     
    210214 y[2] = 2;
    211215 y[3] = 3;
    212  temp_6 = y[1] .+ 2;
    213  temp_7 = y[2] .+ 2;
    214  temp_8 = y[3] .+ 2;
    215  temp_14 = y[1] * temp_6 + y[2] * temp_7 + y[3] * temp_8;
    216216end FunctionInlining.BasicInline6;
    217217")})));
     
    255255 Real x;
    256256 Real y;
    257  Real temp_1;
    258  Real temp_4;
    259257 Real temp_7;
    260258equation
    261  x = temp_4 + temp_4 * 2 + (temp_7 + temp_7 * 2);
     259 temp_7 = y * 2;
     260 x = y + y * 2 + (temp_7 + temp_7 * 2);
    262261 y = 1;
    263  temp_1 = y;
    264  temp_4 = temp_1;
    265  temp_7 = temp_1 * 2;
    266262end FunctionInlining.BasicInline7;
    267263")})));
     
    322318 Real temp_44;
    323319equation
    324  x[1] = temp_29 * (y[1] + temp_21) + temp_44 * (temp_33 + temp_36);
    325  x[2] = temp_29 * (y[2] + temp_22) + temp_44 * (temp_34 + temp_37);
    326  x[3] = temp_29 * (y[3] + temp_23) + temp_44 * (temp_35 + temp_38);
    327  y[1] = 1;
    328  y[2] = 2;
    329  y[3] = 3;
    330320 temp_21 = y[1] .+ 1;
    331321 temp_22 = y[2] .+ 1;
     
    339329 temp_38 = temp_35 .+ 1;
    340330 temp_44 = temp_33 * temp_36 + temp_34 * temp_37 + temp_35 * temp_38;
     331 x[1] = temp_29 * (y[1] + temp_21) + temp_44 * (temp_33 + temp_36);
     332 x[2] = temp_29 * (y[2] + temp_22) + temp_44 * (temp_34 + temp_37);
     333 x[3] = temp_29 * (y[3] + temp_23) + temp_44 * (temp_35 + temp_38);
     334 y[1] = 1;
     335 y[2] = 2;
     336 y[3] = 3;
    341337end FunctionInlining.BasicInline8;
    342338")})));
     
    602598fclass FunctionInlining.BasicInline15
    603599 parameter String x = \"string\" /* \"string\" */;
    604  parameter String temp_1;
    605600 parameter String y;
    606601parameter equation
    607  temp_1 = x;
    608  y = temp_1 + temp_1;
     602 y = x + x;
    609603end FunctionInlining.BasicInline15;
    610604")})));
     
    944938 y[3] = 3;
    945939 y[4] = 4;
     940 temp_19 = y[1] * y[1] + y[2] * y[2] + y[3] * y[3];
    946941 x.a[1] = temp_19 * (y[1] + y[1]) - y[1];
    947942 x.a[2] = temp_19 * (y[2] + y[2]) - y[2];
     
    949944 x.b = 3 + (temp_2 - temp_2);
    950945 temp_2 = if y[4] < pre(temp_2) or y[4] >= pre(temp_2) + 1 or initial() then integer(y[4]) else pre(temp_2);
    951  temp_19 = y[1] * y[1] + y[2] * y[2] + y[3] * y[3];
    952946end FunctionInlining.RecordInline7;
    953947")})));
     
    12791273 Real temp_1;
    12801274equation
     1275 temp_1 = time;
    12811276 x = temp_1 + FunctionInlining.ExternalInline1.f(o1, temp_1);
    1282  temp_1 = time;
    12831277
    12841278public
     
    16141608 Real v;
    16151609 Real z;
    1616  Real temp_1;
    16171610equation
    16181611 v = 2;
    1619  z = noEvent(if temp_1 > 2 then temp_1 else 1) + 2;
    1620  temp_1 = v;
     1612 z = noEvent(if v > 2 then v else 1) + 2;
    16211613end FunctionInlining.IfStatementInline2;
    16221614")})));
     
    16621654 Real v3;
    16631655 Real z;
    1664  Real temp_1;
    16651656equation
    16661657 v1 = 1;
    16671658 v2 = 2;
    16681659 v3 = 3;
    1669  z = noEvent(if temp_1 > 2 then temp_1 else v2) + noEvent(if temp_1 > 2 then v3 else temp_1);
    1670  temp_1 = v1;
     1660 z = noEvent(if v1 > 2 then v1 else v2) + noEvent(if v1 > 2 then v3 else v1);
    16711661end FunctionInlining.IfStatementInline3;
    16721662")})));
     
    17001690 Real v;
    17011691 Real z;
    1702  Real temp_1;
    17031692equation
    17041693 v = 1;
    1705  z = noEvent(if temp_1 > 2 then noEvent(if temp_1 > 2 then temp_1 else 0.0) else temp_1 + 1);
    1706  temp_1 = v;
     1694 z = noEvent(if v > 2 then noEvent(if v > 2 then v else 0.0) else v + 1);
    17071695end FunctionInlining.IfStatementInline4;
    17081696")})));
     
    17391727equation
    17401728 v = time + 1;
     1729 temp_1 = time > 3;
    17411730 z = noEvent(if temp_1 then v else v + 1);
    1742  temp_1 = time > 3;
    17431731end FunctionInlining.IfStatementInline5;
    17441732")})));
     
    17701758 Real temp_1;
    17711759equation
     1760 temp_1 = if time > 3 then time else 3;
    17721761 z = noEvent(if temp_1 > 2 then noEvent(if temp_1 > 2 then temp_1 else 0.0) else 1);
    1773  temp_1 = if time > 3 then time else 3;
    17741762end FunctionInlining.IfStatementInline6;
    17751763")})));
     
    18031791 Real v;
    18041792 Real z;
    1805  Real temp_2;
    18061793 Real temp_4;
    18071794 Real temp_5;
     
    18101797equation
    18111798 v = 3;
     1799 temp_4 = 1 + (1 - 1) * ((v - 1) / (4 - 1));
     1800 temp_5 = 1 + (2 - 1) * ((v - 1) / (4 - 1));
     1801 temp_6 = 1 + (3 - 1) * ((v - 1) / (4 - 1));
     1802 temp_7 = 1 + (4 - 1) * ((v - 1) / (4 - 1));
    18121803 z = temp_4 * temp_4 + temp_5 * temp_5 + temp_6 * temp_6 + temp_7 * temp_7;
    1813  temp_2 = v;
    1814  temp_4 = 1 + (1 - 1) * ((temp_2 - 1) / (4 - 1));
    1815  temp_5 = 1 + (2 - 1) * ((temp_2 - 1) / (4 - 1));
    1816  temp_6 = 1 + (3 - 1) * ((temp_2 - 1) / (4 - 1));
    1817  temp_7 = 1 + (4 - 1) * ((temp_2 - 1) / (4 - 1));
    18181804end FunctionInlining.ForStatementInline1;
    18191805")})));
     
    19541940 v[2] = 2;
    19551941 v[3] = 3;
    1956  z = noEvent(if v[3] > 2 then temp_9 else temp_9 + v[3]);
    19571942 temp_5 = noEvent(if v[1] > 2 then v[1] * v[1] else 0);
    19581943 temp_6 = noEvent(if v[1] > 2 then temp_5 else temp_5 + v[1]);
     
    19601945 temp_8 = noEvent(if v[2] > 2 then temp_7 else temp_7 + v[2]);
    19611946 temp_9 = noEvent(if v[3] > 2 then temp_8 + v[3] * v[3] else temp_8);
     1947 z = noEvent(if v[3] > 2 then temp_9 else temp_9 + v[3]);
    19621948end FunctionInlining.ForStatementInline5;
    19631949")})));
     
    20362022 v[2] = 2;
    20372023 v[3] = 3;
     2024 temp_11 = v[1] * v[1] + v[2] * v[2] + v[3] * v[3];
    20382025 z = temp_11 + temp_11 + 3 * temp_11 + 4 * temp_11;
    2039  temp_11 = v[1] * v[1] + v[2] * v[2] + v[3] * v[3];
    20402026end FunctionInlining.ForStatementInline7;
    20412027")})));
     
    21532139 x[3] = 3;
    21542140 x[4] = 3 + x[2];
     2141 x[5] = x[3] + 1;
    21552142 x[6] = x[5] + 3;
     2143 x[7] = x[5] + 1;
    21562144 x[8] = x[7] + x[6];
    2157  x[5] = x[3] + 1;
    2158  x[7] = x[5] + 1;
    21592145end FunctionInlining.MultipleOutputsInline1;
    21602146")})));
     
    23382324 Real y;
    23392325equation
     2326 (FunctionInlining.MultipleOutputsInline4.R(y, , , , )) = FunctionInlining.MultipleOutputsInline4.f3(x);
    23402327 x = 1;
    2341  (FunctionInlining.MultipleOutputsInline4.R(y, , , , )) = FunctionInlining.MultipleOutputsInline4.f3(x);
    23422328
    23432329public
     
    33083294 Real temp_1;
    33093295equation
     3296 temp_1 = time;
    33103297 x = temp_1 * temp_1 - temp_1;
    3311  temp_1 = time;
    33123298end FunctionInlining.InlineAnnotation1;
    33133299")})));
     
    33823368 Real temp_1;
    33833369equation
     3370 temp_1 = time;
    33843371 x = temp_1 * temp_1 - temp_1;
    3385  temp_1 = time;
    33863372end FunctionInlining.InlineAnnotation3;
    33873373")})));
     
    34123398 Real temp_1;
    34133399equation
     3400 temp_1 = time;
    34143401 x = temp_1 * temp_1 - temp_1;
    3415  temp_1 = time;
    34163402end FunctionInlining.InlineAnnotation4;
    34173403")})));
     
    37113697equation
    37123698 _der_x = time;
     3699 (x, ) = FunctionInlining.InlineAnnotation10.f2(y);
    37133700 z = der(y);
    37143701 t = if time < pre(t) or time >= pre(t) + 1 or initial() then integer(time) else pre(t);
    37153702 _der_x = y * der(y);
    3716  (x, ) = FunctionInlining.InlineAnnotation10.f2(y);
    37173703
    37183704public
     
    37513737            flatModel="
    37523738fclass FunctionInlining.InlineAnnotation11
    3753  Real x[1](start = temp_1[1],fixed = true);
     3739 Real x[1](start = p,fixed = true);
    37543740 parameter Real p = 2 /* 2 */;
    3755  parameter Real temp_1[1];
    37563741initial equation
    3757  x[1] = temp_1[1];
    3758 parameter equation
    3759  temp_1[1] = p;
     3742 x[1] = p;
    37603743equation
    37613744 der(x[1]) = time * 2;
     
    37853768        TransformCanonicalTestCase(
    37863769            name="InlineInitialTemp1",
    3787             description="Inlining function call depending on fixed=false parameter should generate fixed=false parameters",
     3770            description="Inlining function call depending on fixed=false parameter",
     3771            eliminate_alias_variables=false,
    37883772            flatModel="
    37893773fclass FunctionInlining.InlineInitialTemp1
     
    37913775 Real x[1](start = 1);
    37923776 Real x[2](start = 2);
    3793  initial parameter Real temp_2;
    37943777 Real temp_3;
    37953778initial equation
    37963779 x[1] = p - 2;
    3797  temp_2 = p;
    37983780 x[1] = 1;
    37993781 x[2] = 2;
    38003782equation
    3801  der(x[1]) = temp_2 - temp_3;
    3802  der(x[2]) = (temp_2 - temp_3) * 2;
    38033783 temp_3 = time;
     3784 der(x[1]) = p - temp_3;
     3785 der(x[2]) = (p - temp_3) * 2;
    38043786end FunctionInlining.InlineInitialTemp1;
    38053787")})));
     
    38313813        TransformCanonicalTestCase(
    38323814            name="InlineInitialTemp2",
    3833             description="Inlining function call depending on fixed=false parameter should generate fixed=false parameters",
     3815            description="Inlining function call depending on fixed=false parameter",
     3816            eliminate_alias_variables=false,
    38343817            flatModel="
    38353818fclass FunctionInlining.InlineInitialTemp2
     
    38373820 Real x.a;
    38383821 Real x.b;
    3839  initial parameter Real temp_2;
    38403822 Real temp_3;
    38413823initial equation
    38423824 x.a = p - 2;
    3843  temp_2 = p;
    3844 equation
    3845  x.a = temp_2 - temp_3;
     3825equation
     3826 temp_3 = time;
     3827 x.a = p - temp_3;
    38463828 x.b = x.a + 2 * temp_3;
    3847  temp_3 = time;
    38483829end FunctionInlining.InlineInitialTemp2;
    38493830")})));
     
    38863867        TransformCanonicalTestCase(
    38873868            name="InlineInitialTemp3",
    3888             description="Inlining function call depending on fixed=false parameter should generate fixed=false parameters",
     3869            description="Inlining function call depending on fixed=false parameter",
    38893870            flatModel="
    38903871fclass FunctionInlining.InlineInitialTemp3
     
    38923873 initial parameter FunctionInlining.InlineInitialTemp3.EO eo;
    38933874 Real y;
    3894  initial parameter FunctionInlining.InlineInitialTemp3.EO temp_1;
    38953875initial equation
    38963876 x = 1;
    38973877 eo = FunctionInlining.InlineInitialTemp3.EO.constructor(x);
    3898  temp_1 = eo;
    3899 equation
    3900  y = FunctionInlining.InlineInitialTemp3.f(temp_1) + FunctionInlining.InlineInitialTemp3.f(temp_1) + time;
     3878equation
     3879 y = FunctionInlining.InlineInitialTemp3.f(eo) + FunctionInlining.InlineInitialTemp3.f(eo) + time;
    39013880
    39023881public
     
    40073986 Real temp_1;
    40083987equation
    4009  z = 2 / (temp_1 - 5);
    40103988 temp_1 = time;
    40113989 assert(noEvent(temp_1 < 5), \"Bad x: \" + String(temp_1));
     3990 z = 2 / (temp_1 - 5);
    40123991end FunctionInlining.AssertInline1;
    40133992")})));
     
    41274106fclass FunctionInlining.InitialSystemInlining2
    41284107 initial parameter Real x(fixed = false);
    4129  initial parameter Real temp_2;
    4130  initial parameter Real temp_3;
    41314108 initial parameter Real temp_5;
     4109 initial parameter Real temp_6;
     4110 initial parameter Real temp_7;
    41324111initial equation
    4133  x = sin(temp_2) * cos(temp_3) + cos(temp_2) * sin(temp_3);
    4134  temp_2 = temp_5 - 3.14;
    4135  temp_3 = temp_5 + 3.14;
    41364112 temp_5 = time + 1;
     4113 temp_6 = temp_5 - 3.14;
     4114 temp_7 = temp_5 + 3.14;
     4115 x = sin(temp_6) * cos(temp_7) + cos(temp_6) * sin(temp_7);
    41374116end FunctionInlining.InitialSystemInlining2;
    41384117")})));
     
    41694148 initial parameter Real p1[1](fixed = false);
    41704149 initial parameter Real p1[2](fixed = false);
    4171  parameter Real temp_3;
    4172  parameter Real temp_4;
    41734150initial equation
    4174  p1[1] = temp_3;
    4175  p1[2] = temp_4;
    4176 parameter equation
    4177  ({temp_3, temp_4}) = FunctionInlining.InitialSystemInlining3.f2(p2);
     4151 ({p1[1], p1[2]}) = FunctionInlining.InitialSystemInlining3.f2(p2);
    41784152
    41794153public
     
    43624336 Real temp_11;
    43634337equation
     4338 temp_11 = time;
    43644339 y = temp_11 + 4 + (temp_11 + 5);
    4365  temp_11 = time;
    43664340end FunctionInlining.ChainedCallInlining4;
    43674341")})));
     
    44044378 Real temp_11;
    44054379equation
     4380 temp_11 = time;
    44064381 y = (temp_11 + 4) / (temp_11 + 5);
    4407  temp_11 = time;
    44084382end FunctionInlining.ChainedCallInlining5;
    44094383")})));
     
    44444418fclass FunctionInlining.ChainedCallInlining6
    44454419 Real y;
    4446  Real temp_11;
     4420 Real temp_49;
    44474421 Real temp_50;
    44484422equation
    4449  y = (temp_11 + 4) / (temp_11 + 5);
    4450  temp_11 = (temp_50 + 4) / (temp_50 + 5);
    44514423 temp_50 = time;
     4424 temp_49 = (temp_50 + 4) / (temp_50 + 5);
     4425 y = (temp_49 + 4) / (temp_49 + 5);
    44524426end FunctionInlining.ChainedCallInlining6;
    44534427")})));
     
    44954469fclass FunctionInlining.ChainedCallInlining7
    44964470 Real y;
    4497  Real temp_13;
     4471 Real temp_51;
    44984472 Real temp_52;
    44994473equation
    4500  y = (temp_13 + 4) / (temp_13 + 5);
    4501  temp_13 = (temp_52 + 4) / (temp_52 + 5);
    45024474 temp_52 = time;
     4475 temp_51 = (temp_52 + 4) / (temp_52 + 5);
     4476 y = (temp_51 + 4) / (temp_51 + 5);
    45034477end FunctionInlining.ChainedCallInlining7;
    45044478")})));
     
    47534727 parameter Real r.x[2] = 2 /* 2 */;
    47544728 parameter Real y = 2.0 /* 2.0 */;
     4729parameter equation
     4730 assert(2 + 1 == 2 or not not 2 >= 2, \"Mismatching sizes in FunctionInlining.ChainedCallInlining13.f1\");
    47554731end FunctionInlining.ChainedCallInlining13;
    47564732")})));
     
    50825058 Real temp_1;
    50835059equation
     5060 temp_1 = time;
    50845061 y = noEvent(if temp_1 == 1 then temp_1 else temp_1 + 1);
    5085  temp_1 = time;
    50865062end FunctionInlining.EqType1;
    50875063")})));
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/test/modelica/IndexReduction.mo

    r12184 r12469  
    10611061 Real _der_x;
    10621062 Real _der_y;
    1063  Real _der_dx;
     1063 Real _der_dy;
    10641064 Real _der_a;
    10651065 Real _der_der_x;
     
    10691069 Real temp_1;
    10701070 Real temp_4;
    1071  Real _der_temp_1;
    10721071 Real _der_temp_4;
    10731072 Real _der_der_temp_4;
    10741073initial equation
    1075  dy = 0.0;
     1074 dx = 0.0;
    10761075 b = 0.0;
    10771076equation
    10781077 sin(_der_x) = dx;
    10791078 cos(_der_y) = dy;
    1080  _der_dx = v * x;
    1081  der(dy) = v * y;
     1079 der(dx) = v * x;
     1080 _der_dy = v * y;
    10821081 a * b = 1;
     1082 temp_1 = x + 3.14;
     1083 temp_4 = time;
    10831084 a = temp_1 * temp_4 + 42;
    10841085 b = temp_1 * temp_4 + y;
    1085  temp_1 = x + 3.14;
    1086  temp_4 = time;
    10871086 a * der(b) + _der_a * b = 0;
    1088  _der_a = temp_1 * _der_temp_4 + _der_temp_1 * temp_4;
    1089  der(b) = temp_1 * _der_temp_4 + _der_temp_1 * temp_4 + _der_y;
    1090  _der_temp_1 = _der_x;
    10911087 _der_temp_4 = 1.0;
    1092  cos(_der_x) * _der_der_x = _der_dx;
    1093  - sin(_der_y) * _der_der_y = der(dy);
     1088 _der_a = temp_1 * _der_temp_4 + _der_x * temp_4;
     1089 der(b) = temp_1 * _der_temp_4 + _der_x * temp_4 + _der_y;
     1090 cos(_der_x) * _der_der_x = der(dx);
     1091 - sin(_der_y) * _der_der_y = _der_dy;
    10941092 a * _der_der_b + _der_a * der(b) + (_der_a * der(b) + _der_der_a * b) = 0;
    1095  _der_der_a = temp_1 * _der_der_temp_4 + _der_temp_1 * _der_temp_4 + (_der_temp_1 * _der_temp_4 + _der_der_x * temp_4);
    1096  _der_der_b = temp_1 * _der_der_temp_4 + _der_temp_1 * _der_temp_4 + (_der_temp_1 * _der_temp_4 + _der_der_x * temp_4) + _der_der_y;
    10971093 _der_der_temp_4 = 0.0;
     1094 _der_der_a = temp_1 * _der_der_temp_4 + _der_x * _der_temp_4 + (_der_x * _der_temp_4 + _der_der_x * temp_4);
     1095 _der_der_b = temp_1 * _der_der_temp_4 + _der_x * _der_temp_4 + (_der_x * _der_temp_4 + _der_der_x * temp_4) + _der_der_y;
    10981096end IndexReduction.IndexReduction52;
    10991097")})));
     
    14541452 Real temp_6;
    14551453 Real temp_7;
    1456  Real temp_8;
    1457  Real temp_9;
    14581454initial equation
    14591455 temp_6 = 0.0;
     
    14621458 _der_x1[1] + _der_x2[1] = 2;
    14631459 _der_x1[2] + _der_x2[2] = 3;
    1464  temp_6 = A[1,1] * temp_8 + A[1,2] * temp_9;
    1465  temp_7 = A[2,1] * temp_8 + A[2,2] * temp_9;
     1460 temp_6 = A[1,1] * x2[1] + A[1,2] * x2[2];
     1461 temp_7 = A[2,1] * x2[1] + A[2,2] * x2[2];
    14661462 - x1[1] = temp_6;
    14671463 - x1[2] = temp_7;
     
    14701466 - _der_x1[1] = der(temp_6);
    14711467 - _der_x1[2] = der(temp_7);
    1472  temp_8 = x2[1];
    1473  temp_9 = x2[2];
    14741468
    14751469public
     
    22232217 Real z;
    22242218 Real _der_y;
    2225  Real temp_12;
    22262219 Real temp_13;
    22272220 Real temp_14;
     
    22322225 z = IndexReduction.NonDiffArgs.Test3.F3(time);
    22332226 y = x * temp_13 + x * temp_14;
    2234  temp_12 = der(x);
    2235  _der_y = (temp_12 * temp_13 + temp_12 * temp_14) * temp_12;
     2227 _der_y = (der(x) * temp_13 + der(x) * temp_14) * der(x);
    22362228 (IndexReduction.NonDiffArgs.Test3.R(temp_13, temp_14)) = IndexReduction.NonDiffArgs.Test3.F2(z);
    22372229
     
    23962388 Real _der_w;
    23972389 Real temp_4;
    2398  Real temp_7;
    23992390 Real temp_14;
    2400  Real temp_17;
    24012391equation
    24022392 v1 = _der_s1;
     
    24062396 w = _der_s2 + sin(time);
    24072397 T = sin(s2);
    2408  temp_7 = w;
    24092398 temp_4 = cos(time);
    2410  _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1(temp_4 * temp_7, temp_7, T);
     2399 _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1(temp_4 * w, w, T);
    24112400 _der_w = a2 + cos(time);
    2412  a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1((temp_4 * _der_w + (- sin(time)) * temp_7) * temp_7, temp_7, T);
    2413  temp_17 = w;
     2401 a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1((temp_4 * _der_w + (- sin(time)) * w) * w, w, T);
    24142402 temp_14 = - sin(time);
    2415  _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1(temp_14 * temp_17, temp_17, T);
    2416  a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1((temp_14 * _der_w + (- cos(time)) * temp_17) * temp_17, temp_17, T);
     2403 _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1(temp_14 * w, w, T);
     2404 a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test1.F1((temp_14 * _der_w + (- cos(time)) * w) * w, w, T);
    24172405
    24182406public
     
    24922480 Real _der_w;
    24932481 Real temp_4;
    2494  Real temp_7;
     2482 Real temp_12;
    24952483 Real temp_14;
    2496  Real temp_17;
    24972484equation
    24982485 v1 = _der_s1;
     
    25042491 w = _der_s2 + sin(time);
    25052492 T = sin(s2);
    2506  temp_7 = w;
    25072493 temp_4 = cos(time);
    2508  _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1(temp_4 * temp_7, temp_7, T);
     2494 _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1(temp_4 * w, w, T);
    25092495 _der_w = a2 + cos(time);
    2510  a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1((temp_4 * _der_w + (- sin(time)) * temp_7) * temp_7, temp_7, T);
    2511  temp_17 = sin(time);
     2496 a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1((temp_4 * _der_w + (- sin(time)) * w) * w, w, T);
     2497 temp_12 = sin(time);
    25122498 temp_14 = - sin(time);
    2513  _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1(temp_14 * temp_17, temp_17, T);
    2514  a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1((temp_14 * cos(time) + (- cos(time)) * temp_17) * temp_17, temp_17, T);
     2499 _der_s1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1(temp_14 * temp_12, temp_12, T);
     2500 a1 = IndexReduction.NonDiffArgs.ExtraIncidences.Test2.F1((temp_14 * cos(time) + (- cos(time)) * temp_12) * temp_12, temp_12, T);
    25152501 _der_s1 + _der_s2 + _der_s3 = 0;
    25162502 a1 + a2 + a3 = 0;
     
    25992585 Real _der_w;
    26002586 Real temp_4;
    2601  Real temp_7;
     2587 Real temp_12;
    26022588 Real temp_14;
    2603  Real temp_17;
     2589 Real temp_22;
    26042590 Real temp_24;
    2605  Real temp_27;
    26062591equation
    26072592 v1a = _der_s1a;
     
    26152600 w = _der_s2 + sin(time);
    26162601 T = sin(s2);
    2617  temp_7 = w;
    26182602 temp_4 = cos(time);
    2619  _der_s1a + _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_4 * temp_7, temp_7, T);
     2603 _der_s1a + _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_4 * w, w, T);
    26202604 _der_w = a2 + cos(time);
    2621  a1a + a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_4 * _der_w + (- sin(time)) * temp_7) * temp_7, temp_7, T);
    2622  temp_17 = cos(time);
     2605 a1a + a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_4 * _der_w + (- sin(time)) * w) * w, w, T);
     2606 temp_12 = cos(time);
    26232607 temp_14 = cos(time);
    2624  _der_s1a - _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_14 * temp_17, temp_17, T);
    2625  a1a - a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_14 * (- sin(time)) + (- sin(time)) * temp_17) * temp_17, temp_17, T);
    2626  temp_27 = sin(time);
     2608 _der_s1a - _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_14 * temp_12, temp_12, T);
     2609 a1a - a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_14 * (- sin(time)) + (- sin(time)) * temp_12) * temp_12, temp_12, T);
     2610 temp_22 = sin(time);
    26272611 temp_24 = - sin(time);
    2628  _der_s1a + _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_24 * temp_27, temp_27, T);
    2629  a1a + a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_24 * cos(time) + (- cos(time)) * temp_27) * temp_27, temp_27, T);
     2612 _der_s1a + _der_s1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1(temp_24 * temp_22, temp_22, T);
     2613 a1a + a1b = IndexReduction.NonDiffArgs.ExtraIncidences.Test3.F1((temp_24 * cos(time) + (- cos(time)) * temp_22) * temp_22, temp_22, T);
    26302614 _der_s1a + _der_s1b + _der_s2 + _der_s3 = 0;
    26312615 a1a + a1b + a2 + a3 = 0;
     
    41104094 Real _der_x;
    41114095 Real _der_b;
    4112  parameter Real temp_2;
    4113 initial equation 
     4096 Real temp_2;
     4097initial equation
    41144098 y = 0.0;
    4115 parameter equation
    4116  temp_2 = if p > 0 then p else 0;
    41174099equation
    41184100 _der_x = der(y) * 2;
    41194101 x ^ 2 + y ^ 2 = IndexReduction.FunctionInlining.Test5.F(b, if p > 0 then p else 0);
    41204102 b = time;
     4103 temp_2 = if p > 0 then p else 0;
    41214104 2 * x * _der_x + 2 * y * der(y) = IndexReduction.FunctionInlining.Test5.F(_der_b, temp_2);
    41224105 _der_b = 1.0;
     
    44724455 Real _der_vx;
    44734456 Real _der_der_y;
    4474  parameter Real temp_1;
    44754457 Real temp_2;
    4476  parameter Real temp_5;
     4458 Real _der_temp_1;
    44774459initial equation
    44784460 y = 0.0;
    44794461 vy = 0.0;
    4480 parameter equation
    4481  temp_1 = p[1];
    4482  temp_5 = temp_1;
    44834462equation
    44844463 _der_x = vx;
     
    44884467 x + y = IndexReduction.FunctionInlining.Test9.F({p[1]}, time);
    44894468 temp_2 = time;
    4490  _der_x + der(y) = IndexReduction.FunctionInlining.Test9.F({temp_1}, temp_1 + temp_2 * temp_1);
     4469 _der_x + der(y) = IndexReduction.FunctionInlining.Test9.F({p[1]}, p[1] + temp_2 * p[1]);
    44914470 _der_der_y = der(vy);
    4492  _der_vx + _der_der_y = IndexReduction.FunctionInlining.Test9.F({temp_5}, temp_1 * temp_5 + (temp_1 + temp_2 * temp_1) * temp_5);
     4471 _der_temp_1 = 0.0;
     4472  _der_vx + _der_der_y = IndexReduction.FunctionInlining.Test9.F({p[1]}, (_der_temp_1 + (temp_2 * _der_temp_1 + p[1])) * p[1] + (p[1] + temp_2 * p[1]) * p[1]);
    44934473
    44944474public
     
    46614641 Real y;
    46624642 Real _der_y;
    4663  Real temp_12;
    46644643 Real temp_13;
    46654644 Real temp_14;
     
    46694648 _der_y * der(x) = 1;
    46704649 y = x * temp_13 + x * temp_14;
    4671  temp_12 = der(x);
    4672  _der_y = (temp_12 * temp_13 + temp_12 * temp_14) * temp_12;
     4650 _der_y = (der(x) * temp_13 + der(x) * temp_14) * der(x);
    46734651 (IndexReduction.IncidencesThroughFunctions.AllIncidencesFallback.R(temp_13, temp_14)) = IndexReduction.IncidencesThroughFunctions.AllIncidencesFallback.F2(x);
    46744652
  • branches/dev-zk-1971/Compiler/ModelicaMiddleEnd/test/modelica/IndexReductionInline.mo

    r11409 r12469  
    5858 Real x2;
    5959 Real _der_x1;
    60  initial parameter Real temp_1;
    6160initial equation
    62  temp_1 = p;
    6361 x2 = 0.0;
    64  temp_1 = 0.0;
     62 p = 0.0;
    6563equation
    6664 _der_x1 + der(x2) = IndexReductionInline.InlineInitialTemp1.f(p, time);
    6765 x1 + IndexReductionInline.InlineInitialTemp1.f(p, x2) = 1;
    68  - _der_x1 = (temp_1 - x2) * temp_1;
     66 - _der_x1 = (p - x2) * p;
    6967
    7068public
     
    149147 Real x2;
    150148 Real _der_x1;
    151  initial parameter IndexReductionInline.InlineInitialTemp2.EO temp_1;
    152149initial equation
    153150 x = 1;
    154151 eo = IndexReductionInline.InlineInitialTemp2.EO.constructor(x);
    155  temp_1 = eo;
    156152 x2 = 0.0;
    157153equation
    158154 _der_x1 + der(x2) = IndexReductionInline.InlineInitialTemp2.f(eo, time);
    159155 x1 + IndexReductionInline.InlineInitialTemp2.f(eo, x2) = 1;
    160  - _der_x1 = (IndexReductionInline.InlineInitialTemp2.g(temp_1) - x2) * IndexReductionInline.InlineInitialTemp2.g(temp_1);
     156 - _der_x1 = (IndexReductionInline.InlineInitialTemp2.g(eo) - x2) * IndexReductionInline.InlineInitialTemp2.g(eo);
    161</