⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsicontext.hpp

📁 OSB-PIK-OpenVXI-3.0.0源代码 “中国XML论坛 - 专业的XML技术讨论区--XML在语音技术中的应用”
💻 HPP
字号:
 /****************License************************************************  *  * Copyright 2000-2003.  ScanSoft, Inc.      *  * Use of this software is subject to notices and obligations set forth   * in the SpeechWorks Public License - Software Version 1.2 which is   * included with this software.   *  * ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,   * SpeechWorks and the SpeechWorks logo are registered trademarks or   * trademarks of SpeechWorks International, Inc. in the United States   * and other countries.  *  ***********************************************************************/  /*****************************************************************************  *****************************************************************************  *  *  * JsiContext, class for managing JavaScript contexts  *  * The JsiContext class represents a JavaScript context, a script  * execution state. All JavaScript variables are maintained in a  * context, and all scripts are executed in reference to a context  * (for accessing variables and maintaining script side-effects). Each  * context may have one or more scopes that are used to layer the  * state information so that it is possible for clients to control the  * lifetime of state information within the context.  *  *****************************************************************************  ****************************************************************************/  // -----1=0-------2=0-------3=0-------4=0-------5=0-------6=0-------7=0-------8  #ifndef _JSI_CONTEXT_H__ #define _JSI_CONTEXT_H__  #include "VXIjsi.h"              // For VXIjsiResult codes #include "SBjsiString.hpp"      // For SBinetString class #include "SBjsiLogger.hpp"      // For SBjsiLogger base class  #ifndef HAVE_SPIDERMONKEY #error Need Mozilla SpiderMonkey to build this ECMAScript integration #endif #include <jsapi.h>               // SpiderMonkey API, for typedefs  #ifndef JS_DLL_CALLBACK #define JS_DLL_CALLBACK CRT_CALL // For SpiderMonkey 1.5 RC 3 and earlier #endif  class JsiRuntime; class JsiProtectedJsval; class JsiScopeChainNode; extern "C" struct VXIlogInterface;  class JsiContext : public SBjsiLogger {  public:   // Constructor and destructor   JsiContext( );   virtual ~JsiContext( );    // Creation method   VXIjsiResult Create (JsiRuntime        *runtime,  		       long               contextSize,  		       long               maxBranches, 		       VXIlogInterface   *log, 		       VXIunsigned        diagTagBase);    // Create a script variable relative to the current scope   VXIjsiResult CreateVar (const VXIchar  *name,  			  const VXIchar  *expr);   VXIjsiResult CreateVar (const VXIchar  *name,  			  const VXIValue *value);      // Set a script variable relative to the current scope   VXIjsiResult SetVar (const VXIchar     *name,  		       const VXIchar     *expr);   VXIjsiResult SetVar (const VXIchar     *name,  		       const VXIValue    *value);      // Get the value of a variable   VXIjsiResult GetVar (const VXIchar     *name, 		       VXIValue         **value) const;      // Check whether a variable is defined (not void, could be NULL)   VXIjsiResult CheckVar (const VXIchar   *name) const;  	// Set the given variable to read-only attribute   VXIjsiResult SetReadOnly(const VXIchar *name) const;      // Execute a script, optionally returning any execution result   VXIjsiResult Eval (const VXIchar       *expr, 		     VXIValue           **result);      // Push a new context onto the scope chain (add a nested scope);   VXIjsiResult PushScope (const VXIchar  *name, const VXIjsiScopeAttr attr);    // Pop a context from the scope chain (remove a nested scope);   VXIjsiResult PopScope( );      // Reset the scope chain to the global scope (pop all nested scopes);   VXIjsiResult ClearScopes( );      private:   // NOTE: Internal methods, these do not do mutex locking    // Flag that we are starting and stopping execution of a script,   // used to ensure thread safety. For simplicity, return true on   // success, false on failure (mutex error). For the threadsafe   // build, this is really disabling/enabling garbage collection.  For   // the non-threadsafe build this is doing mutex locks.   bool AccessBegin( ) const {  #ifdef JS_THREADSAFE     JS_ResumeRequest (context, contextRefs);     return true; #else     return runtime->AccessBegin( ); #endif   }    bool AccessEnd( ) const { #ifdef JS_THREADSAFE     JsiContext *pThis = (JsiContext *) this;     pThis->contextRefs = JS_SuspendRequest (context); #endif #ifdef JSI_MEMORY_TEST     // Do garbage collection to invalidate memory, use this during unit     // test/Purify runs to make sure we're extremely clean     if ( context ) JS_GC (context); #endif #ifdef JS_THREADSAFE     return true; #else     return runtime->AccessEnd( ); #endif   }      // Script evaluation   VXIjsiResult EvaluateScript (const VXIchar *script,  			       JsiProtectedJsval *retval = NULL, 			       bool loggingEnabled = true) const;    // Convert JS values to VXIValue types and vice versa   static VXIjsiResult JsvalToVXIValue (JSContext *context, 				       const jsval val, 				       VXIValue **value);   VXIjsiResult VXIValueToJsval (JSContext *context, 				const VXIValue *value, 				JsiProtectedJsval *val);    // Reset for the next evaluation   void EvaluatePrepare (bool enableLog = true) const {      JsiContext *pThis = const_cast<JsiContext *>(this);     pThis->logEnabled = enableLog;     pThis->numBranches = 0L;     if ( pThis->exception ) {        VXIValueDestroy (&pThis->exception); pThis->exception = NULL; }   }    // Check if the variable name is valid at declaration 	bool IsValidVarName(JSContext *context, JSObject *obj, const VXIchar* vname); 	 	// Check if the scope is writeable 	VXIjsiResult CheckWriteable(JSContext *context, JSObject *obj, const VXIchar* varname); 	   // Disable the copy constructor and assignment operator   JsiContext (const JsiContext &src);   JsiContext & operator= (const JsiContext &src);   public:   // NOTE: Internal static methods, these do not do mutex locking    // Static callback for finalizing scopes   static void JS_DLL_CALLBACK ScopeFinalize (JSContext *cx, JSObject *obj);    // Static callback for finalizing content objects   static void JS_DLL_CALLBACK ContentFinalize (JSContext *cx, JSObject *obj);    // Static callback for enforcing maxBranches   static JSBool JS_DLL_CALLBACK BranchCallback (JSContext *context,  						JSScript *script);    // Static callback for reporting JavaScript errors   static void JS_DLL_CALLBACK ErrorReporter (JSContext *context,  					     const char *message, 					     JSErrorReport *report);  	static JSBool JS_DLL_CALLBACK SCOPE_CLASS_SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp); 		  private:   JSVersion           version;           // JavaScript version   JsiRuntime         *runtime;           // JavaScript runtime environment   JSContext          *context;           // Underlying SpiderMonkey context   jsrefcount          contextRefs;       // Reference count for the context   JsiScopeChainNode  *scopeChain;        // Scope chain   JsiScopeChainNode  *currentScope;      // Current (leaf) scope    // Evaluation state information   bool      logEnabled;      /* Whether to log JavaScript errors */   long      maxBranches;     /* Maximum number of branches for each  			        evaluation */   long      numBranches;     /* Number of branches for the current evaluation, 		 	        used to enforce maxBranches */   VXIValue *exception;      /* Exception data, NULL if no exception */   };  #endif  // _JSI_CONTEXT_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -