Skip to content

Commit

Permalink
Merge pull request #3545 from HansOlsson/MultiModification
Browse files Browse the repository at this point in the history
Multi modification
  • Loading branch information
HansOlsson authored Sep 20, 2024
2 parents 33a0c5f + 2abcdbb commit 5910648
Showing 1 changed file with 48 additions and 1 deletion.
49 changes: 48 additions & 1 deletion chapters/inheritance.tex
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,11 @@ \subsection{Merging of Modifications}\label{merging-of-modifications}

\subsection{Single Modification}\label{single-modification}

Two arguments of a modification shall not modify the same element, attribute, or description-string. When using qualified names the different qualified names starting with the same identifier are merged into one modifier. If a modifier with a qualified name has the \lstinline!each! or \lstinline!final! prefix, that prefix is only seen as applied to the final part of the name.
Two arguments of a modification shall not modify the same element, attribute, or description-string.
When using qualified names the different qualified names starting with the same identifier are merged into one modifier.
This merged modifier can be described as a purely syntactic rewriting to an equivalent modifier, except in the case of replaceable redeclarations without a constraining type, see \cref{redeclaration}.
The latter is described in the example below.
If a modifier with a qualified name has the \lstinline!each! or \lstinline!final! prefix, that prefix is only seen as applied to the final part of the name.

\begin{example}
\begin{lstlisting}[language=modelica]
Expand All @@ -434,6 +438,11 @@ \subsection{Single Modification}\label{single-modification}
// Ok, different attributes designated (unit, displayUnit and value)
// identical to:
C4 b(x(final unit = "V", displayUnit = "mV") = 5.0));

C4 c(final x, final x.unit = "V", x.displayUnit = "mV");
// OK, different attributes and "final x" in itself is OK,
// identical to (the final on unit is redundant):
C4 d(final x(final unit = "V", displayUnit = "mV"));
end C3;
\end{lstlisting}

Expand All @@ -452,6 +461,44 @@ \subsection{Single Modification}\label{single-modification}
m1(r = 1.6, r "x")
m1(r = R(), r(y(min = 2)))
\end{lstlisting}

Modifiers can be merged for non-replaceable redeclarations, or replaceable redeclarations with a constraining type, see \cref{redeclaration}.
\begin{lstlisting}[language=modelica]
model Test
model A
replaceable Real x = 1;
end A;

A a(redeclare Real x, x.start = 2);
// Identical to A a(redeclare Real x(start=2));
A a(redeclare replaceable Real x constrainedby Real, x.start = 2);
// Identical to A a(redeclare Real x constrainedby Real(start=2));
end Test;
\end{lstlisting}

For replaceable redeclarations without a constraining type the merging is not a local syntactic rewrite as it requires the constraining type, see \cref{redeclaration}.
\begin{lstlisting}[language=modelica]
model Test
partial model Base
parameter Real p;
end Base;

model Implementation
extends Base;
parameter Real q;
end Implementation;

model A
replaceable Base b constrainedby Base(p=1);
end A;

A a(redeclare replaceable Implementation b, b.q=1);
// This is treated the same as
// A a(redeclare replaceable Implementation b constrainedby Base(q=1));
// This is no longer a local syntactic rewrite as the constrainedby
// references the constraining class
end Test;
\end{lstlisting}
\end{example}

\subsection{Modifiers for Array Elements}\label{modifiers-for-array-elements}
Expand Down

0 comments on commit 5910648

Please sign in to comment.