Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 7dd0320

Browse files
perostOpenModelica-Hudson
authored andcommitted
Fix order of arguments to String.
- The significantDigits parameter should come before the other options in String() according to the specification, but the compiler expected it to be last instead. Belonging to [master]: - #2344 - OpenModelica/OpenModelica-testsuite#916
1 parent 3f9d53f commit 7dd0320

File tree

9 files changed

+20
-17
lines changed

9 files changed

+20
-17
lines changed

Compiler/FrontEnd/Ceval.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1936,7 +1936,7 @@ algorithm
19361936
then
19371937
(cache,Values.STRING(str));
19381938

1939-
case (cache,env,{exp, len_exp, justified_exp, sig_dig},impl,msg,_)
1939+
case (cache,env,{exp, sig_dig, len_exp, justified_exp},impl,msg,_)
19401940
equation
19411941
(cache,Values.REAL(r)) = ceval(cache,env, exp, impl, msg,numIter+1);
19421942
(cache,Values.INTEGER(len)) = ceval(cache,env, len_exp, impl, msg,numIter+1);

Compiler/FrontEnd/Static.mo

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6066,11 +6066,14 @@ algorithm
60666066
NONE()), false, NONE(), {}, 1, SLOT_NOT_EVALUATED);
60676067

60686068
try // Try the String(val, <option>) format.
6069+
slots := {STRING_ARG_MINLENGTH, STRING_ARG_LEFTJUSTIFIED};
6070+
60696071
// Only String(Real) has the significantDigits option.
6070-
slots := if Types.isRealOrSubTypeReal(ty) then
6071-
{STRING_ARG_SIGNIFICANT_DIGITS} else {};
6072+
if Types.isRealOrSubTypeReal(ty) then
6073+
slots := STRING_ARG_SIGNIFICANT_DIGITS :: slots;
6074+
end if;
60726075

6073-
slots := val_slot :: STRING_ARG_MINLENGTH :: STRING_ARG_LEFTJUSTIFIED :: slots;
6076+
slots := val_slot :: slots;
60746077

