1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#ifdef NALL_STRING_INTERNAL_HPP
namespace nall {
namespace Eval {
struct Node {
enum class Type : unsigned {
Null,
Literal,
Function, Subscript, Member, SuffixIncrement, SuffixDecrement,
Reference, Dereference, LogicalNot, BitwiseNot, Positive, Negative, PrefixIncrement, PrefixDecrement,
Multiply, Divide, Modulo,
Add, Subtract,
RotateLeft, RotateRight, ShiftLeft, ShiftRight,
BitwiseAnd, BitwiseOr, BitwiseXor,
Concatenate,
Equal, NotEqual, LessThanEqual, GreaterThanEqual, LessThan, GreaterThan,
LogicalAnd, LogicalOr,
Coalesce, Condition,
Assign, Create, //all assignment operators have the same precedence
AssignMultiply, AssignDivide, AssignModulo,
AssignAdd, AssignSubtract,
AssignRotateLeft, AssignRotateRight, AssignShiftLeft, AssignShiftRight,
AssignBitwiseAnd, AssignBitwiseOr, AssignBitwiseXor,
AssignConcatenate,
Separator,
};
Type type;
string literal;
vector<Node*> link;
Node() : type(Type::Null) {}
Node(Type type) : type(type) {}
~Node() { for(auto& node : link) delete node; }
};
}
}
#endif
|