@@ -53,7 +53,6 @@ protected import Config;
5353protected import Flags ;
5454protected import FGraphBuild ;
5555protected import Global ;
56- protected import List ;
5756protected import MetaUtil ;
5857protected import Parser ;
5958protected import AbsynToSCode ;
@@ -351,6 +350,14 @@ algorithm
351350 end match;
352351end isDer;
353352
353+ protected function mergePrograms
354+ input Absyn . Program program1;
355+ input Absyn . Program program2;
356+ output Absyn . Program outProgram = program1;
357+ algorithm
358+ outProgram. classes := listAppend(program1. classes, program2. classes);
359+ end mergePrograms;
360+
354361public function getInitialFunctions
355362"Fetches the Absyn.Program representation of the functions (and other classes) in the initial environment"
356363 output Absyn . Program initialProgram;
@@ -359,8 +366,7 @@ protected
359366 // legend: NF = new frontend; CF = current frontend
360367 String fileModelicaNF,fileModelicaCF,fileMetaModelica,fileParModelica,filePDEModelica;
361368 list< tuple< tuple< Integer ,Boolean > ,tuple< Absyn . Program ,SCode . Program >>> assocLst;
362- list< Absyn . Class > classesNF,classesCF,classes1NF,classes1CF,classes2;
363- Absyn . Program p, pNF, pCF;
369+ Absyn . Program p, pNF, pCF, pMM;
364370 SCode . Program sp, spNF, spCF;
365371algorithm
366372 fileModelicaNF := Settings . getInstallationDirectoryPath() + "/lib/omc/NFModelicaBuiltin.mo" ;
@@ -371,86 +377,80 @@ algorithm
371377
372378 (initialProgram,initialSCodeProgram) := matchcontinue ()
373379 case ()
374- equation
375- failure(_ = getGlobalRoot(Global . builtinIndex));
380+ algorithm
381+ failure(_ : = getGlobalRoot(Global . builtinIndex));
376382 setGlobalRoot(Global . builtinIndex,{});
377383 then fail();
378384 case ()
379- equation
380- assocLst = getGlobalRoot(Global . builtinIndex);
381- ((p,sp)) = Util . assoc(Util . makeTuple(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . isSet(Flags . SCODE_INST )) , assocLst);
385+ algorithm
386+ assocLst : = getGlobalRoot(Global . builtinIndex);
387+ ((p,sp)) : = Util . assoc(Util . makeTuple(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . isSet(Flags . SCODE_INST )) , assocLst);
382388 then (p,sp);
383389 case ()
384- equation
385- true = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . METAMODELICA );
390+ algorithm
391+ true : = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . METAMODELICA );
386392 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaNF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaNF},AbsynUtil . dummyInfo);
387393 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaCF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaCF},AbsynUtil . dummyInfo);
388394 Error . assertionOrAddSourceMessage(System . regularFileExists(fileMetaModelica),Error . FILE_NOT_FOUND_ERROR ,{fileMetaModelica},AbsynUtil . dummyInfo);
389- Absyn . PROGRAM (classes= classes1NF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaNF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
390- Absyn . PROGRAM (classes= classes1CF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaCF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
391- Absyn . PROGRAM (classes= classes2,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileMetaModelica,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
392- classesNF = listAppend(classes1NF,classes2);
393- classesCF = listAppend(classes1CF,classes2);
394- pNF = Absyn . PROGRAM (classesNF,Absyn . TOP ());
395- pCF = Absyn . PROGRAM (classesCF,Absyn . TOP ());
396- (pNF as Absyn . PROGRAM (classes= classesNF)) = MetaUtil . createMetaClassesInProgram(pNF);
397- (pCF as Absyn . PROGRAM (classes= classesCF)) = MetaUtil . createMetaClassesInProgram(pCF);
398- spNF = List . map(classesNF, AbsynToSCode . translateClass);
399- spCF = List . map(classesCF, AbsynToSCode . translateClass);
400- assocLst = getGlobalRoot(Global . builtinIndex);
395+ pNF := Parser . parsebuiltin(fileModelicaNF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
396+ pCF := Parser . parsebuiltin(fileModelicaCF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
397+ pMM := Parser . parsebuiltin(fileMetaModelica, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
398+ pNF := mergePrograms(pNF, pMM);
399+ pCF := mergePrograms(pCF, pMM);
400+ pNF := MetaUtil . createMetaClassesInProgram(pNF);
401+ pCF := MetaUtil . createMetaClassesInProgram(pCF);
402+ spNF := list(AbsynToSCode . translateClass(c) for c in pNF. classes);
403+ spCF := list(AbsynToSCode . translateClass(c) for c in pCF. classes);
404+ assocLst := getGlobalRoot(Global . builtinIndex);
401405 setGlobalRoot(Global . builtinIndex, ((Flags . METAMODELICA , true ), (pNF,spNF))::((Flags . METAMODELICA , false ), (pCF,spCF))::assocLst);
402- (p, sp) = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
406+ (p, sp) : = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
403407 then (p,sp);
404408 case ()
405- equation
406- true = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . PARMODELICA );
409+ algorithm
410+ true : = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . PARMODELICA );
407411 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaNF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaNF},AbsynUtil . dummyInfo);
408412 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaCF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaCF},AbsynUtil . dummyInfo);
409413 Error . assertionOrAddSourceMessage(System . regularFileExists(fileMetaModelica),Error . FILE_NOT_FOUND_ERROR ,{fileMetaModelica},AbsynUtil . dummyInfo);
410- Absyn . PROGRAM (classes= classes1NF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaNF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
411- Absyn . PROGRAM (classes= classes1CF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaCF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
412- Absyn . PROGRAM (classes= classes2,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileParModelica,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
413- classesNF = listAppend(classes1NF,classes2);
414- classesCF = listAppend(classes1CF,classes2);
415- pNF = Absyn . PROGRAM (classesNF,Absyn . TOP ());
416- pCF = Absyn . PROGRAM (classesCF,Absyn . TOP ());
417- spNF = List . map(classesNF, AbsynToSCode . translateClass);
418- spCF = List . map(classesCF, AbsynToSCode . translateClass);
419- assocLst = getGlobalRoot(Global . builtinIndex);
414+ pNF := Parser . parsebuiltin(fileModelicaNF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
415+ pCF := Parser . parsebuiltin(fileModelicaCF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
416+ pMM := Parser . parsebuiltin(fileParModelica, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
417+ pNF := mergePrograms(pNF, pMM);
418+ pCF := mergePrograms(pCF, pMM);
419+ spNF := list(AbsynToSCode . translateClass(c) for c in pNF. classes);
420+ spCF := list(AbsynToSCode . translateClass(c) for c in pCF. classes);
421+ assocLst := getGlobalRoot(Global . builtinIndex);
420422 setGlobalRoot(Global . builtinIndex, ((Flags . PARMODELICA , true ), (pNF,spNF))::((Flags . PARMODELICA , false ), (pCF,spCF))::assocLst);
421- (p, sp) = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
423+ (p, sp) : = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
422424 then (p,sp);
423425 case ()
424- equation
425- true = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . MODELICA ) or intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . OPTIMICA );
426+ algorithm
427+ true : = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . MODELICA ) or intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . OPTIMICA );
426428 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaNF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaNF},AbsynUtil . dummyInfo);
427429 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaCF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaCF},AbsynUtil . dummyInfo);
428- ( pNF as Absyn . PROGRAM (classes = classes1NF,within_ = Absyn . TOP ())) = Parser . parsebuiltin(fileModelicaNF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
429- ( pCF as Absyn . PROGRAM (classes = classes1CF,within_ = Absyn . TOP ())) = Parser . parsebuiltin(fileModelicaCF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
430- spNF = List . map(classes1NF, AbsynToSCode . translateClass);
431- spCF = List . map(classes1CF, AbsynToSCode . translateClass);
432- assocLst = getGlobalRoot(Global . builtinIndex);
430+ pNF : = Parser . parsebuiltin(fileModelicaNF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
431+ pCF : = Parser . parsebuiltin(fileModelicaCF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
432+ spNF : = list( AbsynToSCode . translateClass(c) for c in pNF . classes );
433+ spCF : = list( AbsynToSCode . translateClass(c) for c in pCF . classes );
434+ assocLst : = getGlobalRoot(Global . builtinIndex);
433435 setGlobalRoot(Global . builtinIndex, ((Flags . MODELICA , true ), (pNF,spNF))::((Flags . MODELICA , false ), (pCF,spCF))::assocLst);
434- (p, sp) = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
436+ (p, sp) : = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
435437 then (p,sp);
436438 case ()
437- equation
438- true = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . PDEMODELICA );
439+ algorithm
440+ true : = intEq(Flags . getConfigEnum(Flags . GRAMMAR ), Flags . PDEMODELICA );
439441 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaNF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaNF},AbsynUtil . dummyInfo);
440442 Error . assertionOrAddSourceMessage(System . regularFileExists(fileModelicaCF),Error . FILE_NOT_FOUND_ERROR ,{fileModelicaCF},AbsynUtil . dummyInfo);
441443 Error . assertionOrAddSourceMessage(System . regularFileExists(filePDEModelica),Error . FILE_NOT_FOUND_ERROR ,{filePDEModelica},AbsynUtil . dummyInfo);
442- Absyn . PROGRAM (classes= classes1NF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaNF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
443- Absyn . PROGRAM (classes= classes1CF,within_= Absyn . TOP ()) = Parser . parsebuiltin(fileModelicaCF,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
444- Absyn . PROGRAM (classes= classes2,within_= Absyn . TOP ()) = Parser . parsebuiltin(filePDEModelica,"UTF-8" ,"" ,NONE (),acceptedGram= Flags . METAMODELICA );
445- classesNF = listAppend(classes1NF,classes2);
446- classesCF = listAppend(classes1CF,classes2);
447- pNF = Absyn . PROGRAM (classesNF,Absyn . TOP ());
448- pCF = Absyn . PROGRAM (classesCF,Absyn . TOP ());
449- spNF = List . map(classesNF, AbsynToSCode . translateClass);
450- spCF = List . map(classesCF, AbsynToSCode . translateClass);
451- assocLst = getGlobalRoot(Global . builtinIndex);
444+ pNF := Parser . parsebuiltin(fileModelicaNF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
445+ pCF := Parser . parsebuiltin(fileModelicaCF, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
446+ pMM := Parser . parsebuiltin(filePDEModelica, "UTF-8" , "" , NONE (), acceptedGram = Flags . METAMODELICA );
447+ pNF := mergePrograms(pNF, pMM);
448+ pCF := mergePrograms(pCF, pMM);
449+ spNF := list(AbsynToSCode . translateClass(c) for c in pNF. classes);
450+ spCF := list(AbsynToSCode . translateClass(c) for c in pCF. classes);
451+ assocLst := getGlobalRoot(Global . builtinIndex);
452452 setGlobalRoot(Global . builtinIndex, ((Flags . PDEMODELICA , true ), (pNF,spNF))::((Flags . PDEMODELICA , false ), (pCF,spCF))::assocLst);
453- (p, sp) = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
453+ (p, sp) : = if Flags . isSet(Flags . SCODE_INST ) then (pNF, spNF) else (pCF, spCF);
454454 then (p,sp);
455455
456456 else
0 commit comments