Skip to content

Commit

Permalink
- Check Absyn->SCode before accepting a string or file as valid abstr…
Browse files Browse the repository at this point in the history
…act syntax

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@11724 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Apr 11, 2012
1 parent 5e1236c commit 4529c6e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Compiler/FrontEnd/Builtin.mo
Expand Up @@ -618,7 +618,7 @@ algorithm
fileMetaModelica = Settings.getInstallationDirectoryPath() +& "/lib/omc/MetaModelicaBuiltin.mo";
initialFunctionStr = System.readFile(fileModelica);
initialFunctionStrMM = Debug.bcallret1(b, System.readFile, fileMetaModelica, "");
initialProgram = Parser.parsestring(initialFunctionStr +& initialFunctionStrMM, fileModelica);
initialProgram = Parser.parsebuiltinstring(initialFunctionStr +& initialFunctionStrMM, fileModelica);
assocLst = getGlobalRoot(Global.builtinIndex);
setGlobalRoot(Global.builtinIndex, (b,initialProgram)::assocLst);
then initialProgram;
Expand Down
18 changes: 16 additions & 2 deletions Compiler/FrontEnd/Parser.mo
Expand Up @@ -43,13 +43,16 @@ public import Absyn;
public import Interactive;
protected import Config;
protected import ParserExt;
protected import SCodeUtil;

public function parse "Parse a mo-file"
input String filename;
input String encoding;
output Absyn.Program outProgram;
algorithm
outProgram := ParserExt.parse(filename, Config.acceptedGrammar(), encoding, Config.getRunningTestsuite());
/* Check that the program is not totally off the charts */
_ := SCodeUtil.translateAbsyn2SCode(outProgram);
end parse;

public function parseexp "Parse a mos-file"
Expand All @@ -63,12 +66,23 @@ end parseexp;
public function parsestring "Parse a string as if it were a stored definition"
input String str;
input String infoFilename := "<interactive>";
input Boolean skipScodeCheck "Would cause ModelicaBuiltin.mo to run into an infinite loop";
output Absyn.Program outProgram;
algorithm
outProgram := ParserExt.parsestring(str,infoFilename,
Config.acceptedGrammar(), Config.getRunningTestsuite());
outProgram := parsebuiltinstring(str,infoFilename);
/* Check that the program is not totally off the charts */
_ := SCodeUtil.translateAbsyn2SCode(outProgram);
end parsestring;

public function parsebuiltinstring "Parse a string as if it were a stored definition. Skips the SCode check to avoid infinite loops for ModelicaBuiltin.mo."
input String str;
input String infoFilename := "<interactive>";
output Absyn.Program outProgram;
annotation(__OpenModelica_EarlyInline = true);
algorithm
outProgram := ParserExt.parsestring(str,infoFilename, Config.acceptedGrammar(), Config.getRunningTestsuite());
end parsebuiltinstring;

public function parsestringexp "Parse a string as if it was a sequence of statements"
input String str;
input String infoFilename := "<interactive>";
Expand Down

0 comments on commit 4529c6e

Please sign in to comment.