TiValueRef TiEvalScript(TiContextRef ctx, TiStringRef script, TiObjectRef thisObject, TiStringRef sourceURL, int startingLineNumber, TiValueRef* exception) { TiExcState* exec = toJS(ctx); exec->globalData().heap.registerThread(); TiLock lock(exec); TiObject* jsThisObject = toJS(thisObject); // evaluate sets "this" to the global object if it is NULL TiGlobalObject* globalObject = exec->dynamicGlobalObject(); SourceCode source = makeSource(script->ustring(), sourceURL->ustring(), startingLineNumber); Completion completion = evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), source, jsThisObject); if (completion.complType() == Throw) { if (exception) *exception = toRef(exec, completion.value()); return 0; } if (completion.value()) return toRef(exec, completion.value()); // happens, for example, when the only statement is an empty (';') statement return toRef(exec, jsUndefined()); }
EncodedTiValue JSC_HOST_CALL functionLoad(TiExcState* exec) { UString fileName = exec->argument(0).toString(exec); Vector<char> script; if (!fillBufferWithContentsOfFile(fileName, script)) return TiValue::encode(throwError(exec, createError(exec, "Could not open file."))); TiGlobalObject* globalObject = exec->lexicalGlobalObject(); Completion result = evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName)); if (result.complType() == Throw) throwError(exec, result.value()); return TiValue::encode(result.value()); }
TiValue JSC_HOST_CALL functionLoad(TiExcState* exec, TiObject* o, TiValue v, const ArgList& args) { UNUSED_PARAM(o); UNUSED_PARAM(v); UString fileName = args.at(0).toString(exec); Vector<char> script; if (!fillBufferWithContentsOfFile(fileName, script)) return throwError(exec, GeneralError, "Could not open file."); TiGlobalObject* globalObject = exec->lexicalGlobalObject(); Completion result = evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName)); if (result.complType() == Throw) exec->setException(result.value()); return result.value(); }
TiValue JSC_HOST_CALL functionRun(TiExcState* exec, TiObject*, TiValue, const ArgList& args) { StopWatch stopWatch; UString fileName = args.at(0).toString(exec); Vector<char> script; if (!fillBufferWithContentsOfFile(fileName, script)) return throwError(exec, GeneralError, "Could not open file."); TiGlobalObject* globalObject = exec->lexicalGlobalObject(); stopWatch.start(); evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName)); stopWatch.stop(); return jsNumber(globalObject->globalExec(), stopWatch.getElapsedMS()); }