我需要get语句(即AbstractStatement
类的实例)与文件中的特定位置相关(例如 foo.q:150 )所以我以某种方式处理父类(struct) )QoreProgramLocation
定义了两个成员file
和source
(当后者通常为空时)。目前尚不清楚有什么区别。我怀疑在包含文件时可能会使用它来指向包含原始文件和实际位置。
还有offset
个成员。它是否适用于Qore嵌入另一个程序时使用的部分(例如 Qorus )?
struct QoreProgramLocation : public QoreProgramLineLocation {
public:
const char* file;
const char* source;
int offset;
...
}
答案 0 :(得分:2)
这是一个很好的问题。
在QoreProgramLocation
中,成员如下:
file
:指解析代码时给出的标签source
:指代源代码的实际文件名或路径(如果标签未提供此信息)offset
:source
因此,只有在同一文件中定义了多个代码对象时,才会给出source
和offset
。
如果一个文件中有一个代码对象,则file
为集合,source
为nullptr
,offset
为0,行号直接为来自start_line
和end_line
。
如果一个文件中有多个代码对象,则为所有成员分配值,在这种情况下start_line
和end_line
引用代码对象中的行号,以及代码对象中的行号。通过添加offset
计算文件,使行号在source
范围内偏移。
例如,在以下Qore方法的文档中:
描述了这种情况;请注意,label
中的file
将设置为QoreProgramLocation
。
由于offset
在没有source
时始终为0,因此您始终可以使用:start_line + offset
和end_line + offset
来获取实际的行号。
我希望这很清楚!