Introduce float type
This commit is contained in:
@ -27,7 +27,8 @@ namespace gcc
|
||||
public:
|
||||
void visit(source::program *program) override;
|
||||
void visit(source::call_statement *statement) override;
|
||||
void visit(source::integer_literal *literal) 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::binary_expression *expression) override;
|
||||
void visit(source::constant_definition *definition) override;
|
||||
|
@ -46,7 +46,8 @@ namespace source
|
||||
class unary_expression;
|
||||
class type_expression;
|
||||
class variable_expression;
|
||||
class integer_literal;
|
||||
template<typename T>
|
||||
class number_literal;
|
||||
class boolean_literal;
|
||||
|
||||
/**
|
||||
@ -68,7 +69,8 @@ namespace source
|
||||
virtual void visit(unary_expression *) = 0;
|
||||
virtual void visit(type_expression *) = 0;
|
||||
virtual void visit(variable_expression *) = 0;
|
||||
virtual void visit(integer_literal *) = 0;
|
||||
virtual void visit(number_literal<std::int32_t> *) = 0;
|
||||
virtual void visit(number_literal<double> *) = 0;
|
||||
virtual void visit(boolean_literal *) = 0;
|
||||
};
|
||||
|
||||
@ -91,7 +93,8 @@ namespace source
|
||||
virtual void visit(unary_expression *expression) override;
|
||||
virtual void visit(type_expression *variable) override;
|
||||
virtual void visit(variable_expression *variable) override;
|
||||
virtual void visit(integer_literal *number) 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;
|
||||
};
|
||||
|
||||
@ -267,7 +270,7 @@ namespace source
|
||||
*/
|
||||
class constant_definition : public definition
|
||||
{
|
||||
std::unique_ptr<integer_literal> m_body;
|
||||
std::unique_ptr<number_literal<std::int32_t>> m_body;
|
||||
|
||||
public:
|
||||
/**
|
||||
@ -276,10 +279,10 @@ namespace source
|
||||
* \param body Constant value.
|
||||
*/
|
||||
constant_definition(const struct position position, const std::string& identifier,
|
||||
std::unique_ptr<integer_literal>&& body);
|
||||
std::unique_ptr<number_literal<std::int32_t>>&& body);
|
||||
virtual void accept(parser_visitor *visitor) override;
|
||||
|
||||
integer_literal& body();
|
||||
number_literal<std::int32_t>& body();
|
||||
};
|
||||
|
||||
/**
|
||||
@ -427,15 +430,26 @@ namespace source
|
||||
virtual void accept(parser_visitor *visitor) override;
|
||||
};
|
||||
|
||||
class integer_literal : public expression
|
||||
template<typename T>
|
||||
class number_literal : public expression
|
||||
{
|
||||
std::int32_t m_number;
|
||||
T m_number;
|
||||
|
||||
public:
|
||||
integer_literal(const struct position position, const std::int32_t value);
|
||||
virtual void accept(parser_visitor *visitor) override;
|
||||
number_literal(const struct position position, const T value)
|
||||
: expression(position), m_number(value)
|
||||
{
|
||||
}
|
||||
|
||||
std::int32_t number() const noexcept;
|
||||
virtual void accept(parser_visitor *visitor) override
|
||||
{
|
||||
visitor->visit(this);
|
||||
}
|
||||
|
||||
T number() const noexcept
|
||||
{
|
||||
return m_number;
|
||||
}
|
||||
};
|
||||
|
||||
class boolean_literal : public expression
|
||||
|
Reference in New Issue
Block a user