KJS::Value KJSEmbedPart::getValue( const QString & valueName ) const { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(valueName.latin1() )); KJS::Object obj = js->globalObject(); return obj.get(exec, id ); }
void JSObjectProxy::addBindingsClass( KJS::ExecState *exec, KJS::Object & /*object*/ ) { KJS::Identifier clazzid; QObject *o = obj; Bindings::BindingObject *bo = dynamic_cast<Bindings::BindingObject *>( o ); if ( bo ) { clazzid = KJS::Identifier( bo->jsClassName() ? bo->jsClassName() : obj->className() ); } else { clazzid = KJS::Identifier( obj->className() ); } KJS::Object global = js->globalObject(); if ( global.hasProperty( exec, clazzid ) ) { kdDebug( 80001 ) << "addBindingsClass() " << clazzid.qstring() << " already known" << endl; KJS::Object clazz = global.get( exec, clazzid ).toObject( exec ); Bindings::JSFactoryImp *imp = dynamic_cast<Bindings::JSFactoryImp *>( clazz.imp() ); if ( !imp ) { kdWarning() << "addBindingsClass() Class was not created by normal means" << endl; return ; } kdDebug( 80001 ) << "addBindingsClass() Adding enums" << endl; imp->setDefaultValue( js->builtinObject().construct( exec, KJS::List() ) ); addBindingsEnum( exec, clazz ); } else { kdWarning() << "addBindingsClass() " << clazzid.qstring() << " not known" << endl; } }
KJS::Value KJSEmbedPart::callMethod( const QString & methodName, const KJS::List & args ) const { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(methodName.latin1() )); KJS::Object obj = js->globalObject(); KJS::Object fun = obj.get(exec, id ).toObject( exec ); KJS::Value retValue; if ( !fun.implementsCall() ) { // We need to create an exception here... } else retValue = fun.call(exec, obj, args); kdDebug( 80001 ) << "Returned type is: " << retValue.type() << endl; if( exec->hadException() ) { kdWarning( 80001 ) << "Got error: " << exec->exception().toString(exec).qstring() << endl; return exec->exception(); } else { if( retValue.type() == 1 && retValue.type() == 0) { kdDebug( 80001 ) << "Got void return type. " << endl; return KJS::Null(); } } return retValue; }
KJS::List KJSEmbedPart::constructorList() const { KJS::List items; KJS::Object obj = js->globalObject(); KJS::ExecState *exec = js->globalExec(); KJS::ReferenceList l = obj.propList( exec ); KJS::ReferenceListIterator propIt = l.begin(); while ( propIt != l.end() ) { KJS::Identifier name = propIt->getPropertyName( exec ); if ( obj.hasProperty( exec, name ) ) { KJS::Value v = obj.get( exec, name ); KJS::Object vobj = v.toObject( exec ); if ( vobj.implementsConstruct() ) items.append( KJS::String( name.ustring() ) ); } propIt++; } return items; }
bool KJSEmbedPart::hasMethod( const QString & methodName ) { KJS::ExecState *exec = js->globalExec(); KJS::Identifier id = KJS::Identifier( KJS::UString(methodName.latin1() )); KJS::Object obj = js->globalObject(); KJS::Object fun = obj.get(exec, id ).toObject( exec ); return fun.implementsCall(); }
static KJS::Object scopeWalker( KJS::ExecState *exec, const KJS::Object &root, const QString &objectString ) { KJS::Object returnObject = root; QStringList objects = QStringList::split(".", objectString); for( uint idx = 0; idx < objects.count(); ++idx) { KJS::Identifier id = KJS::Identifier( KJS::UString( objects[idx] )); KJS::Value newObject = returnObject.get(exec, id ); if( newObject.isValid() ) returnObject = newObject.toObject(exec); } return returnObject; }
static void callJS(KJSEmbed::KJSEmbedPart *p,KJS::Object o,const QString& funcName){ KJS::Interpreter *js = p->interpreter(); KJS::ExecState *exec = js->globalExec(); KJS::List param; exec->clearException(); KJS::Value funcV=o.get(exec,KJS::Identifier(funcName)); if (exec->hadException()) { #warning clear exception ? return; } KJS::Object func=funcV.toObject(exec); if (exec->hadException()) { #warning clear exception ? return; } if (func.implementsCall()) { func.call(exec,o,param); if (js->globalExec()->hadException()) { #warning clear exception ? return; } } }