void _NPN_SetException (NPObject *o, NPString *message) { if (o->_class == NPScriptObjectClass) { JavaScriptObject *obj = (JavaScriptObject *)o; ExecState *exec = obj->executionContext->interpreter()->globalExec(); Interpreter::lock(); char *msg = (char *)malloc (message->UTF8Length + 1); strncpy (msg, message->UTF8Characters, message->UTF8Length); msg[message->UTF8Length] = 0; Object err = Error::create(exec, GeneralError, msg); free (msg); exec->setException (err); Interpreter::unlock(); } }
JSValue* WebScriptCallFrame::valueByEvaluatingJavaScriptFromString(String script) { #if 0 ExecState* state = m_state; JSGlobalObject* globObj = state->dynamicGlobalObject(); // find "eval" JSObject* eval = 0; if (state->scopeNode()) { // "eval" won't work without context (i.e. at global scope) JSValue* v = globObj->get(state, "eval"); if (v->isObject() && static_cast<JSObject*>(v)->implementsCall()) eval = static_cast<JSObject*>(v); else // no "eval" - fallback operates on global exec state state = globObj->globalExec(); } JSValue* savedException = state->exception(); state->clearException(); UString code(script.utf8().data()); // evaluate JSValue* scriptExecutionResult; if (eval) { List args; args.append(jsString(code)); scriptExecutionResult = eval->call(state, 0, args); } else // no "eval", or no context (i.e. global scope) - use global fallback scriptExecutionResult = Interpreter::evaluate(state, UString(), 0, code.data(), code.size(), globObj).value(); if (state->hadException()) scriptExecutionResult = state->exception(); // (may be redundant depending on which eval path was used) state->setException(savedException); return scriptExecutionResult; #else return jsNull(); #endif }