code: JSchema box(Map context) {
      if (boxed != null)
        return boxed; // only do it once
      JSVariant subTop = new JSVariant();
      subTop.cases = cases;
      subTop.boxedBy = this;
      boxed = (JSchema)context.get(subTop);
      if (boxed == null) {
        boxed = new JSchema(subTop, context);
        for (int i = 0; i < cases.length; i++)
          cases[i].parent = subTop;
        context.put(subTop, boxed);
      }
      return boxed;
    }
docs: includes a cyclic reference to a JSchema already under construction.