Add a new type alias for Result<shared_ptr<Expressoin>>

This commit is contained in:
Sameer Rahmani 2021-04-14 21:59:22 +01:00
parent c737af51a4
commit 1330bad6fb
8 changed files with 16 additions and 14 deletions

View File

@ -45,6 +45,11 @@ enum class ExprType {
List, List,
Number, Number,
}; };
class Expression;
using node = std::shared_ptr<Expression>;
using maybe_node = Result<node>;
using ast = llvm::SmallVector<node, 0>;
/// The base class of the expressions which provides the common interface for /// The base class of the expressions which provides the common interface for
/// the expressions to implement. /// the expressions to implement.
@ -65,12 +70,9 @@ public:
/// The AST representation of an expression /// The AST representation of an expression
virtual std::string toString() const = 0; virtual std::string toString() const = 0;
virtual Result<Expression *> analyze(reader::SemanticContext &) = 0; virtual maybe_node analyze(reader::SemanticContext &) = 0;
}; };
using node = std::shared_ptr<Expression>;
using ast = llvm::SmallVector<node, 0>;
/// Create a new `node` of type `T` and forwards any given parameter /// Create a new `node` of type `T` and forwards any given parameter
/// to the constructor of type `T`. This is the **official way** to create /// to the constructor of type `T`. This is the **official way** to create
/// a new `Expression`. Here is an example: /// a new `Expression`. Here is an example:

View File

@ -52,7 +52,7 @@ public:
std::string toString() const; std::string toString() const;
void append(node); void append(node);
Result<Expression *> analyze(reader::SemanticContext &); maybe_node analyze(reader::SemanticContext &);
static bool classof(const Expression *e); static bool classof(const Expression *e);

View File

@ -48,7 +48,7 @@ struct Number : public Expression {
ExprType getType() const; ExprType getType() const;
std::string toString() const; std::string toString() const;
Result<Expression *> analyze(reader::SemanticContext &ctx); maybe_node analyze(reader::SemanticContext &ctx);
static bool classof(const Expression *e); static bool classof(const Expression *e);

View File

@ -51,7 +51,7 @@ public:
static bool classof(const Expression *e); static bool classof(const Expression *e);
Result<Expression *> analyze(reader::SemanticContext &); maybe_node analyze(reader::SemanticContext &);
~Symbol() = default; ~Symbol() = default;
}; };

View File

@ -37,7 +37,7 @@ class Semantics {
public: public:
Semantics(){}; Semantics(){};
exprs::ast analyze(exprs::ast &); exprs::maybe_node analyze(exprs::ast &);
}; };
}; // namespace serene::reader }; // namespace serene::reader

View File

@ -49,8 +49,8 @@ std::string List::toString() const {
this->location.end.toString(), s); this->location.end.toString(), s);
}; };
Result<Expression *> List::analyze(reader::SemanticContext &ctx) { maybe_node List::analyze(reader::SemanticContext &ctx) {
return Result<Expression *>::Success(this); return Result<node>::Success(node(this));
}; };
bool List::classof(const Expression *e) { bool List::classof(const Expression *e) {

View File

@ -36,8 +36,8 @@ std::string Number::toString() const {
this->location.end.toString(), value); this->location.end.toString(), value);
} }
Result<Expression *> Number::analyze(reader::SemanticContext &ctx) { maybe_node Number::analyze(reader::SemanticContext &ctx) {
return Result<Expression *>::Success(this); return Result<node>::Success(node(this));
}; };
bool Number::classof(const Expression *e) { bool Number::classof(const Expression *e) {

View File

@ -36,8 +36,8 @@ std::string Symbol::toString() const {
this->location.end.toString(), this->name); this->location.end.toString(), this->name);
} }
Result<Expression *> Symbol::analyze(reader::SemanticContext &ctx) { maybe_node Symbol::analyze(reader::SemanticContext &ctx) {
return Result<Expression *>::Success(this); return Result<node>::Success(node(this));
}; };
bool Symbol::classof(const Expression *e) { bool Symbol::classof(const Expression *e) {