   hash_table[hash_val] = x_cons(cell, hash_table[hash_val]);
 }
 
-x_any intern(char *name)
+x_any intern(const char *name)
 /* Return the symbol with this name, creating it if necessary. */
 {
   x_any cell;

  return value;
}

x_any lookup(char *name, x_any cell)
/* Return the symbol with this name, or NULL if it is not found. */
{
  if (cell == x_nil)
    return NULL;

__managed__ x_any x_eof;


char* new_name(const char* name) {
  char *n;
  cudaMallocManaged(&n, strlen(name) + 1);
  assert(n != NULL);
  strcpy(n, name);
  return n;
}

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

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

hash_table_type hash_table;

int hash(const char *name)
{
  int value = 0;
  while (*name != '\0')
