63 lines
1.1 KiB
C++
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();
|
|
}
|
|
}
|