/* Load a script file. This indirect routine is used by the core VM to compile a file when required. */ static EjsObj *loadScriptFile(Ejs *ejs, cchar *path, cchar *cache) { MPR_VERIFY_MEM(); if (ejsLoadScriptFile(ejs, path, cache, EC_FLAGS_NO_OUT | EC_FLAGS_DEBUG | EC_FLAGS_THROW) < 0) { return 0; } return ejs->result; }
/* Compile the source files supplied on the command line. This will compile in-memory and optionally also save to module files. */ static int interpretFiles(EcCompiler *cp, MprList *files, int argc, char **argv, cchar *className, cchar *method) { Ejs *ejs; assure(files); MPR_VERIFY_MEM(); ejs = cp->ejs; if (ecCompile(cp, files->length, (char**) files->items) < 0) { mprRawLog(0, "%s\n", cp->errorMsg); return EJS_ERR; } assure(ejs->result == 0 || (MPR_GET_GEN(MPR_GET_MEM(ejs->result)) != MPR->heap->dead)); if (cp->errorCount == 0) { if (ejsRunProgram(ejs, className, method) < 0) { ejsReportError(ejs, "Error in program"); return EJS_ERR; } } return 0; }
/* Load and initialize a script literal */ int ejsLoadScriptLiteral(Ejs *ejs, EjsString *script, cchar *cache, int flags) { EcCompiler *cp; cchar *path; if ((cp = ecCreateCompiler(ejs, flags)) == 0) { return MPR_ERR_MEMORY; } mprAddRoot(cp); if (cache) { cp->noout = 0; ecSetOutputFile(cp, cache); } else { cp->noout = 1; } // UNICODE -- should this API be multi or unicode if (ecOpenMemoryStream(cp, ejsToMulti(ejs, script), script->length) < 0) { mprError("Can't open memory stream"); mprRemoveRoot(cp); return EJS_ERR; } path = "__script__"; if (ecCompile(cp, 1, (char**) &path) < 0) { if (flags & EC_FLAGS_THROW) { ejsThrowSyntaxError(ejs, "%s", cp->errorMsg ? cp->errorMsg : "Can't parse script"); } mprRemoveRoot(cp); return EJS_ERR; } ecCloseStream(cp); mprRemoveRoot(cp); MPR_VERIFY_MEM(); if (ejsRun(ejs) < 0) { return EJS_ERR; } return 0; }