diff options
Diffstat (limited to 'Firestore/Source/Util/FSTAssert.h')
-rw-r--r-- | Firestore/Source/Util/FSTAssert.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/Firestore/Source/Util/FSTAssert.h b/Firestore/Source/Util/FSTAssert.h new file mode 100644 index 0000000..77bbb1d --- /dev/null +++ b/Firestore/Source/Util/FSTAssert.h @@ -0,0 +1,77 @@ +/* + * Copyright 2017 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +// Fails the current Objective-C method if the given condition is false. +// +// Unlike NSAssert, this macro is never compiled out if assertions are disabled. +#define FSTAssert(condition, format, ...) \ + do { \ + if (!(condition)) { \ + FSTFail((format), ##__VA_ARGS__); \ + } \ + } while (0) + +// Fails the current C function if the given condition is false. +// +// Unlike NSCAssert, this macro is never compiled out if assertions are disabled. +#define FSTCAssert(condition, format, ...) \ + do { \ + if (!(condition)) { \ + FSTCFail((format), ##__VA_ARGS__); \ + } \ + } while (0) + +// Unconditionally fails the current Objective-C method. +// +// This macro fails by calling [[NSAssertionHandler currentHandler] handleFailureInMethod]. It +// also calls abort(3) in order to make this macro appear to never return, even though the call +// to handleFailureInMethod itself never returns. +#define FSTFail(format, ...) \ + do { \ + NSString *_file = [NSString stringWithUTF8String:__FILE__]; \ + NSString *_description = [NSString stringWithFormat:(format), ##__VA_ARGS__]; \ + [[NSAssertionHandler currentHandler] \ + handleFailureInMethod:_cmd \ + object:self \ + file:_file \ + lineNumber:__LINE__ \ + description:@"FIRESTORE INTERNAL ASSERTION FAILED: %@", _description]; \ + abort(); \ + } while (0) + +// Unconditionally fails the current C function. +// +// This macro fails by calling [[NSAssertionHandler currentHandler] handleFailureInFunction]. It +// also calls abort(3) in order to make this macro appear to never return, even though the call +// to handleFailureInFunction itself never returns. +#define FSTCFail(format, ...) \ + do { \ + NSString *_file = [NSString stringWithUTF8String:__FILE__]; \ + NSString *_function = [NSString stringWithUTF8String:__PRETTY_FUNCTION__]; \ + NSString *_description = [NSString stringWithFormat:(format), ##__VA_ARGS__]; \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:_function \ + file:_file \ + lineNumber:__LINE__ \ + description:@"FIRESTORE INTERNAL ASSERTION FAILED: %@", _description]; \ + abort(); \ + } while (0) + +NS_ASSUME_NONNULL_END |