}
// 检验 ctx 必须在 #for 里面, 但不能在 for-else 里面
private void assert_inside_of_for_directive(ParserRuleContext ctx, String name) {
// 还有一种方法,直接看 forStack 是否为空就可以了
ParserRuleContext p = ctx.getParent();
while (p != null) {
if (p instanceof For_directiveContext) {
return;
}
if (p instanceof Else_directiveContext) {
// 跳过可能的 for-else 的情况, 继续向上查找
// 当然如果时候 if-else 的情况, 也可以跳过这个 #if,没有问题
p = p.getParent();
}
p = p.getParent();
}
throw reportError(name + " cannot be used outside of a #for directive", ctx);
}