mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Implement exhaustiveness checking in Sema with rich error messages. The algorithm used is a variant of the one described in Fengyun Liu's paper "A Generic Algorithm for Checking Exhaustivity of Pattern Matching" published in the EPFL conference, and Luc Maranget's seminal paper "Warnings for Pattern Matching" The Space Engine views pattern matching as a problem of projecting the scrutinee of a pattern-match into a "Space", then iteratively constructing a Space from the cases. Taking the difference of this master space and the covered spaces yields the "holes" left over or reveals a completely covered space. The algorithm also extends trivially to redundancy checks in patterns, but that check is already implemented in SILGen and this algorithm does not improve upon it.
43 lines
1.2 KiB
C++
43 lines
1.2 KiB
C++
//===--- DiagnosticsSema.h - Diagnostic Definitions -------------*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
/// \file
|
|
/// \brief This file defines diagnostics for semantic analysis.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_DIAGNOSTICSSEMA_H
|
|
#define SWIFT_DIAGNOSTICSSEMA_H
|
|
|
|
#include "swift/AST/DiagnosticsCommon.h"
|
|
|
|
namespace swift {
|
|
class SwitchStmt;
|
|
namespace diag {
|
|
|
|
/// Describes the kind of requirement in a protocol.
|
|
enum class RequirementKind : uint8_t {
|
|
Constructor,
|
|
Func,
|
|
Var,
|
|
Subscript
|
|
};
|
|
|
|
// Declare common diagnostics objects with their appropriate types.
|
|
#define DIAG(KIND,ID,Options,Text,Signature) \
|
|
extern detail::DiagWithArguments<void Signature>::type ID;
|
|
#include "DiagnosticsSema.def"
|
|
}
|
|
}
|
|
|
|
#endif
|