/// Copyright: Copyright (c) 2017-2019 Andrey Penechko. /// License: $(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0). /// Authors: Andrey Penechko. module vox.fe.ast.expr; public import vox.fe.ast.expr.binary_op; public import vox.fe.ast.expr.call; public import vox.fe.ast.expr.index; public import vox.fe.ast.expr.literal; public import vox.fe.ast.expr.member_access; public import vox.fe.ast.expr.name_use; public import vox.fe.ast.expr.named_argument; public import vox.fe.ast.expr.slice; public import vox.fe.ast.expr.type_conv; public import vox.fe.ast.expr.unary_op; import vox.all; mixin template ExpressionNodeData(AstType _astType, int default_flags = 0, AstNodeState _init_state = AstNodeState.name_register_self_done) { mixin AstNodeData!(_astType, default_flags, _init_state); AstIndex type; } // Abstract node, must not be instantiated struct ExpressionNode { mixin ExpressionNodeData!(AstType.abstract_node); StringLiteralExprNode* isStringLiteral() return { if (astType == AstType.literal_string) return cast(StringLiteralExprNode*)&this; return null; } }