Changeset 13491


Ignore:
Timestamp:
Sep 16, 2019 12:55:48 PM (3 months ago)
Author:
molsson
Message:

Merged revision(s) 13429-13474 from branches/dev-jk-2263:
#5813 External object short class constructors/destructors decls should be expanded.
........
#5813 Fixed bug when evaluating external object short constructor declaration.
........
#5813 Added contribute method for flattening of external statements.
........
#5813 Fixed bug in C-code generation that sometimes causes segmentation fault by casting array sizes to size_t.
........
#5813 Fixed implementation of r13471 and updated tests.
........

Location:
trunk
Files:
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CCodeGenExternal.jrag

    r11676 r13491  
    151151    }
    152152   
     153    @Override
     154    public void FSizeExp.genExternalCFuncArgs(CodePrinter p, CodeStream str, String indent, CodeGenContext cgc) {
     155        str.print("(size_t) ");
     156        super.genExternalCFuncArgs(p, str, indent, cgc);
     157    }
     158   
    153159}
  • trunk/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenExternalCevalTests.mo

    r12934 r13491  
    158158    (x1,x2,x3,x4,x5) = f({1},{2},{true},{"s"},{E.A});
    159159
    160     annotation(__JModelica(UnitTesting(tests={
    161         CCodeGenTestCase(
    162             name="Array",
    163             description="Test code gen for external C functions evaluation. Arrays.",
    164             variability_propagation=false,
    165             inline_functions="none",
    166             template="
     160annotation(__JModelica(UnitTesting(tests={
     161    CCodeGenTestCase(
     162        name="Array",
     163        description="Test code gen for external C functions evaluation. Arrays.",
     164        variability_propagation=false,
     165        inline_functions="none",
     166        template="
    167167$ECE_external_includes$
    168168$ECE_record_definitions$
     
    185185$ECE_free$
    186186",
    187             generatedCode="
     187        generatedCode="
    188188---
    189189
     
    296296            jmi_copy_matrix_to_int(b5_a, b5_a->var, tmp_15->var);
    297297            tmp_16 = (int)f_arg19;
    298             f(a1_a->var, tmp_1, tmp_2->var, tmp_3, tmp_4->var, tmp_5, a4_a->var, tmp_6, tmp_7->var, tmp_8, b1_a->var, tmp_9, tmp_10->var, tmp_11, tmp_12->var, tmp_13, b4_a->var, tmp_14, tmp_15->var, tmp_16);
     298            f(a1_a->var, (size_t) tmp_1, tmp_2->var, (size_t) tmp_3, tmp_4->var, (size_t) tmp_5, a4_a->var, (size_t) tmp_6, tmp_7->var, (size_t) tmp_8, b1_a->var, (size_t) tmp_9, tmp_10->var, (size_t) tmp_11, tmp_12->var, (size_t) tmp_13, b4_a->var, (size_t) tmp_14, tmp_15->var, (size_t) tmp_16);
    299299            jmi_copy_matrix_from_int(b2_a, tmp_10->var, b2_a->var);
    300300            jmi_copy_matrix_from_int(b3_a, tmp_12->var, b3_a->var);
     
    311311
    312312---
    313 
    314313")})));
    315314end Array;
     
    382381    Real x = use2(o2);
    383382
    384     annotation(__JModelica(UnitTesting(tests={
    385         CCodeGenTestCase(
    386             name="ExtObj1",
    387             description="Test code gen for external C functions evaluation. External objects.",
    388             variability_propagation=false,
    389             inline_functions="none",
    390             template="
     383annotation(__JModelica(UnitTesting(tests={
     384    CCodeGenTestCase(
     385        name="ExtObj1",
     386        description="Test code gen for external C functions evaluation. External objects.",
     387        variability_propagation=false,
     388        inline_functions="none",
     389        template="
    391390$ECE_external_includes$
    392391$ECE_record_definitions$
     
    409408$ECE_free$
    410409",
    411             generatedCode="
     410        generatedCode="
    412411#include \"extObjects.h\"
    413412
     
    448447        tmp_4 = (int)tmp_6_arg5;
    449448        tmp_5 = (double)tmp_6_arg6;
    450         my_constructor2(tmp_6_arg0->var, tmp_2->var, &o2_v, tmp_3->var, tmp_6_arg4->var, tmp_4, tmp_5);
     449        my_constructor2(tmp_6_arg0->var, tmp_2->var, &o2_v, tmp_3->var, tmp_6_arg4->var, (size_t) tmp_4, tmp_5);
    451450
    452451---
     
    468467---
    469468        destructor(o2_v);
    470 
    471469")})));
    472470end ExtObj1;
     
    475473    extends ExtObj1(x=use3(o3));
    476474
    477     annotation(__JModelica(UnitTesting(tests={
    478         CCodeGenTestCase(
    479             name="ExtObj2",
    480             description="Test code gen for external C functions evaluation. External objects.",
    481             variability_propagation=false,
    482             inline_functions="none",
    483             template="
     475annotation(__JModelica(UnitTesting(tests={
     476    CCodeGenTestCase(
     477        name="ExtObj2",
     478        description="Test code gen for external C functions evaluation. External objects.",
     479        variability_propagation=false,
     480        inline_functions="none",
     481        template="
    484482$ECE_external_includes$
    485483$ECE_record_definitions$
     
    502500$ECE_free$
    503501",
    504             generatedCode="
     502        generatedCode="
    505503#include \"extObjects.h\"
    506504
     
    562560            tmp_11 = (int)tmp_13_arg5;
    563561            tmp_12 = (double)tmp_13_arg6;
    564             my_constructor2(tmp_13_arg0->var, tmp_9->var, &jmi_array_ref_1(tmp_2_arg1, tmp_7), tmp_10->var, tmp_13_arg4->var, tmp_11, tmp_12);
     562            my_constructor2(tmp_13_arg0->var, tmp_9->var, &jmi_array_ref_1(tmp_2_arg1, tmp_7), tmp_10->var, tmp_13_arg4->var, (size_t) tmp_11, tmp_12);
    565563        }
    566564        my_constructor3(tmp_2_arg0, tmp_2_arg1->var, &o3_v);
     
    588586---
    589587        destructor(o3_v);
    590 
    591588")})));
    592589end ExtObj2;
  • trunk/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenExternalTests.mo

    r12934 r13491  
    11481148
    11491149
    1150     annotation(__JModelica(UnitTesting(tests={
    1151         CCodeGenTestCase(
    1152             name="ExternalArray1",
    1153             description="External C function (undeclared) with one dim array input, scalar output.",
    1154             variability_propagation=false,
    1155             template="
    1156 $C_function_headers$
    1157 $C_functions$
    1158 ",
    1159             generatedCode="
     1150annotation(__JModelica(UnitTesting(tests={
     1151    CCodeGenTestCase(
     1152        name="ExternalArray1",
     1153        description="External C function (undeclared) with one dim array input, scalar output.",
     1154        variability_propagation=false,
     1155        template="
     1156$C_function_headers$
     1157$C_functions$
     1158",
     1159        generatedCode="
    11601160void func_CCodeGenExternalTests_ExternalArray1_f_def0(jmi_array_t* a_a, jmi_real_t* b_o);
    11611161jmi_real_t func_CCodeGenExternalTests_ExternalArray1_f_exp0(jmi_array_t* a_a);
     
    11651165    JMI_DEF(REA, b_v)
    11661166    extern double f(double*, size_t);
    1167     b_v = f(a_a->var, jmi_array_size(a_a, 0));
     1167    b_v = f(a_a->var, (size_t) jmi_array_size(a_a, 0));
    11681168    JMI_RET(GEN, b_o, b_v)
    11691169    JMI_DYNAMIC_FREE()
     
    11761176    return b_v;
    11771177}
    1178 
    11791178
    11801179")})));
     
    11921191        b_out = f(a_in);
    11931192
    1194     annotation(__JModelica(UnitTesting(tests={
    1195         CCodeGenTestCase(
    1196             name="ExternalArray2",
    1197             description="External C function (undeclared) with two dim array input, scalar output.",
    1198             variability_propagation=false,
    1199             template="
    1200 $C_function_headers$
    1201 $C_functions$
    1202 ",
    1203             generatedCode="
     1193annotation(__JModelica(UnitTesting(tests={
     1194    CCodeGenTestCase(
     1195        name="ExternalArray2",
     1196        description="External C function (undeclared) with two dim array input, scalar output.",
     1197        variability_propagation=false,
     1198        template="
     1199$C_function_headers$
     1200$C_functions$
     1201",
     1202        generatedCode="
    12041203void func_CCodeGenExternalTests_ExternalArray2_f_def0(jmi_array_t* a_a, jmi_real_t* b_o);
    12051204jmi_real_t func_CCodeGenExternalTests_ExternalArray2_f_exp0(jmi_array_t* a_a);
     
    12091208    JMI_DEF(REA, b_v)
    12101209    extern double f(double*, size_t, size_t);
    1211     b_v = f(a_a->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1));
     1210    b_v = f(a_a->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1));
    12121211    JMI_RET(GEN, b_o, b_v)
    12131212    JMI_DYNAMIC_FREE()
     
    12201219    return b_v;
    12211220}
    1222 
    12231221
    12241222")})));
     
    12371235        b_out = f(a_in);
    12381236
    1239     annotation(__JModelica(UnitTesting(tests={
    1240         CCodeGenTestCase(
    1241             name="ExternalArray3",
    1242             description="External C function (undeclared) with two dim and unknown no of elements array input, scalar output.",
    1243             variability_propagation=false,
    1244             template="
    1245 $C_function_headers$
    1246 $C_functions$
    1247 ",
    1248             generatedCode="
     1237annotation(__JModelica(UnitTesting(tests={
     1238    CCodeGenTestCase(
     1239        name="ExternalArray3",
     1240        description="External C function (undeclared) with two dim and unknown no of elements array input, scalar output.",
     1241        variability_propagation=false,
     1242        template="
     1243$C_function_headers$
     1244$C_functions$
     1245",
     1246        generatedCode="
    12491247void func_CCodeGenExternalTests_ExternalArray3_f_def0(jmi_array_t* a_a, jmi_real_t* b_o);
    12501248jmi_real_t func_CCodeGenExternalTests_ExternalArray3_f_exp0(jmi_array_t* a_a);
     
    12541252    JMI_DEF(REA, b_v)
    12551253    extern double f(double*, size_t, size_t);
    1256     b_v = f(a_a->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1));
     1254    b_v = f(a_a->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1));
    12571255    JMI_RET(GEN, b_o, b_v)
    12581256    JMI_DYNAMIC_FREE()
     
    12651263    return b_v;
    12661264}
    1267 
    12681265
    12691266")})));
     
    12831280        b_out = f(a_in);
    12841281
    1285     annotation(__JModelica(UnitTesting(tests={
    1286         CCodeGenTestCase(
    1287             name="ExternalArray4",
    1288             description="External C function (undeclared) with one dim array input, one dim array output.",
    1289             variability_propagation=false,
    1290             template="
    1291 $C_function_headers$
    1292 $C_functions$
    1293 ",
    1294             generatedCode="
     1282annotation(__JModelica(UnitTesting(tests={
     1283    CCodeGenTestCase(
     1284        name="ExternalArray4",
     1285        description="External C function (undeclared) with one dim array input, one dim array output.",
     1286        variability_propagation=false,
     1287        template="
     1288$C_function_headers$
     1289$C_functions$
     1290",
     1291        generatedCode="
    12951292void func_CCodeGenExternalTests_ExternalArray4_f_def0(jmi_array_t* a_a, jmi_array_t* b_a);
    12961293
     
    13031300        b_a = b_an;
    13041301    }
    1305     f(a_a->var, jmi_array_size(a_a, 0), b_a->var, jmi_array_size(b_a, 0));
    1306     JMI_DYNAMIC_FREE()
    1307     return;
    1308 }
    1309 
     1302    f(a_a->var, (size_t) jmi_array_size(a_a, 0), b_a->var, (size_t) jmi_array_size(b_a, 0));
     1303    JMI_DYNAMIC_FREE()
     1304    return;
     1305}
    13101306
    13111307")})));
     
    13241320        b_out = f(a_in);
    13251321
    1326     annotation(__JModelica(UnitTesting(tests={
    1327         CCodeGenTestCase(
    1328             name="ExternalArray5",
    1329             description="External C function (undeclared) with two dim array input, two dim array output.",
    1330             variability_propagation=false,
    1331             template="
    1332 $C_function_headers$
    1333 $C_functions$
    1334 ",
    1335             generatedCode="
     1322annotation(__JModelica(UnitTesting(tests={
     1323    CCodeGenTestCase(
     1324        name="ExternalArray5",
     1325        description="External C function (undeclared) with two dim array input, two dim array output.",
     1326        variability_propagation=false,
     1327        template="
     1328$C_function_headers$
     1329$C_functions$
     1330",
     1331        generatedCode="
    13361332void func_CCodeGenExternalTests_ExternalArray5_f_def0(jmi_array_t* a_a, jmi_array_t* b_a);
    13371333
     
    13441340        b_a = b_an;
    13451341    }
    1346     f(a_a->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1), b_a->var, jmi_array_size(b_a, 0), jmi_array_size(b_a, 1));
    1347     JMI_DYNAMIC_FREE()
    1348     return;
    1349 }
    1350 
     1342    f(a_a->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1), b_a->var, (size_t) jmi_array_size(b_a, 0), (size_t) jmi_array_size(b_a, 1));
     1343    JMI_DYNAMIC_FREE()
     1344    return;
     1345}
    13511346
    13521347")})));
     
    13651360        b_out = f(a_in);
    13661361
    1367     annotation(__JModelica(UnitTesting(tests={
    1368         CCodeGenTestCase(
    1369             name="ExternalArray6",
    1370             description="External C function (undeclared) with two dim and unknown no of elements array input, two dim array output.",
    1371             variability_propagation=false,
    1372             template="
    1373 $C_function_headers$
    1374 $C_functions$
    1375 ",
    1376             generatedCode="
     1362annotation(__JModelica(UnitTesting(tests={
     1363    CCodeGenTestCase(
     1364        name="ExternalArray6",
     1365        description="External C function (undeclared) with two dim and unknown no of elements array input, two dim array output.",
     1366        variability_propagation=false,
     1367        template="
     1368$C_function_headers$
     1369$C_functions$
     1370",
     1371        generatedCode="
    13771372void func_CCodeGenExternalTests_ExternalArray6_f_def0(jmi_array_t* a_a, jmi_array_t* b_a);
    13781373
     
    13851380        b_a = b_an;
    13861381    }
    1387     f(a_a->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1), b_a->var, jmi_array_size(b_a, 0), jmi_array_size(b_a, 1));
    1388     JMI_DYNAMIC_FREE()
    1389     return;
    1390 }
    1391 
     1382    f(a_a->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1), b_a->var, (size_t) jmi_array_size(b_a, 0), (size_t) jmi_array_size(b_a, 1));
     1383    JMI_DYNAMIC_FREE()
     1384    return;
     1385}
    13921386
    13931387")})));
     
    14051399        b_out = f(a_in);
    14061400
    1407     annotation(__JModelica(UnitTesting(tests={
    1408         CCodeGenTestCase(
    1409             name="IntegerExternalArray1",
    1410             description="External C function (undeclared) with one dim Integer array input, scalar Real output.",
    1411             variability_propagation=false,
    1412             template="
    1413 $C_function_headers$
    1414 $C_functions$
    1415 ",
    1416             generatedCode="
     1401annotation(__JModelica(UnitTesting(tests={
     1402    CCodeGenTestCase(
     1403        name="IntegerExternalArray1",
     1404        description="External C function (undeclared) with one dim Integer array input, scalar Real output.",
     1405        variability_propagation=false,
     1406        template="
     1407$C_function_headers$
     1408$C_functions$
     1409",
     1410        generatedCode="
    14171411void func_CCodeGenExternalTests_IntegerExternalArray1_f_def0(jmi_array_t* a_a, jmi_real_t* b_o);
    14181412jmi_real_t func_CCodeGenExternalTests_IntegerExternalArray1_f_exp0(jmi_array_t* a_a);
     
    14251419    JMI_ARRAY_INIT_1(HEAP, jmi_int_t, jmi_int_array_t, tmp_1, jmi_array_size(a_a, 0), 1, jmi_array_size(a_a, 0))
    14261420    jmi_copy_matrix_to_int(a_a, a_a->var, tmp_1->var);
    1427     b_v = f(tmp_1->var, jmi_array_size(a_a, 0));
     1421    b_v = f(tmp_1->var, (size_t) jmi_array_size(a_a, 0));
    14281422    JMI_RET(GEN, b_o, b_v)
    14291423    JMI_DYNAMIC_FREE()
     
    14361430    return b_v;
    14371431}
    1438 
    14391432
    14401433")})));
     
    14521445        b_out = f(a_in);   
    14531446
    1454     annotation(__JModelica(UnitTesting(tests={
    1455         CCodeGenTestCase(
    1456             name="IntegerExternalArray2",
    1457             description="External C function (undeclared) with two dim Integer array input, scalar Real output.",
    1458             variability_propagation=false,
    1459             template="
    1460 $C_function_headers$
    1461 $C_functions$
    1462 ",
    1463             generatedCode="
     1447annotation(__JModelica(UnitTesting(tests={
     1448    CCodeGenTestCase(
     1449        name="IntegerExternalArray2",
     1450        description="External C function (undeclared) with two dim Integer array input, scalar Real output.",
     1451        variability_propagation=false,
     1452        template="
     1453$C_function_headers$
     1454$C_functions$
     1455",
     1456        generatedCode="
    14641457void func_CCodeGenExternalTests_IntegerExternalArray2_f_def0(jmi_array_t* a_a, jmi_real_t* b_o);
    14651458jmi_real_t func_CCodeGenExternalTests_IntegerExternalArray2_f_exp0(jmi_array_t* a_a);
     
    14721465    JMI_ARRAY_INIT_2(HEAP, jmi_int_t, jmi_int_array_t, tmp_1, jmi_array_size(a_a, 0) * jmi_array_size(a_a, 1), 2, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1))
    14731466    jmi_copy_matrix_to_int(a_a, a_a->var, tmp_1->var);
    1474     b_v = f(tmp_1->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1));
     1467    b_v = f(tmp_1->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1));
    14751468    JMI_RET(GEN, b_o, b_v)
    14761469    JMI_DYNAMIC_FREE()
     
    14831476    return b_v;
    14841477}
    1485 
    14861478
    14871479")})));
     
    14991491        b_out = f(a_in);
    15001492
    1501     annotation(__JModelica(UnitTesting(tests={
    1502         CCodeGenTestCase(
    1503             name="IntegerExternalArray3",
    1504             description="External C function (undeclared) with one scalar Real input, one dim array Integer output.",
    1505             variability_propagation=false,
    1506             template="
    1507 $C_function_headers$
    1508 $C_functions$
    1509 ",
    1510             generatedCode="
     1493annotation(__JModelica(UnitTesting(tests={
     1494    CCodeGenTestCase(
     1495        name="IntegerExternalArray3",
     1496        description="External C function (undeclared) with one scalar Real input, one dim array Integer output.",
     1497        variability_propagation=false,
     1498        template="
     1499$C_function_headers$
     1500$C_functions$
     1501",
     1502        generatedCode="
    15111503void func_CCodeGenExternalTests_IntegerExternalArray3_f_def0(jmi_real_t a_v, jmi_array_t* b_a);
    15121504
     
    15221514    JMI_ARRAY_INIT_1(HEAP, jmi_int_t, jmi_int_array_t, tmp_1, jmi_array_size(b_a, 0), 1, jmi_array_size(b_a, 0))
    15231515    jmi_copy_matrix_to_int(b_a, b_a->var, tmp_1->var);
    1524     f(a_v, tmp_1->var, jmi_array_size(b_a, 0));
     1516    f(a_v, tmp_1->var, (size_t) jmi_array_size(b_a, 0));
    15251517    jmi_copy_matrix_from_int(b_a, tmp_1->var, b_a->var);
    15261518    JMI_DYNAMIC_FREE()
    15271519    return;
    15281520}
    1529 
    15301521
    15311522")})));
     
    15441535        b_out = f(a_in);   
    15451536
    1546     annotation(__JModelica(UnitTesting(tests={
    1547         CCodeGenTestCase(
    1548             name="IntegerExternalArray4",
    1549             description="External C function (undeclared) with one 2-dim Integer array input, one 2-dim Integer array output.",
    1550             variability_propagation=false,
    1551             template="
    1552 $C_function_headers$
    1553 $C_functions$
    1554 ",
    1555             generatedCode="
     1537annotation(__JModelica(UnitTesting(tests={
     1538    CCodeGenTestCase(
     1539        name="IntegerExternalArray4",
     1540        description="External C function (undeclared) with one 2-dim Integer array input, one 2-dim Integer array output.",
     1541        variability_propagation=false,
     1542        template="
     1543$C_function_headers$
     1544$C_functions$
     1545",
     1546        generatedCode="
    15561547void func_CCodeGenExternalTests_IntegerExternalArray4_f_def0(jmi_array_t* a_a, jmi_array_t* b_a);
    15571548
     
    15701561    JMI_ARRAY_INIT_2(HEAP, jmi_int_t, jmi_int_array_t, tmp_2, jmi_array_size(b_a, 0) * jmi_array_size(b_a, 1), 2, jmi_array_size(b_a, 0), jmi_array_size(b_a, 1))
    15711562    jmi_copy_matrix_to_int(b_a, b_a->var, tmp_2->var);
    1572     f(tmp_1->var, jmi_array_size(a_a, 0), jmi_array_size(a_a, 1), tmp_2->var, jmi_array_size(b_a, 0), jmi_array_size(b_a, 1));
     1563    f(tmp_1->var, (size_t) jmi_array_size(a_a, 0), (size_t) jmi_array_size(a_a, 1), tmp_2->var, (size_t) jmi_array_size(b_a, 0), (size_t) jmi_array_size(b_a, 1));
    15731564    jmi_copy_matrix_from_int(b_a, tmp_2->var, b_a->var);
    15741565    JMI_DYNAMIC_FREE()
    15751566    return;
    15761567}
    1577 
    15781568
    15791569")})));
  • trunk/Compiler/ModelicaCBackEnd/test/modelica/CCodeGenGlobalsTests.mo

    r13099 r13491  
    478478    Real y = f1(time) + f2(time);
    479479
    480     annotation(__JModelica(UnitTesting(tests={
    481         CCodeGenTestCase(
    482             name="GlobalConstantScalar1",
    483             description="Constants in external calls",
    484             variability_propagation=false,
    485             template="
     480annotation(__JModelica(UnitTesting(tests={
     481    CCodeGenTestCase(
     482        name="GlobalConstantScalar1",
     483        description="Constants in external calls",
     484        variability_propagation=false,
     485        template="
    486486$C_global_temps$
    487487$C_model_init_eval_independent_globals$
     
    489489$C_functions$
    490490",
    491             generatedCode="
     491        generatedCode="
    492492    jmi_real_t CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f1_c;
    493493    jmi_array_t* CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f1_d;
     
    555555    JMI_DEF(REA, y_v)
    556556    extern double f2(double, double, double*, size_t);
    557     y_v = f2(x_v, JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_c), JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_d)->var, jmi_array_size(JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_d), 0));
     557    y_v = f2(x_v, JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_c), JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_d)->var, (size_t) jmi_array_size(JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantScalar1_f2_d), 0));
    558558    JMI_RET(GEN, y_o, y_v)
    559559    JMI_DYNAMIC_FREE()
     
    14371437    JMI_DEF(EXO, eo_v)
    14381438    extern void* constructor(double*, size_t);
    1439     eo_v = constructor(x_a->var, jmi_array_size(x_a, 0));
     1439    eo_v = constructor(x_a->var, (size_t) jmi_array_size(x_a, 0));
    14401440    JMI_RET(GEN, eo_o, eo_v)
    14411441    JMI_DYNAMIC_FREE()
     
    14511451
    14521452    func_CCodeGenGlobalsTests_GlobalVariables_GlobalConstantExternalObject1_P_EO_destructor_def1(JMI_GLOBAL(CCodeGenGlobalsTests_GlobalVariables_GlobalConstantExternalObject1_P_eo));
    1453 
    14541453")})));
    14551454end GlobalConstantExternalObject1;
  • trunk/Compiler/ModelicaFlatTree/src/jastadd/TypeAnalysis.jrag

    r13431 r13491  
    211211    inh CommonVariableDecl FExternalStmt.myConstructorOutput();
    212212    eq Root.getChild().myConstructorOutput() = null;
    213     eq FFunctionDecl.getChild().myConstructorOutput()     = myOutputs().get(0);
    214     eq InstFullClassDecl.getChild().myConstructorOutput() = myOutputs().get(0);
     213    eq FFunctionDecl.getChild().myConstructorOutput()      = myOutputs().get(0);
     214    eq InstFullClassDecl.getChild().myConstructorOutput()  = myOutputs().get(0);
     215    eq InstShortClassDecl.getChild().myConstructorOutput() = myOutputs().get(0);
    215216
    216217    public ArrayList<FExp> FExternalStmt.myConstructorArgs() {
  • trunk/Compiler/ModelicaFrontEnd/src/jastadd/flattening/Flattening.jrag

    r13476 r13491  
    779779                new FCExternalLanguage());
    780780        stmt.extractLibrary(this);
     781        contribute(stmt);
    781782        if (hasInstExternalCall()) {
    782783            InstExternalCall call = getInstExternalCall();
     
    832833        stmt.extractLibrary(this);
    833834        sl.add(stmt);
     835        contribute(stmt);
    834836        return false;
    835837    }
     
    34363438
    34373439        /**
     3440         * This method is called during flattening of external statements. All
     3441         * expressions that are added must be flattened.
     3442         */
     3443        protected void contribute(AnnotationNode src, FExternalStmt dest) {}
     3444
     3445        /**
    34383446         * This method is called in order to determine if an attribute should
    34393447         * be considered as active. Return true if the attributes that was
     
    35263534    }
    35273535   
     3536    public class InstExternal {
     3537        public FExternalStmt contribute(FExternalStmt stmt) {
     3538            for (AttributeContributor contributor : attributeContributors()) {
     3539                contributor.contribute(annotation(), stmt);
     3540            }
     3541            return stmt;
     3542        }
     3543    }
     3544   
     3545    public class FExternalStmt {
     3546        public FExternalStmt contribute(FExternalStmt stmt) {
     3547            for (AttributeContributor contributor : attributeContributors()) {
     3548                contributor.contribute(annotation(), stmt);
     3549            }
     3550            return stmt;
     3551        }
     3552    }
     3553   
    35283554}
    35293555
  • trunk/Compiler/ModelicaFrontEnd/src/jastadd/instance/InstanceTree.jrag

    r13396 r13491  
    17681768        hasInstClassModification() ||
    17691769        getSrcClassDecl().hasSrcTypePrefix() ||
    1770         !filteredEnvironment().isEmpty();
     1770        !filteredEnvironment().isEmpty() ||
     1771        inExternalObject();
    17711772    eq InstReplacingShortClassDecl.shouldBeExpanded() =
    17721773        super.shouldBeExpanded() ||
Note: See TracChangeset for help on using the changeset viewer.