解读 SourceMap

解读 SourceMap#

SourceMapNode#

/*!
 * \brief A mapping from a unique source name to source fragment.
 */
class SourceMap;
/*!
 * \brief Stores locations in frontend source that generated a node.
 */
class SourceMapNode : public Object {
 public:
  /*! \brief The source mapping. */
  Map<SourceName, Source> source_map;

  // override attr visitor
  void VisitAttrs(AttrVisitor* v) { v->Visit("source_map", &source_map); }

  bool SEqualReduce(const SourceMapNode* other, SEqualReducer equal) const {
    return equal(source_map, other->source_map);
  }

  static constexpr const char* _type_key = "SourceMap";
  TVM_DECLARE_FINAL_OBJECT_INFO(SourceMapNode, Object);
};

SourceMapNode 继承自 Object 类,它表示源代码映射。该类具有以下成员变量和成员函数:

  • source_map:一个Map<SourceName, Source>类型的成员变量,表示源名称到源代码片段的映射。

  • VisitAttrs(AttrVisitor* v):一个成员函数,用于访问属性。它接受一个指向AttrVisitor对象的指针作为参数,并调用v->Visit("source_map", &source_map)来访问source_map属性。

  • SEqualReduce(const SourceMapNode* other, SEqualReducer equal) const:一个成员函数,用于比较两个SourceMapNode对象是否相等。它接受一个指向另一个SourceMapNode对象的指针和一个SEqualReducer对象作为参数,并使用equal函数比较两个对象的source_map属性是否相等。

  • _type_key:一个静态常量字符指针,表示该类型的键。

  • TVM_DECLARE_FINAL_OBJECT_INFO(SourceMapNode, Object):一个宏定义,用于声明SourceMapNode对象的最终信息。

总体来说,这段代码定义了一个表示源代码映射的类,并提供了相应的属性访问和相等性比较功能。

SourceMap#

class SourceMap : public ObjectRef {
 public:
  explicit SourceMap(Map<SourceName, Source> source_map);

  explicit SourceMap(std::initializer_list<std::pair<SourceName, Source>> source_map)
      : SourceMap(Map<SourceName, Source>(source_map)) {}

  SourceMap() : SourceMap(Map<SourceName, Source>()) {}

  void Add(const Source& source);

  SourceMapNode* operator->() {
    ICHECK(get() != nullptr);
    return static_cast<SourceMapNode*>(get_mutable());
  }

  TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(SourceMap, ObjectRef, SourceMapNode);
};

SourceMap 类继承自 ObjectRef 类。该类具有以下成员函数:

  • explicit SourceMap(Map<SourceName, Source> source_map):一个构造函数,用于创建一个SourceMap对象。它接受一个Map<SourceName, Source>类型的参数source_map,表示源名称到源代码片段的映射。

  • explicit SourceMap(std::initializer_list<std::pair<SourceName, Source>> source_map):另一个构造函数,用于创建一个SourceMap对象。它接受一个std::initializer_list<std::pair<SourceName, Source>>类型的参数source_map,表示源名称到源代码片段的映射。这个构造函数会将传入的初始化列表转换为Map<SourceName, Source>类型,并调用第一个构造函数进行创建。

  • SourceMap():一个默认构造函数,用于创建一个空的SourceMap对象。它会调用第二个构造函数,传入一个空的初始化列表。

  • Add(const Source& source):一个成员函数,用于向SourceMap中添加一个源代码片段。它接受一个指向Source对象的常量引用作为参数。

  • operator->():一个重载的箭头运算符,用于获取指向SourceMapNode对象的指针。它首先检查当前对象是否为空,然后将当前对象转换为可变指针,并将其转换为SourceMapNode*类型。

  • TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(SourceMap, ObjectRef, SourceMapNode):一个宏定义,用于定义SourceMap对象的非空引用方法。

总体来说,这段代码定义了一个用于表示源代码映射的类,并提供了相应的构造函数、添加源代码片段和访问映射节点的功能。