[debug tvm] where is the class member name for Operation?

hi, I don’t see there is a class member name in the class tvm::te::Operation and its father class tvm::runtime::ObjectRef, but I can use op->name to dump, any body know why ?

  (gdb) pt op
type = class tvm::te::Operation : public tvm::runtime::ObjectRef {
    public:
            Operation(void);
            Operation(tvm::runtime::ObjectPtr<tvm::runtime::Object>);
            const tvm::te::OperationNode * operator->(void) const;
            tvm::te::Tensor output(size_t) const;
        }

(gdb) pt tvm::runtime::ObjectRef

type = class tvm::runtime::ObjectRef {
    static const bool _type_is_nullable;
  protected:
    tvm::runtime::ObjectPtr<tvm::runtime::Object> data_;

  public:
    ObjectRef(void);
    ObjectRef(tvm::runtime::ObjectPtr<tvm::runtime::Object>);
    bool same_as(const tvm::runtime::ObjectRef &) const;
    bool operator==(const tvm::runtime::ObjectRef &) const;
    bool operator!=(const tvm::runtime::ObjectRef &) const;
    bool operator<(const tvm::runtime::ObjectRef &) const;
    bool defined(void) const;
    const tvm::runtime::Object * get(void) const;
    const tvm::runtime::Object * operator->(void) const;
    bool unique(void) const;
    int use_count(void) const;
  protected:
    tvm::runtime::Object * get_mutable(void) const;
    static void FFIClearAfterMove(tvm::runtime::ObjectRef *);
    static tvm::runtime::ObjectRef DowncastNoCheck<tvm::runtime::ObjectRef>(tvm::runtime::ObjectRef);
    static tvm::runtime::String DowncastNoCheck<tvm::runtime::String>(tvm::runtime::ObjectRef);
    static tvm::auto_scheduler::Step DowncastNoCheck<tvm::auto_scheduler::Step>(tvm::runtime::ObjectRef);
    static tvm::auto_scheduler::MeasureResult DowncastNoCheck<tvm::auto_scheduler::MeasureResult>(tvm::runtime::ObjectRef);
    static tvm::auto_scheduler::MeasureInput DowncastNoCheck<tvm::auto_scheduler::MeasureInput>(tvm::runtime::ObjectRef);
    static tvm::PrimExpr DowncastNoCheck<tvm::PrimExpr>(tvm::runtime::ObjectRef);
  public:
    const tvm::FloatImmNode * as<tvm::FloatImmNode>(void) const;

    typedef tvm::runtime::Object ContainerType;
}

(gdb) p op->name

`Preformatted text`$14 = {static npos = 18446744073709551615, 
  _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x2afbf48 "B"}, 
  _M_string_length = 1, {_M_local_buf = "B", '\000' <repeats 14 times>, _M_allocated_capacity = 66}}

the - > operator of tvm::te::Operation is overloaded, and the pointer to the OperationNode is returned when we use op->. As the class tvm::te::OperationNode (include/tvm/te/operation.h) has a member named name, so it can use op->name

type = class tvm::te::OperationNode : public tvm::runtime::Object {
  public:
    std::string name;
    std::string tag;
    tvm::runtime::Map<tvm::runtime::String, tvm::runtime::ObjectRef, void, void> attrs;
  private:
    static const char * const _type_key;
  ...