Skip to content

Commit 0909f0e

Browse files
committed
- Renamed SCodeFlatten.flatten to flattenProgram and added flattenClass.
- Added flattening of functions in Interactive (disabled by default). - Renamed some functions in SCodeFlattenImports to be grammatically correct. - Added fail as a builtin MetaModelica function in MetaModelicaBuiltin. - Added missing declarations in test case parser/MetaModelicaMatchElse. git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7828 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 8a15ea4 commit 0909f0e

File tree

6 files changed

+42
-17
lines changed

6 files changed

+42
-17
lines changed

Compiler/FrontEnd/Inst.mo

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ algorithm
204204
InstanceHierarchy oIH1, oIH2, iIH;
205205
case (cache,iIH,p)
206206
equation
207-
//p = SCodeFlatten.flatten(p);
207+
//p = SCodeFlatten.flattenProgram(p);
208208
// Debug.fprintln("insttr", "instantiate");
209209
pnofunc = Util.listSelect(p, isNotFunction);
210210
pfunc = Util.listSelect(p, SCode.isFunction);
@@ -307,7 +307,7 @@ algorithm
307307

308308
case (cache,ih,(cdecls as (_ :: _)),(path as Absyn.IDENT(name = name2))) /* top level class */
309309
equation
310-
//cdecls = SCodeFlatten.flatten(cdecls);
310+
//cdecls = SCodeFlatten.flattenProgram(cdecls);
311311
(cache,env) = Builtin.initialEnv(cache);
312312
(cache,env_1,ih,dae1) = instClassDecls(cache, env, ih, cdecls, path);
313313
(cache,env_2,ih,dae2) = instClassInProgram(cache, env_1, ih, cdecls, path);
@@ -327,7 +327,7 @@ algorithm
327327

328328
case (cache,ih,(cdecls as (_ :: _)),(path as Absyn.QUALIFIED(name = name))) /* class in package */
329329
equation
330-
//cdecls = SCodeFlatten.flatten(cdecls);
330+
//cdecls = SCodeFlatten.flattenProgram(cdecls);
331331
pathstr = Absyn.pathString(path);
332332

333333
//System.startTimer();

Compiler/FrontEnd/MetaModelicaBuiltin.mo

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,3 +853,7 @@ function realSqrt
853853
output Real y(unit = "'p(1/2)");
854854
external "builtin" y=sqrt(x);
855855
end realSqrt;
856+
857+
function fail
858+
external "builtin";
859+
end fail;

Compiler/FrontEnd/SCodeFlatten.mo

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ protected import SCodeEnv;
4949

5050
protected type Env = SCodeEnv.Env;
5151

52-
public function flatten
52+
public function flattenProgram
5353
input SCode.Program inProgram;
5454
output SCode.Program outProgram;
5555
protected
@@ -67,7 +67,25 @@ algorithm
6767
//System.stopTimer();
6868
//print("flatten took " +& realString(System.getTimerIntervalTime()) +&
6969
// " seconds\n");
70-
end flatten;
70+
end flattenProgram;
7171

72+
public function flattenClass
73+
input SCode.Class inClass;
74+
output SCode.Class outClass;
75+
algorithm
76+
outClass := matchcontinue(inClass)
77+
local
78+
SCode.Class cls;
79+
80+
case _ then inClass;
81+
82+
case _
83+
equation
84+
{cls} = flattenProgram({inClass});
85+
then
86+
cls;
87+
88+
end matchcontinue;
89+
end flattenClass;
7290

7391
end SCodeFlatten;

Compiler/FrontEnd/SCodeFlattenImports.mo

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ public function flattenProgram
6767
input Env inEnv;
6868
output SCode.Program outProgram;
6969
algorithm
70-
outProgram := Util.listMap1(inProgram, flattenClasses, inEnv);
70+
outProgram := Util.listMap1(inProgram, flattenClass, inEnv);
7171
end flattenProgram;
7272

73-
protected function flattenClasses
73+
public function flattenClass
7474
input SCode.Class inClass;
7575
input Env inEnv;
7676
output SCode.Class outClass;
@@ -84,11 +84,11 @@ protected
8484
algorithm
8585
SCode.CLASS(name, part_pre, encap_pre, restriction, cdef, info) := inClass;
8686
env := SCodeEnv.enterScope(inEnv, name);
87-
cdef := flattenClassDefs(cdef, env, info);
87+
cdef := flattenClassDef(cdef, env, info);
8888
outClass := SCode.CLASS(name, part_pre, encap_pre, restriction, cdef, info);
89-
end flattenClasses;
89+
end flattenClass;
9090

91-
protected function flattenClassDefs
91+
protected function flattenClassDef
9292
input SCode.ClassDef inClassDef;
9393
input Env inEnv;
9494
input Absyn.Info inInfo;
@@ -131,7 +131,7 @@ algorithm
131131

132132
else then inClassDef;
133133
end match;
134-
end flattenClassDefs;
134+
end flattenClassDef;
135135

136136
protected function checkRecursiveShortDefinition
137137
input Absyn.TypeSpec inTypeSpec;
@@ -223,7 +223,7 @@ protected
223223
Option<Absyn.ConstrainClass> cc;
224224
algorithm
225225
SCode.CLASSDEF(name, fp, rp, cls, cc) := inClassDefElement;
226-
cls := flattenClasses(cls, inEnv);
226+
cls := flattenClass(cls, inEnv);
227227
outClassDefElement := SCode.CLASSDEF(name, fp, rp, cls, cc);
228228
end flattenClassDefElements;
229229

Compiler/FrontEnd/SCodeLookup.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ algorithm
622622
(item, new_path, env) = lookupSimpleName(id, inEnv);
623623
then
624624
(item, new_path, SOME(env));
625-
625+
626626
// Qualified name.
627627
case (Absyn.QUALIFIED(name = id, path = path), _, _, _)
628628
equation

Compiler/Script/Interactive.mo

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,28 @@ encapsulated package Interactive
4949
//public imports
5050
public import Absyn;
5151
public import AbsynDep;
52+
public import ConnectionGraph;
53+
public import DAE;
54+
public import Env;
5255
public import OptManager;
5356
public import SCode;
5457
public import SCodeUtil;
55-
public import DAE;
56-
public import Env;
5758
public import Settings;
58-
public import ConnectionGraph;
5959
public import Values;
6060

6161
// protected imports
6262
protected import ComponentReference;
6363
protected import DAEUtil;
64+
protected import Dependency;
6465
protected import ErrorExt;
6566
protected import Expression;
6667
protected import ExpressionDump;
6768
protected import InnerOuter;
6869
protected import MetaUtil;
70+
protected import SCodeFlatten;
6971
protected import Types;
7072
protected import UnitAbsyn;
7173
protected import ValuesUtil;
72-
protected import Dependency;
7374

7475
/*
7576
** CompiledCFunction
@@ -413,6 +414,8 @@ algorithm
413414
equation
414415
env = buildEnvFromSymboltable(st);
415416
scode_class = SCodeUtil.translateClass(absyn_class);
417+
scode_class = SCodeFlatten.flattenClass(scode_class);
418+
416419
(_,env_1,_) =
417420
Inst.implicitFunctionInstantiation(Env.emptyCache(),env,InnerOuter.emptyInstHierarchy,
418421
DAE.NOMOD(), Prefix.NOPRE(), Connect.emptySet, scode_class, {});

0 commit comments

Comments
 (0)