mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Move language independent exception handling routines OUT of C++Exception.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8232 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
57
runtime/GCCLibraries/crtend/Exception.cpp
Normal file
57
runtime/GCCLibraries/crtend/Exception.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
//===- Exception.cpp - Generic language-independent exceptions ------------===//
|
||||
//
|
||||
// This file defines the the shared data structures used by all language
|
||||
// specific exception handling runtime libraries.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "Exception.h"
|
||||
#include <cassert>
|
||||
|
||||
// Thread local state for exception handling. FIXME: This should really be made
|
||||
// thread-local!
|
||||
|
||||
// UncaughtExceptionStack - The stack of exceptions currently being thrown.
|
||||
static llvm_exception *UncaughtExceptionStack = 0;
|
||||
|
||||
// __llvm_eh_has_uncaught_exception - This is used to implement
|
||||
// std::uncaught_exception.
|
||||
//
|
||||
bool __llvm_eh_has_uncaught_exception() throw() {
|
||||
return UncaughtExceptionStack != 0;
|
||||
}
|
||||
|
||||
// __llvm_eh_current_uncaught_exception - This function checks to see if the
|
||||
// current uncaught exception is of the specified language type. If so, it
|
||||
// returns a pointer to the exception area data.
|
||||
//
|
||||
void *__llvm_eh_current_uncaught_exception_type(unsigned HandlerType) throw() {
|
||||
assert(UncaughtExceptionStack && "No uncaught exception!");
|
||||
if (UncaughtExceptionStack->ExceptionType == HandlerType)
|
||||
return UncaughtExceptionStack+1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// __llvm_eh_add_uncaught_exception - This adds the specified exception to the
|
||||
// top of the uncaught exception stack. The exception should not already be on
|
||||
// the stack!
|
||||
void __llvm_eh_add_uncaught_exception(llvm_exception *E) throw() {
|
||||
E->Next = UncaughtExceptionStack;
|
||||
UncaughtExceptionStack = E;
|
||||
}
|
||||
|
||||
|
||||
// __llvm_eh_get_uncaught_exception - Returns the current uncaught exception.
|
||||
// There must be an uncaught exception for this to work!
|
||||
llvm_exception *__llvm_eh_get_uncaught_exception() throw() {
|
||||
assert(UncaughtExceptionStack && "There are no uncaught exceptions!?!?");
|
||||
return UncaughtExceptionStack;
|
||||
}
|
||||
|
||||
// __llvm_eh_pop_from_uncaught_stack - Remove the current uncaught exception
|
||||
// from the top of the stack.
|
||||
llvm_exception *__llvm_eh_pop_from_uncaught_stack() throw() {
|
||||
llvm_exception *E = __llvm_eh_get_uncaught_exception();
|
||||
UncaughtExceptionStack = E->Next;
|
||||
return E;
|
||||
}
|
Reference in New Issue
Block a user