解读 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
对象的非空引用方法。
总体来说,这段代码定义了一个用于表示源代码映射的类,并提供了相应的构造函数、添加源代码片段和访问映射节点的功能。