     return apply(car(cell), list_eval(cdr(cell)));
 }
 
-x_any intern(char*);
+x_any intern(const char*);
 
 x_any def_builtin(char const *name, void *fn, size_t num_args)
 {
   x_any cell;
 
-  cell = intern((char*)name);
+  cell = intern(name);
   flags(cell) = BUILTIN;
   data(cell) = fn;
   size(cell) = num_args;

__managed__ x_any x_eof;


x_any new_cell(char* new_name) {
  x_any cell;
  char *name;
  cudaMallocManaged(&cell, sizeof(x_cell));
  assert(cell != NULL);
  cudaMallocManaged(&name, strlen(new_name) + 1);
  assert(name != NULL);
  strcpy(name, new_name);
  name(cell) = name;
  return cell;
}

x_any def_token(const char* new_name) {
  x_any cell;
  cell = new_cell((char*)new_name);
  flags(cell) = TOKEN;
  return cell;
}

hash_table_type hash_table;

int hash(char *name)
/* Return a hash value for this name. */
{
  int value = 0;
  while (*name != '\0')

    return lookup(name, cdr(cell));
}

x_any create_symbol(const char *new_name)
{
  x_any cell;
  cell = new_cell(new_name);
