Add a char type

This commit is contained in:
2025-01-01 23:02:19 +01:00
parent 8176da5f9b
commit 45eb6a3b84
10 changed files with 70 additions and 25 deletions

View File

@ -29,7 +29,8 @@ namespace gcc
void visit(source::call_statement *statement) override;
void visit(source::number_literal<std::int32_t> *literal) override;
void visit(source::number_literal<double> *literal) override;
void visit(source::boolean_literal *literal) override;
void visit(source::number_literal<bool> *boolean) override;
void visit(source::char_literal *character) override;
void visit(source::binary_expression *expression) override;
void visit(source::constant_definition *definition) override;
void visit(source::declaration *declaration) override;

View File

@ -7,10 +7,12 @@
enum elna_tree_index
{
ELNA_TI_ENUMERAL_TYPE,
ELNA_TI_CHAR_TYPE,
ELNA_TI_MAX
};
extern GTY(()) tree elna_global_trees[ELNA_TI_MAX];
#define enumeral_node elna_global_trees[ELNA_TI_ENUMERAL_TYPE]
#define elna_char_type_node elna_global_trees[ELNA_TI_CHAR_TYPE]
void elna_init_ttree(void);

View File

@ -48,7 +48,7 @@ namespace source
class variable_expression;
template<typename T>
class number_literal;
class boolean_literal;
class char_literal;
/**
* Interface for AST visitors.
@ -71,7 +71,8 @@ namespace source
virtual void visit(variable_expression *) = 0;
virtual void visit(number_literal<std::int32_t> *) = 0;
virtual void visit(number_literal<double> *) = 0;
virtual void visit(boolean_literal *) = 0;
virtual void visit(number_literal<bool> *) = 0;
virtual void visit(char_literal *) = 0;
};
/**
@ -94,8 +95,9 @@ namespace source
virtual void visit(type_expression *variable) override;
virtual void visit(variable_expression *variable) override;
virtual void visit(number_literal<std::int32_t> *number) override;
virtual void visit(number_literal<double> *) override;
virtual void visit(boolean_literal *boolean) override;
virtual void visit(number_literal<double> *number) override;
virtual void visit(number_literal<bool> *boolean) override;
virtual void visit(char_literal *character) override;
};
/**
@ -452,15 +454,15 @@ namespace source
}
};
class boolean_literal : public expression
class char_literal : public expression
{
bool m_boolean;
unsigned char m_character;
public:
boolean_literal(const struct position position, const bool value);
char_literal(const struct position position, const unsigned char value);
virtual void accept(parser_visitor *visitor) override;
bool boolean() const noexcept;
unsigned char character() const noexcept;
};
class variable_expression : public expression