/* JSRunEvaluate */ JSObjectRef JSRunEvaluate(JSRunRef ref) { JSObjectRef result = 0; JSRun* ptr = (JSRun*)ref; if (ptr) { Completion completion = ptr->Evaluate(); if (completion.isValueCompletion()) { result = (JSObjectRef)KJSValueToJSObject(completion.value(), ptr->GetInterpreter()->globalExec()); } if (completion.complType() == Throw) { JSFlags flags = ptr->Flags(); if (flags & kJSFlagDebug) { CFTypeRef error = JSObjectCopyCFValue(result); if (error) { CFShow(error); CFRelease(error); } } } } return result; }
static ExitCode evaluateString(Interpreter *interp, const char *fileName, const UString &code, bool printResult = false) { ExecState *exec = interp->globalExec(); Completion res = interp->evaluate(fileName, 0, code); if (res.complType() == Throw) { CString msg = res.value()->toString(exec).UTF8String(); JSObject *resObj = res.value()->toObject(exec); CString message = resObj->toString(exec).UTF8String(); int line = resObj->toObject(exec)->get(exec, "line")->toUInt32(exec); if (fileName) { fprintf(stderr, "%s (line %d): ", fileName, line); } fprintf(stderr, "%s\n", msg.c_str()); return ErrorEval; } else if (printResult) { if (res.isValueCompletion() && !res.value()->isUndefined()) { CString s8 = res.value()->toString(exec).UTF8String(); if (s8.size() != 0) { fprintf(stdout, "%s\n", s8.c_str()); } } } return ErrorNone; }
static void runInteractive(GlobalObject* globalObject) { while (true) { #if HAVE(READLINE) char* line = readline(interactivePrompt); if (!line) break; if (line[0]) add_history(line); Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), interpreterName, 1, line); free(line); #else puts(interactivePrompt); Vector<char, 256> line; int c; while ((c = getchar()) != EOF) { // FIXME: Should we also break on \r? if (c == '\n') break; line.append(c); } line.append('\0'); Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), interpreterName, 1, line.data()); #endif if (completion.isValueCompletion()) printf("%s\n", completion.value()->toString(globalObject->globalExec()).UTF8String().c_str()); } printf("\n"); }
static void runInteractive(GlobalObject* globalObject) { //abaldeva: Put it here instead of it being static. Otherwise it allocates memory before the //user has a chance to set the allocator. const UString interpreterName("Interpreter"); while (true) { #if HAVE(READLINE) char* line = readline(interactivePrompt); if (!line) break; if (line[0]) add_history(line); Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), interpreterName, 1, line); free(line); #else puts(interactivePrompt); Vector<char, 256> line; int c; while ((c = getchar()) != EOF) { // FIXME: Should we also break on \r? if (c == '\n') break; line.append(c); } line.append('\0'); Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), interpreterName, 1, line.data()); #endif if (completion.isValueCompletion()) printf("%s\n", completion.value()->toString(globalObject->globalExec()).UTF8String().c_str()); } printf("\n"); }