Bug 712129 - Move assertion code into a new mfbt/Assertions.h header. r=luke
authorJeff Walden <jwalden@mit.edu>
Mon, 19 Dec 2011 14:28:35 -0500
changeset 83237 0df00b3b8846361c28b8147a2ce781d69e467cf2
parent 83236 7c0b89927f59d0b43317e76e0f43756a63ebd9e3
child 83238 cffea4a903accb901b02517270378f6d76403382
push id21742
push userbmo@edmorley.co.uk
push dateThu, 22 Dec 2011 11:29:57 +0000
treeherdermozilla-central@c5b90ea7e475 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersluke
bugs712129
milestone12.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
Bug 712129 - Move assertion code into a new mfbt/Assertions.h header. r=luke
mfbt/Assertions.h
mfbt/GuardObjects.h
mfbt/RangedPtr.h
mfbt/RefPtr.h
mfbt/Util.h
mfbt/exported_headers.mk
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 \