int espProcessRequest(EspRequest *ep, char *docPath, char *docBuf, char **errMsg) { char *jsBuf; mprAssert(ep); ep->docPath = mprStrdup(docPath); jsBuf = 0; if (buildScript(ep, &jsBuf, docBuf, errMsg) < 0) { return MPR_ERR_CANT_COMPLETE; } if (jsBuf) { mprLog(7, "esp: script is:\n%s\n", jsBuf); /* * Now evaluate the entire escript */ if (ejsEvalScript(ep->eid, jsBuf, 0, errMsg) < 0) { mprFree(jsBuf); return MPR_ERR_ABORTED; } mprFree(jsBuf); } return 0; }
static int mixinMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv) { EjsProperty *pp; char *buf; int fid, i, rc; mprAssert(argv); /* * Create a variable scope block set to the current object */ rc = 0; fid = ejsSetBlock(ep, thisObj); for (i = 0; i < argc; i++) { if (ejsVarIsString(argv[i])) { rc = ejsEvalScript(ep, argv[i]->string, 0); } else if (ejsVarIsObject(argv[i])) { /* MOB -- OPT. When we have proper scope chains, we should just refer to the module and not copy */ pp = ejsGetFirstProperty(argv[i], EJS_ENUM_ALL); while (pp) { ejsSetProperty(ep, thisObj, pp->name, ejsGetVarPtr(pp)); pp = ejsGetNextProperty(pp, EJS_ENUM_ALL); } } else { /* MOB - rc */ buf = ejsVarToString(ep, argv[i]); rc = ejsEvalScript(ep, buf, 0); } if (rc < 0) { ejsCloseBlock(ep, fid); return -1; } } ejsCloseBlock(ep, fid); return 0; }
static int test_run_ejs(char *script) { EjsHandle handle = 0; MprVar result; char *emsg; TALLOC_CTX *mem_ctx = talloc_new(NULL); struct MprVar *return_var; mprSetCtx(mem_ctx); if (ejsOpen(NULL, NULL, NULL) != 0) { d_printf("ejsOpen(): unable to initialise EJS subsystem\n"); ejs_error = 127; goto failed; } smb_setup_ejs_functions(test_ejs_exception); if ((eid = ejsOpenEngine(handle, 0)) == (EjsId)-1) { d_printf("smbscript: ejsOpenEngine(): unable to initialise an EJS engine\n"); ejs_error = 127; goto failed; } mprSetVar(ejsGetGlobalObject(eid), "ARGV", mprList("ARGV", NULL)); /* run the script */ if (ejsEvalScript(eid, script, &result, &emsg) == -1) { d_printf("smbscript: ejsEvalScript(): %s\n", emsg); if (ejs_error == 0) ejs_error = 127; goto failed; } return_var = ejsGetReturnValue(eid); ejs_error = mprVarToNumber(return_var); failed: ejsClose(); talloc_free(mem_ctx); return ejs_error; }
int espEvalScript(EspRequest *ep, char *script, MprVar *result, char **emsg) { return ejsEvalScript(ep->eid, script, result, emsg); }