ejsprocs.c

来自「samba最新软件」· C语言 代码 · 共 705 行 · 第 1/2 页

C
705
字号
		return MPR_TRIGGER_USE_NEW_VALUE;	case MPR_VAR_WRITE:		return MPR_TRIGGER_ABORT;	case MPR_VAR_CREATE_PROPERTY:	case MPR_VAR_DELETE_PROPERTY:	case MPR_VAR_DELETE:	default:		break;	}	return MPR_TRIGGER_PROCEED;}/******************************************************************************//**************************** Extension Functions *****************************//******************************************************************************//* *	Assert  */static int assertProc(EjsHandle eid, int argc, MprVar **argv){	bool	b;	if (argc < 1) {		ejsSetErrorMsg(eid, "usage: assert(condition)\n");		return -1;	}	b = mprVarToBool(argv[0]);	if (b == 0) {		ejsSetErrorMsg(eid, "Assertion failure\n");		return -1;	}	ejsSetReturnValue(eid, mprCreateBoolVar(b));	return 0;}/******************************************************************************//* *	Exit  */static int exitProc(EjsHandle eid, int argc, MprVar **argv){	int			status;	if (argc < 1) {		ejsSetErrorMsg(eid, "usage: exit(status)\n");		return -1;	}	status = (int) mprVarToInteger(argv[0]);	ejsSetExitStatus(eid, status);	ejsSetReturnValue(eid, mprCreateStringVar("", 0));	return 0;}/******************************************************************************/static void printVar(MprVar *vp, int recurseCount, int indent){	MprVar	*np;	char	*buf;	int		i;	if (recurseCount > 5) {		write(1, "Skipping - recursion too deep\n", 29);		return;	}	for (i = 0; i < indent; i++) {		write(1, "  ", 2);	}	if (vp->type == MPR_TYPE_OBJECT) {		if (vp->name) {			write(1, vp->name, strlen(vp->name));		} else {			write(1, "unknown", 7);		}		write(1, ": {\n", 4);		np = mprGetFirstProperty(vp, MPR_ENUM_DATA);		while (np) {			if (strcmp(np->name, "local") == 0 ||					strcmp(np->name, "global") == 0 ||					strcmp(np->name, "this") == 0) {				np = mprGetNextProperty(vp, np, MPR_ENUM_DATA);				continue;			}			printVar(np, recurseCount + 1, indent + 1);			np = mprGetNextProperty(vp, np, MPR_ENUM_DATA);			if (np) {				write(1, ",\n", 2);			}		}		write(1, "\n", 1);		for (i = 0; i < indent; i++) {			write(1, "  ", 2);		}		write(1, "}", 1);	} else {		if (vp->name) {			write(1, vp->name, strlen(vp->name));		} else {			write(1, "unknown", 7);		}		write(1, ": ", 2);		/*	FUTURE -- other types ? */		mprVarToString(&buf, MPR_MAX_STRING, 0, vp);		if (vp->type == MPR_TYPE_STRING) {			write(1, "\"", 1);		}		write(1, buf, strlen(buf));		if (vp->type == MPR_TYPE_STRING) {			write(1, "\"", 1);		}		mprFree(buf);	}}/******************************************************************************//* *	Print the args to stdout */static int printVarsProc(EjsHandle eid, int argc, MprVar **argv){	MprVar	*vp;	char	*buf;	int		i;	for (i = 0; i < argc; i++) {		vp = argv[i];		switch (vp->type) {		case MPR_TYPE_OBJECT:			printVar(vp, 0, 0);			break;		default:			mprVarToString(&buf, MPR_MAX_STRING, 0, vp);			write(1, buf, strlen(buf));			mprFree(buf);			break;		}	}	write(1, "\n", 1);	ejsSetReturnValue(eid, mprCreateStringVar("", 0));	return 0;}/******************************************************************************//* *	Print the args to stdout */static int printProc(EjsHandle eid, int argc, MprVar **argv){	char	*buf;	int		i;	for (i = 0; i < argc; i++) {		mprVarToString(&buf, MPR_MAX_STRING, 0, argv[i]);		write(1, buf, strlen(buf));		mprFree(buf);	}	return 0;}/******************************************************************************//* *	println */static int printlnProc(EjsHandle eid, int argc, MprVar **argv){	printProc(eid, argc, argv);	write(1, "\n", 1);	return 0;}/******************************************************************************//* *	Trace  */static int traceProc(EjsHandle eid, int argc, char **argv){	if (argc == 1) {		mprLog(0, "%s", argv[0]);	} else if (argc == 2) {		mprLog(atoi(argv[0]), "%s", argv[1]);	} else {		ejsSetErrorMsg(eid, "Usage: trace([level], message)");		return -1;	}	ejsSetReturnString(eid, "");	return 0;}/******************************************************************************//* *	Return the object reference count */static int refCountProc(EjsHandle eid, int argc, MprVar **argv){	MprVar		*vp;	int			count;	vp = argv[0];	if (vp->type == MPR_TYPE_OBJECT) {		count = mprGetVarRefCount(vp);		ejsSetReturnValue(eid, mprCreateIntegerVar(count));	} else {		ejsSetReturnValue(eid, mprCreateIntegerVar(0));	}	return 0;}/******************************************************************************//* *	Evaluate a sub-script. It is evaluated in the same variable scope as *	the calling script / function. */static int evalScriptProc(EjsHandle eid, int argc, MprVar **argv){	MprVar		*arg;	char		*emsg;	int			i;	ejsSetReturnValue(eid, mprCreateUndefinedVar());	for (i = 0; i < argc; i++) {		arg = argv[i];		if (arg->type != MPR_TYPE_STRING) {			continue;		}		if (ejsEvalScript(eid, arg->string, 0, &emsg) < 0) {			ejsSetErrorMsg(eid, "%s", emsg);			mprFree(emsg);			return -1;		}	}	/*	 *	Return with the value of the last expression 	 */	return 0;}/******************************************************************************//******************************************************************************//******************************************************************************//* *	Define the standard properties and functions inherited by all script engines. */int ejsDefineStandardProperties(MprVar *obj){#if BLD_FEATURE_FLOATING_POINT	double	d = 0.0;	/*	FUTURE - this generates warnings on some systems. This is okay. */	mprCreatePropertyValue(obj, "NaN", mprCreateFloatVar(0.0 / d));	d = MAX_FLOAT;	mprCreatePropertyValue(obj, "Infinity", mprCreateFloatVar(d * d));#endif	mprCreatePropertyValue(obj, "null", mprCreateNullVar());	mprCreatePropertyValue(obj, "undefined", mprCreateUndefinedVar());	mprCreatePropertyValue(obj, "true", mprCreateBoolVar(1));	mprCreatePropertyValue(obj, "false", mprCreateBoolVar(0));	mprCreatePropertyValue(obj, "NULL", mprCreatePtrVar(NULL));#if BLD_FEATURE_LEGACY_API	/* 	 *	DEPRECATED: 2.0. 	 *	So that ESP/ASP can ignore "language=javascript" statements	 */	mprCreatePropertyValue(obj, "javascript", mprCreateIntegerVar(0));#endif	/* 	 *	Extension functions 	 */	mprCreatePropertyValue(obj, "assert", 		mprCreateCFunctionVar(assertProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "eval", 		mprCreateCFunctionVar(evalScriptProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "exit", 		mprCreateCFunctionVar(exitProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "refCount", 		mprCreateCFunctionVar(refCountProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "print", 		mprCreateCFunctionVar(printProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "println", 		mprCreateCFunctionVar(printlnProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "printVars", 		mprCreateCFunctionVar(printVarsProc,0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "trace", 		mprCreateStringCFunctionVar(traceProc, 0, MPR_VAR_SCRIPT_HANDLE));	/*	 *	Constructors	 */	mprCreatePropertyValue(obj, "Array", 		mprCreateCFunctionVar(arrayConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "Boolean",		mprCreateCFunctionVar(booleanConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "Object", 		mprCreateCFunctionVar(objectConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "Number", 		mprCreateCFunctionVar(numberConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	mprCreatePropertyValue(obj, "String", 		mprCreateCFunctionVar(stringConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	/*	mprCreatePropertyValue(obj, "Date", 	 *		mprCreateCFunctionVar(dateConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	 *	mprCreatePropertyValue(obj, "Regexp", 	 *		mprCreateCFunctionVar(regexpConsProc, 0, MPR_VAR_SCRIPT_HANDLE));	 */	/*	 *	Can we use on var x = "string text";	 */	return 0;}/******************************************************************************/#elsevoid ejsProcsDummy() {}/******************************************************************************/#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 + =
减小字号Ctrl + -
显示快捷键?