Completion evaluate(ExecState* exec, ScopeChainNode* scopeChain, const SourceCode& source, JSValue thisValue) { JSLock lock(exec); ASSERT(exec->globalData().identifierTable == wtfThreadData().currentIdentifierTable()); ProgramExecutable* program = ProgramExecutable::create(exec, source); if (!program) { JSValue exception = exec->globalData().exception; exec->globalData().exception = JSValue(); return Completion(Throw, exception); } JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); JSValue result = exec->interpreter()->execute(program, exec, scopeChain, thisObj); if (exec->hadException()) { JSValue exception = exec->exception(); exec->clearException(); ComplType exceptionType = Throw; if (exception.isObject()) exceptionType = asObject(exception)->exceptionType(); return Completion(exceptionType, exception); } return Completion(Normal, result); }
Completion evaluate(ExecState* exec, ScopeChain& scopeChain, const SourceCode& source, JSValue thisValue) { //zyc /* ofstream out("fromCompletion.txt", ios::app); char *output = source.toString().ascii(); out<<output<<endl; out.close();*/ //done zyc //out.write(output.utf8().data(),output.utf8().length()); //out.write('\n',1); JSLock lock(exec); ASSERT(exec->globalData().identifierTable == wtfThreadData().currentIdentifierTable()); RefPtr<ProgramExecutable> program = ProgramExecutable::create(exec, source); JSObject* error = program->compile(exec, scopeChain.node()); if (error) return Completion(Throw, error); JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); JSValue exception; JSValue result = exec->interpreter()->execute(program.get(), exec, scopeChain.node(), thisObj, &exception); if (exception) { ComplType exceptionType = Throw; if (exception.isObject()) exceptionType = asObject(exception)->exceptionType(); return Completion(exceptionType, exception); } return Completion(Normal, result); }
Completion Interpreter::checkSyntax(const UString& sourceURL, int startingLineNumber, const UChar* code, int codeLength) { JSLock lock; int errLine; UString errMsg; RefPtr<ProgramNode> progNode = Parser::parse(sourceURL, startingLineNumber, code, codeLength, 0, &errLine, &errMsg); if (!progNode) return Completion(Throw, Error::create(&m_globalExec, SyntaxError, errMsg, errLine, 0, sourceURL)); return Completion(Normal); }
Completion checkSyntax(ExecState* exec, const SourceCode& source) { JSLock lock(exec); ASSERT(exec->globalData().identifierTable == currentIdentifierTable()); RefPtr<ProgramExecutable> program = ProgramExecutable::create(exec, source); JSObject* error = program->checkSyntax(exec); if (error) return Completion(Throw, error); return Completion(Normal); }
Completion DeclaredFunctionImp::execute(ExecState *exec) { Completion result = body->execute(exec); if (result.complType() == Throw || result.complType() == ReturnValue) return result; return Completion(Normal, Undefined()); // TODO: or ReturnValue ? }
Completion execute(const List &args) { KJSO v = args[0]; String s = v.toString(); fprintf(stderr, "---> %s\n", s.value().cstring().c_str()); return Completion(Normal); }
Completion evaluate(ExecState* exec, ScopeChain& scopeChain, const SourceCode& source, JSValue thisValue) { JSLock lock(exec); ASSERT(exec->globalData().identifierTable == currentIdentifierTable()); RefPtr<ProgramExecutable> program = ProgramExecutable::create(exec, source); JSObject* error = program->compile(exec, scopeChain.node()); if (error) return Completion(Throw, error); JSObject* thisObj = (!thisValue || thisValue.isUndefinedOrNull()) ? exec->dynamicGlobalObject() : thisValue.toObject(exec); JSValue exception; JSValue result = exec->interpreter()->execute(program.get(), exec, scopeChain.node(), thisObj, &exception); if (exception) { if (exception.isObject() && asObject(exception)->isWatchdogException()) return Completion(Interrupted, exception); return Completion(Throw, exception); } return Completion(Normal, result); }
size_t CRLFMessage::AppendData(const char* data, uint32_t size) { if (data == NULL || size == 0 || Completion()) return 0; // FIXME: should processing the case that "\r\n" was splitted in two data size_t feed_size = size; char* tl_ptr = (char*)strstr(data, TERMINAL_LABEL); if (tl_ptr != NULL) { tl_ptr += 2; feed_size = tl_ptr - data; } data_.append(data, feed_size); return feed_size; }
size_t JsonMessage::AppendData(const char* data, uint32_t size) { if (data == NULL || size == 0 || Completion()) return 0; size_t feed_size = size; for (uint32_t i = 0; i < size; i++) { if (data[i] == '{') { lbc_++; } else if (data[i] == '}') { rbc_++; } if (lbc_ == rbc_) { feed_size = i + 1; break; } } data_.append(data, feed_size); return feed_size; }
void Compsegs::updateCompletionsWithSegment(const std::vector< Compsegs >& compsegs, CompletionSet& completion_set) { for( const auto& compseg : compsegs ) { const int i = compseg.m_i; const int j = compseg.m_j; const int k = compseg.m_k; const Completion& completion = completion_set.getFromIJK( i, j, k ); completion_set.add(Completion(completion, compseg.m_segment_number, compseg.m_center_depth) ); } for (size_t ic = 0; ic < completion_set.size(); ++ic) { if ( !(completion_set.get(ic).attachedToSegment()) ) { throw std::runtime_error("Not all the completions are attached with a segment. " "The information from COMPSEGS is not complete"); } } }
Completion Interpreter::evaluate(const UString& sourceURL, int startingLineNumber, const UChar* code, int codeLength, JSValue* thisV) { JSLock lock; // prevent against infinite recursion if (m_recursion >= 20) return Completion(Throw, Error::create(&m_globalExec, GeneralError, "Recursion too deep")); // parse the source code int sid; int errLine; UString errMsg; RefPtr<ProgramNode> progNode = Parser::parse(sourceURL, startingLineNumber, code, codeLength, &sid, &errLine, &errMsg); // notify debugger that source has been parsed if (m_debugger) { bool cont = m_debugger->sourceParsed(&m_globalExec, sid, sourceURL, UString(code, codeLength), startingLineNumber, errLine, errMsg); if (!cont) return Completion(Break); } // no program node means a syntax error occurred if (!progNode) return Completion(Throw, Error::create(&m_globalExec, SyntaxError, errMsg, errLine, sid, sourceURL)); m_globalExec.clearException(); m_recursion++; JSObject* globalObj = m_globalObject; JSObject* thisObj = globalObj; // "this" must be an object... use same rules as Function.prototype.apply() if (thisV && !thisV->isUndefinedOrNull()) thisObj = thisV->toObject(&m_globalExec); Completion res; if (m_globalExec.hadException()) // the thisV->toObject() conversion above might have thrown an exception - if so, propagate it res = Completion(Throw, m_globalExec.exception()); else { // execute the code Context ctx(globalObj, this, thisObj, progNode.get()); ExecState newExec(this, &ctx); ctx.setExecState(&newExec); progNode->processVarDecls(&newExec); res = progNode->execute(&newExec); } m_recursion--; if (shouldPrintExceptions() && res.complType() == Throw) { JSLock lock; ExecState* exec = globalExec(); CString f = sourceURL.UTF8String(); CString message = res.value()->toObject(exec)->toString(exec).UTF8String(); int line = res.value()->toObject(exec)->get(exec, "line")->toUInt32(exec); #if PLATFORM(WIN_OS) printf("%s line %d: %s\n", f.c_str(), line, message.c_str()); #else printf("[%d] %s line %d: %s\n", getpid(), f.c_str(), line, message.c_str()); #endif } return res; }