Skip to content

Commit

Permalink
- Implemented isNone/isSome in the bootstrapped compiler.
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@22273 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
perost committed Sep 11, 2014
1 parent 0d3b421 commit eb2b3eb
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 1 deletion.
6 changes: 6 additions & 0 deletions Compiler/FrontEnd/MetaModelicaBuiltin.mo
Expand Up @@ -834,6 +834,12 @@ function isNone<A> "Returns true if the input is NONE()"
external "builtin";
end isNone;

function isSome<A> "Returns true if the input is SOME()"
input Option<A> opt;
output Boolean some;
external "builtin";
end isSome;

type NONE end NONE;
type SOME end SOME;

Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/meta/meta_modelica.h
Expand Up @@ -179,6 +179,7 @@ typedef int mmc_switch_type;
#define MMC_ARRAY_TAG 255
#define MMC_STRLEN(x) (MMC_HDRSTRLEN(MMC_GETHDR(x)))
#define MMC_OPTIONNONE(x) (0==MMC_HDRSLOTS(MMC_GETHDR(x)) ? 1 : 0)
#define MMC_OPTIONSOME(x) (0==MMC_HDRSLOTS(MMC_GETHDR(x)) ? 0 : 1)

/*
* adrpo: if a structure has pointers
Expand Down
3 changes: 3 additions & 0 deletions SimulationRuntime/c/meta/meta_modelica_builtin.h
Expand Up @@ -100,6 +100,9 @@ extern modelica_integer listLength(modelica_metatype);
#define listRest(X) MMC_CDR(X)
#define listFirst(X) MMC_CAR(X)

#define isNone(X) MMC_OPTIONNONE(X)
#define isSome(X) MMC_OPTIONSOME(X)

extern modelica_metatype boxptr_listNth(threadData_t*,modelica_metatype,modelica_metatype);
extern modelica_metatype boxptr_listGet(threadData_t*,modelica_metatype,modelica_metatype);
extern modelica_metatype boxptr_listDelete(threadData_t*,modelica_metatype,modelica_metatype);
Expand Down
5 changes: 4 additions & 1 deletion SimulationRuntime/c/meta/meta_modelica_builtin_boxptr.h
Expand Up @@ -78,6 +78,9 @@ boxptr_binOp(boxptr_intGt,mmc_mk_bcon,mmc_unbox_integer,>)
boxptr_unOp(boxptr_intReal,mmc_mk_rcon,mmc_unbox_integer,(modelica_real))
boxptr_unOp(boxptr_intString,(void*),mmc_unbox_integer,intString)

boxptr_unOp(boxptr_isNone,mmc_mk_bcon,(void*),MMC_OPTIONNONE)
boxptr_unOp(boxptr_isSome,mmc_mk_bcon,(void*),MMC_OPTIONSOME)

boxptr_binOp(boxptr_realAdd,mmc_mk_rcon,mmc_unbox_real,+)
boxptr_binOp(boxptr_realSub,mmc_mk_rcon,mmc_unbox_real,-)
boxptr_binOp(boxptr_realMul,mmc_mk_rcon,mmc_unbox_real,*)
Expand Down Expand Up @@ -120,7 +123,7 @@ boxptr_wrapper1Arg(boxptr_listReverse,listReverse)
boxptr_wrapper1Arg(boxptr_listReverseInPlace,listReverseInPlace)
boxptr_wrapper2Args(boxptr_listAppend,listAppend)
boxptr_binFn(boxptr_listMember,mmc_mk_bcon,(void*),listMember)
boxptr_wrapper1Arg(boxptr_listEmpty,MMC_NILTEST)
boxptr_unOp(boxptr_listEmpty,mmc_mk_bcon,(void*),MMC_NILTEST)
boxptr_fn2ArgsThreadData(boxptr_arrayGet,(void*),(void*),mmc_unbox_integer,nobox_arrayGet)
boxptr_wrapper1Arg(boxptr_arrayList,arrayList)
boxptr_wrapper1Arg(boxptr_listArray,listArray)
Expand Down
4 changes: 4 additions & 0 deletions SimulationRuntime/c/meta/meta_modelica_builtin_boxvar.h
Expand Up @@ -61,6 +61,10 @@ static const MMC_DEFSTRUCTLIT(boxvar_lit_intStringChar,2,0) {(modelica_metatype)
#define boxvar_intStringChar MMC_REFSTRUCTLIT(boxvar_lit_intStringChar)
static const MMC_DEFSTRUCTLIT(boxvar_lit_intSub,2,0) {(modelica_metatype)boxptr_intSub,0}};
#define boxvar_intSub MMC_REFSTRUCTLIT(boxvar_lit_intSub)
static const MMC_DEFSTRUCTLIT(boxvar_lit_isNone,2,0) {(modelica_metatype)boxptr_isNone,0}};
#define boxvar_isNone MMC_REFSTRUCTLIT(boxvar_lit_isNone)
static const MMC_DEFSTRUCTLIT(boxvar_lit_isSome,2,0) {(modelica_metatype)boxptr_isSome,0}};
#define boxvar_isSome MMC_REFSTRUCTLIT(boxvar_lit_isSome)
static const MMC_DEFSTRUCTLIT(boxvar_lit_listAppend,2,0) {(modelica_metatype)boxptr_listAppend,0}};
#define boxvar_listAppend MMC_REFSTRUCTLIT(boxvar_lit_listAppend)
static const MMC_DEFSTRUCTLIT(boxvar_lit_listArray,2,0) {(modelica_metatype)boxptr_listArray,0}};
Expand Down
2 changes: 2 additions & 0 deletions SimulationRuntime/c/meta/meta_modelica_gen_boxvar.py
Expand Up @@ -32,6 +32,8 @@
'intString',
'intStringChar',
'intSub',
'isNone',
'isSome',
'listAppend',
'listArray',
'listDelete',
Expand Down

0 comments on commit eb2b3eb

Please sign in to comment.