You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on May 18, 2019. It is now read-only.
let loopHeadIter = (iterators |> iter as REDUCTIONITER(__) =>
6468
6468
let identType = expTypeFromExpModelica(iter.exp)
6469
6469
let arrayType = expTypeFromExpArray(iter.exp)
6470
-
let loopVar = '<%iter.id%>_loopVar'
6470
+
let iteratorName = contextIteratorName(iter.id, context)
6471
+
let loopVar = match iter.exp case RANGE(__) then iteratorName else '<%iter.id%>_loopVar'
6472
+
let stepVar = match iter.exp case RANGE(__) then tempDecl(identType,&tmpVarDecls)
6473
+
let stopVar = match iter.exp case RANGE(__) then tempDecl(identType,&tmpVarDecls)
6471
6474
let &guardExpPre = buffer ""
6472
6475
let &tmpVarDecls += (match identType
6473
6476
case "modelica_metatype" then 'modelica_metatype <%loopVar%> = 0;<%\n%>'
6474
-
else '<%arrayType%><%loopVar%>;<%\n%>')
6475
-
let firstIndex = match identType case "modelica_metatype" then (if isMetaArray(iter.exp) then tempDecl("int",&tmpVarDecls) else "") else tempDecl("int",&tmpVarDecls)
6476
-
let rangeExp = daeExp(iter.exp,context,&rangeExpPre,&tmpVarDecls, &auxFunction)
6477
+
else (match iter.exp case RANGE(__) then "" else '<%arrayType%><%loopVar%>;<%\n%>'))
6478
+
let firstIndex = match iter.exp case RANGE(__) then tempDecl(identType,&tmpVarDecls) else (match identType case "modelica_metatype" then (if isMetaArray(iter.exp) then tempDecl("int",&tmpVarDecls) else "") else tempDecl("int",&tmpVarDecls))
6479
+
let rangeExpStep = (match iter.exp case RANGE(step=NONE()) then "1 /* Range step-value */" case RANGE(step=SOME(step)) then '<%daeExp(step,context,&rangeExpPre,&tmpVarDecls, &auxFunction)%> /* Range step-value */' else "")
6480
+
let rangeExpStop = (match iter.exp case RANGE(__) then '<%daeExp(stop,context,&rangeExpPre,&tmpVarDecls, &auxFunction)%> /* Range stop-value */' else "")
6481
+
let rangeExp = (match iter.exp case RANGE(__) then '<%daeExp(start,context,&rangeExpPre,&tmpVarDecls, &auxFunction)%> /* Range start-value */' else daeExp(iter.exp,context,&rangeExpPre,&tmpVarDecls, &auxFunction))
6482
+
let &rangeExpPre += if rangeExpStep then '<%stepVar%> = <%rangeExpStep%>;<%\n%>'
6483
+
let &rangeExpPre += if rangeExpStop then '<%stopVar%> = <%rangeExpStop%>;<%\n%>'
6477
6484
let &rangeExpPre += '<%loopVar%> = <%rangeExp%>;<%\n%>'
6478
-
let &rangeExpPre += if firstIndex then '<%firstIndex%> = 1;<%\n%>'
6485
+
let &rangeExpPre += if rangeExpStop then
6486
+
<<
6487
+
if (<%stepVar%> == 0) {
6488
+
FILE_INFO info = omc_dummyFileInfo;
6489
+
omc_assert(threadData, info, "Range with a step of zero.");
6490
+
}<%\n%>
6491
+
>>
6492
+
let &tmpVarDecls += match iter.exp case RANGE(__) then 'modelica_integer <%iter.id%>_length;<%\n%>'
6493
+
let &rangeExpPre += match iter.exp case RANGE(__) then '<%firstIndex%> = <%iteratorName%> /* Remember the range start-value */;<%\n%>' else (if firstIndex then '<%firstIndex%> = 1;<%\n%>')
6479
6494
let guardCond = (match iter.guardExp case SOME(grd) then daeExp(grd, context, &guardExpPre, &tmpVarDecls, &auxFunction) else "")
6480
-
let iteratorName = contextIteratorName(iter.id, context)
6495
+
let &rangeExpPre += match iter.exp case RANGE(__) then '<%iteratorName%> = (<%rangeExp%>)-<%stepVar%>;<%\n%>' /* We pre-increment the counter, so subtract the step for the first variable for ranges */
6481
6496
let &tmpVarDecls += '<%identType%><%iteratorName%>;<%\n%>'
let _ = (iterators |> iter as REDUCTIONITER(__) =>
6553
6584
let loopVar = '<%iter.id%>_loopVar'
6554
6585
let identType = expTypeFromExpModelica(iter.exp)
6555
-
let &rangeExpPre += '<%length%> = modelica_integer_max(<%length%>,<%match identType case"modelica_metatype" then (if isMetaArray(iter.exp) then 'arrayLength(<%loopVar%>)'else'listLength(<%loopVar%>)') else'size_of_dimension_base_array(<%loopVar%>, 1)'%>);<%\n%>'
6586
+
let &rangeExpPre += '<%length%> = modelica_integer_max(<%length%>,<%match identType case"modelica_metatype" then (if isMetaArray(iter.exp) then 'arrayLength(<%loopVar%>)'else'listLength(<%loopVar%>)') elsematch iter.exp case RANGE(__) then '<%iter.id%>_length'else'size_of_dimension_base_array(<%loopVar%>, 1)'%>);<%\n%>'
0 commit comments