elna/include/elna/gcc/elna-tree.h

63 lines
1.1 KiB
C++

#pragma once
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tree.h"
#include "tree.h"
#include "elna/boot/symbol.h"
enum elna_tree_index
{
ELNA_TI_STRING_TYPE,
ELNA_TI_MAX
};
extern GTY(()) tree elna_global_trees[ELNA_TI_MAX];
#define elna_string_type_node elna_global_trees[ELNA_TI_STRING_TYPE]
namespace elna
{
namespace gcc
{
void init_ttree();
bool is_pointer_type(tree type);
bool is_string_type(tree type);
class tree_chain_base
{
protected:
tree first{};
tree last{};
public:
tree head();
void append(tree t);
protected:
virtual void chain(tree t) = 0;
};
class tree_chain final : public tree_chain_base
{
void chain(tree t) override;
};
class tree_symbol_mapping final
{
tree m_bind_expression;
tree m_block;
public:
tree_symbol_mapping(tree bind_expression, tree block);
tree bind_expression();
tree block();
};
std::shared_ptr<boot::symbol_table<tree>> builtin_symbol_table();
}
}