2016-01-07 08:14:33 +00:00
|
|
|
#pragma once
|
2013-07-29 09:42:45 +00:00
|
|
|
|
2016-01-07 08:14:33 +00:00
|
|
|
namespace nall { namespace Eval {
|
2013-07-29 09:42:45 +00:00
|
|
|
|
|
|
|
struct Node {
|
2015-11-16 08:38:05 +00:00
|
|
|
enum class Type : uint {
|
2013-07-29 09:42:45 +00:00
|
|
|
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; }
|
|
|
|
};
|
|
|
|
|
2016-01-07 08:14:33 +00:00
|
|
|
}}
|