📄 ejs.c
字号:
/******************************************************************************//* * 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 + -