我需要与文件中特定位置相关的get语句(i.e.instance of AbstractStatement类)(例如foo.q:150),因此我处理父类(struct) QoreProgramLocation,它定义了两个成员file和source (后者通常为null)。还不清楚什么是区别。我怀疑当包含文件时可能会使用它来指向包含中的原始文件和真实位置。
还有offset成员。它是否适用于Qore嵌入到另一个程序(e.g.Qorus)中时使用的部分?
struct QoreProgramLocation : public QoreProgramLineLocation {
public:
const char* file;
const char* source;
int offset;
...
}发布于 2017-05-07 05:58:06
这是个很好的问题。
在QoreProgramLocation中,成员如下:
file:指解析代码时给出的标签source:引用源代码的实际文件名或路径(如果标签不提供此信息)offset:source中代码的偏移量因此,只有在同一个文件中定义了多个代码对象时,才会给出source和offset。
如果一个文件中有一个代码对象,那么file是set,source是nullptr,offset是0,行号直接从start_line和end_line获取。
如果一个文件中有多个代码对象,那么所有成员都被赋值,在这种情况下,start_line和end_line引用代码对象中的行号,而文件中的行号是通过添加offset来计算的,给出了source中的行号偏移。
例如,在以下Qore方法的文档中:
描述本例;请注意,label将在QoreProgramLocation中设置为file。
因为当没有offset时,source总是0,所以您可以通过使用:start_line + offset和end_line + offset来导出实际行号。
我希望这是清楚的!
https://stackoverflow.com/questions/43820849
复制相似问题