1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-18 18:40:22 +02:00

*** empty log message ***

This commit is contained in:
Keisuke Nishida 2001-04-06 23:15:53 +00:00
parent 15df344720
commit 4bfb26f58f
9 changed files with 595 additions and 560 deletions

View file

@ -203,6 +203,7 @@ SCM_SYMBOL (sym_vm_error, "vm-error");
static scm_byte_t *
vm_fetch_length (scm_byte_t *ip, size_t *lenp)
{
/* NOTE: format defined in system/vm/conv.scm */
*lenp = *ip++;
if (*lenp < 254)
return ip;
@ -566,18 +567,30 @@ SCM_DEFINE (scm_vm_fetch_stack, "vm-fetch-stack", 1, 0, 0,
#undef FUNC_NAME
SCM_DEFINE (scm_vm_load, "vm-load", 2, 0, 0,
(SCM vm, SCM bytes),
(SCM vm, SCM bootcode),
"")
#define FUNC_NAME s_scm_vm_load
{
SCM prog;
int len;
char *base;
SCM_VALIDATE_VM (1, vm);
SCM_VALIDATE_STRING (2, bytes);
SCM_VALIDATE_STRING (2, bootcode);
prog = scm_c_make_program (SCM_STRING_CHARS (bytes),
SCM_STRING_LENGTH (bytes),
bytes);
base = SCM_STRING_CHARS (bootcode);
len = SCM_STRING_LENGTH (bootcode);
/* Check bootcode */
if (strncmp (base, "\0GBC", 4) != 0)
SCM_MISC_ERROR ("Invalid bootcode: ~S", SCM_LIST1 (bootcode));
/* Create program */
prog = scm_c_make_program (base + 10, len - 10, bootcode);
SCM_PROGRAM_NLOCS (prog) = base[8];
SCM_PROGRAM_NEXTS (prog) = base[9];
/* Load it */
return scm_vm_apply (vm, prog, SCM_EOL);
}
#undef FUNC_NAME