JSValue *toJS(ExecState *exec, Event *e) { if (!e) return jsNull(); ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->dynamicInterpreter()); JSLock lock; DOMObject *ret = interp->getDOMObject(e); if (!ret) { if (e->isKeyboardEvent()) ret = new JSKeyboardEvent(exec, static_cast<KeyboardEvent *>(e)); else if (e->isMouseEvent()) ret = new JSMouseEvent(exec, static_cast<MouseEvent *>(e)); else if (e->isWheelEvent()) ret = new JSWheelEvent(exec, static_cast<WheelEvent *>(e)); else if (e->isUIEvent()) ret = new JSUIEvent(exec, static_cast<UIEvent *>(e)); else if (e->isMutationEvent()) ret = new JSMutationEvent(exec, static_cast<MutationEvent *>(e)); else if (e->isOverflowEvent()) ret = new JSOverflowEvent(exec, static_cast<OverflowEvent*>(e)); else ret = new JSEvent(exec, e); interp->putDOMObject(e, ret); } return ret; }
JSValue *KJS::getDOMEvent(ExecState *exec, DOM::EventImpl* ei) { if (!ei) return jsNull(); ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->dynamicInterpreter()); DOMObject *ret = interp->getDOMObject(ei); if (!ret) { if (ei->isTextInputEvent()) ret = new DOMTextEvent(exec, static_cast<DOM::TextEventImpl*>(ei)); else if (ei->isKeyboardEvent()) ret = new DOMKeyboardEvent(exec, static_cast<DOM::KeyboardEventImpl*>(ei)); else if (ei->isMouseEvent()) ret = new DOMMouseEvent(exec, static_cast<DOM::MouseEventImpl*>(ei)); else if (ei->isUIEvent()) ret = new DOMUIEvent(exec, static_cast<DOM::UIEventImpl*>(ei)); else if (ei->isMutationEvent()) ret = new DOMMutationEvent(exec, static_cast<DOM::MutationEventImpl*>(ei)); else if (ei->isMessageEvent()) ret = new DOMMessageEvent(exec, static_cast<DOM::MessageEventImpl*>(ei)); else if (ei->isHashChangeEvent()) ret = new DOMHashChangeEvent(exec, static_cast<DOM::HashChangeEventImpl*>(ei)); else ret = new DOMEvent(exec, ei); interp->putDOMObject(ei, ret); } return ret; }
void JSLazyEventListener::parseCode() const { if (m_parsed) return; m_parsed = true; Frame* frame = windowObj()->impl()->frame(); KJSProxy* proxy = 0; if (frame) proxy = frame->scriptProxy(); if (proxy) { ScriptInterpreter* interpreter = proxy->interpreter(); ExecState* exec = interpreter->globalExec(); JSLock lock; JSObject* constr = interpreter->builtinFunction(); List args; UString sourceURL(frame->loader()->url().url()); args.append(eventParameterName()); args.append(jsString(m_code)); m_listener = constr->construct(exec, args, m_functionName, sourceURL, m_lineNumber); // FIXME: is globalExec ok ? FunctionImp* listenerAsFunction = static_cast<FunctionImp*>(m_listener.get()); if (exec->hadException()) { exec->clearException(); // failed to parse, so let's just make this listener a no-op m_listener = 0; } else if (m_originalNode) { // Add the event's home element to the scope // (and the document, and the form - see JSHTMLElement::eventHandlerScope) ScopeChain scope = listenerAsFunction->scope(); JSValue* thisObj = toJS(exec, m_originalNode); if (thisObj->isObject()) { static_cast<JSEventTargetNode*>(thisObj)->pushEventHandlerScope(exec, scope); listenerAsFunction->setScope(scope); } } } // no more need to keep the unparsed code around m_functionName = String(); m_code = String(); if (m_listener) { Window::ListenersMap& listeners = isHTMLEventListener() ? windowObj()->jsHTMLEventListeners() : windowObj()->jsEventListeners(); listeners.set(m_listener, const_cast<JSLazyEventListener*>(this)); } }
lldb::SearchDepth BreakpointResolverScripted::GetDepth() { assert(m_breakpoint != NULL); lldb::SearchDepth depth = lldb::eSearchDepthModule; if (m_implementation_sp) { ScriptInterpreter *interp = GetScriptInterpreter(); depth = interp->ScriptedBreakpointResolverSearchDepth( m_implementation_sp); } return depth; }
void BreakpointResolverScripted::GetDescription(Stream *s) { StructuredData::GenericSP generic_sp; std::string short_help; if (m_implementation_sp) { ScriptInterpreter *interp = GetScriptInterpreter(); interp->GetShortHelpForCommandObject(m_implementation_sp, short_help); } if (!short_help.empty()) s->PutCString(short_help.c_str()); else s->Printf("python class = %s", m_class_name.c_str()); }
Value getDOMStyleSheetList(ExecState *exec, const DOM::StyleSheetList& ssl, const DOM::Document& doc) { // Can't use the cacheDOMObject macro because of the doc argument DOMObject *ret; if (ssl.isNull()) return Null(); ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->interpreter()); if ((ret = interp->getDOMObject(ssl.handle()))) return Value(ret); else { ret = new DOMStyleSheetList(exec, ssl, doc); interp->putDOMObject(ssl.handle(),ret); return Value(ret); } }
Searcher::CallbackReturn BreakpointResolverScripted::SearchCallback(SearchFilter &filter, SymbolContext &context, Address *addr, bool containing) { assert(m_breakpoint != NULL); bool should_continue = true; if (!m_implementation_sp) return Searcher::eCallbackReturnStop; ScriptInterpreter *interp = GetScriptInterpreter(); should_continue = interp->ScriptedBreakpointResolverSearchCallback( m_implementation_sp, &context); if (should_continue) return Searcher::eCallbackReturnContinue; else return Searcher::eCallbackReturnStop; }
Value getDOMCSSValue(ExecState *exec, const DOM::CSSValue& v) { DOMObject *ret; if (v.isNull()) return Null(); ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->interpreter()); if ((ret = interp->getDOMObject(v.handle()))) return Value(ret); else { if (v.isCSSValueList()) ret = new DOMCSSValueList(exec,v); else if (v.isCSSPrimitiveValue()) ret = new DOMCSSPrimitiveValue(exec,v); else ret = new DOMCSSValue(exec,v); interp->putDOMObject(v.handle(),ret); return Value(ret); } }
Value getDOMStyleSheet(ExecState *exec, const DOM::StyleSheet& ss) { DOMObject *ret; if (ss.isNull()) return Null(); ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->interpreter()); if ((ret = interp->getDOMObject(ss.handle()))) return Value(ret); else { if (ss.isCSSStyleSheet()) { DOM::CSSStyleSheet cs; cs = ss; ret = new DOMCSSStyleSheet(exec,cs); } else ret = new DOMStyleSheet(exec,ss); interp->putDOMObject(ss.handle(),ret); return Value(ret); } }
JSValue *MimeType::getValueProperty(ExecState *exec, int token) const { switch (token) { case Type: return jsString(m_info->type); case Suffixes: return jsString(m_info->suffixes); case Description: return jsString(m_info->desc); case EnabledPlugin: { ScriptInterpreter *interpreter = static_cast<ScriptInterpreter *>(exec->dynamicInterpreter()); Frame *frame = interpreter->frame(); if (frame && frame->pluginsEnabled()) return new Plugin(exec, m_info->plugin); else return jsUndefined(); } default: return jsUndefined(); } }
int main(int argc, char* argv[]) { ScriptInterpreter app; if (!app.processInput(argc, argv)) return 0; try { app.go(); } catch ( Exception& e ) { #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); #else cerr << "An exception has occured: " << e.getFullDescription().c_str() << endl; #endif } return 0; }
void JSAbstractEventListener::handleEvent(Event* ele, bool isWindowEvent) { #ifdef KJS_DEBUGGER if (KJSDebugWin::instance() && KJSDebugWin::instance()->inSession()) return; #endif Event *event = ele; JSObject* listener = listenerObj(); if (!listener) return; Window* window = windowObj(); Frame *frame = window->frame(); if (!frame) return; KJSProxy* proxy = frame->jScript(); if (!proxy) return; JSLock lock; ScriptInterpreter* interpreter = proxy->interpreter(); ExecState* exec = interpreter->globalExec(); JSValue* handleEventFuncValue = listener->get(exec, "handleEvent"); JSObject* handleEventFunc = 0; if (handleEventFuncValue->isObject()) { handleEventFunc = static_cast<JSObject*>(handleEventFuncValue); if (!handleEventFunc->implementsCall()) handleEventFunc = 0; } if (handleEventFunc || listener->implementsCall()) { ref(); List args; args.append(toJS(exec, event)); // Set the event we're handling in the Window object window->setCurrentEvent(event); // ... and in the interpreter interpreter->setCurrentEvent(event); JSValue* retval; if (handleEventFunc) { interpreter->startTimeoutCheck(); retval = handleEventFunc->call(exec, listener, args); } else { JSObject* thisObj; if (isWindowEvent) thisObj = window; else thisObj = static_cast<JSObject*>(toJS(exec, event->currentTarget())); interpreter->startTimeoutCheck(); retval = listener->call(exec, thisObj, args); } interpreter->stopTimeoutCheck(); window->setCurrentEvent(0); interpreter->setCurrentEvent(0); if (exec->hadException()) { JSObject* exception = exec->exception()->toObject(exec); String message = exception->get(exec, messagePropertyName)->toString(exec); int lineNumber = exception->get(exec, "line")->toInt32(exec); String sourceURL = exception->get(exec, "sourceURL")->toString(exec); if (Interpreter::shouldPrintExceptions()) printf("(event handler):%s\n", message.deprecatedString().utf8().data()); frame->addMessageToConsole(message, lineNumber, sourceURL); exec->clearException(); } else { if (!retval->isUndefinedOrNull() && event->storesResultAsString()) event->storeResult(retval->toString(exec)); if (html) { bool retvalbool; if (retval->getBoolean(retvalbool) && !retvalbool) event->preventDefault(); } } Document::updateDocumentsRendering(); deref(); } }