llvm/clang/include/clang/AST/StmtObjC.h

//===--- StmtObjC.h - Classes for representing ObjC statements --*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

/// \file
/// Defines the Objective-C statement AST node classes.

#ifndef LLVM_CLANG_AST_STMTOBJC_H
#define LLVM_CLANG_AST_STMTOBJC_H

#include "clang/AST/Stmt.h"
#include "llvm/Support/Compiler.h"

namespace clang {

/// Represents Objective-C's collection statement.
///
/// This is represented as 'for (element 'in' collection-expression)' stmt.
class ObjCForCollectionStmt : public Stmt {};

/// Represents Objective-C's \@catch statement.
class ObjCAtCatchStmt : public Stmt {};

/// Represents Objective-C's \@finally statement
class ObjCAtFinallyStmt : public Stmt {};

/// Represents Objective-C's \@try ... \@catch ... \@finally statement.
class ObjCAtTryStmt final
    : public Stmt,
      private llvm::TrailingObjects<ObjCAtTryStmt, Stmt *> {};

/// Represents Objective-C's \@synchronized statement.
///
/// Example:
/// \code
///   @synchronized (sem) {
///     do-something;
///   }
/// \endcode
class ObjCAtSynchronizedStmt : public Stmt {};

/// Represents Objective-C's \@throw statement.
class ObjCAtThrowStmt : public Stmt {};

/// Represents Objective-C's \@autoreleasepool Statement
class ObjCAutoreleasePoolStmt : public Stmt {};

}  // end namespace clang

#endif