wow. now THAT was interesting. multiple native call entries in the native

symbol table... so returning once the first was set was not a good idea.


SVN revision: 11336
This commit is contained in:
Carsten Haitzler 2004-08-24 06:37:26 +00:00
parent 795fa244e1
commit b25fae82f4
1 changed files with 23 additions and 1 deletions

View File

@ -361,7 +361,10 @@ embryo_program_native_call_add(Embryo_Program *ep, char *name, Embryo_Cell (*fun
if ((entry_name) && (!strcmp(entry_name, name)))
{
func_entry->address = ep->native_calls_size;
return;
/* FIXME: embryo_cc is putting in multiple native */
/* function call entries - so we need to fill in all */
/* of them!!! */
/* return; */
}
}
func_entry =
@ -1531,6 +1534,25 @@ embryo_program_run(Embryo_Program *ep, Embryo_Function fn)
ep->run_count--;
return EMBRYO_PROGRAM_SLEEP;
}
{
Embryo_Header *hdr;
int i, num;
Embryo_Func_Stub *func_entry;
hdr = (Embryo_Header *)ep->code;
num = NUMENTRIES(hdr, natives, libraries);
func_entry = GETENTRY(hdr, natives, 0);
for (i = 0; i < num; i++)
{
char *entry_name;
entry_name = GETENTRYNAME(hdr, func_entry);
if (i == offs)
printf("EMBRYO: CALL [%i] %s() non-existant!\n", i, entry_name);
func_entry =
(Embryo_Func_Stub *)((unsigned char *)func_entry + hdr->defsize);
}
}
ABORT(ep, num);
}
break;