@@ -458,7 +458,7 @@ template daeExpCrefIndexSpec(list<Subscript> subs, Context context,
458
458
::=
459
459
let tmp_slice = tempDecl("vector<Slice >", &varDecls /*BUFD*/)
460
460
let &preExp += '<%tmp_slice%>.clear();<%\n%>'
461
- let idx_str = (subs |> sub hasindex i1 =>
461
+ let _ = (subs |> sub hasindex i1 =>
462
462
match sub
463
463
case INDEX(__) then
464
464
let expPart = daeExp(exp, context, &preExp /*BUFC*/, &varDecls /*BUFD*/,simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
@@ -468,12 +468,23 @@ template daeExpCrefIndexSpec(list<Subscript> subs, Context context,
468
468
let &preExp += '<%tmp_slice%>.push_back(Slice());<%\n%>'
469
469
''
470
470
case SLICE(__) then
471
- let expPart = daeExp(exp, context, &preExp /*BUFC*/, &varDecls /*BUFD*/,simCode , &extraFuncs , &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
472
- let &preExp += '<%tmp_slice%>.push_back(Slice(<%expPart%>));<%\n%>'
473
- ''
471
+ match exp
472
+ case RANGE(__) then
473
+ let start_exp = daeExp(start, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
474
+ let stop_exp = daeExp(stop, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
475
+ let step_exp = match step case SOME(stepExp) then daeExp(stepExp, context, &preExp, &varDecls, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation) else "1"
476
+ let &preExp += '<%tmp_slice%>.push_back(Slice(<%start_exp%>, <%step_exp%>, <%stop_exp%>));<%\n%>'
477
+ ''
478
+ else
479
+ // this default branch should not be used because exp is a range
480
+ let expPart = daeExp(exp, context, &preExp /*BUFC*/, &varDecls /*BUFD*/, simCode, &extraFuncs, &extraFuncsDecl, extraFuncsNamespace, stateDerVectorName, useFlatArrayNotation)
481
+ let &preExp += '<%tmp_slice%>.push_back(Slice(<%expPart%>));<%\n%>'
482
+ ''
483
+ end match
474
484
;separator="\n ")
475
- <<< %tmp_slice%>>>
485
+ '< %tmp_slice%>'
476
486
end daeExpCrefIndexSpec;
487
+
477
488
template daeExpCrefRhsArrayBox(ComponentRef cr,DAE.Type ty, Context context, Text &preExp /*BUFP*/,
478
489
Text &varDecls /*BUFP*/,SimCode simCode, Text& extraFuncs,Text& extraFuncsDecl,Text extraFuncsNamespace)
479
490
"Helper to daeExpCrefRhs."
@@ -1990,7 +2001,7 @@ template daeExpCall(Exp call, Context context, Text &preExp /*BUFP*/, Text &varD
1990
2001
let tvar = match ty
1991
2002
case T_ARRAY(ty=elty) then
1992
2003
// use dynamic array as static arrays are treated during translation
1993
- 'DynArrayDim1<<%expTypeShort(elty)%>>(<%expVar%>.getNumElems(), <%expVar%>.getData())'
2004
+ 'DynArrayDim1<<%expTypeShort(elty)%>>(<%expVar%>.getNumElems(), ConstArray( <%expVar%>) .getData())'
1994
2005
else
1995
2006
// this should never happen because it is eliminated during translation
1996
2007
'StatArrayDim1<<%expTypeShort(ty)%>, 1, true>(&<%expVar%>)'
0 commit comments