60756078
(outCache, args, _, consts) := elabInputArgs(outCache, inEnv, inPosArgs, inNamedArgs,
60766079
slots, false, true, inImplicit,

Compiler/Template/CodegenAdevs.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4291,13 +4291,13 @@ template daeExpCall(Exp call, Context context, Text &preExp /*BUFP*/,
42914291
'<%tvar%>'
42924292

42934293
case CALL(path=IDENT(name="String"),
4294-
expLst={s, minlen, leftjust, signdig}) then
4294+
expLst={s, signdig, minlen, leftjust}) then
42954295
let tvar = tempDecl("modelica_string", &varDecls /*BUFD*/)
42964296
let sExp = daeExp(s, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
42974297
let minlenExp = daeExp(minlen, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
42984298
let leftjustExp = daeExp(leftjust, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
42994299
let signdigExp = daeExp(signdig, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
4300-
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>, <%signdigExp%>);<%\n%>'
4300+
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%signdigExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
43014301
'<%tvar%>'
43024302

43034303
case CALL(path=IDENT(name="delay"),

Compiler/Template/CodegenCFunctions.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5891,13 +5891,13 @@ simple_alloc_1d_base_array(&<%tvar%>, <%nElts%>, <%tvardata%>);
58915891
tvar
58925892
end match
58935893
5894-
case CALL(path=IDENT(name="String"), expLst={s, minlen, leftjust, signdig}) then
5894+
case CALL(path=IDENT(name="String"), expLst={s, signdig, minlen, leftjust}) then
58955895
let tvar = tempDecl("modelica_string", &varDecls)
58965896
let sExp = daeExp(s, context, &preExp, &varDecls, &auxFunction)
58975897
let minlenExp = daeExp(minlen, context, &preExp, &varDecls, &auxFunction)
58985898
let leftjustExp = daeExp(leftjust, context, &preExp, &varDecls, &auxFunction)
58995899
let signdigExp = daeExp(signdig, context, &preExp, &varDecls, &auxFunction)
5900-
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>, <%signdigExp%>);<%\n%>'
5900+
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%signdigExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
59015901
tvar
59025902
59035903
case CALL(path=IDENT(name="delay"), expLst={ICONST(integer=index), e, d, delayMax}) then

Compiler/Template/CodegenJava.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,13 +738,13 @@ end daeExpIf;
738738

739739
// case CALL(
740740
// path=IDENT(name="String"),
741-
// expLst={s, minlen, leftjust, signdig}) then
741+
// expLst={s, signdig, minlen, leftjust}) then
742742
// let tvar = tempDecl("modelica_string", &varDecls /*BUFD*/)
743743
// let sExp = daeExp(s, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
744744
// let minlenExp = daeExp(minlen, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
745745
// let leftjustExp = daeExp(leftjust, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
746746
// let signdigExp = daeExp(signdig, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
747-
// let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>, <%signdigExp%>);<%\n%>'
747+
// let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%signdigExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
748748
// '<%tvar%>'
749749

750750
// case CALL(

Compiler/Template/CodegenSparseFMI.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,13 +3839,13 @@ template daeExpCall(Exp call, Context context, Text &preExp /*BUFP*/,
38393839
'<%tvar%>'
38403840

38413841
case CALL(path=IDENT(name="String"),
3842-
expLst={s, minlen, leftjust, signdig}) then
3842+
expLst={s, signdig, minlen, leftjust}) then
38433843
let tvar = tempDecl("modelica_string", &varDecls /*BUFD*/)
38443844
let sExp = daeExp(s, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
38453845
let minlenExp = daeExp(minlen, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
38463846
let leftjustExp = daeExp(leftjust, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
38473847
let signdigExp = daeExp(signdig, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
3848-
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>, <%signdigExp%>);<%\n%>'
3848+
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%signdigExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
38493849
'<%tvar%>'
38503850

38513851
case CALL(path=IDENT(name="delay"),

Compiler/Template/CodegenXML.tpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,13 +3257,13 @@ template daeExpCallXml(Exp call, Context context, Text &preExp /*BUFP*/,
32573257
let &preExp += '<%tvar%> = <%typeStr%>_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
32583258
'<%tvar%>'
32593259

3260-
case CALL(path=IDENT(name="String"), expLst={s, minlen, leftjust, signdig}) then
3260+
case CALL(path=IDENT(name="String"), expLst={s, signdig, minlen, leftjust}) then
32613261
let tvar = tempDeclXml("modelica_string", &varDecls /*BUFD*/)
32623262
let sExp = daeExpXml(s, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
32633263
let minlenExp = daeExpXml(minlen, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
32643264
let leftjustExp = daeExpXml(leftjust, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
32653265
let signdigExp = daeExpXml(signdig, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
3266-
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%minlenExp%>, <%leftjustExp%>, <%signdigExp%>);<%\n%>'
3266+
let &preExp += '<%tvar%> = modelica_real_to_modelica_string(<%sExp%>, <%signdigExp%>, <%minlenExp%>, <%leftjustExp%>);<%\n%>'
32673267
'<%tvar%>'
32683268
*/
32693269

SimulationRuntime/c/util/modelica_string.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ modelica_string modelica_integer_to_modelica_string(modelica_integer i, modelica
218218

219219
/* Convert a modelica_real to a modelica_string, used in String(r) */
220220

221-
modelica_string modelica_real_to_modelica_string(modelica_real r,modelica_integer minLen,modelica_boolean leftJustified,modelica_integer signDigits)
221+
modelica_string modelica_real_to_modelica_string(modelica_real r, modelica_integer signDigits, modelica_integer minLen, modelica_boolean leftJustified)
222222
{
223223
size_t sz = snprintf(NULL, 0, leftJustified ? "%-*.*g" : "%*.*g", (int) minLen, (int) signDigits, r);
224224
void *res = alloc_modelica_string(sz);

SimulationRuntime/c/util/modelica_string.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ extern modelica_string modelica_real_to_modelica_string_format(modelica_real r,
5151
extern modelica_string modelica_integer_to_modelica_string_format(modelica_integer i, modelica_string format);
5252
extern modelica_string modelica_stringo_modelica_string_format(modelica_string s, modelica_string format);
5353

54-
extern modelica_string modelica_real_to_modelica_string(modelica_real r,modelica_integer minLen,
55-
modelica_boolean leftJustified,modelica_integer signDigits);
54+
extern modelica_string modelica_real_to_modelica_string(modelica_real r, modelica_integer signDigits,
55+
modelica_integer minLen, modelica_boolean leftJustified);
5656

5757
extern modelica_string modelica_string_to_modelica_string(modelica_string s);
5858
extern modelica_string modelica_integer_to_modelica_string(modelica_integer i,

0 commit comments

Comments
 (0)