@@ -334,7 +334,7 @@ algorithm
334334 then
335335 Class . fromEnumeration(cdef. enumLst, ty, prefs, scope);
336336
337- else Class . PARTIAL_CLASS (NFClassTree . EMPTY , Modifier . NOMOD (), prefs);
337+ else Class . PARTIAL_CLASS (NFClassTree . EMPTY , Modifier . NOMOD (), Modifier . NOMOD (), prefs);
338338 end match;
339339end partialInstClass2;
340340
@@ -418,7 +418,7 @@ function expandClassParts
418418protected
419419 Class cls;
420420 ClassTree cls_tree;
421- Modifier mod;
421+ Modifier mod, cc_mod ;
422422 InstNode builtin_ext;
423423 Class . Prefixes prefs;
424424 Restriction res;
@@ -428,7 +428,7 @@ algorithm
428428 cls := Class . initExpandedClass(cls);
429429 node := InstNode . updateClass(cls, node);
430430
431- Class . EXPANDED_CLASS (elements = cls_tree, modifier = mod, prefixes = prefs) := cls;
431+ Class . EXPANDED_CLASS (elements = cls_tree, modifier = mod, ccMod = cc_mod, prefixes = prefs) := cls;
432432 builtin_ext := ClassTree . mapFoldExtends(cls_tree, expandExtends, InstNode . EMPTY_NODE ());
433433
434434 if InstNode . name(builtin_ext) == "ExternalObject" then
@@ -440,7 +440,7 @@ algorithm
440440
441441 cls_tree := ClassTree . expand(cls_tree);
442442 res := Restriction . fromSCode(SCodeUtil . getClassRestriction(def));
443- cls := Class . EXPANDED_CLASS (cls_tree, mod, prefs, res);
443+ cls := Class . EXPANDED_CLASS (cls_tree, mod, cc_mod, prefs, res);
444444 node := InstNode . updateClass(cls, node);
445445 end if ;
446446end expandClassParts;
@@ -683,7 +683,7 @@ protected
683683 SCode . Attributes sattrs;
684684 Component . Attributes attrs;
685685 list< Dimension > dims;
686- Modifier mod;
686+ Modifier mod, cc_mod ;
687687 Restriction res;
688688algorithm
689689 SCode . DERIVED (typeSpec = ty, attributes = sattrs) := definition;
@@ -713,9 +713,10 @@ algorithm
713713 attrs := instDerivedAttributes(sattrs);
714714 dims := list(Dimension . RAW_DIM (d, InstNode . parent(node)) for d in AbsynUtil . typeSpecDimensions(ty));
715715 mod := Class . getModifier(cls);
716+ cc_mod := Class . getCCModifier(cls);
716717
717718 res := Restriction . fromSCode(SCodeUtil . getClassRestriction(element));
718- cls := Class . EXPANDED_DERIVED (ext_node, mod, listArray(dims), prefs, attrs, res);
719+ cls := Class . EXPANDED_DERIVED (ext_node, mod, cc_mod, listArray(dims), prefs, attrs, res);
719720 node := InstNode . updateClass(cls, node);
720721end expandClassDerived;
721722
@@ -809,6 +810,7 @@ algorithm
809810 // Fetch modification on the class definition (for class extends).
810811 mod := instElementModifier(InstNode . definition(node), node, par);
811812 mod := Modifier . propagate(mod, node, par);
813+ mod := Modifier . merge(mod, cls. ccMod);
812814 // Merge with any outer modifications.
813815 outer_mod := Modifier . propagate(cls. modifier, node, par);
814816 outer_mod := Modifier . merge(outerMod, outer_mod);
@@ -857,6 +859,7 @@ algorithm
857859 // Merge outer modifiers and attributes.
858860 mod := instElementModifier(InstNode . definition(node), node, InstNode . rootParent(node));
859861 mod := Modifier . propagate(mod, node, par);
862+ mod := Modifier . merge(mod, cls. ccMod);
860863 outer_mod := Modifier . propagate(cls. modifier, node, par);
861864 outer_mod := Modifier . merge(outerMod, outer_mod);
862865 mod := Modifier . merge(outer_mod, mod);
@@ -1314,7 +1317,7 @@ algorithm
13141317 rdcl_cls := InstNode . getClass(redeclareNode);
13151318
13161319 mod := Class . getModifier(rdcl_cls);
1317- mod := Modifier . merge(mod, constrainingMod);
1320+ // mod := Modifier.merge(mod, constrainingMod);
13181321 mod := Modifier . merge(outerMod, mod);
13191322
13201323 prefs := mergeRedeclaredClassPrefixes(Class . getPrefixes(orig_cls),
@@ -1346,6 +1349,7 @@ algorithm
13461349 orig_node := InstNode . setNodeType(node_ty, orig_node);
13471350 rdcl_cls. elements := ClassTree . setClassExtends(orig_node, rdcl_cls. elements);
13481351 rdcl_cls. modifier := mod;
1352+ rdcl_cls. ccMod := constrainingMod;
13491353 rdcl_cls. prefixes := prefs;
13501354 then
13511355 rdcl_cls;
@@ -1365,6 +1369,7 @@ algorithm
13651369 algorithm
13661370 rdcl_cls. prefixes := prefs;
13671371 rdcl_cls. modifier := mod;
1372+ rdcl_cls. ccMod := constrainingMod;
13681373 then
13691374 rdcl_cls;
13701375
0 commit comments