Implement argument passing

This commit is contained in:
2025-01-15 01:48:09 +01:00
parent 5cb0e18a87
commit 1e45d66359
7 changed files with 106 additions and 92 deletions

View File

@ -43,7 +43,7 @@ namespace gcc
void visit(source::number_literal<std::int32_t> *literal) override;
void visit(source::number_literal<double> *literal) override;
void visit(source::number_literal<bool> *boolean) override;
void visit(source::char_literal *character) override;
void visit(source::number_literal<unsigned char> *character) override;
void visit(source::string_literal *string) override;
void visit(source::binary_expression *expression) override;
void visit(source::unary_expression *expression) override;

View File

@ -90,7 +90,7 @@ namespace source
virtual void visit(number_literal<std::int32_t> *) = 0;
virtual void visit(number_literal<double> *) = 0;
virtual void visit(number_literal<bool> *) = 0;
virtual void visit(char_literal *) = 0;
virtual void visit(number_literal<unsigned char> *) = 0;
virtual void visit(string_literal *) = 0;
};
@ -123,7 +123,7 @@ namespace source
virtual void visit(number_literal<std::int32_t> *) override;
virtual void visit(number_literal<double> *) override;
virtual void visit(number_literal<bool> *) override;
virtual void visit(char_literal *) override;
virtual void visit(number_literal<unsigned char> *) override;
virtual void visit(string_literal *) override;
};
@ -353,12 +353,18 @@ namespace source
virtual ~variable_declaration() override;
};
class literal : public expression
{
protected:
explicit literal(const struct position position);
};
/**
* Constant definition.
*/
class constant_definition : public definition
{
number_literal<std::int32_t> *m_body;
literal *m_body;
public:
/**
@ -367,10 +373,10 @@ namespace source
* \param body Constant value.
*/
constant_definition(const struct position position, const std::string& identifier,
number_literal<std::int32_t> *body);
literal *body);
virtual void accept(parser_visitor *visitor) override;
number_literal<std::int32_t>& body();
literal& body();
virtual ~constant_definition() override;
};
@ -624,13 +630,13 @@ namespace source
};
template<typename T>
class number_literal : public expression
class number_literal : public literal
{
T m_number;
public:
number_literal(const struct position position, const T value)
: expression(position), m_number(value)
: literal(position), m_number(value)
{
}
@ -645,18 +651,7 @@ namespace source
}
};
class char_literal : public expression
{
unsigned char m_character;
public:
char_literal(const struct position position, const unsigned char value);
virtual void accept(parser_visitor *visitor) override;
unsigned char character() const;
};
class string_literal : public expression
class string_literal : public literal
{
std::string m_string;