Skip to content

Commit

Permalink
- Translate Absyn.ExternalDecl into SCode.ExternalDecl in translateAb…
Browse files Browse the repository at this point in the history
…syn2SCode

  (because Absyn.Annotations are annoying).


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@9125 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
perost committed May 26, 2011
1 parent 3e1463f commit db180d4
Show file tree
Hide file tree
Showing 16 changed files with 203 additions and 146 deletions.
125 changes: 62 additions & 63 deletions Compiler/BackEnd/SimCode.mo
Expand Up @@ -52,62 +52,63 @@ encapsulated package SimCode
"

// public imports
public import Absyn;
public import Algorithm;
public import BackendDAE;
public import BackendDAEUtil;
public import Values;
public import Types;
public import Env;
public import Ceval;
public import DAE;
public import Dependency;
public import Interactive;
public import Env;
public import HashTableExpToIndex;
public import HashTableStringToPath;
public import Absyn;
public import Ceval;
public import Tpl;
public import SCode;
public import DAE;
public import Inline;
public import Interactive;
public import SCode;
public import Tpl;
public import Types;
public import Values;

// protected imports
protected import BackendQSS;
protected import BackendDump;
protected import BackendDAECreate;
protected import BackendDAEOptimize;
protected import BackendDAETransform;
protected import BackendDump;
protected import BackendEquation;
protected import BackendQSS;
protected import BackendVariable;
protected import BackendVarTransform;
protected import BaseHashTable;
protected import Builtin;
protected import CevalScript;
protected import ClassInf;
protected import ComponentReference;
protected import DAEDump;
protected import DAEUtil;
protected import Debug;
protected import Error;
protected import Expression;
protected import ExpressionDump;
protected import ExpressionSolve;
protected import ExpressionSimplify;
protected import ExpressionSolve;
protected import InnerOuter;
protected import Inst;
protected import Mod;
protected import ModUtil;
protected import PartFn;
protected import RTOpts;
protected import SCodeUtil;
protected import Settings;
protected import SimCodeC;
protected import SimCodeCSharp;
protected import SimCodeCpp;
protected import SimCodeCSharp;
protected import SimCodeDump;
protected import SimCodeFMU;
protected import SimCodeQSS;
protected import Util;
protected import Debug;
protected import Error;
protected import Inst;
protected import InnerOuter;
protected import Settings;
protected import RTOpts;
protected import System;
protected import VarTransform;
protected import CevalScript;
protected import ModUtil;
protected import DAEDump;
protected import PartFn;
protected import Util;
protected import ValuesUtil;
protected import VarTransform;


public
Expand Down Expand Up @@ -1642,7 +1643,7 @@ algorithm
list<SimExtArg> simextargs;
SimExtArg extReturn;
DAE.ExtArg extretarg;
Option<Absyn.Annotation> ann;
Option<SCode.Annotation> ann;
DAE.ExternalDecl extdecl;
list<Variable> outVars, inVars, biVars, funArgs, varDecls;
list<RecordDeclaration> recordDecls;
Expand Down Expand Up @@ -8872,21 +8873,22 @@ protected function generateExtFunctionIncludes
Collects the includes and libs for an external function
by investigating the annotation of an external function."
input Absyn.Path path;
input Option<Absyn.Annotation> inAbsynAnnotationOption;
input Option<SCode.Annotation> inAbsynAnnotationOption;
output list<String> includes;
output list<String> includeDirs;
output list<String> libs;
algorithm
(includes,includeDirs,libs):=
match (path,inAbsynAnnotationOption)
local
list<Absyn.ElementArg> eltarg;
case (path,SOME(Absyn.ANNOTATION(eltarg)))
SCode.Mod mod;

case (path,SOME(SCode.ANNOTATION(mod)))
equation
libs = generateExtFunctionIncludesLibstr(eltarg);
includes = generateExtFunctionIncludesIncludestr(eltarg);
libs = generateExtFunctionLibraryDirectoryFlags(path,eltarg,libs);
includeDirs = generateExtFunctionIncludeDirectoryFlags(path,eltarg,includes);
libs = generateExtFunctionIncludesLibstr(mod);
includes = generateExtFunctionIncludesIncludestr(mod);
libs = generateExtFunctionLibraryDirectoryFlags(path,mod,libs);
includeDirs = generateExtFunctionIncludeDirectoryFlags(path,mod,includes);
then
(includes,includeDirs,libs);
case (_,NONE()) then ({},{},{});
Expand All @@ -8896,18 +8898,18 @@ end generateExtFunctionIncludes;
protected function generateExtFunctionIncludeDirectoryFlags
"Process LibraryDirectory and IncludeDirectory"
input Absyn.Path path;
input list<Absyn.ElementArg> eltarg;
input SCode.Mod inMod;
input list<String> includes;
output list<String> outDirs;
algorithm
outDirs := matchcontinue (path,eltarg,includes)
outDirs := matchcontinue (path,inMod,includes)
local
String str;
case (_,eltarg,{}) then {};
case (_,eltarg,_)
case (_,_,{}) then {};
case (_,_,_)
equation
Absyn.CLASSMOD(eqMod=Absyn.EQMOD(exp=Absyn.STRING(str))) =
Interactive.getModificationValue(eltarg, Absyn.CREF_IDENT("IncludeDirectory",{}));
SCode.MOD(binding = SOME((Absyn.STRING(str), _))) =
Mod.getUnelabedSubMod(inMod, "IncludeDirectory");
str = CevalScript.getFullPathFromUri(str,false);
str = "\"-I"+&str+&"\"";
then {str};
Expand All @@ -8925,18 +8927,18 @@ end generateExtFunctionIncludeDirectoryFlags;
protected function generateExtFunctionLibraryDirectoryFlags
"Process LibraryDirectory and IncludeDirectory"
input Absyn.Path path;
input list<Absyn.ElementArg> eltarg;
input SCode.Mod inMod;
input list<String> libs;
output list<String> outLibs;
algorithm
outLibs := matchcontinue (path,eltarg,libs)
outLibs := matchcontinue (path,inMod,libs)
local
String str,str1,str2,str3,platform1,platform2;
case (_,eltarg,{}) then {};
case (_,eltarg,libs)
case (_,_,{}) then {};
case (_,_,libs)
equation
Absyn.CLASSMOD(eqMod=Absyn.EQMOD(exp=Absyn.STRING(str))) =
Interactive.getModificationValue(eltarg, Absyn.CREF_IDENT("LibraryDirectory",{}));
SCode.MOD(binding = SOME((Absyn.STRING(str), _))) =
Mod.getUnelabedSubMod(inMod, "LibraryDirectory");
str = CevalScript.getFullPathFromUri(str,false);
platform1 = System.openModelicaPlatform();
platform2 = System.modelicaPlatform();
Expand Down Expand Up @@ -9029,51 +9031,48 @@ algorithm
end getLibraryStringInGccFormat;

