!7

sclass Symbol {
  S text;
  
  *() {}
  *(S s) { text = new S(s); }
}

static new WeakHashMap<S, Symbol> symbolMap;

static Symbol symbol(S s) {
  synchronized(symbolMap) {
    Symbol sym = symbolMap.get(s);
    if (sym == null)
      symbolMap.put(s, sym = Symbol(s));
    ret sym;  
  }
}

p {
  Symbol a = symbol("a");
}