mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-02 13:37:42 -05:00
Added ternary condition operator
This commit is contained in:
@@ -75,6 +75,38 @@ namespace hex::lang {
|
||||
Token::Operator m_operator;
|
||||
};
|
||||
|
||||
class ASTNodeTernaryExpression : public ASTNode {
|
||||
public:
|
||||
ASTNodeTernaryExpression(ASTNode *first, ASTNode *second, ASTNode *third, Token::Operator op)
|
||||
: ASTNode(), m_first(first), m_second(second), m_third(third), m_operator(op) { }
|
||||
|
||||
~ASTNodeTernaryExpression() override {
|
||||
delete this->m_first;
|
||||
delete this->m_second;
|
||||
delete this->m_third;
|
||||
}
|
||||
|
||||
ASTNodeTernaryExpression(const ASTNodeTernaryExpression &other) : ASTNode(other) {
|
||||
this->m_operator = other.m_operator;
|
||||
this->m_first = other.m_first->clone();
|
||||
this->m_second = other.m_second->clone();
|
||||
this->m_third = other.m_third->clone();
|
||||
}
|
||||
|
||||
ASTNode* clone() const override {
|
||||
return new ASTNodeTernaryExpression(*this);
|
||||
}
|
||||
|
||||
ASTNode *getFirstOperand() { return this->m_first; }
|
||||
ASTNode *getSecondOperand() { return this->m_second; }
|
||||
ASTNode *getThirdOperand() { return this->m_third; }
|
||||
Token::Operator getOperator() { return this->m_operator; }
|
||||
|
||||
private:
|
||||
ASTNode *m_first, *m_second, *m_third;
|
||||
Token::Operator m_operator;
|
||||
};
|
||||
|
||||
class ASTNodeBuiltinType : public ASTNode {
|
||||
public:
|
||||
constexpr explicit ASTNodeBuiltinType(Token::ValueType type)
|
||||
|
||||
@@ -44,6 +44,8 @@ namespace hex::lang {
|
||||
ASTNodeIntegerLiteral* evaluateScopeResolution(ASTNodeScopeResolution *node);
|
||||
ASTNodeIntegerLiteral* evaluateRValue(ASTNodeRValue *node);
|
||||
ASTNodeIntegerLiteral* evaluateOperator(ASTNodeIntegerLiteral *left, ASTNodeIntegerLiteral *right, Token::Operator op);
|
||||
ASTNodeIntegerLiteral* evaluateOperand(ASTNode *node);
|
||||
ASTNodeIntegerLiteral* evaluateTernaryExpression(ASTNodeTernaryExpression *node);
|
||||
ASTNodeIntegerLiteral* evaluateMathematicalExpression(ASTNodeNumericExpression *node);
|
||||
|
||||
PatternData* evaluateBuiltinType(ASTNodeBuiltinType *node);
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace hex::lang {
|
||||
ASTNode* parseBooleanAnd();
|
||||
ASTNode* parseBooleanXor();
|
||||
ASTNode* parseBooleanOr();
|
||||
ASTNode* parseTernaryConditional();
|
||||
ASTNode* parseMathematicalExpression();
|
||||
|
||||
ASTNode* parseConditional();
|
||||
|
||||
@@ -55,7 +55,8 @@ namespace hex::lang {
|
||||
BoolAnd,
|
||||
BoolOr,
|
||||
BoolXor,
|
||||
BoolNot
|
||||
BoolNot,
|
||||
TernaryConditional
|
||||
};
|
||||
|
||||
enum class ValueType {
|
||||
@@ -217,6 +218,7 @@ namespace hex::lang {
|
||||
#define OPERATOR_BOOLOR COMPONENT(Operator, BoolOr)
|
||||
#define OPERATOR_BOOLXOR COMPONENT(Operator, BoolXor)
|
||||
#define OPERATOR_BOOLNOT COMPONENT(Operator, BoolNot)
|
||||
#define OPERATOR_TERNARYCONDITIONAL COMPONENT(Operator, TernaryConditional)
|
||||
|
||||
#define VALUETYPE_CUSTOMTYPE COMPONENT(ValueType, CustomType)
|
||||
#define VALUETYPE_PADDING COMPONENT(ValueType, Padding)
|
||||
|
||||
Reference in New Issue
Block a user