public CycObject readNart()
          throws IOException {
    CycNart cycNart = null;
    int cfaslOpcode = read();

    if (cfaslOpcode == CFASL_NIL) {
      cycNart = CycObjectFactory.INVALID_NART;
      isInvalidObject = true;
    } else if (cfaslOpcode != CFASL_LIST) {
      if (cfaslOpcode == CFASL_SYMBOL) {
        String name = (String) readObject();
        System.err.println("readNart, symbol=" + name);
      }
      throw new RuntimeException("reading nart, expected a list, found " + cfaslOpcode);
    } else {
      cycNart = new CycNart(readCycList());
    }

    if (trace == API_TRACE_DETAILED) {
      debugNote("readNart: " + cycNart.toString());
    }

    return cycNart;
  }