Implement the sizeof operator

This commit is contained in:
2025-01-29 12:55:52 +01:00
parent be1a56a557
commit 5178027d9f
7 changed files with 106 additions and 12 deletions

View File

@ -43,6 +43,7 @@ namespace gcc
void visit(source::procedure_definition *definition) override;
void visit(source::call_expression *expression) override;
void visit(source::cast_expression *expression) override;
void visit(source::size_of_expression *expression) override;
void visit(source::number_literal<std::int32_t> *literal) override;
void visit(source::number_literal<std::uint32_t> *literal) override;
void visit(source::number_literal<double> *literal) override;

View File

@ -42,6 +42,7 @@ namespace source
class type_definition;
class call_expression;
class cast_expression;
class size_of_expression;
class assign_statement;
class if_statement;
class while_statement;
@ -76,6 +77,7 @@ namespace source
virtual void visit(type_definition *) = 0;
virtual void visit(call_expression *) = 0;
virtual void visit(cast_expression *) = 0;
virtual void visit(size_of_expression *) = 0;
virtual void visit(expression_statement *) = 0;
virtual void visit(assign_statement *) = 0;
virtual void visit(if_statement *) = 0;
@ -113,6 +115,7 @@ namespace source
virtual void visit(type_definition *definition) override;
virtual void visit(call_expression *expression) override;
virtual void visit(cast_expression *expression) override;
virtual void visit(size_of_expression *expression) override;
virtual void visit(expression_statement *statement) override;
virtual void visit(assign_statement *statement) override;
virtual void visit(if_statement *) override;
@ -438,6 +441,22 @@ namespace source
virtual ~cast_expression() override;
};
/**
* sizeOf operator.
*/
class size_of_expression : public expression
{
type_expression *m_body;
public:
size_of_expression(const struct position position, type_expression *body);
virtual void accept(parser_visitor *visitor) override;
type_expression& body();
virtual ~size_of_expression() override;
};
class expression_statement : public statement
{
expression *m_body;