Skip to content

Commit 3f4477c

Browse files
committed
Fix code generation for add-array-scalar
1 parent d65644e commit 3f4477c

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Compiler/Template/CodegenCFunctions.tpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4892,7 +4892,11 @@ case BINARY(__) then
48924892
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
48934893
else "real_array"
48944894
'mul_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
4895-
case ADD_ARRAY_SCALAR(__) then error(sourceInfo(),'Code generation does not support ADD_ARRAY_SCALAR <%printExpStr(exp)%>')
4895+
case ADD_ARRAY_SCALAR(__) then
4896+
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
4897+
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
4898+
else "real_array"
4899+
'add_alloc_scalar_<%type%>(<% if isArrayType(typeof(exp1)) then '<%e2%>, &<%e1%>' else '<%e1%>, &<%e2%>' %>)'
48964900
case SUB_SCALAR_ARRAY(__) then error(sourceInfo(),'Code generation does not support SUB_SCALAR_ARRAY <%printExpStr(exp)%>')
48974901
case MUL_SCALAR_PRODUCT(__) then
48984902
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_scalar"

SimulationRuntime/c/util/real_array.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,19 @@ real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b)
785785
return dest;
786786
}
787787

788+
real_array_t add_alloc_scalar_real_array(modelica_real sc, const real_array_t *arr)
789+
{
790+
size_t nr_of_elements, i;
791+
real_array_t dest;
792+
clone_real_array_spec(arr, &dest);
793+
alloc_real_array_data(&dest);
794+
nr_of_elements = base_array_nr_of_elements(*arr);
795+
for(i=0; i < nr_of_elements; ++i) {
796+
real_set(&dest, i, sc * real_get(*arr, i));
797+
}
798+
return dest;
799+
}
800+
788801
void usub_real_array(real_array_t* a)
789802
{
790803
size_t nr_of_elements, i;

SimulationRuntime/c/util/real_array.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ extern void range_real_array(modelica_real start,modelica_real stop, modelica_re
160160

161161
extern real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b);
162162
extern void add_real_array(const real_array_t * a, const real_array_t * b, real_array_t* dest);
163+
extern real_array_t add_alloc_scalar_real_array(const modelica_real sc, const real_array_t *arr);
163164

164165
/* Unary subtraction */
165166
extern void usub_real_array(real_array_t* a);

0 commit comments

Comments
 (0)