void SVGScriptElement::executeScript(Document *document, StringImpl *jsCode) { if(!document || !jsCode) return; #if 0 Ecma *ecmaEngine = document->ecmaEngine(); if(!ecmaEngine) return; KJS::Interpreter::lock(); // Run script KJS::Completion comp = ecmaEngine->evaluate(jsCode.deprecatedString(), ecmaEngine->globalObject()); if(comp.complType() == KJS::Throw) { KJS::ExecState *exec = ecmaEngine->globalExec(); KJS::JSValue *exVal = comp.value(); int lineno = -1; if(exVal->isObject()) { KJS::JSValue *lineVal = static_cast<KJS::JSObject *>(exVal)->get(exec, "line"); if(lineVal->type() == KJS::NumberType) lineno = int(lineVal->toNumber(exec)); } // Fire ERROR_EVENT upon errors... SVGDocument *svgDocument = static_cast<SVGDocument *>(document); if(svgDocument && document->hasListenerType(ERROR_EVENT)) { RefPtr<Event> event = svgDocument->createEvent("SVGEvents"); event->initEvent(EventNames::errorEvent, false, false); svgDocument->dispatchRecursiveEvent(event.get(), svgDocument->lastChild()); } kdDebug() << "[SVGScriptElement] Evaluation error, line " << (lineno != -1 ? DeprecatedString::number(lineno) : DeprecatedString::fromLatin1("N/A")) << " " << exVal->toString(exec).deprecatedString() << endl; } else if(comp.complType() == KJS::ReturnValue) kdDebug() << "[SVGScriptElement] Return value: " << comp.value()->toString(ecmaEngine->globalExec()).deprecatedString() << endl; else if(comp.complType() == KJS::Normal) kdDebug() << "[SVGScriptElement] Evaluated ecma script!" << endl; KJS::Interpreter::unlock(); #else if (jsCode) // Hack to close memory leak due to #if 0 String(jsCode); #endif }
bool JSDOMWindow::customGetOwnPropertySlot(KJS::ExecState* exec, const KJS::Identifier& propertyName, KJS::PropertySlot& slot) { // we don't want any properties other than "closed" on a closed window if (!impl()->frame()) { if (propertyName == "closed") { const KJS::HashEntry* entry = KJS::Lookup::findEntry(classInfo()->propHashTable, propertyName); ASSERT(entry); if (entry) { slot.setStaticEntry(this, entry, KJS::staticValueGetter<JSDOMWindow>); return true; } } if (propertyName == "close") { KJS::JSValue* proto = prototype(); if (proto->isObject()) { const KJS::HashEntry* entry = KJS::Lookup::findEntry(static_cast<KJS::JSObject*>(proto)->classInfo()->propHashTable, propertyName); ASSERT(entry); if (entry) { slot.setStaticEntry(this, entry, KJS::staticFunctionGetter<JSDOMWindowPrototypeFunction>); return true; } } } slot.setUndefined(this); return true; } // Look for overrides first KJS::JSValue** val = getDirectLocation(propertyName); if (val) { if (!isSafeScript(exec)) { slot.setUndefined(this); return true; } // FIXME: Come up with a way of having JavaScriptCore handle getters/setters in this case if (_prop.hasGetterSetterProperties() && val[0]->type() == KJS::GetterSetterType) fillGetterPropertySlot(slot, val); else slot.setValueSlot(this, val); return true; } // FIXME: We need this to work around the blanket isSafeScript check in KJS::Window. Once we remove that, we // can move this to JSDOMWindowPrototype. KJS::JSValue* proto = prototype(); if (proto->isObject()) { const KJS::HashEntry* entry = KJS::Lookup::findEntry(static_cast<KJS::JSObject*>(proto)->classInfo()->propHashTable, propertyName); if (entry) { if (entry->attr & KJS::Function) { switch (entry->value) { case FocusFuncNum: case BlurFuncNum: case CloseFuncNum: slot.setStaticEntry(this, entry, KJS::staticFunctionGetter<JSDOMWindowPrototypeFunction>); return true; default: if (!isSafeScript(exec)) slot.setUndefined(this); else slot.setStaticEntry(this, entry, KJS::staticFunctionGetter<JSDOMWindowPrototypeFunction>); return true; } } } } return false; }