//===--- Assert.cpp - Assertion failure reporting -------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // Implementation of // //===----------------------------------------------------------------------===// #include "swift/Runtime/Config.h" #include "swift/Runtime/Debug.h" #include #include #include using namespace swift; // Report a fatal error to system console, stderr, and crash logs. // : : file , line \n // The message may be omitted by passing messageLength=0. SWIFT_RUNTIME_STDLIB_INTERFACE extern "C" void _swift_stdlib_reportFatalErrorInFile(const char *prefix, intptr_t prefixLength, const char *message, intptr_t messageLength, const char *file, intptr_t fileLength, uintptr_t line, uint32_t flags) { char *log; asprintf(&log, "%.*s: %.*s%sfile %.*s, line %zu\n", (int)prefixLength, prefix, (int)messageLength, message, (messageLength ? ": " : ""), (int)fileLength, file, (size_t)line); swift_reportError(flags, log); free(log); } // Report a fatal error to system console, stderr, and crash logs. // : : file , line \n // The message may be omitted by passing messageLength=0. SWIFT_RUNTIME_STDLIB_INTERFACE extern "C" void _swift_stdlib_reportFatalError(const char *prefix, intptr_t prefixLength, const char *message, intptr_t messageLength, uint32_t flags) { char *log; asprintf(&log, "%.*s: %.*s\n", (int)prefixLength, prefix, (int)messageLength, message); swift_reportError(flags, log); free(log); } // Report a call to an unimplemented initializer. // : : : fatal error: use of unimplemented // initializer '' for class 'className' SWIFT_RUNTIME_STDLIB_INTERFACE extern "C" void _swift_stdlib_reportUnimplementedInitializerInFile( const char *className, intptr_t classNameLength, const char *initName, intptr_t initNameLength, const char *file, intptr_t fileLength, uintptr_t line, uintptr_t column, uint32_t flags) { char *log; asprintf(&log, "%.*s: %zu: %zu: fatal error: use of unimplemented " "initializer '%.*s' for class '%.*s'\n", (int)fileLength, file, (size_t)line, (size_t)column, (int)initNameLength, initName, (int)classNameLength, className); swift_reportError(flags, log); free(log); } // Report a call to an unimplemented initializer. // fatal error: use of unimplemented initializer '' for class // 'className' SWIFT_RUNTIME_STDLIB_INTERFACE extern "C" void _swift_stdlib_reportUnimplementedInitializer(const char *className, intptr_t classNameLength, const char *initName, intptr_t initNameLength, uint32_t flags) { char *log; asprintf(&log, "fatal error: use of unimplemented " "initializer '%.*s' for class '%.*s'\n", (int)initNameLength, initName, (int)classNameLength, className); swift_reportError(flags, log); free(log); }