diff options
Diffstat (limited to 'js/src/shell/jsshell.h')
-rw-r--r-- | js/src/shell/jsshell.h | 84 |
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 |