author | Jeff Walden <jwalden@mit.edu> |
Mon, 19 Dec 2011 14:28:35 -0500 | |
changeset 83237 | 0df00b3b8846361c28b8147a2ce781d69e467cf2 |
parent 83236 | 7c0b89927f59d0b43317e76e0f43756a63ebd9e3 |
child 83238 | cffea4a903accb901b02517270378f6d76403382 |
push id | 21742 |
push user | bmo@edmorley.co.uk |
push date | Thu, 22 Dec 2011 11:29:57 +0000 |
treeherder | mozilla-central@c5b90ea7e475 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | luke |
bugs | 712129 |
milestone | 12.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
mfbt/Assertions.h | file | annotate | diff | comparison | revisions | |
mfbt/GuardObjects.h | file | annotate | diff | comparison | revisions | |
mfbt/RangedPtr.h | file | annotate | diff | comparison | revisions | |
mfbt/RefPtr.h | file | annotate | diff | comparison | revisions | |
mfbt/Util.h | file | annotate | diff | comparison | revisions | |
mfbt/exported_headers.mk | file | annotate | diff | comparison | revisions |
new file mode 100644 --- /dev/null +++ b/mfbt/Assertions.h @@ -0,0 +1,83 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sw=4 et tw=99 ft=cpp: + * + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Jeff Walden <jwalden+code@mit.edu> + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef mozilla_Assertions_h_ +#define mozilla_Assertions_h_ + +#include "mozilla/Types.h" + +/* + * XXX: we're cheating here in order to avoid creating object files + * for mfbt /just/ to provide a function like FatalError() to be used + * by MOZ_ASSERT(). (It'll happen eventually, but for just ASSERT() + * it isn't worth the pain.) JS_Assert(), although unfortunately + * named, is part of SpiderMonkey's stable, external API, so this + * isn't quite as bad as it seems. + * + * Once mfbt needs object files, this unholy union with JS_Assert() + * will be broken. + * + * JS_Assert is present even in release builds, for the benefit of applications + * that build DEBUG and link against a non-DEBUG SpiderMonkey library. + */ +#ifdef __cplusplus +extern "C" { +#endif + +extern MFBT_API(void) +JS_Assert(const char* s, const char* file, int ln); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* + * MOZ_ASSERT() is a "strong" assertion of state, like libc's + * assert(). If a MOZ_ASSERT() fails in a debug build, the process in + * which it fails will stop running in a loud and dramatic way. + */ +#ifdef DEBUG +# define MOZ_ASSERT(expr_) \ + ((expr_) ? ((void)0) : JS_Assert(#expr_, __FILE__, __LINE__)) +#else +# define MOZ_ASSERT(expr_) ((void)0) +#endif /* DEBUG */ + +#endif /* mozilla_Assertions_h_ */
--- a/mfbt/GuardObjects.h +++ b/mfbt/GuardObjects.h @@ -36,18 +36,17 @@ * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_GuardObjects_h #define mozilla_GuardObjects_h -#include "mozilla/Types.h" -#include "mozilla/Util.h" +#include "mozilla/Assertions.h" namespace mozilla { /** * The following classes are designed to cause assertions to detect * inadvertent use of guard objects as temporaries. In other words, * when we have a guard object whose only purpose is its constructor and * destructor (and is never otherwise referenced), the intended use * might be:
--- a/mfbt/RangedPtr.h +++ b/mfbt/RangedPtr.h @@ -36,16 +36,17 @@ * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_RangedPtr_h_ #define mozilla_RangedPtr_h_ +#include "mozilla/Assertions.h" #include "mozilla/Attributes.h" #include "mozilla/Util.h" namespace mozilla { /* * RangedPtr is a smart pointer restricted to an address range specified at * creation. The pointer (and any smart pointers derived from it) must remain
--- a/mfbt/RefPtr.h +++ b/mfbt/RefPtr.h @@ -36,16 +36,17 @@ * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_RefPtr_h_ #define mozilla_RefPtr_h_ +#include "mozilla/Assertions.h" #include "mozilla/Attributes.h" #include "mozilla/Util.h" /** * Helpers for defining and using refcounted objects. */ namespace mozilla {
--- a/mfbt/Util.h +++ b/mfbt/Util.h @@ -35,53 +35,21 @@ * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef mozilla_Util_h_ #define mozilla_Util_h_ +#include "mozilla/Assertions.h" #include "mozilla/Attributes.h" #include "mozilla/Types.h" /* - * XXX: we're cheating here in order to avoid creating object files - * for mfbt /just/ to provide a function like FatalError() to be used - * by MOZ_ASSERT(). (It'll happen eventually, but for just ASSERT() - * it isn't worth the pain.) JS_Assert(), although unfortunately - * named, is part of SpiderMonkey's stable, external API, so this - * isn't quite as bad as it seems. - * - * Once mfbt needs object files, this unholy union with JS_Assert() - * will be broken. - * - * JS_Assert is present even in release builds, for the benefit of applications - * that build DEBUG and link against a non-DEBUG SpiderMonkey library. - */ -MOZ_BEGIN_EXTERN_C - -extern MFBT_API(void) -JS_Assert(const char *s, const char *file, int ln); - -MOZ_END_EXTERN_C - -/* - * MOZ_ASSERT() is a "strong" assertion of state, like libc's - * assert(). If a MOZ_ASSERT() fails in a debug build, the process in - * which it fails will stop running in a loud and dramatic way. - */ -#ifdef DEBUG -# define MOZ_ASSERT(expr_) \ - ((expr_) ? (void)0 : JS_Assert(#expr_, __FILE__, __LINE__)) -#else -# define MOZ_ASSERT(expr_) ((void)0) -#endif /* DEBUG */ - -/* * MOZ_INLINE is a macro which expands to tell the compiler that the method * decorated with it should be inlined. This macro is usable from C and C++ * code, even though C89 does not support the |inline| keyword. The compiler * may ignore this directive if it chooses. */ #ifndef MOZ_INLINE # if defined __cplusplus # define MOZ_INLINE inline
--- a/mfbt/exported_headers.mk +++ b/mfbt/exported_headers.mk @@ -37,16 +37,17 @@ # This file defines the headers exported by mfbt. It is included by mfbt # itself and by the JS engine, which, when built standalone, must install # mfbt's exported headers itself. EXPORTS_NAMESPACES += mozilla EXPORTS_mozilla += \ + Assertions.h \ Attributes.h \ GuardObjects.h \ MSStdInt.h \ RangedPtr.h \ RefPtr.h \ StdInt.h \ Types.h \ Util.h \