protected function generateExtFunctionIncludesLibstr
input list<Absyn.ElementArg> inAbsynElementArgLst;
input SCode.Mod inMod;
output list<String> outStringLst;
algorithm
outStringLst:=
matchcontinue (inAbsynElementArgLst)
outStringLst:= matchcontinue (inMod)
local
list<Absyn.ElementArg> eltarg;
list<Absyn.Exp> arr;
list<String> libs;
list<list<String>> libsList;
Absyn.Exp exp;
case (eltarg)
case (_)
equation
Absyn.CLASSMOD(eqMod=Absyn.EQMOD(exp=Absyn.ARRAY(arr))) =
Interactive.getModificationValue(eltarg, Absyn.CREF_IDENT("Library",{}));
SCode.MOD(binding = SOME((Absyn.ARRAY(arr), _))) =
Mod.getUnelabedSubMod(inMod, "Library");
libsList = Util.listMap(arr, getLibraryStringInGccFormat);
then
Util.listFlatten(libsList);
case (eltarg)
case (_)
equation
Absyn.CLASSMOD(eqMod=Absyn.EQMOD(exp=exp)) =
Interactive.getModificationValue(eltarg, Absyn.CREF_IDENT("Library",{}));
SCode.MOD(binding = SOME((exp, _))) =
Mod.getUnelabedSubMod(inMod, "Library");
libs = getLibraryStringInGccFormat(exp);
then
libs;
case (_) then {};
else {};
end matchcontinue;
end generateExtFunctionIncludesLibstr;

protected function generateExtFunctionIncludesIncludestr
input list<Absyn.ElementArg> inAbsynElementArgLst;
input SCode.Mod inMod;
output list<String> outStringLst;
algorithm
outStringLst:=
matchcontinue (inAbsynElementArgLst)
outStringLst:= matchcontinue (inMod)
local
String inc,inc_1;
list<Absyn.ElementArg> eltarg;
case (eltarg)
case (_)
equation
Absyn.CLASSMOD(eqMod=Absyn.EQMOD(exp=Absyn.STRING(inc))) = Interactive.getModificationValue(eltarg, Absyn.CREF_IDENT("Include",{}));
SCode.MOD(binding = SOME((Absyn.STRING(inc), _))) =
Mod.getUnelabedSubMod(inMod, "Include");
inc_1 = System.stringReplace(inc, "\\\"", "\"");
then
{inc_1};
case (eltarg) then {};
else {};
end matchcontinue;
end generateExtFunctionIncludesIncludestr;

Expand Down
4 changes: 2 additions & 2 deletions Compiler/FrontEnd/Ceval.mo
Expand Up @@ -1386,14 +1386,14 @@ protected
SCode.Element cdef;
list<Env.Frame> env_1;
String fid,id;
Option<Absyn.ExternalDecl> extdecl;
Option<SCode.ExternalDecl> extdecl;
Option<String> lan;
Option<Absyn.ComponentRef> out;
list<Absyn.Exp> args;
algorithm
(outCache,cdef,env_1) := Lookup.lookupClass(inCache,env, funcpath, false);
SCode.CLASS(name=fid,restriction = SCode.R_EXT_FUNCTION(), classDef=SCode.PARTS(externalDecl=extdecl)) := cdef;
SOME(Absyn.EXTERNALDECL(SOME(id),lan,out,args,_)) := extdecl;
SOME(SCode.EXTERNALDECL(SOME(id),lan,out,args,_)) := extdecl;
isKnownExternalFunc(fid, id);
res := cevalKnownExternalFuncs2(fid, id, vals, msg);
end cevalKnownExternalFuncs;
Expand Down
2 changes: 1 addition & 1 deletion Compiler/FrontEnd/DAE.mo
Expand Up @@ -440,7 +440,7 @@ public uniontype ExternalDecl
list<ExtArg> args;
ExtArg returnArg;
String language;
Option<Absyn.Annotation> ann;
Option<SCode.Annotation> ann;
end EXTERNALDECL;
end ExternalDecl;

Expand Down

0 comments on commit db180d4

Please sign in to comment.