//===--- ExprNodes.def - Swift Expression AST Metaprogramming ---*- C++ -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // // This file defines macros used for macro-metaprogramming with expressions. // //===----------------------------------------------------------------------===// /// EXPR(Id, Parent) /// If the expression node is not abstract, its enumerator value is /// ExprKind::Id. The node's class name is Id##Expr, and the name of /// its base class (in the Expr hierarchy) is Parent. #ifndef EXPR #define EXPR(Id, Parent) #endif /// An abstract expression node is an abstract base class in the hierarchy; /// it is never a most-derived type, and it does not have an enumerator in /// ExprKind. /// /// Most metaprograms do not care about abstract expressions, so the default /// is to ignore them. #ifndef ABSTRACT_EXPR #define ABSTRACT_EXPR(Id, Parent) #endif /// An "unchecked" expression node is removed from valid code by the end /// of the type-checking phase. /// /// By default, these are treated like any other expression. #ifndef UNCHECKED_EXPR #define UNCHECKED_EXPR(Id, Parent) EXPR(Id, Parent) #endif /// A convenience for determining the range of expressions. These will always /// appear immediately after the last member. #ifndef EXPR_RANGE #define EXPR_RANGE(Id, First, Last) #endif EXPR(Error, Expr) ABSTRACT_EXPR(Literal, Expr) EXPR(NilLiteral, LiteralExpr) ABSTRACT_EXPR(NumberLiteral, LiteralExpr) EXPR(IntegerLiteral, NumberLiteralExpr) EXPR(FloatLiteral, NumberLiteralExpr) EXPR_RANGE(NumberLiteral, IntegerLiteral, FloatLiteral) EXPR(BooleanLiteral, LiteralExpr) EXPR(StringLiteral, LiteralExpr) EXPR(InterpolatedStringLiteral, LiteralExpr) EXPR(ObjectLiteral, LiteralExpr) EXPR(MagicIdentifierLiteral, LiteralExpr) EXPR_RANGE(Literal, NilLiteral, MagicIdentifierLiteral) EXPR(DiscardAssignment, Expr) EXPR(DeclRef, Expr) EXPR(SuperRef, Expr) EXPR(Type, Expr) EXPR(OtherConstructorDeclRef, Expr) EXPR(DotSyntaxBaseIgnored, Expr) ABSTRACT_EXPR(OverloadSetRef, Expr) UNCHECKED_EXPR(OverloadedDeclRef, OverloadSetRefExpr) UNCHECKED_EXPR(OverloadedMemberRef, OverloadSetRefExpr) EXPR_RANGE(OverloadSetRef, OverloadedDeclRef, OverloadedMemberRef) UNCHECKED_EXPR(UnresolvedDeclRef, Expr) EXPR(MemberRef, Expr) ABSTRACT_EXPR(DynamicLookup, Expr) EXPR(DynamicMemberRef, DynamicLookupExpr) EXPR(DynamicSubscript, DynamicLookupExpr) EXPR_RANGE(DynamicLookup, DynamicMemberRef, DynamicSubscript) UNCHECKED_EXPR(UnresolvedSpecialize, Expr) UNCHECKED_EXPR(UnresolvedMember, Expr) UNCHECKED_EXPR(UnresolvedDot, Expr) UNCHECKED_EXPR(Sequence, Expr) ABSTRACT_EXPR(Identity, Expr) EXPR(Paren, IdentityExpr) EXPR(DotSelf, IdentityExpr) EXPR_RANGE(Identity, Paren, DotSelf) ABSTRACT_EXPR(AnyTry, Expr) EXPR(Try, AnyTryExpr) EXPR(ForceTry, AnyTryExpr) EXPR(OptionalTry, AnyTryExpr) EXPR_RANGE(AnyTry, Try, OptionalTry) EXPR(Tuple, Expr) ABSTRACT_EXPR(Collection, Expr) EXPR(Array, CollectionExpr) EXPR(Dictionary, CollectionExpr) EXPR_RANGE(Collection, Array, Dictionary) EXPR(Subscript, Expr) EXPR(TupleElement, Expr) EXPR(CaptureList, Expr) ABSTRACT_EXPR(AbstractClosure, Expr) EXPR(Closure, AbstractClosureExpr) EXPR(AutoClosure, AbstractClosureExpr) EXPR_RANGE(AbstractClosure, Closure, AutoClosure) EXPR(InOut, Expr) EXPR(DynamicType, Expr) EXPR(RebindSelfInConstructor, Expr) EXPR(OpaqueValue, Expr) EXPR(BindOptional, Expr) EXPR(OptionalEvaluation, Expr) EXPR(ForceValue, Expr) EXPR(OpenExistential, Expr) ABSTRACT_EXPR(Apply, Expr) EXPR(Call, ApplyExpr) EXPR(PrefixUnary, ApplyExpr) EXPR(PostfixUnary, ApplyExpr) EXPR(Binary, ApplyExpr) ABSTRACT_EXPR(SelfApply, ApplyExpr) EXPR(DotSyntaxCall, SelfApplyExpr) EXPR(ConstructorRefCall, SelfApplyExpr) EXPR_RANGE(SelfApply, DotSyntaxCall, ConstructorRefCall) EXPR_RANGE(Apply, Call, ConstructorRefCall) ABSTRACT_EXPR(ImplicitConversion, Expr) EXPR(Load, ImplicitConversionExpr) EXPR(TupleShuffle, ImplicitConversionExpr) EXPR(UnresolvedTypeConversion, ImplicitConversionExpr) EXPR(FunctionConversion, ImplicitConversionExpr) EXPR(CovariantFunctionConversion, ImplicitConversionExpr) EXPR(CovariantReturnConversion, ImplicitConversionExpr) EXPR(MetatypeConversion, ImplicitConversionExpr) EXPR(CollectionUpcastConversion, ImplicitConversionExpr) EXPR(Erasure, ImplicitConversionExpr) EXPR(DerivedToBase, ImplicitConversionExpr) EXPR(ArchetypeToSuper, ImplicitConversionExpr) EXPR(InjectIntoOptional, ImplicitConversionExpr) EXPR(ClassMetatypeToObject, ImplicitConversionExpr) EXPR(ExistentialMetatypeToObject, ImplicitConversionExpr) EXPR(ProtocolMetatypeToObject, ImplicitConversionExpr) EXPR(InOutToPointer, ImplicitConversionExpr) EXPR(ArrayToPointer, ImplicitConversionExpr) EXPR(StringToPointer, ImplicitConversionExpr) EXPR(PointerToPointer, ImplicitConversionExpr) EXPR(LValueToPointer, ImplicitConversionExpr) EXPR(ForeignObjectConversion, ImplicitConversionExpr) EXPR_RANGE(ImplicitConversion, Load, ForeignObjectConversion) ABSTRACT_EXPR(ExplicitCast, Expr) ABSTRACT_EXPR(CheckedCast, ExplicitCastExpr) EXPR(ForcedCheckedCast, CheckedCastExpr) EXPR(ConditionalCheckedCast, CheckedCastExpr) EXPR(Is, CheckedCastExpr) EXPR_RANGE(CheckedCast, ForcedCheckedCast, Is) EXPR(Coerce, ExplicitCastExpr) EXPR_RANGE(ExplicitCast, ForcedCheckedCast, Coerce) UNCHECKED_EXPR(Arrow, Expr) EXPR(If, Expr) EXPR(Assign, Expr) EXPR(DefaultValue, Expr) EXPR(CodeCompletion, Expr) UNCHECKED_EXPR(UnresolvedPattern, Expr) EXPR(EditorPlaceholder, Expr) EXPR(ObjCSelector, Expr) #undef EXPR_RANGE #undef UNCHECKED_EXPR #undef ABSTRACT_EXPR #undef EXPR