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

📄 ejs.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************//* *	Set the expression return value to a boolean value. */void ejsSetReturnValueToUndefined(Ejs *ep){	mprAssert(ep);	ejsWriteVarAsUndefined(ep, ep->result);}/******************************************************************************//* *	Get the expression return value */EjsVar *ejsGetReturnValue(Ejs *ep){	mprAssert(ep);	return ep->result;}/******************************************************************************/void *ejsGetUserData(Ejs *ep){	mprAssert(ep);	return ep->userData;}/******************************************************************************//* *	Get a variable given a full variable spec possibly containing "." or "[]". */EjsVar *ejsGetVar(Ejs *ep, const char *fullName){	mprAssert(ep);	mprAssert(fullName && *fullName);	return ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);}/******************************************************************************//* *	Get a string var given a full variable spec possibly containing "." or "[]". */const char *ejsGetStr(Ejs *ep, const char *fullName, const char *defaultValue){	EjsVar	*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);	if (vp == 0 || !ejsVarIsString(vp)) {		return defaultValue;	}	/* MOB -- what about VarToStr */	return vp->string;}/******************************************************************************//* *	Get an int var given a full variable spec possibly containing "." or "[]". */int ejsGetInt(Ejs *ep, const char *fullName, int defaultValue){	EjsVar	*vp;	mprAssert(ep);	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);	if (vp == 0 || !ejsVarIsInteger(vp)) {		return defaultValue;	}	/* MOB -- should use VarToInt */	return vp->integer;}/******************************************************************************//* *	Get an bool var given a full variable spec possibly containing "." or "[]". */int ejsGetBool(Ejs *ep, const char *fullName, int defaultValue){	EjsVar	*vp;	mprAssert(ep);	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);	if (vp == 0 || !ejsVarIsBoolean(vp)) {		return defaultValue;	}	/* MOB -- should use VarToBool */	return vp->boolean;}/******************************************************************************//* *	Set a variable that may be an arbitrarily complex object or array reference. *	Will always define in the top most variable frame. */int ejsSetVar(Ejs *ep, const char *fullName, const EjsVar *value){	EjsVar		*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);	if (vp == 0) {		return MPR_ERR_CANT_CREATE;	}	if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) == 0) {		return MPR_ERR_CANT_WRITE;	}	return 0;}/******************************************************************************//* *	Set a variable that may be an arbitrarily complex object or array reference. *	Will always define in the top most variable frame. */int ejsSetStr(Ejs *ep, const char *fullName, const char *value){	EjsVar		*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);	if (vp == 0) {		return MPR_ERR_CANT_CREATE;	}	if (ejsWriteVarAsString(ep, vp, value) == 0) {		return MPR_ERR_CANT_WRITE;	}	return 0;}/******************************************************************************//* *	Set a variable that may be an arbitrarily complex object or array reference. *	Will always define in the top most variable frame. */int ejsSetInt(Ejs *ep, const char *fullName, int value){	EjsVar		*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);	if (vp == 0) {		return MPR_ERR_CANT_CREATE;	}	/*	Can't fail */	ejsWriteVarAsInteger(ep, vp, value);	return 0;}/******************************************************************************//* *	Set a variable that may be an arbitrarily complex object or array reference. *	Will always define in the top most variable frame. */int ejsSetBool(Ejs *ep, const char *fullName, bool value){	EjsVar		*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);	if (vp == 0) {		return MPR_ERR_CANT_CREATE;	}	/* Can't fail */	ejsWriteVarAsBoolean(ep, vp, value);	return 0;}/******************************************************************************//* *	Set a variable that may be an arbitrarily complex object or array reference. *	Will always define in the top most variable frame. Free the value passed in. */int ejsSetVarAndFree(Ejs *ep, const char *fullName, EjsVar *value){	EjsVar		*vp;	mprAssert(fullName && *fullName);	vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);	if (vp == 0) {		return MPR_ERR_CANT_CREATE;	}	if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) == 0) {		ejsFreeVar(ep, value);		return MPR_ERR_CANT_WRITE;	}	ejsFreeVar(ep, value);	return 0;}/******************************************************************************//* *	Delete a variable */int ejsDeleteVar(Ejs *ep, const char *fullName){	EjsVar		*vp;	EjsVar		*obj;	char		*propertyName;	vp = ejsFindProperty(ep, &obj, &propertyName, ep->global, ep->local, 		fullName, 0);	if (vp == 0) {		return -1;	}	mprAssert(propertyName);	mprAssert(propertyName);	return ejsDeleteProperty(ep, obj, propertyName);}/******************************************************************************//* *	Utility routine to crack JavaScript arguments. Return the number of args *	seen. This routine only supports %s and %d type args. * *	Typical usage: * *		if (ejsParseArgs(argc, argv, "%s %d", &name, &age) < 2) { *			// Insufficient args *			return -1; *		} */ int ejsParseArgs(int argc, char **argv, const char *fmt, ...){	va_list		vargs;	const char	*cp;	char		**sp, *s;	int			*bp, *ip, argn;	va_start(vargs, fmt);	if (argv == 0) {		return 0;	}	for (argn = 0, cp = fmt; cp && *cp && argn < argc && argv[argn]; ) {		if (*cp++ != '%') {			continue;		}		s = argv[argn];		switch (*cp) {		case 'b':			bp = va_arg(vargs, int*);			if (bp) {				if (strcmp(s, "true") == 0 || s[0] == '1') {					*bp = 1;				} else {					*bp = 0;				}			} else {				*bp = 0;			}			break;		case 'd':			ip = va_arg(vargs, int*);			*ip = atoi(s);			break;		case 's':			sp = va_arg(vargs, char**);			*sp = s;			break;		default:			mprAssert(0);		}		argn++;	}	va_end(vargs);	return argn;}/******************************************************************************//* *	Define the standard classes */int ejsDefineStandardClasses(Ejs *master){	if (ejsDefineArrayClass(master) != 0 ||			ejsDefineBooleanClass(master) != 0 || 			ejsDefineErrorClasses(master) != 0 || 			ejsDefineFunctionClass(master) != 0 || 			ejsDefineNumberClass(master) != 0 ||#if FUTURE			ejsDefineDateClass(master) != 0 ||#endif#if BLD_FEATURE_EJS_E4X			ejsDefineXmlClasses(master) != 0 ||#endif#if BLD_FEATURE_EJS_DB && NOT_HERE			ejsDefineDbClasses(master) != 0 ||#endif			ejsDefineStringClass(master) != 0) {		return MPR_ERR_MEMORY;	}	return 0;}/******************************************************************************//* *	Define the EJS System Object Model */int ejsDefineSystemClasses(Ejs *master){	if (ejsDefineSystemClass(master) != 0 ||			ejsDefineAppClass(master) != 0 ||			ejsDefineMemoryClass(master) != 0 ||			ejsDefineLogClass(master) != 0 ||			ejsDefineDebugClass(master) != 0 ||			ejsDefineGCClass(master) != 0 ||			ejsDefineFileSystemClass(master) != 0 ||#if BREW			ejsDefineFileClass(master) != 0 ||			ejsDefineHTTPClass(master) != 0 ||#endif			ejsDefineGlobalProperties(master) != 0) {		return MPR_ERR_MEMORY;	}	return 0;}/******************************************************************************//* *	Terminate the system object model and classes */int ejsTermSystemClasses(Ejs *master){#if BREW	ejsTermHTTPClass(master);#endif	return 0;}/******************************************************************************//* *	Define the EJS object model */int ejsCreateObjectModel(Ejs *ejs){	EjsProperty		*pp;	pp = ejsSetPropertyToNewObj(ejs, ejs->global, "system", "System", 0);	if (pp == 0) {		return MPR_ERR_MEMORY;	}	if (ejsSetPropertyToNewObj(ejs, ejsGetVarPtr(pp), "app", "System.App", 			0) == 0) {		return MPR_ERR_MEMORY;	}	return 0;}/******************************************************************************/void ejsTrace(Ejs *ep, const char *fmt, ...){	va_list		args;	char		buf[MPR_MAX_LOG_STRING];	int			len;	va_start(args, fmt);	len = mprVsprintf(buf, sizeof(buf) - 1, fmt, args);	va_end(args);	mprLog(ep, 0, buf, len);	va_end(args);}/******************************************************************************/bool ejsGotException(Ejs *ep){	return (bool) ep->gotException;}/******************************************************************************/void ejsSetPrimaryHandle(Ejs *ep, void *primaryHandle){	mprAssert(ep);	ep->primaryHandle = primaryHandle;}/******************************************************************************/void ejsSetAlternateHandle(Ejs *ep, void *alternateHandle){	mprAssert(ep);	ep->altHandle = alternateHandle;}/******************************************************************************/#elsevoid ejsDummy() {}#endif /* BLD_FEATURE_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 + -