Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | fixed pointer imports |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
aa53dedc32d95ee118861660f08cbe88 |
| User & Date: | grable 2018-11-03 01:25:36.933 |
Context
|
2018-11-04
| ||
| 16:04 | fixed comparing typeinfo callbacks to handle NULLs check-in: f5850b2ee6 user: grable tags: trunk | |
|
2018-11-03
| ||
| 01:25 | fixed pointer imports check-in: aa53dedc32 user: grable tags: trunk | |
| 01:15 | added some support functions for struct jimff_typeinfo, and some more error conditions to jimff_import_symbol() check-in: 68b67b4789 user: grable tags: trunk | |
Changes
Changes to jimff.c.
| ︙ | ︙ | |||
238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
free((void*)typeinfo->pointersizes);
for( int i = 0; i < typeinfo->numcallbacks; i++) free((void*)typeinfo->callbacks[i]);
free((void*)typeinfo->callbacks);
}
//NOTE: returns boolean 0 or 1
static int jimff_compare_typeinfo( const struct jimff_typeinfo* a, const struct jimff_typeinfo* b) {
if( a->argc != b->argc || strcmp( a->typetag, b->typetag)) return 0;
for( int i = 0; i < a->numpointers; i++) {
if( a->pointersizes[i] != b->pointersizes[i]) return 0;
}
for( int i = 0; i < a->numcallbacks; i++) {
if( strcmp( a->callbacks[i], b->callbacks[i])) return 0;
}
| > | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
free((void*)typeinfo->pointersizes);
for( int i = 0; i < typeinfo->numcallbacks; i++) free((void*)typeinfo->callbacks[i]);
free((void*)typeinfo->callbacks);
}
//NOTE: returns boolean 0 or 1
static int jimff_compare_typeinfo( const struct jimff_typeinfo* a, const struct jimff_typeinfo* b) {
if(a == b) return 1;
if( a->argc != b->argc || strcmp( a->typetag, b->typetag)) return 0;
for( int i = 0; i < a->numpointers; i++) {
if( a->pointersizes[i] != b->pointersizes[i]) return 0;
}
for( int i = 0; i < a->numcallbacks; i++) {
if( strcmp( a->callbacks[i], b->callbacks[i])) return 0;
}
|
| ︙ | ︙ | |||
421 422 423 424 425 426 427 |
int size = 0;
struct jimff_typeinfo typeinfo = {0};
// check if symbol is already imported
if(sym = jimff_find_symbol( lib, name)) {
if(!alias || !strcmp( name, alias)) {
// only return symbols if they match exactly
| | | 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 |
int size = 0;
struct jimff_typeinfo typeinfo = {0};
// check if symbol is already imported
if(sym = jimff_find_symbol( lib, name)) {
if(!alias || !strcmp( name, alias)) {
// only return symbols if they match exactly
if(tag == JIMFF_SYM_POINTER || sym->tag == JIMFF_SYM_POINTER) {
if(sym->tag != tag || sym->size != (size_t)argument.size) return JIMFF_REDEFINED_SIZE;
} else {
//TODO: find a better way to compare symbol typetags
if(!jimff_validate_typetag( argument.typetag, &typeinfo)) return JIMFF_INVALID_TYPETAG;
int fail = (sym->tag != tag || !jimff_compare_typeinfo( &sym->typeinfo, &typeinfo));
jimff_free_typeinfo(&typeinfo);
if(fail) return JIMFF_REDEFINED_TYPETAG;
|
| ︙ | ︙ |