docs: final public JSType TypeDef(Map refs) throws ParseException {
                               JSType ans;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 3:
        ans = Array(refs);
        break;
      case 5:
        ans = Variant(refs);
        break;
      case 8:
        ans = Tuple(refs);
        break;
      case 10:
        ans = Dynamic();
        break;
      case 11:
        ans = Ref(refs);
        break;
      case 13:
      case 14:
      case 15:
      case 16:
      case 17:
      case 18:
      case 19:
      case 20:
      case 21:
      case 22:
      case 23:
      case 24:
      case 25:
      case 26:
      case 27:
      case 28:
      case 29:
      case 30:
      case 31:
      case 32:
      case 33:
      case 34:
      case 35:
      case 36:
      case 37:
      case 38:
      case 39:
      case 40:
      case 41:
      case 42:
      case 43:
      case 44:
      case 45:
      case 46:
      case 47:
      case 48:
      case 49:
      case 50:
      case 51:
      case 52:
      case 53:
      case 54:
      case 55:
      case 56:
      case 57:
      case 58:
      case 59:
        ans = Primitive();
        break;
      default:
        jj_la1[2] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      {if (true) return ans;}
      throw new Error("Missing return statement in function");
    }