public Syntax internalDeepCopy(Token start, Token end) {
    Syntax copy =
        new DotMethodCallExp(
            start,
            end,
            (methodName == null ? null : (Id) methodName.internalDeepCopy(start, end)),
            (subpat == null ? null : (Cmd) subpat.internalDeepCopy(start, end)));

    return copy;
  }
  public Syntax internalDeepCopy(Token start, Token end) {
    Syntax copy =
        new ClsPatDef(
            start,
            end,
            (id == null ? null : (Id) id.internalDeepCopy(start, end)),
            (List<Id>) (deepCopyList(formals, start, end)),
            (body == null ? null : (Cmd) body.internalDeepCopy(start, end)));

    return copy;
  }
  public Syntax internalDeepCopy(Token start, Token end) {
    Syntax copy =
        new PatVar(start, end, (id == null ? null : (Id) id.internalDeepCopy(start, end)));

    return copy;
  }