text: extern void init_symbols(heap h, heap init);
  typedef struct symbol *symbol;
  symbol intern(buffer);
  symbol intern_u64(u64);
  
  string symbol_string(symbol s);
  
  #define sym_intern(name, intern)\
      ({static symbol __s = 0;\
        if (!__s){char x[] = #name; __s = intern(alloca_wrap_buffer(x, sizeof(x)-1));} \
       __s;})              
  
  #define sym(name)   sym_intern(name, intern)
  
  #define sym_this(name)\
      (intern(alloca_wrap_buffer(name, runtime_strlen(name))))
  
  table symbol_table();
  key key_from_symbol(void *z);
  
  static inline boolean sym_cstring_compare(symbol s, const char *c)
  {
      return buffer_compare_with_cstring(symbol_string(s), c);
  }
  