//===--- SyntaxKinds.def - Swift Syntax Node Metaprogramming --------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

#define DECL(Id, Parent) SYNTAX(Id##Decl, Parent)
#define STMT(Id, Parent) SYNTAX(Id##Stmt, Parent)
#define EXPR(Id, Parent) SYNTAX(Id##Expr, Parent)
#define PATTERN(Id, Parent) SYNTAX(Id##Pattern, Parent)

//#include "swift/AST/DeclNodes.def"
//#include "swift/AST/StmtNodes.def"
//#include "swift/AST/ExprNodes.def"
//#include "swift/AST/PatternNodes.def"

#ifndef ABSTRACT_SYNTAX
#define ABSTRACT_SYNTAX(Id, Parent)
#endif

#ifndef SYNTAX_RANGE
#define SYNTAX_RANGE(Id, First, Last)
#endif

#ifndef MISSING_SYNTAX
#define MISSING_SYNTAX(Id, Parent)
#endif

SYNTAX(Unknown, Syntax)

// Decls
ABSTRACT_SYNTAX(DeclSyntax, Syntax)
  MISSING_SYNTAX(MissingDecl, DeclSyntax)
  SYNTAX(UnknownDecl, DeclSyntax)
  SYNTAX(StructDecl, DeclSyntax)
  SYNTAX(TypeAliasDecl, DeclSyntax)
  SYNTAX(FunctionDecl, DeclSyntax)

SYNTAX_RANGE(Decl, MissingDecl, FunctionDecl)

SYNTAX(DeclMembers, Syntax)
SYNTAX(GenericParameter, Syntax)
SYNTAX(GenericParameterClause, Syntax)
SYNTAX(GenericParameterList, Syntax)

SYNTAX(GenericWhereClause, Syntax)
SYNTAX(GenericRequirementList, Syntax)
SYNTAX(GenericArgumentClause, Syntax)
SYNTAX(GenericArgumentList, Syntax)
ABSTRACT_SYNTAX(GenericRequirementSyntax, Syntax)
  SYNTAX(ConformanceRequirement, GenericRequirementSyntax)
  SYNTAX(SameTypeRequirement, GenericRequirementSyntax)
SYNTAX(TypeArgumentList, Syntax)

// Types
ABSTRACT_SYNTAX(TypeSyntax, Syntax)
  MISSING_SYNTAX(MissingType, TypeSyntax)
  SYNTAX(MetatypeType, TypeSyntax)
  SYNTAX(TypeIdentifier, TypeSyntax)
  SYNTAX(TupleType, TypeSyntax)
  SYNTAX(OptionalType, TypeSyntax)
  SYNTAX(ImplicitlyUnwrappedOptionalType, TypeSyntax)
  SYNTAX(ArrayType, TypeSyntax)
  SYNTAX(DictionaryType, TypeSyntax)
  SYNTAX(FunctionType, TypeSyntax)
SYNTAX_RANGE(Type, MissingType, FunctionType)

// Statements
SYNTAX(StmtList, Syntax)

ABSTRACT_SYNTAX(StmtSyntax, Syntax)
  SYNTAX(UnknownStmt, StmtSyntax)
  SYNTAX(CodeBlockStmt, StmtSyntax)
  SYNTAX(FallthroughStmt, StmtSyntax)
  SYNTAX(BreakStmt, StmtSyntax)
  SYNTAX(ContinueStmt, StmtSyntax)
  SYNTAX(ReturnStmt, StmtSyntax)
SYNTAX_RANGE(Stmt, UnknownStmt, ReturnStmt)

// Expressions
ABSTRACT_SYNTAX(ExprSyntax, Syntax)
  MISSING_SYNTAX(MissingExpr, ExprSyntax)
  SYNTAX(UnknownExpr, ExprSyntax)
  SYNTAX(IntegerLiteralExpr, ExprSyntax)
  SYNTAX(FunctionCallExpr, ExprSyntax)
  SYNTAX(SymbolicReferenceExpr, ExprSyntax)
SYNTAX_RANGE(Expr, MissingExpr, SymbolicReferenceExpr)

// Other stuff
SYNTAX(BalancedTokens, Syntax)
SYNTAX(TypeAttribute, Syntax)
SYNTAX(TypeAttributes, Syntax)
SYNTAX(TupleTypeElement, Syntax)
SYNTAX(FunctionTypeArgument, Syntax)
SYNTAX(FunctionCallArgumentList, Syntax)
SYNTAX(FunctionCallArgument, Syntax)
SYNTAX(FunctionSignature, Syntax)
SYNTAX(FunctionParameterList, Syntax)
SYNTAX(FunctionParameter, Syntax)
SYNTAX(DeclModifier, Syntax)
SYNTAX(DeclModifierList, Syntax)

#undef ABSTRACT_SYNTAX
#undef DECL
#undef STMT
#undef EXPR
#undef PATTERN
#undef SYNTAX
#undef MISSING_SYNTAX
#undef SYNTAX_RANGE
