#pragma once

#include "nasal_ast.h"
#include "ast_visitor.h"

#include <cstring>
#include <sstream>
#include <vector>

namespace nasal {

class symbol_finder: public ast_visitor {
public:
    struct symbol_info {
        std::string name;
        identifier* pos_node;
    };

private:
    std::vector<symbol_info> symbols;

public:
    bool visit_definition_expr(definition_expr*) override;
    bool visit_function(function*) override;
    bool visit_iter_expr(iter_expr*) override;
    const std::vector<symbol_finder::symbol_info>& do_find(code_block*);
};

}