如何使用QoreProgramLocation类来识别Qore源代码中的特定位置

时间:2017-05-06 13:08:43

标签: qore

我需要get语句(即AbstractStatement类的实例)与文件中的特定位置相关(例如 foo.q:150 )所以我以某种方式处理父类(struct) )QoreProgramLocation定义了两个成员filesource(当后者通常为空时)。目前尚不清楚有什么区别。我怀疑在包含文件时可能会使用它来指向包含原始文件和实际位置。

还有offset个成员。它是否适用于Qore嵌入另一个程序时使用的部分(例如 Qorus )?

struct QoreProgramLocation : public QoreProgramLineLocation {
public:
   const char* file;
   const char* source;
   int offset;
...
}

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题。

QoreProgramLocation中,成员如下:

  • file:指解析代码时给出的标签
  • source:指代源代码的实际文件名或路径(如果标签未提供此信息)
  • offsetsource
  • 中代码的偏移量

因此,只有在同一文件中定义了多个代码对象时,才会给出sourceoffset

如果一个文件中有一个代码对象,则file为集合,sourcenullptroffset为0,行号直接为来自start_lineend_line

如果一个文件中有多个代码对象,则为所有成员分配值,在这种情况下start_lineend_line引用代码对象中的行号,以及代码对象中的行号。通过添加offset计算文件,使行号在source范围内偏移。

例如,在以下Qore方法的文档中:

描述了这种情况;请注意,label中的file将设置为QoreProgramLocation

由于offset在没有source时始终为0,因此您始终可以使用:start_line + offsetend_line + offset来获取实际的行号。

我希望这很清楚!