解读 Source
#
SourceNode
#
/*! \brief A program source in any language.
*
* Could represent the source from an ML framework or a source
* representing a tvm::IRModule.
*/
class Source;
class SourceNode : public Object {
public:
/*! \brief The source name. */
SourceName source_name;
/*! \brief The raw source. */
String source;
/*! \brief A mapping of line breaks into the raw source. */
std::vector<std::pair<int, int>> line_map;
// override attr visitor
void VisitAttrs(AttrVisitor* v) {
v->Visit("source_name", &source_name);
v->Visit("source", &source);
}
static constexpr const char* _type_key = "Source";
TVM_DECLARE_FINAL_OBJECT_INFO(SourceNode, Object);
};
SourceNode
继承自 Object
类的子类,它表示程序源代码。该类具有以下成员变量和成员函数:
source_name
:SourceName
类型的成员变量,表示源名称。source
:String
类型的成员变量,表示原始源代码。line_map
:std::vector<std::pair<int, int>>
类型的成员变量,表示行映射,将行号映射到原始源代码中的字符位置。VisitAttrs(AttrVisitor* v)
:一个成员函数,用于访问属性。它接受一个指向AttrVisitor
对象的指针作为参数,并依次调用v->Visit("source_name", &source_name)
、v->Visit("source", &source)
来访问相应的属性。_type_key
:一个静态常量字符指针,表示该类型的键。TVM_DECLARE_FINAL_OBJECT_INFO(SourceNode, Object)
:一个宏定义,用于声明SourceNode
对象的最终信息。
总体来说,这段代码定义了一个表示程序源代码的类,并提供了相应的属性访问功能。
Source
#
class Source : public ObjectRef {
public:
TVM_DLL Source(SourceName src_name, std::string source);
TVM_DLL tvm::String GetLine(int line);
TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(Source, ObjectRef, SourceNode);
};
Source
类继承自 ObjectRef
类。该类具有以下成员函数:
Source(SourceName src_name, std::string source)
:一个构造函数,用于创建一个Source
对象。它接受两个参数:src_name
表示源名称,source
表示源代码字符串。GetLine(int line)
:一个成员函数,用于获取指定行号的源代码内容。它接受一个整数类型的参数line
,表示要获取的行号,并返回一个tvm::String
类型的结果,表示该行的源代码内容。TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(Source, ObjectRef, SourceNode)
:一个宏定义,用于定义Source
对象的非空引用方法。
总体来说,这段代码定义了一个用于表示程序源代码的类,并提供了相应的构造函数和获取指定行源代码的功能。