Skip to content

Commit

Permalink
- passing error-handle round all runtime function to remove it from …
Browse files Browse the repository at this point in the history
…global scope

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19152 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Feb 18, 2014
1 parent 4ba8302 commit 412b266
Show file tree
Hide file tree
Showing 47 changed files with 479 additions and 445 deletions.
92 changes: 51 additions & 41 deletions Compiler/Template/CodegenC.tpl

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Compiler/runtime/ModelicaExternalC_rml.c
Expand Up @@ -32,7 +32,7 @@
#include "memory_pool.h"
#include "meta_modelica.h"

void (*omc_assert)(FILE_INFO info,const char *msg,...) = omc_assert_function;
void (*omc_assert)(ERROR_HANDLE* omcErrorHandle, FILE_INFO info,const char *msg,...) = omc_assert_function;
void (*omc_terminate)(FILE_INFO info,const char *msg,...) = omc_terminate_function;
void (*omc_throw)() = omc_throw_function;

Expand Down
10 changes: 5 additions & 5 deletions SimulationRuntime/c/meta/meta_modelica.c
Expand Up @@ -397,14 +397,14 @@ void* mmc_anyString(void* any)
return mmc_mk_scon(anyStringBuf);
}

modelica_metatype mmc_gdb_listGet(threadData_t* threadData, modelica_metatype lst, modelica_integer i)
modelica_metatype mmc_gdb_listGet(ERROR_HANDLE* omcErrorHandle,threadData_t* threadData, modelica_metatype lst, modelica_integer i)
{
return boxptr_listGet(threadData, lst, mmc_mk_icon(i));
return boxptr_listGet(omcErrorHandle,threadData, lst, mmc_mk_icon(i));
}

modelica_metatype mmc_gdb_arrayGet(threadData_t* threadData, modelica_metatype arr, modelica_integer i)
modelica_metatype mmc_gdb_arrayGet(ERROR_HANDLE* omcErrorHandle,threadData_t* threadData, modelica_metatype arr, modelica_integer i)
{
return boxptr_arrayGet(threadData, arr, mmc_mk_icon(i));
return boxptr_arrayGet(omcErrorHandle,threadData, arr, mmc_mk_icon(i));
}

void printAny(void* any)
Expand Down Expand Up @@ -846,7 +846,7 @@ modelica_integer valueHashMod(void *p, modelica_integer mod)
return res;
}

void* boxptr_valueHashMod(threadData_t *threadData,void *p, void *mod)
void* boxptr_valueHashMod(ERROR_HANDLE* omcErrorHandle,threadData_t *threadData,void *p, void *mod)
{
return mmc_mk_icon(mmc_prim_hash(p,5381) % (unsigned long) mmc_unbox_integer(mod));
}
Expand Down
10 changes: 5 additions & 5 deletions SimulationRuntime/c/meta/meta_modelica.h
Expand Up @@ -524,7 +524,7 @@ extern void *mmc_mk_box_no_assign(int slots, unsigned int ctor);
extern modelica_boolean valueEq(modelica_metatype lhs,modelica_metatype rhs);

extern modelica_integer valueHashMod(modelica_metatype p,modelica_integer mod);
extern void* boxptr_valueHashMod(threadData_t *,void *p, void *mod);
extern void* boxptr_valueHashMod(ERROR_HANDLE*,threadData_t *,void *p, void *mod);

extern void mmc__unbox(modelica_metatype box, void* res);

