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

Commit def3e2e

Browse files
adeas31OpenModelica-Hudson
authored andcommitted
Start the library vendor executable separately
For each `loadEncryptedPackage` call create only one instance of library vendor executable. Belonging to [master]: - #2505
1 parent af928ab commit def3e2e

File tree

9 files changed

+58
-24
lines changed

9 files changed

+58
-24
lines changed

Compiler/FFrontEnd/FBuiltin.mo

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,8 @@ algorithm
381381
true = intEq(Flags.getConfigEnum(Flags.GRAMMAR), Flags.METAMODELICA);
382382
Error.assertionOrAddSourceMessage(System.regularFileExists(fileModelica),Error.FILE_NOT_FOUND_ERROR,{fileModelica},Absyn.dummyInfo);
383383
Error.assertionOrAddSourceMessage(System.regularFileExists(fileMetaModelica),Error.FILE_NOT_FOUND_ERROR,{fileMetaModelica},Absyn.dummyInfo);
384-
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
385-
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(fileMetaModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
384+
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
385+
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(fileMetaModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
386386
classes = listAppend(classes1,classes2);
387387
p = Absyn.PROGRAM(classes,Absyn.TOP());
388388
(p as Absyn.PROGRAM(classes=classes)) = MetaUtil.createMetaClassesInProgram(p);
@@ -395,8 +395,8 @@ algorithm
395395
true = intEq(Flags.getConfigEnum(Flags.GRAMMAR), Flags.PARMODELICA);
396396
Error.assertionOrAddSourceMessage(System.regularFileExists(fileModelica),Error.FILE_NOT_FOUND_ERROR,{fileModelica},Absyn.dummyInfo);
397397
Error.assertionOrAddSourceMessage(System.regularFileExists(fileParModelica),Error.FILE_NOT_FOUND_ERROR,{fileParModelica},Absyn.dummyInfo);
398-
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
399-
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(fileParModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
398+
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
399+
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(fileParModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
400400
classes = listAppend(classes1,classes2);
401401
p = Absyn.PROGRAM(classes,Absyn.TOP());
402402
sp = List.map(classes, SCodeUtil.translateClass);
@@ -407,7 +407,7 @@ algorithm
407407
equation
408408
true = intEq(Flags.getConfigEnum(Flags.GRAMMAR), Flags.MODELICA) or intEq(Flags.getConfigEnum(Flags.GRAMMAR), Flags.OPTIMICA);
409409
Error.assertionOrAddSourceMessage(System.regularFileExists(fileModelica),Error.FILE_NOT_FOUND_ERROR,{fileModelica},Absyn.dummyInfo);
410-
(p as Absyn.PROGRAM(classes=classes)) = Parser.parsebuiltin(fileModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
410+
(p as Absyn.PROGRAM(classes=classes)) = Parser.parsebuiltin(fileModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
411411
sp = List.map(classes, SCodeUtil.translateClass);
412412
assocLst = getGlobalRoot(Global.builtinIndex);
413413
setGlobalRoot(Global.builtinIndex, (Flags.MODELICA,(p,sp))::assocLst);
@@ -417,8 +417,8 @@ algorithm
417417
true = intEq(Flags.getConfigEnum(Flags.GRAMMAR), Flags.PDEMODELICA);
418418
Error.assertionOrAddSourceMessage(System.regularFileExists(fileModelica),Error.FILE_NOT_FOUND_ERROR,{fileModelica},Absyn.dummyInfo);
419419
Error.assertionOrAddSourceMessage(System.regularFileExists(filePDEModelica),Error.FILE_NOT_FOUND_ERROR,{filePDEModelica},Absyn.dummyInfo);
420-
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
421-
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(filePDEModelica,"UTF-8",acceptedGram=Flags.METAMODELICA);
420+
Absyn.PROGRAM(classes=classes1,within_=Absyn.TOP()) = Parser.parsebuiltin(fileModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
421+
Absyn.PROGRAM(classes=classes2,within_=Absyn.TOP()) = Parser.parsebuiltin(filePDEModelica,"UTF-8",NONE(),acceptedGram=Flags.METAMODELICA);
422422
classes = listAppend(classes1,classes2);
423423
p = Absyn.PROGRAM(classes,Absyn.TOP());
424424
sp = List.map(classes, SCodeUtil.translateClass);

Compiler/FrontEnd/ClassLoader.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ algorithm
711711
fail();
712712
end if; */
713713
then BaseHashTable.get(filename, strategy.ht);
714-
case STRATEGY_ON_DEMAND() then Parser.parse(filename, strategy.encoding);
714+
case STRATEGY_ON_DEMAND() then Parser.parse(filename, strategy.encoding,NONE());
715715
end match;
716716
end getProgramFromStrategy;
717717

Compiler/FrontEnd/Parser.mo

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ public
5757
function parse "Parse a mo-file"
5858
input String filename;
5959
input String encoding;
60+
input Option<Integer> serverContext;
6061
output Absyn.Program outProgram;
6162
algorithm
62-
outProgram := parsebuiltin(filename,encoding);
63+
outProgram := parsebuiltin(filename,encoding,serverContext);
6364
/* Check that the program is not totally off the charts */
6465
_ := SCodeUtil.translateAbsyn2SCode(outProgram);
6566
end parse;
@@ -84,6 +85,7 @@ end parsestring;
8485
function parsebuiltin "Like parse, but skips the SCode check to avoid infinite loops for ModelicaBuiltin.mo."
8586
input String filename;
8687
input String encoding;
88+
input Option<Integer> serverContext;
8789
input Integer acceptedGram=Config.acceptedGrammar();
8890
input Integer languageStandardInt=Flags.getConfigEnum(Flags.LANGUAGE_STANDARD);
8991
output Absyn.Program outProgram;
@@ -92,7 +94,7 @@ protected
9294
String realpath;
9395
algorithm
9496
realpath := Util.replaceWindowsBackSlashWithPathDelimiter(System.realpath(filename));
95-
outProgram := ParserExt.parse(realpath, Util.testsuiteFriendly(realpath), acceptedGram, encoding, languageStandardInt, Config.getRunningTestsuite());
97+
outProgram := ParserExt.parse(realpath, Util.testsuiteFriendly(realpath), acceptedGram, encoding, languageStandardInt, Config.getRunningTestsuite(), serverContext);
9698
end parsebuiltin;
9799

98100
function parsestringexp "Parse a string as if it was a sequence of statements"
@@ -171,8 +173,16 @@ function parallelParseFilesWork
171173
input Boolean encrypted = false;
172174
output list<ParserResult> partialResults;
173175
protected
174-
list<tuple<String,String>> workList = list((file,encoding) for file in filenames);
176+
list<tuple<String,String,Option<Integer>>> workList;
177+
Boolean success;
178+
Option<Integer> decryptionServer;
175179
algorithm
180+
if encrypted then
181+
(success, decryptionServer) := ParserExt.startDecryptionServer();
182+
workList := list((file,encoding,decryptionServer) for file in filenames);
183+
else
184+
workList := list((file,encoding,NONE()) for file in filenames);
185+
end if;
176186
if Config.getRunningTestsuite() or Config.noProc()==1 or numThreads == 1 or listLength(filenames)<2 or encrypted then
177187
partialResults := list(loadFileThread(t) for t in workList);
178188
else
@@ -183,14 +193,15 @@ algorithm
183193
end parallelParseFilesWork;
184194

185195
function loadFileThread
186-
input tuple<String,String> inFileEncoding;
196+
input tuple<String,String,Option<Integer>> inFileEncoding;
187197
output ParserResult result;
188198
algorithm
189199
result := matchcontinue inFileEncoding
190200
local
191201
String filename,encoding;
192-
case (filename,encoding) then PARSERRESULT(filename,SOME(Parser.parse(filename, encoding)));
193-
case (filename,_) then PARSERRESULT(filename,NONE());
202+
Option<Integer> decryptionServer;
203+
case (filename,encoding,decryptionServer) then PARSERRESULT(filename,SOME(Parser.parse(filename, encoding, decryptionServer)));
204+
case (filename,_,_) then PARSERRESULT(filename,NONE());
194205
end matchcontinue;
195206
if ErrorExt.getNumMessages() > 0 then
196207
ErrorExt.moveMessagesToParentThread();

Compiler/FrontEnd/ParserExt.mo

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ public function parse "Parse a mo-file"
4949
input String encoding;
5050
input Integer languageStandardInt;
5151
input Boolean runningTestsuite;
52+
input Option<Integer> serverContext;
5253
output Absyn.Program outProgram;
5354

54-
external "C" outProgram=ParserExt_parse(filename, infoFilename, acceptedGram, languageStandardInt, encoding, runningTestsuite) annotation(Library = {"omparse","omantlr3","omcruntime"});
55+
external "C" outProgram=ParserExt_parse(filename, infoFilename, acceptedGram, languageStandardInt, encoding, runningTestsuite, serverContext) annotation(Library = {"omparse","omantlr3","omcruntime"});
5556
end parse;
5657

5758
public function parseexp "Parse a mos-file"
@@ -105,5 +106,12 @@ public function stringCref
105106
external "C" cref=ParserExt_stringCref(str, infoFilename, acceptedGram, languageStandardInt, runningTestsuite) annotation(Library = {"omparse","omantlr3","omcruntime"});
106107
end stringCref;
107108

109+
public function startDecryptionServer "Starts the decryption server executable"
110+
output Boolean success;
111+
output Option<Integer> outDecryptionServer "Stores a pointer. If it is declared as Integer, it is truncated to 32-bit.";
112+
113+
external "C" success=ParserExt_startDecryptionServer(outDecryptionServer) annotation(Library = {"omparse","omantlr3","omcruntime"});
114+
end startDecryptionServer;
115+
108116
annotation(__OpenModelica_Interface="frontend");
109117
end ParserExt;

Compiler/Main/Main.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ algorithm
349349
// A .mo-file.
350350
case true
351351
equation
352-
pnew = Parser.parse(inLib, "UTF-8");
352+
pnew = Parser.parse(inLib, "UTF-8", NONE());
353353
p = SymbolTable.getAbsyn();
354354
pnew = Interactive.mergeProgram(pnew, p);
355355
SymbolTable.setAbsyn(pnew);

Compiler/Script/CevalScript.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ algorithm
319319
(outProgram,true) := loadModel((Absyn.IDENT(cname),{prio},true)::{}, mp, p, true, true, checkUses, true, filename == "package.moc");
320320
return;
321321
end if;
322-
outProgram := Parser.parse(name,encoding);
322+
outProgram := Parser.parse(name,encoding,NONE());
323323
ClassLoader.checkOnLoadMessage(outProgram);
324324
outProgram := checkUsesAndUpdateProgram(outProgram, p, checkUses, Settings.getModelicaPath(Config.getRunningTestsuite()));
325325
end loadFile;
@@ -3011,7 +3011,7 @@ protected function reloadClass
30113011
protected
30123012
Absyn.Program p,newp;
30133013
algorithm
3014-
newp := Parser.parse(filename,encoding); /* Don't use the classloader since that can pull in entire directory structures. We only want to reload one single file. */
3014+
newp := Parser.parse(filename,encoding,NONE()); /* Don't use the classloader since that can pull in entire directory structures. We only want to reload one single file. */
30153015
newp := Interactive.updateProgram(newp, SymbolTable.getAbsyn());
30163016
SymbolTable.setAbsyn(newp);
30173017
end reloadClass;

Compiler/Script/Interactive.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17247,7 +17247,7 @@ algorithm
1724717247
topClassNamesQualified := {};
1724817248
return;
1724917249
end if;
17250-
parsed := Parser.parse(fileName,encoding);
17250+
parsed := Parser.parse(fileName,encoding,NONE());
1725117251
parsed := MetaUtil.createMetaClassesInProgram(parsed);
1725217252
topClassNamesQualified := getTopQualifiedClassnames(parsed);
1725317253
if updateProgram then

Parser/Parser_omc.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@
3636
#include "meta_modelica.h"
3737
#include "parse.c"
3838

39-
void* ParserExt_parse(const char* filename, const char* infoname, int acceptedGrammar, int langStd, const char* encoding, int runningTestsuite)
39+
void* ParserExt_parse(const char* filename, const char* infoname, int acceptedGrammar, int langStd, const char* encoding, int runningTestsuite, void* serverContext)
4040
{
4141
int flags = PARSE_MODELICA;
4242
if(acceptedGrammar == 2) flags |= PARSE_META_MODELICA;
4343
else if(acceptedGrammar == 3) flags |= PARSE_PARMODELICA;
4444
else if(acceptedGrammar == 4) flags |= PARSE_OPTIMICA;
4545
else if(acceptedGrammar == 5) flags |= PARSE_PDEMODELICA;
4646

47-
void *res = parseFile(filename, infoname, flags, encoding, langStd, runningTestsuite);
47+
void *res = parseFile(filename, infoname, flags, encoding, langStd, runningTestsuite, serverContext);
4848
if (res == NULL)
4949
MMC_THROW();
5050
// printAny(res);
@@ -59,7 +59,7 @@ void* ParserExt_parseexp(const char* filename, const char* infoname, int accepte
5959
else if(acceptedGrammar == 4) flags |= PARSE_OPTIMICA;
6060
else if(acceptedGrammar == 5) flags |= PARSE_PDEMODELICA;
6161

62-
void *res = parseFile(filename, infoname, flags, "UTF-8", langStd, runningTestsuite);
62+
void *res = parseFile(filename, infoname, flags, "UTF-8", langStd, runningTestsuite, 0);
6363
if (res == NULL)
6464
MMC_THROW();
6565
return res;
@@ -128,3 +128,8 @@ void* ParserExt_stringCref(const char* data, const char* filename, int acceptedG
128128
MMC_THROW();
129129
}
130130
}
131+
132+
int ParserExt_startDecryptionServer(void** decryptionServer)
133+
{
134+
return startDecryptionServer(decryptionServer);
135+
}

Parser/parse.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ static void* parseString(const char* data, const char* interactiveFilename, int
396396
#include "../../OMEncryption/Parser/parseEncryption.c"
397397
#endif
398398

399-
static void* parseFile(const char* fileName, const char* infoName, int flags, const char *encoding, int langStd, int runningTestsuite)
399+
static void* parseFile(const char* fileName, const char* infoName, int flags, const char *encoding, int langStd, int runningTestsuite, void *decryptionServer)
400400
{
401401
bool debug = false; //check_debug_flag("parsedebug");
402402

@@ -422,7 +422,7 @@ static void* parseFile(const char* fileName, const char* infoName, int flags, co
422422

423423
#ifdef OMENCRYPTION
424424
if (len > 3 && 0==strcmp(fileName+len-4,".moc")) {
425-
return parseEncryptedFile(fileName, members.filename_C, langStd, runningTestsuite);
425+
return parseEncryptedFile(fileName, members.filename_C, langStd, runningTestsuite, decryptionServer);
426426
}
427427
#else
428428
if (len > 3 && 0==strcmp(fileName+len-4,".moc")) {
@@ -453,3 +453,13 @@ static void* parseFile(const char* fileName, const char* infoName, int flags, co
453453
}
454454
return parseStream(input, langStd, runningTestsuite);
455455
}
456+
457+
int startDecryptionServer(void** decryptionServer)
458+
{
459+
*decryptionServer = mmc_mk_some(0);
460+
#ifdef OMENCRYPTION
461+
return startDecryptionServerImpl(decryptionServer);
462+
#else
463+
return 0;
464+
#endif
465+
}

0 commit comments

Comments
 (0)