解读 Source

解读 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_nameSourceName 类型的成员变量,表示源名称。

  • sourceString 类型的成员变量,表示原始源代码。

  • line_mapstd::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对象的非空引用方法。

总体来说,这段代码定义了一个用于表示程序源代码的类,并提供了相应的构造函数和获取指定行源代码的功能。