コード例 #1
0
ファイル: esp.c プロジェクト: embedthis/appweb-2
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;
}
コード例 #2
0
ファイル: ejsObject.c プロジェクト: Marvin-Lee/libwmiclient
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;
}
コード例 #3
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;
}
コード例 #4
0
ファイル: esp.c プロジェクト: embedthis/appweb-2
int espEvalScript(EspRequest *ep, char *script, MprVar *result, char **emsg)
{
	return ejsEvalScript(ep->eid, script, result, emsg);
}