Expand All @@ -534,8 +534,8 @@ extern void debug__print(void*prefix,void*any); /* For debugging */
extern void initializeStringBuffer(void);
extern char* anyString(void*any); /* For debugging in external functions */
extern void* mmc_anyString(void*any); /* For debugging */
modelica_metatype mmc_gdb_listGet(threadData_t* threadData, modelica_metatype lst, modelica_integer i); /* For debugging */
modelica_metatype mmc_gdb_arrayGet(threadData_t* threadData, modelica_metatype arr, modelica_integer i); /* For debugging */
modelica_metatype mmc_gdb_listGet(ERROR_HANDLE*,threadData_t* threadData, modelica_metatype lst, modelica_integer i); /* For debugging */
modelica_metatype mmc_gdb_arrayGet(ERROR_HANDLE*,threadData_t* threadData, modelica_metatype arr, modelica_integer i); /* For debugging */
extern void printAny(void*any); /* For debugging */
extern void printTypeOfAny(void*any); /* For debugging */
extern char* getTypeOfAny(void*any); /* For debugging */
Expand Down Expand Up @@ -576,7 +576,7 @@ extern void mmc_init();
extern void mmc_init_nogc();
#define MMC_INIT(X) pthread_once(&mmc_init_once,mmc_init)
#define MMC_TRY_INTERNAL(X) { jmp_buf new_mmc_jumper, *old_jumper = threadData->X; threadData->X = &new_mmc_jumper; if (setjmp(new_mmc_jumper) == 0) {
#define MMC_TRY() { threadData_t *threadData = pthread_getspecific(mmc_thread_data_key); MMC_TRY_INTERNAL(mmc_jumper)
#define MMC_TRY() {ERROR_HANDLE dummyHandle; ERROR_HANDLE *omcErrorHandle = &dummyHandle; threadData_t *threadData = pthread_getspecific(mmc_thread_data_key); MMC_TRY_INTERNAL(mmc_jumper)

#if !defined(_MSC_VER)
#define MMC_CATCH_INTERNAL(X) } threadData->X = old_jumper;mmc_catch_dummy_fn();}
Expand All @@ -589,7 +589,7 @@ extern void mmc_init_nogc();
#define MMC_THROW() {longjmp(*((threadData_t*)pthread_getspecific(mmc_thread_data_key))->mmc_jumper,1);}
#define MMC_ELSE() } else {

#define MMC_TRY_TOP() { threadData_t threadDataOnStack = {0}, *oldThreadData = (threadData_t*)pthread_getspecific(mmc_thread_data_key),*threadData = &threadDataOnStack; pthread_setspecific(mmc_thread_data_key,threadData); MMC_TRY_INTERNAL(mmc_jumper)
#define MMC_TRY_TOP() {ERROR_HANDLE dummyHandle; ERROR_HANDLE *omcErrorHandle = &dummyHandle; threadData_t threadDataOnStack = {0}, *oldThreadData = (threadData_t*)pthread_getspecific(mmc_thread_data_key),*threadData = &threadDataOnStack; pthread_setspecific(mmc_thread_data_key,threadData); MMC_TRY_INTERNAL(mmc_jumper)
#define MMC_CATCH_TOP(X) pthread_setspecific(mmc_thread_data_key,oldThreadData); } else {pthread_setspecific(mmc_thread_data_key,oldThreadData);X;}}}

#if defined(__cplusplus)
Expand Down
69 changes: 34 additions & 35 deletions SimulationRuntime/c/meta/meta_modelica_builtin.c
Expand Up @@ -63,14 +63,14 @@ metamodelica_string intString(modelica_integer i)
return res;
}

modelica_metatype boxptr_intMax(threadData_t *threadData,modelica_metatype a,modelica_metatype b)
modelica_metatype boxptr_intMax(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype a,modelica_metatype b)
{
/* We need to unbox because pointers may be unsigned */
return mmc_unbox_integer(a) > mmc_unbox_integer(b) ? a : b;
}


