40 , fSymbolTableStack({sym}) {}
42 using ProgramVisitor::visitProgramElement;
44 bool visitStatement(
const Statement& stmt)
override {
49 bool containsSymbol =
false;
55 fSymbolTableStack.back()->foreach([&](std::string_view,
const Symbol* symbol) {
56 if (symbol == vardecl.
var()) {
57 containsSymbol =
true;
60 if (!containsSymbol) {
62 std::string(vardecl.
var()->
name()) +
63 "' is incorrectly scoped)");
66 return INHERITED::visitStatement(stmt);
69 bool visitExpression(
const Expression&)
override {
77 std::vector<SymbolTable*> fSymbolTableStack;
80 SymbolTableCorrectnessVisitor visitor{context, program.
fSymbols.get()};
81 for (
const std::unique_ptr<ProgramElement>& pe : program.
fOwnedElements) {
82 visitor.visitProgramElement(*pe);