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 + -
显示快捷键?