Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 119136c

Browse files
mahgeOpenModelica-Hudson
authored andcommitted
New FrontEnd improvments
- Basic implementation of generic/polymorphic functions (function arguments). - Implementation of array functions - mapping (iterator) functions - special Modelica reduction functions. - Handling of record Constructors. - Basic handling of overloaded operator functions. - Expression level handling not implemented yet. - Changed CachedData in InstNodes to an array. - Each element represents a different type of cache. - So far we have caches for functions, package and Inner Outer information. Belonging to [master]: - #1785 - OpenModelica/OpenModelica-testsuite#755
1 parent 80e3d34 commit 119136c

File tree

13 files changed

+842
-341
lines changed

13 files changed

+842
-341
lines changed

Compiler/NFFrontEnd/NFBuiltin.mo

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ encapsulated package Elements
9292
SCode.PARTS({}, {}, {}, {}, {}, {}, {}, NONE()),
9393
SCode.noComment, Absyn.dummyInfo);
9494

95+
constant SCode.Element ANY = SCode.CLASS("polymorphic",
96+
SCode.defaultPrefixes, SCode.NOT_ENCAPSULATED(), SCode.NOT_PARTIAL(), SCode.R_TYPE(),
97+
SCode.PARTS({}, {}, {}, {}, {}, {}, {}, NONE()),
98+
SCode.noComment, Absyn.dummyInfo);
99+
95100
constant SCode.Element STATESELECT = SCode.CLASS("StateSelect",
96101
SCode.defaultPrefixes, SCode.NOT_ENCAPSULATED(), SCode.NOT_PARTIAL(), SCode.R_TYPE(),
97102
SCode.ENUMERATION({
@@ -108,16 +113,22 @@ end Elements;
108113
// InstNodes for the builtin types. These have empty class trees to prevent
109114
// access to the attributes via dot notation (which is not needed for
110115
// modifiers and illegal in other cases).
116+
constant InstNode ANYTYPE_NODE = InstNode.CLASS_NODE("polymorphic",
117+
Elements.ANY,
118+
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.ANY_TYPE("unknown"), NFClassTree.EMPTY, Modifier.NOMOD())),
119+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
120+
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
121+
111122
constant InstNode REAL_NODE = InstNode.CLASS_NODE("Real",
112123
Elements.REAL,
113124
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.REAL(), NFClassTree.EMPTY, Modifier.NOMOD())),
114-
Pointer.createImmutable(NFInstNode.CachedData.NO_CACHE()),
125+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
115126
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
116127

117128
constant InstNode INTEGER_NODE = InstNode.CLASS_NODE("Integer",
118129
Elements.INTEGER,
119130
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.INTEGER(), NFClassTree.EMPTY, Modifier.NOMOD())),
120-
Pointer.createImmutable(NFInstNode.CachedData.FUNCTION({NFBuiltinFuncs.INTEGER}, true, false)),
131+
listArray({NFInstNode.CachedData.FUNCTION({NFBuiltinFuncs.INTEGER}, true, false), NFInstNode.CachedData.NO_CACHE(), NFInstNode.CachedData.NO_CACHE()}),
121132
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
122133

123134
constant ComponentRef INTEGER_CREF =
@@ -126,7 +137,7 @@ constant ComponentRef INTEGER_CREF =
126137
constant InstNode BOOLEAN_NODE = InstNode.CLASS_NODE("Boolean",
127138
Elements.BOOLEAN,
128139
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.BOOLEAN(), NFClassTree.EMPTY, Modifier.NOMOD())),
129-
Pointer.createImmutable(NFInstNode.CachedData.NO_CACHE()),
140+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
130141
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
131142

132143
constant ComponentRef BOOLEAN_CREF =
@@ -135,10 +146,15 @@ constant ComponentRef BOOLEAN_CREF =
135146
constant InstNode STRING_NODE = InstNode.CLASS_NODE("String",
136147
Elements.STRING,
137148
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.STRING(), NFClassTree.EMPTY, Modifier.NOMOD())),
138-
Pointer.createImmutable(NFInstNode.CachedData.FUNCTION({
139-
NFBuiltinFuncs.STRING_ENUM, NFBuiltinFuncs.STRING_INT,
140-
NFBuiltinFuncs.STRING_BOOL, NFBuiltinFuncs.STRING_REAL,
141-
NFBuiltinFuncs.STRING_REAL_FORMAT}, true, false)),
149+
listArray({ NFInstNode.CachedData.FUNCTION({
150+
NFBuiltinFuncs.STRING_ENUM, NFBuiltinFuncs.STRING_INT,
151+
NFBuiltinFuncs.STRING_BOOL, NFBuiltinFuncs.STRING_REAL,
152+
NFBuiltinFuncs.STRING_REAL_FORMAT
153+
},
154+
true, false),
155+
NFInstNode.CachedData.NO_CACHE(),
156+
NFInstNode.CachedData.NO_CACHE()}
157+
),
142158
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
143159

144160
constant ComponentRef STRING_CREF =
@@ -147,7 +163,7 @@ constant ComponentRef STRING_CREF =
147163
constant InstNode ENUM_NODE = InstNode.CLASS_NODE("enumeration",
148164
Elements.ENUMERATION,
149165
Pointer.createImmutable(Class.PARTIAL_BUILTIN(Type.ENUMERATION_ANY(), NFClassTree.EMPTY, Modifier.NOMOD())),
150-
Pointer.createImmutable(NFInstNode.CachedData.NO_CACHE()),
166+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
151167
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
152168

153169
constant Type STATESELECT_TYPE = Type.ENUMERATION(
@@ -156,7 +172,7 @@ constant Type STATESELECT_TYPE = Type.ENUMERATION(
156172
constant InstNode STATESELECT_NODE = InstNode.CLASS_NODE("StateSelect",
157173
Elements.STATESELECT,
158174
Pointer.createImmutable(Class.PARTIAL_BUILTIN(STATESELECT_TYPE, NFClassTree.EMPTY, Modifier.NOMOD())),
159-
Pointer.createImmutable(NFInstNode.CachedData.NO_CACHE()),
175+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
160176
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
161177

162178
constant ComponentRef STATESELECT_CREF =

Compiler/NFFrontEnd/NFBuiltinFuncs.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ constant Function INTEGER = Function.FUNCTION(Path.IDENT("Integer"),
101101
// String(r, significantDigits=d, minimumLength=0, leftJustified=true)
102102
constant InstNode STRING_NODE = NFInstNode.CLASS_NODE("String", DUMMY_ELEMENT,
103103
Pointer.createImmutable(Class.NOT_INSTANTIATED()),
104-
Pointer.createImmutable(CachedData.NO_CACHE()),
104+
arrayCreate(NFInstNode.NUMBER_OF_CACHES, NFInstNode.CachedData.NO_CACHE()),
105105
InstNode.EMPTY_NODE(), InstNodeType.NORMAL_CLASS());
106106

107107
constant Function STRING_REAL = Function.FUNCTION(Path.IDENT("String"),

0 commit comments

Comments
 (0)