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

📄 ejs.h

📁 samba最新软件
💻 H
📖 第 1 页 / 共 2 页
字号:
 *	@overview EJ interpreter control structure. *	@description EJ allocates one control structure per active interpreter. *		The \ref ejsCreateInterp routine creates the Ejs structure and returns *		a reference to be used in subsequent EJ API calls. *  @stability Prototype. *  @library libejs. * 	@see ejsCreateInterp, ejsDestroyInterp, ejsOpenService */struct Ejs {	void		*altHandle;					/* Alternate callback handle */	bool		castAlloc;					/* True if castTemp is allocated */	char		*castTemp;					/* Temporary string for casting */	char		*currentClass;				/* Current class name */	EjsVar		*currentObj;				/* Ptr to current object */	EjsVar		*thisObject;				/* Ptr to current "this" */	EjsProperty	*currentProperty;			/* Ptr to current property */	EjsGC		gc;							/* Garbage collector control */	char		*errorMsg;					/* Error message */	char		*fileName;					/* File or script name */	int			lineNumber;					/* File line number */	int			scriptStatus;				/* Status to exit() */	int			flags;						/* Flags */	MprArray	*frames;					/* List of variable frames */	EjsVar		*global;					/* Global object */	EjsVar		*objectClass;				/* Object class */	int			gotException;				/* Exception thrown */	EjsInput	*input;						/* Input evaluation block */	int			depth;						/* Recursion depth */	EjsVar		*local;						/* Local object */	int			maxDepth;					/* Maximum depth for formatting */	void		*primaryHandle;				/* primary callback handle */	EjsProc		*proc;						/* Current method */	int			recurseCount;				/* Recursion counter */	EjsVar		*result;					/* Variable result */	int			tid;						/* Current token id */	char		*token;						/* Pointer to token string */	EjsVar		tokenNumber;				/* Parsed number */	EjsService	*service;					/* Service object */	void		*userData;					/* Method user data */	EjsSlab		*slabs;						/* Memory allocation slabs */	MprCtx		slabAllocContext;			/* Allocation context */	EjsInput	*inputList;					/* Free list of input structs */#if BLD_FEATURE_MULTITHREAD	EjsLockFn	lock;						/* Lock method */	EjsUnlockFn	unlock;						/* Unlock method */	void		*lockData;					/* Lock data argument */#endif#define EJS_MAX_STACK	(10 * 1024)	char		stack[EJS_MAX_STACK];		/* Local variable stack */	char		*stkPtr;					/* Local variable stack ptr */	void		*inputMarker;				/* Recurse protection */};typedef struct EjsModule{	int			dummy;} EjsModule;/* *	Method callback when using Alternate handles. GaCompat uses these and *	passes the web server request structure via the altHandle.  */typedef void *EjsHandle;typedef int (*EjsAltCMethod)(Ejs *ejs, EjsHandle altHandle,		EjsVar *thisObj, int argc, EjsVar **argv);typedef int (*EjsAltStringCMethod)(Ejs *ejs, EjsHandle altHandle,		EjsVar *thisObj, int argc, char **argv);/* *	API Constants */#define EJS_USE_OWN_SLAB	1/******************************** Internal API ********************************//* *	Ejs Lex */extern int	 	 ejsLexOpenScript(Ejs *ejs, const char *script);extern void 	 ejsLexCloseScript(Ejs *ejs);extern int 		 ejsInitInputState(EjsInput *ip);extern void 	 ejsLexSaveInputState(Ejs *ejs, EjsInput* state);extern void 	 ejsLexFreeInputState(Ejs *ejs, EjsInput* state);extern void 	 ejsLexRestoreInputState(Ejs *ejs, EjsInput* state);extern int		 ejsLexGetToken(Ejs *ejs, int state);extern void		 ejsLexPutbackToken(Ejs *ejs, int tid, char *string);/* *	Parsing */extern int		 ejsParse(Ejs *ejs, int state, int flags);extern int	 	 ejsGetFlags(Ejs *ejs);/* *	Create variable scope blocks */extern int		 ejsOpenBlock(Ejs *ejs);extern int		 ejsSetBlock(Ejs *ejs, EjsVar *local);extern int		 ejsCloseBlock(Ejs *ejs, int vid);extern int		 ejsEvalBlock(Ejs *ejs, char *script, EjsVar *vp);extern void		 ejsSetFileName(Ejs *ejs, const char *fileName);/* *	Class definitions */extern EjsVar 	*ejsCreateSimpleClass(Ejs *ejs, EjsVar *baseClass, 					const char *className);extern int		 ejsDefineObjectClass(Ejs *ejs);extern int	 	 ejsDefineArrayClass(Ejs *ejs);extern int 		 ejsDefineBooleanClass(Ejs *ejs);extern int 		 ejsDefineErrorClasses(Ejs *ejs);extern int 		 ejsDefineFileClass(Ejs *ejs);extern int 		 ejsDefineFileSystemClass(Ejs *ejs);extern int 		 ejsDefineHTTPClass(Ejs *ejs);extern int 		 ejsDefineFunctionClass(Ejs *ejs);extern int 		 ejsDefineNumberClass(Ejs *ejs);extern int 		 ejsDefineStringClass(Ejs *ejs);extern int 		 ejsDefineDateClass(Ejs *ejs);extern int 		 ejsDefineStandardClasses(Ejs *ejs);#if BLD_FEATURE_EJS_E4Xextern int		 ejsDefineXmlClasses(Ejs *ejs);extern EjsVar 	*ejsCreateXml(Ejs *ejs);#endif#if BLD_FEATURE_EJS_DBextern int		ejsDefineDbClasses(Ejs *ejs);#endif/* *	System class definitions */extern int 		 ejsDefineSystemClasses(Ejs *ejs);extern int 		 ejsDefineSystemClass(Ejs *ejs);extern int 		 ejsDefineAppClass(Ejs *ejs);extern int 		 ejsDefineDebugClass(Ejs *ejs);extern int 		 ejsDefineLogClass(Ejs *ejs);extern int 		 ejsDefineMemoryClass(Ejs *ejs);extern int 		 ejsDefineGCClass(Ejs *ejs);extern int 		 ejsDefineGlobalProperties(Ejs *ejs);extern int 		 ejsTermSystemClasses(Ejs *ejs);extern void 	 ejsTermHTTPClass(Ejs *ejs);extern int 		 ejsCreateObjectModel(Ejs *ejs);/* *	Class constructors */extern int 		 ejsArrayConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **argv);extern int 		 ejsXmlConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **argv);extern int 		 ejsXmlListConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **argv);extern int 		 ejsBooleanConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **agv);extern int 		 ejsFunctionConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **agv);extern int 		 ejsNumberConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **argv);extern int 		 ejsStringConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 					EjsVar **argv);extern int 		 ejsDateConstructor(Ejs *ejs, EjsVar *thisObj, 					int argc, EjsVar **argv);/* *	Garbage collection */extern void 	 ejsGCInit(Ejs *ejs, int objInc, int propInc, int varInc, 					int strInc);extern int 		 ejsIsTimeForGC(Ejs *ep, int timeTillNextEvent);extern bool 	 ejsSetGCDebugLevel(Ejs *ep, int debugLevel);extern void 	 ejsSweepAll(Ejs *ep);extern EjsObj 	*ejsAllocObj(EJS_LOC_DEC(ejs, loc));extern EjsProperty *ejsAllocProperty(EJS_LOC_DEC(ejs, loc));extern EjsVar 	*ejsAllocVar(EJS_LOC_DEC(ejs, loc));extern void 	 ejsFree(Ejs *ejs, void *ptr, int slabIndex);extern int 		ejsCollectGarbage(Ejs *ejs, int slabIndex);extern int 		ejsIncrementalCollectGarbage(Ejs *ejs);#if BLD_DEBUGextern void 	ejsDumpObjects(Ejs *ejs);#endif#if BLD_FEATURE_ALLOC_STATSextern void 	 ejsPrintAllocReport(Ejs *ejs, bool printLeakReport);#endifextern void		ejsCleanInterp(Ejs *ejs, bool doStats);extern void 	ejsSetInternalMethods(Ejs *ejs, EjsVar *op);extern void 	ejsSetPrimaryHandle(Ejs *ep, void *primaryHandle);extern void 	ejsSetAlternateHandle(Ejs *ep, void *alternateHandle);extern void 	*ejsGetUserData(Ejs *ejs);/* *	Could possibly make these routines public  */extern int 		ejsSetGCMaxMemory(Ejs *ep, uint maxMemory);extern uint 	ejsGetUsedMemory(Ejs *ejs);extern uint 	ejsGetAllocatedMemory(Ejs *ejs);extern uint 	ejsGetAvailableMemory(Ejs *ejs);extern char 	*ejsFormatStack(Ejs* ep);;/********************************* Prototypes *********************************/#if BLD_FEATURE_MULTITHREADextern int 		ejsSetServiceLocks(EjsService *sp, EjsLockFn lock, 					EjsUnlockFn unlock, void *data);#endif/* *	Ejs service and interpreter management */extern EjsService *ejsOpenService(MprCtx ctx);extern void 	ejsCloseService(EjsService *sp, bool doStats);extern Ejs 		*ejsCreateInterp(EjsService *sp, void *primaryHandle, 					void *altHandle, EjsVar *global, bool useOwnSlab);extern void		ejsDestroyInterp(Ejs *ejs, bool doStats);extern Ejs		*ejsGetMasterInterp(EjsService *sp);extern EjsVar	*ejsGetGlobalClass(Ejs *ejs);/* *	Module support */extern EjsModule *ejsCreateModule(const char *name, const char *version, 	int (*start)(EjsModule*), int (*stop)(EjsModule*));/* *	Native Objects */void ejsSetNativeData(EjsVar *obj, void *data);void ejsSetNativeHelpers(Ejs *ejs, EjsVar *nativeClass,		int	 (*createInstance)(Ejs *ejs, EjsVar *thisObj, int argc, 			EjsVar **argv), 		void (*disposeInstance)(Ejs *ejs, EjsVar *thisObj),		bool (*hasProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop),		int  (*deleteProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop),		int	 (*getProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop,					EjsVar *dest),		int	 (*setProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop, 				EjsVar *value),		int  (*doOperator)(Ejs *ejs, EjsVar *thisObj, EjsOp *op, EjsVar				*result, EjsVar *lhs, EjsVar *rhs, int *code)	);/* *	Evaluation methods */extern int		ejsEvalFile(Ejs *ejs, const char *path, EjsVar *result);extern int		ejsEvalScript(Ejs *ejs, const char *script, EjsVar *result);extern int 		ejsRunMethod(Ejs *ejs, EjsVar *obj, 					const char *methodName, MprArray *args);extern int 		ejsRunMethodCmd(Ejs *ejs, EjsVar *obj, 					const char *methodName, const char *cmdFmt, ...);extern EjsVar	*ejsGetReturnValue(Ejs *ejs);extern EjsVar	*ejsGetLocalObj(Ejs *ejs);extern EjsVar	*ejsGetGlobalObj(Ejs *ejs);/* *	Define a class in the specified interpreter. If used with the default  *	interpeter, then the class is defined for all interpreters. */extern EjsVar	*ejsDefineClass(Ejs *ejs, const char *className, 					const char *extends, EjsCMethod constructor);extern EjsVar	*ejsGetClass(Ejs *ejs, EjsVar *parentClass, 					const char *className);extern const char *ejsGetClassName(EjsVar *obj);extern const char *ejsGetBaseClassName(EjsVar *obj);extern bool 	ejsIsSubClass(EjsVar *target, EjsVar *baseClass);extern EjsVar	*ejsGetBaseClass(EjsVar *obj);extern void		ejsSetBaseClass(EjsVar *obj, EjsVar *baseClass);#define ejsCreateSimpleObj(ejs, className) \				ejsCreateSimpleObjInternal(EJS_LOC_ARGS(ejs), className)extern EjsVar	*ejsCreateSimpleObjInternal(EJS_LOC_DEC(ejs, loc), 					const char *className);#define ejsCreateSimpleObjUsingClass(ejs, baseClass) \				ejsCreateSimpleObjUsingClassInt(EJS_LOC_ARGS(ejs), \					baseClass)extern EjsVar	*ejsCreateSimpleObjUsingClassInt(EJS_LOC_DEC(ejs, loc), 					EjsVar *baseClass);/* *	This will create an object and call all required constructors */extern EjsVar 	*ejsCreateObj(Ejs *ejs, EjsVar *obj, 						const char *className, const char *constructorArgs);#define ejsCreateObjUsingArgv(ejs, obj, className, args) \				ejsCreateObjUsingArgvInternal(EJS_LOC_ARGS(ejs), obj, \					className, args)extern EjsVar	*ejsCreateObjUsingArgvInternal(EJS_LOC_DEC(ejs, loc), 					EjsVar *obj, const char *className, MprArray *args);#define ejsCreateArray(ejs, size) \				ejsCreateArrayInternal(EJS_LOC_ARGS(ejs), size)extern EjsVar	*ejsCreateArrayInternal(EJS_LOC_DEC(ejs, loc), 					int size);/* *	Array methods. MOB -- need other array methods *//* MOB -- spell out  element */extern EjsVar 	*ejsAddArrayElt(Ejs *ejs, EjsVar *op, EjsVar *element, 					EjsCopyDepth copyDepth);/* *	Required: Array methods *	array = obj.getMethods();	array = obj.getProperties();	array.property.isPublic();	array.property.isPrivate();	array.property.isMethod();	array.property.isEnumerable();	array.property.isReadOnly();	array.property.allowsNonUnique();	array.property.getParent();*//* MOB -- should we have an API that takes a EjsCopyDepth */extern void		ejsSetReturnValue(Ejs *ejs, EjsVar *vp);extern void		ejsSetReturnValueAndFree(Ejs *ejs, EjsVar *vp);extern void		ejsSetReturnValueToBoolean(Ejs *ejs, bool value);extern void		ejsSetReturnValueToBinaryString(Ejs *ejs, 					const uchar *value, int len);extern void		ejsSetReturnValueToInteger(Ejs *ejs, int value);extern void		ejsSetReturnValueToNumber(Ejs *ejs, EjsNum value);extern void		ejsSetReturnValueToString(Ejs *ejs, const char *value);extern void		ejsSetReturnValueToUndefined(Ejs *ejs);/* *	Variable access and control. The fullName arg can contain "[]" and "." */extern bool		ejsGetBool(Ejs *ejs, const char *fullName, bool defaultValue);extern int 		ejsGetInt(Ejs *ejs, const char *fullName, int defaultValue);extern const char *ejsGetStr(Ejs *ejs, const char *fullName, 					const char *defaultValue);extern EjsVar	*ejsGetVar(Ejs *ejs, const char *fullName);extern int 		ejsSetBool(Ejs *ejs, const char *fullName, bool value);extern int 		ejsSetInt(Ejs *ejs, const char *fullName, int value);extern int 		ejsSetStr(Ejs *ejs, const char *fullName, const char *value);extern int 		ejsSetVar(Ejs *ejs, const char *fullName, const EjsVar *value);extern int 		ejsSetVarAndFree(Ejs *ejs, const char *fullName, EjsVar *value);extern int 		ejsDeleteVar(Ejs *ejs, const char *fullName);/* *	Error handling */extern void		ejsError(Ejs *ejs, const char *errorType, const char *fmt, 					...) PRINTF_ATTRIBUTE(3,4);/* MOB -- this should take no arguments */extern void		ejsArgError(Ejs *ejs, const char *msg);extern void		ejsInternalError(Ejs *ejs, const char *msg);extern void		ejsMemoryError(Ejs *ejs);extern void		ejsSyntaxError(Ejs *ejs, const char *msg);/* * 	Utility methods */extern int 		ejsParseArgs(int argc, char **argv, const char *fmt, ...);extern void 	ejsExit(Ejs *ejs, int status);extern bool		ejsIsExiting(Ejs *ejs);extern void		ejsClearExiting(Ejs *ejs);extern bool		ejsGotException(Ejs *ejs);/* MOB -- rename Method to Function */extern void 	ejsFreeMethodArgs(Ejs *ep, MprArray *args);extern int	 	ejsStrcat(Ejs *ep, EjsVar *dest, EjsVar *src);/* *	Debugging routines */extern char 	*ejsGetErrorMsg(Ejs *ejs);extern int		ejsGetLineNumber(Ejs *ejs);extern void		ejsTrace(Ejs *ejs, const char *fmt, ...);/* *	Multithreaded lock routines */#if BLD_FEATURE_MULTITHREAD#define ejsLock(sp)	if (sp->lock) { (sp->lock)(sp->lockData); } else#define ejsUnlock(sp)	if (sp->unlock) { (sp->unlock)(sp->lockData); } else#else#define ejsLock(sp)		#define ejsUnlock(sp)	#endif#ifdef __cplusplus}#endif#endif /* _h_EJS *//*****************************************************************************//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim:tw=78 * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */

⌨️ 快捷键说明

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