Exemplo n.º 1
0
obj_t make_C_procedure(C_procedure_t code,
		       obj_t         name,
		       interval_t    arg_range,
		       obj_t         env)
{
    CHECK_OBJ(env);
    proc_flags_t flags = PF_COMPILED_C | PF_ARGS_EVALUATED;
    return make_proc(flags, (obj_t)code, name, make_fixnum(arg_range), env);
}
Exemplo n.º 2
0
obj_t make_procedure(obj_t body, obj_t arglist, obj_t env)
{
    CHECK_OBJ(body);
    CHECK_OBJ(arglist);
    CHECK_OBJ(env);
    return make_proc(PF_ARGS_EVALUATED,
		     body,
		     make_uninitialized(),
		     arglist,
		     env);
}
Exemplo n.º 3
0
obj_t make_special_form_procedure(obj_t body, obj_t env)
{
    CHECK_OBJ(body);
    CHECK_OBJ(env);
    proc_flags_t flags = 0;
    return make_proc(flags,
		     body,
		     make_uninitialized(),
		     make_uninitialized(),
		     env);
}
Exemplo n.º 4
0
/* read_symbols -- read symbol table */
static void read_symbols(int dseg) {
     int kind; char *name; uchar *addr;
     int chksum, nlines;
     int nm = 0, np = 0, i;
     const char *kname;
	  
     modtab = (module *) scratch_alloc(nmods * sizeof(module), FALSE);
     proctab = (proc *) scratch_alloc(nprocs * sizeof(proc), FALSE);

     for (i = 0; i < nsyms; i++) {
	  kind = read_int();
	  name = read_string(); 

	  switch (kind) {
	  case X_MODULE:
	       kname = "Module";
	       addr = dmem + read_int(); 
	       chksum = read_int();
	       nlines = read_int();
	       modtab[nm++] = make_module(name, addr, chksum, nlines);
	       break;

	  case X_PROC:
	       kname = "Proc";
	       addr = dmem + read_int(); 
	       proctab[np++] = make_proc(name, addr);
	       break;
		    
	  case X_DATA:
	       kname = "Data";
	       addr = dmem + read_int(); 
	       make_symbol("data", name, addr);
	       break;

	  case X_LINE:
	       kname = "Line";
	       addr = imem + read_int();
	       make_symbol("line", name, addr);
	       break;

	  default:
	       kname = "Unknown"; addr = NULL;
	       panic("*bad symbol %s", name);
	  }

#ifdef DEBUG
	  if (dflag) printf("%s %s = %p\n", kname, name, addr);
#endif
     }

     if (nm != nmods || np != nprocs)
	  panic("*symbol counts don't match (mods %d/%d, procs %d/%d)\n",
		nm, nmods, np, nprocs);

     /* Calculate module lengths */
     addr = dmem + dseg;
     for (i = nmods-1; i >= 0; i--) {
	  modtab[i]->m_length = addr - modtab[i]->m_addr;
	  addr = modtab[i]->m_addr;
#ifdef DEBUG
	  if (dflag)
	       printf("Module %s has size %d\n", 
		      modtab[i]->m_name, modtab[i]->m_length);
#endif
     }
}
Exemplo n.º 5
0
obj_t make_raw_procedure(cont_proc_t code, obj_t name, obj_t env)
{
    CHECK_OBJ(env);
    proc_flags_t flags = PF_COMPILED_C | PF_RAW | PF_ARGS_EVALUATED;
    return make_proc(flags, (obj_t)code, name, make_uninitialized(), env);
}
Exemplo n.º 6
0
obj_t make_raw_special_form_procedure(cont_proc_t code, obj_t name, obj_t env)
{
    CHECK_OBJ(env);
    proc_flags_t flags = PF_COMPILED_C | PF_RAW;
    return make_proc(flags, (obj_t)code, name, make_uninitialized(), env);
}