modelica_metatype boxptr_intMin(threadData_t *threadData,modelica_metatype a,modelica_metatype b)
modelica_metatype boxptr_intMin(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype a,modelica_metatype b)
{
/* We need to unbox because pointers may be unsigned */
return mmc_unbox_integer(a) < mmc_unbox_integer(b) ? a : b;
Expand All @@ -79,7 +79,7 @@ modelica_metatype boxptr_intMin(threadData_t *threadData,modelica_metatype a,mod

/* String Character Conversion */

modelica_metatype boxptr_stringCharInt(threadData_t *threadData,metamodelica_string chr)
modelica_metatype boxptr_stringCharInt(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string chr)
{
unsigned char c;
if (MMC_STRLEN(chr) != 1)
Expand All @@ -89,7 +89,7 @@ modelica_metatype boxptr_stringCharInt(threadData_t *threadData,metamodelica_str
return mmc_mk_icon(c);
}

metamodelica_string boxptr_intStringChar(threadData_t *threadData,modelica_metatype iix)
metamodelica_string boxptr_intStringChar(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype iix)
{
modelica_integer ix = MMC_UNTAGFIXNUM(iix);
char chr[2];
Expand All @@ -102,7 +102,7 @@ metamodelica_string boxptr_intStringChar(threadData_t *threadData,modelica_metat

/* String Operations */

modelica_metatype boxptr_stringInt(threadData_t *threadData,metamodelica_string s)
modelica_metatype boxptr_stringInt(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string s)
{
long res;
char *endptr,*str=MMC_STRINGDATA(s);
Expand All @@ -119,7 +119,7 @@ modelica_metatype boxptr_stringInt(threadData_t *threadData,metamodelica_string
return mmc_mk_icon(res);
}

modelica_metatype boxptr_stringReal(threadData_t *threadData,metamodelica_string s)
modelica_metatype boxptr_stringReal(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string s)
{
double res;
char *endptr,*str=MMC_STRINGDATA(s);
Expand All @@ -134,7 +134,7 @@ modelica_metatype boxptr_stringReal(threadData_t *threadData,metamodelica_string
return mmc_mk_rcon(res);
}

modelica_metatype boxptr_stringEq(threadData_t *threadData,modelica_metatype a, modelica_metatype b)
modelica_metatype boxptr_stringEq(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype a, modelica_metatype b)
{
return mmc_mk_bcon(stringEqual(a,b));
}
Expand Down Expand Up @@ -192,7 +192,7 @@ modelica_integer stringHashDjb2Mod(metamodelica_string_const s, modelica_integer
return res;
}

modelica_metatype boxptr_stringHashDjb2Mod(threadData_t *threadData,modelica_metatype v,modelica_metatype mod)
modelica_metatype boxptr_stringHashDjb2Mod(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype v,modelica_metatype mod)
{
return mmc_mk_icon(stringHashDjb2Mod(v,mmc_unbox_integer(mod)));
}
Expand All @@ -207,19 +207,19 @@ modelica_integer stringHashSdbm(metamodelica_string_const s)

/******************** BOXED String HASH Functions ********************/
/* adrpo: really bad hash :) */
modelica_metatype boxptr_stringHash(threadData_t *threadData,modelica_metatype str)
modelica_metatype boxptr_stringHash(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype str)
{
return mmc_mk_icon(stringHash(str));
}

/* adrpo: see the comment above about djb2 hash */
modelica_metatype boxptr_stringHashDjb2(threadData_t *threadData,modelica_metatype str)
modelica_metatype boxptr_stringHashDjb2(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype str)
{
return mmc_mk_icon(stringHashDjb2(str));
}

/* adrpo: see the comment above about sdbm hash */
modelica_metatype boxptr_stringHashSdbm(threadData_t *threadData,modelica_metatype str)
modelica_metatype boxptr_stringHashSdbm(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype str)
{
return mmc_mk_icon(stringHashSdbm(str));
}
Expand Down Expand Up @@ -288,7 +288,7 @@ metamodelica_string stringAppendList(modelica_metatype lst)
return p;
}

metamodelica_string boxptr_stringDelimitList(threadData_t *threadData,modelica_metatype lst, metamodelica_string_const delimiter)
metamodelica_string boxptr_stringDelimitList(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst, metamodelica_string_const delimiter)
{
/* fprintf(stderr, "stringDelimitList(%s)\n", anyString(lst)); */
modelica_integer lstLen = 0, len = 0, lenDelimiter = 0;
Expand Down Expand Up @@ -363,7 +363,7 @@ modelica_integer mmc_stringCompare(const void *str1, const void *str2)
return 0;
}

modelica_metatype boxptr_stringGetStringChar(threadData_t *threadData,metamodelica_string str, modelica_metatype iix)
modelica_metatype boxptr_stringGetStringChar(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string str, modelica_metatype iix)
{
int ix = MMC_UNTAGFIXNUM(iix);
char chr[2] = {'\0','\0'};
Expand All @@ -377,7 +377,7 @@ modelica_metatype boxptr_stringGetStringChar(threadData_t *threadData,metamodeli
return res;
}

modelica_metatype boxptr_stringUpdateStringChar(threadData_t *threadData,metamodelica_string str, metamodelica_string c, modelica_metatype iix)
modelica_metatype boxptr_stringUpdateStringChar(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string str, metamodelica_string c, modelica_metatype iix)
{
int ix = MMC_UNTAGFIXNUM(iix);
int length = 0;
Expand All @@ -404,7 +404,7 @@ modelica_metatype boxptr_stringUpdateStringChar(threadData_t *threadData,metamod
return res;
}

metamodelica_string_const boxptr_stringAppend(threadData_t *threadData,metamodelica_string_const s1, metamodelica_string_const s2)
metamodelica_string_const boxptr_stringAppend(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,metamodelica_string_const s1, metamodelica_string_const s2)
{
unsigned len1 = 0, len2 = 0, nbytes = 0, header = 0, nwords = 0;
void *res = NULL;
Expand Down Expand Up @@ -434,8 +434,7 @@ metamodelica_string_const boxptr_stringAppend(threadData_t *threadData,metamodel

modelica_metatype boxptr_listReverse(threadData_t *threadData,modelica_metatype lst)
{
modelica_metatype res = NULL;

modelica_metatype res = NULL;
res = mmc_mk_nil();
while (!MMC_NILTEST(lst))
{
Expand All @@ -445,7 +444,7 @@ modelica_metatype boxptr_listReverse(threadData_t *threadData,modelica_metatype
return res;
}

modelica_metatype boxptr_listAppend(threadData_t *threadData,modelica_metatype lst1,modelica_metatype lst2)
modelica_metatype boxptr_listAppend(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst1,modelica_metatype lst2)
{
int length = 0, i = 0;
struct mmc_cons_struct *res = NULL;
Expand Down Expand Up @@ -482,7 +481,7 @@ modelica_integer listLength(modelica_metatype lst)
return res;
}

modelica_metatype boxptr_listMember(threadData_t *threadData,modelica_metatype obj, modelica_metatype lst)
modelica_metatype boxptr_listMember(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype obj, modelica_metatype lst)
{
while (!MMC_NILTEST(lst))
{
Expand All @@ -494,7 +493,7 @@ modelica_metatype boxptr_listMember(threadData_t *threadData,modelica_metatype o
return mmc_mk_icon(0);
}

modelica_metatype boxptr_listGet(threadData_t *threadData,modelica_metatype lst, modelica_metatype ii)
modelica_metatype boxptr_listGet(ERROR_HANDLE* omcErrorHandle,threadData_t *threadData,modelica_metatype lst, modelica_metatype ii)
{
int i = mmc_unbox_integer(ii);
if (i < 1)
Expand All @@ -510,12 +509,12 @@ modelica_metatype boxptr_listGet(threadData_t *threadData,modelica_metatype lst,
MMC_THROW_INTERNAL(); /* List was not long enough */
}

modelica_metatype boxptr_listNth(threadData_t *threadData,modelica_metatype lst, modelica_metatype i)
modelica_metatype boxptr_listNth(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst, modelica_metatype i)
{
return listGet(lst,mmc_unbox_integer(i)+1);
}

modelica_metatype boxptr_listDelete(threadData_t *threadData,modelica_metatype lst, modelica_metatype iix)
modelica_metatype boxptr_listDelete(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst, modelica_metatype iix)
{
int ix = mmc_unbox_integer(iix);
modelica_metatype *tmpArr = NULL;
Expand Down Expand Up @@ -565,7 +564,7 @@ modelica_integer arrayLength(modelica_metatype arr)
return MMC_HDRSLOTS(MMC_GETHDR(arr));
}

modelica_metatype boxptr_arrayGet(threadData_t *threadData,modelica_metatype arr, modelica_metatype i)
modelica_metatype boxptr_arrayGet(ERROR_HANDLE* omcErrorHandle,threadData_t *threadData,modelica_metatype arr, modelica_metatype i)
{
int ix = mmc_unbox_integer(i);
if (ix < 1)
Expand All @@ -585,7 +584,7 @@ modelica_metatype arrayCreate(modelica_integer nelts, modelica_metatype val)
return arr;
}

modelica_metatype boxptr_arrayList(threadData_t *threadData,modelica_metatype arr)
modelica_metatype boxptr_arrayList(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype arr)
{
int nelts = MMC_HDRSLOTS(MMC_GETHDR(arr))-1;
void **vecp = MMC_STRUCTDATA(arr);
Expand All @@ -596,7 +595,7 @@ modelica_metatype boxptr_arrayList(threadData_t *threadData,modelica_metatype ar
return res;
}

modelica_metatype boxptr_listArray(threadData_t *threadData,modelica_metatype lst)
modelica_metatype boxptr_listArray(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst)
{
int nelts = listLength(lst);
void* arr = (struct mmc_struct*)mmc_mk_box_no_assign(nelts, MMC_ARRAY_TAG);
Expand All @@ -609,7 +608,7 @@ modelica_metatype boxptr_listArray(threadData_t *threadData,modelica_metatype ls
return arr;
}

modelica_metatype boxptr_arrayUpdate(threadData_t *threadData,modelica_metatype arr, modelica_metatype i, modelica_metatype val)
modelica_metatype boxptr_arrayUpdate(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype arr, modelica_metatype i, modelica_metatype val)
{
int ix = mmc_unbox_integer(i);
int nelts = MMC_HDRSLOTS(MMC_GETHDR(arr));
Expand Down Expand Up @@ -640,7 +639,7 @@ modelica_metatype boxptr_arrayUpdate(threadData_t *threadData,modelica_metatype
return arr;
}

modelica_metatype boxptr_arrayCopy(threadData_t *threadData,modelica_metatype arr)
modelica_metatype boxptr_arrayCopy(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype arr)
{
int nelts = MMC_HDRSLOTS(MMC_GETHDR(arr));
void* res = (struct mmc_struct*)mmc_mk_box_no_assign(nelts, MMC_ARRAY_TAG);
Expand All @@ -667,7 +666,7 @@ modelica_metatype arrayAdd(modelica_metatype arr, modelica_metatype val)
return res;
}

modelica_metatype boxptr_arrayNth(threadData_t *threadData,modelica_metatype arr,modelica_metatype ix)
modelica_metatype boxptr_arrayNth(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype arr,modelica_metatype ix)
{
return arrayGet(arr, mmc_unbox_integer(ix)+1);
}
Expand All @@ -679,7 +678,7 @@ modelica_integer tick(void)
return curTick++;
}

void boxptr_print(threadData_t *threadData,modelica_metatype str)
void boxptr_print(ERROR_HANDLE* omcErrorHandle,threadData_t *threadData,modelica_metatype str)
{
fprintf(stdout, "%s", MMC_STRINGDATA(str));
}
Expand All @@ -696,15 +695,15 @@ modelica_real mmc_clock(void)
return (clock()-start_t)/CLOCKS_PER_SEC;
}

void boxptr_equality(threadData_t *threadData,modelica_metatype in1, modelica_metatype in2)
void boxptr_equality(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype in1, modelica_metatype in2)
{
if (!valueEq(in1, in2)) {
/* fprintf(stderr, "%s != %s\n", anyString(in1), anyString(in2)); */
MMC_THROW_INTERNAL();
}
}

modelica_metatype boxptr_getGlobalRoot(threadData_t *threadData, modelica_metatype i) {
modelica_metatype boxptr_getGlobalRoot(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData, modelica_metatype i) {
int ix = mmc_unbox_integer(i);
void *val = 0;
if (ix < 0 || ix >= MMC_GC_GLOBAL_ROOTS_SIZE) {
Expand All @@ -720,7 +719,7 @@ modelica_metatype boxptr_getGlobalRoot(threadData_t *threadData, modelica_metaty
return val;
}

void boxptr_setGlobalRoot(threadData_t *threadData, modelica_metatype i, modelica_metatype val) {
void boxptr_setGlobalRoot(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData, modelica_metatype i, modelica_metatype val) {
int ix = mmc_unbox_integer(i);
if (ix < 0 || ix >= MMC_GC_GLOBAL_ROOTS_SIZE) {
MMC_THROW_INTERNAL();
Expand All @@ -731,16 +730,16 @@ void boxptr_setGlobalRoot(threadData_t *threadData, modelica_metatype i, modelic
}
}

modelica_metatype boxptr_valueConstructor(threadData_t *threadData,modelica_metatype val) {
modelica_metatype boxptr_valueConstructor(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype val) {
return mmc_mk_icon(valueConstructor(val));
}

modelica_metatype boxptr_listFirst(threadData_t *threadData,modelica_metatype lst)
modelica_metatype boxptr_listFirst(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst)
{
return MMC_CAR(lst);
}

modelica_metatype boxptr_listRest(threadData_t *threadData,modelica_metatype lst)
modelica_metatype boxptr_listRest(ERROR_HANDLE *omcErrorHandle,threadData_t *threadData,modelica_metatype lst)
{
return MMC_CDR(lst);
}
Expand Down

0 comments on commit 412b266

Please sign in to comment.