mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-06 23:18:45 +00:00
basic node builders
This commit is contained in:
parent
1b28f41810
commit
696a9c3a1a
11 changed files with 442 additions and 37 deletions
|
|
@ -13,14 +13,19 @@ class Expression;
|
|||
class ExpressionStorage;
|
||||
|
||||
class ExpressionProxy {
|
||||
friend ExpressionStorage;
|
||||
|
||||
public:
|
||||
ExpressionProxy(ExpressionStorage &expression_storage, size_t id)
|
||||
: expression_storage_(expression_storage), id_(id) {}
|
||||
ExpressionProxy() = delete;
|
||||
|
||||
Expression *get();
|
||||
|
||||
const Expression *get() const;
|
||||
|
||||
private:
|
||||
ExpressionProxy(ExpressionStorage &expression_storage, size_t id)
|
||||
: expression_storage_(expression_storage), id_(id) {}
|
||||
|
||||
private:
|
||||
ExpressionStorage &expression_storage_;
|
||||
size_t id_;
|
||||
|
|
@ -551,13 +556,13 @@ class ExpressionStorage {
|
|||
friend ExpressionProxy;
|
||||
|
||||
public:
|
||||
ExpressionProxy add_expression(const Expression &type) {
|
||||
storage_.push_back(type);
|
||||
ExpressionProxy add_expression(const Expression &expression) {
|
||||
storage_.push_back(expression);
|
||||
return ExpressionProxy(*this, storage_.size() - 1);
|
||||
}
|
||||
|
||||
ExpressionProxy add_expression(Expression &&type) {
|
||||
storage_.push_back(std::move(type));
|
||||
ExpressionProxy add_expression(Expression &&expression) {
|
||||
storage_.push_back(std::move(expression));
|
||||
return ExpressionProxy(*this, storage_.size() - 1);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue