summaryrefslogtreecommitdiffstats
path: root/js/src/shell/jsshell.h
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/shell/jsshell.h')
-rw-r--r--js/src/shell/jsshell.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/js/src/shell/jsshell.h b/js/src/shell/jsshell.h
new file mode 100644
index 000000000..a3ecbef99
--- /dev/null
+++ b/js/src/shell/jsshell.h
@@ -0,0 +1,84 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef jsshell_js_h
+#define jsshell_js_h
+
+#include "jsapi.h"
+
+namespace js {
+namespace shell {
+
+enum JSShellErrNum {
+#define MSG_DEF(name, count, exception, format) \
+ name,
+#include "jsshell.msg"
+#undef MSG_DEF
+ JSShellErr_Limit
+};
+
+const JSErrorFormatString*
+my_GetErrorMessage(void* userRef, const unsigned errorNumber);
+
+void
+WarningReporter(JSContext* cx, JSErrorReport* report);
+
+class MOZ_STACK_CLASS AutoReportException
+{
+ JSContext* cx;
+ public:
+ explicit AutoReportException(JSContext* cx)
+ : cx(cx)
+ {}
+ ~AutoReportException();
+};
+
+bool
+GenerateInterfaceHelp(JSContext* cx, JS::HandleObject obj, const char* name);
+
+JSString*
+FileAsString(JSContext* cx, JS::HandleString pathnameStr);
+
+class AutoCloseFile
+{
+ private:
+ FILE* f_;
+ public:
+ explicit AutoCloseFile(FILE* f) : f_(f) {}
+ ~AutoCloseFile() {
+ (void) release();
+ }
+ bool release() {
+ bool success = true;
+ if (f_ && f_ != stdin && f_ != stdout && f_ != stderr)
+ success = !fclose(f_);
+ f_ = nullptr;
+ return success;
+ }
+};
+
+// Reference counted file.
+struct RCFile {
+ FILE* fp;
+ uint32_t numRefs;
+
+ RCFile() : fp(nullptr), numRefs(0) {}
+ explicit RCFile(FILE* fp) : fp(fp), numRefs(0) {}
+
+ void acquire() { numRefs++; }
+
+ // Starts out with a ref count of zero.
+ static RCFile* create(JSContext* cx, const char* filename, const char* mode);
+
+ void close();
+ bool isOpen() const { return fp; }
+ bool release();
+};
+
+} /* namespace shell */
+} /* namespace js */
+
+#endif