[gjs] move gjs_error_reporter into a C++ file jsapi-private.cpp



commit 53716acf7d314a899fb00bb1e9ac71d1425e38a4
Author: Havoc Pennington <hp pobox com>
Date:   Sun Jan 3 11:48:27 2010 -0500

    move gjs_error_reporter into a C++ file jsapi-private.cpp
    
    The issue is that in latest SpiderMonkey, the headers are C++.
    jsapi-util.c included jscntxt.h (a C++ header) which is used
    only to implement gjs_error_reporter. jsapi-private.cpp will
    now contain any usage of private JS APIs that require the
    C++ headers.
    
    jsapi-private.h was added as well, but is empty; this is meant
    to export APIs for use by jsapi-util.c ... currently none.

 Makefile.am           |    4 ++-
 gjs/jsapi-private.cpp |   84 +++++++++++++++++++++++++++++++++++++++++++++++++
 gjs/jsapi-private.h   |   40 +++++++++++++++++++++++
 gjs/jsapi-util.c      |   53 +-----------------------------
 4 files changed, 129 insertions(+), 52 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index fa0bbb8..f06dae7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,6 +28,7 @@ nobase_gjsinclude_HEADERS =	\
 noinst_HEADERS +=		\
 	gjs/compat.h		\
 	gjs/context-jsapi.h	\
+	gjs/jsapi-private.h	\
 	gjs/profiler.h		\
 	util/crash.h		\
 	util/error.h		\
@@ -66,7 +67,8 @@ libgjs_la_LIBADD = 		\
 libgjs_la_SOURCES =		\
 	gjs/context.c		\
 	gjs/importer.c		\
-	gjs/jsapi-util.c		\
+	gjs/jsapi-private.cpp	\
+	gjs/jsapi-util.c	\
 	gjs/jsapi-util-array.c	\
 	gjs/jsapi-util-error.c	\
 	gjs/jsapi-util-string.c	\
diff --git a/gjs/jsapi-private.cpp b/gjs/jsapi-private.cpp
new file mode 100644
index 0000000..b27935a
--- /dev/null
+++ b/gjs/jsapi-private.cpp
@@ -0,0 +1,84 @@
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (c) 2010  litl, LLC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <config.h>
+
+#include <util/log.h>
+#include <util/glib.h>
+#include <util/misc.h>
+
+#include "jsapi-util.h"
+#include "jsapi-private.h"
+#include "context-jsapi.h"
+
+#include <string.h>
+#include <jscntxt.h>
+
+void
+gjs_error_reporter(JSContext     *context,
+                   const char    *message,
+                   JSErrorReport *report)
+{
+    const char *warning;
+
+    if (gjs_environment_variable_is_set("GJS_ABORT_ON_OOM") &&
+        report->flags == JSREPORT_ERROR &&
+        report->errorNumber == JSMSG_OUT_OF_MEMORY) {
+        g_error("GJS ran out of memory at %s: %i.",
+                report->filename,
+                report->lineno);
+    }
+
+    if ((report->flags & JSREPORT_WARNING) != 0) {
+        /* We manually insert "WARNING" into the output instead of
+         * having GJS_DEBUG_WARNING because it's convenient to
+         * search for 'JS ERROR' to find all problems
+         */
+        warning = "WARNING: ";
+
+        /* suppress bogus warnings. See mozilla/js/src/js.msg */
+        switch (report->errorNumber) {
+            /* 162, JSMSG_UNDEFINED_PROP: warns every time a lazy property
+             * is resolved, since the property starts out
+             * undefined. When this is a real bug it should usually
+             * fail somewhere else anyhow.
+             */
+        case 162:
+            return;
+        }
+    } else {
+        warning = "REPORTED: ";
+    }
+
+    gjs_debug(GJS_DEBUG_ERROR,
+              "%s'%s'",
+              warning,
+              message);
+
+    gjs_debug(GJS_DEBUG_ERROR,
+              "%sfile '%s' line %u exception %d number %d",
+              warning,
+              report->filename, report->lineno,
+              (report->flags & JSREPORT_EXCEPTION) != 0,
+              report->errorNumber);
+}
diff --git a/gjs/jsapi-private.h b/gjs/jsapi-private.h
new file mode 100644
index 0000000..f48affe
--- /dev/null
+++ b/gjs/jsapi-private.h
@@ -0,0 +1,40 @@
+/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (c) 2010 litl, LLC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+/* This file wraps C++ stuff from the spidermonkey private API so we
+ * can use it from our other C files. This file should be included by
+ * jsapi-util.c only. "Public" API from this jsapi-private.c should be
+ * declared in jsapi-util.h
+ */
+
+#ifndef __GJS_JSAPI_PRIVATE_H__
+#define __GJS_JSAPI_PRIVATE_H__
+
+#include <jsapi.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+G_END_DECLS
+
+#endif  /* __GJS_JSAPI_PRIVATE_H__ */
diff --git a/gjs/jsapi-util.c b/gjs/jsapi-util.c
index 57ca732..ff268d6 100644
--- a/gjs/jsapi-util.c
+++ b/gjs/jsapi-util.c
@@ -30,11 +30,11 @@
 
 #include "jsapi-util.h"
 #include "context-jsapi.h"
+#include "jsapi-private.h"
 
 #include <string.h>
-#include <jscntxt.h>
 
-GQuark 
+GQuark
 gjs_util_error_quark (void)
 {
   return g_quark_from_static_string ("gjs-util-error-quark");
@@ -920,55 +920,6 @@ gjs_call_function_value(JSContext      *context,
     return result;
 }
 
-void
-gjs_error_reporter(JSContext     *context,
-                   const char    *message,
-                   JSErrorReport *report)
-{
-    const char *warning;
-
-    if (gjs_environment_variable_is_set("GJS_ABORT_ON_OOM") &&
-        report->flags == JSREPORT_ERROR &&
-        report->errorNumber == JSMSG_OUT_OF_MEMORY) {
-        g_error("GJS ran out of memory at %s: %i.",
-                report->filename,
-                report->lineno);
-    }
-
-    if ((report->flags & JSREPORT_WARNING) != 0) {
-        /* We manually insert "WARNING" into the output instead of
-         * having GJS_DEBUG_WARNING because it's convenient to
-         * search for 'JS ERROR' to find all problems
-         */
-        warning = "WARNING: ";
-
-        /* suppress bogus warnings. See mozilla/js/src/js.msg */
-        switch (report->errorNumber) {
-            /* 162, JSMSG_UNDEFINED_PROP: warns every time a lazy property
-             * is resolved, since the property starts out
-             * undefined. When this is a real bug it should usually
-             * fail somewhere else anyhow.
-             */
-        case 162:
-            return;
-        }
-    } else {
-        warning = "REPORTED: ";
-    }
-
-    gjs_debug(GJS_DEBUG_ERROR,
-              "%s'%s'",
-              warning,
-              message);
-
-    gjs_debug(GJS_DEBUG_ERROR,
-              "%sfile '%s' line %u exception %d number %d",
-              warning,
-              report->filename, report->lineno,
-              (report->flags & JSREPORT_EXCEPTION) != 0,
-              report->errorNumber);
-}
-
 static JSBool
 log_prop(JSContext  *context,
          JSObject   *obj,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]