void FunctionClassData::mark(const QScriptValueImpl &object, int generation) { if (object.classInfo() != classInfo()) return; QScriptFunction *fun = object.toFunction(); QScriptEnginePrivate *eng = QScriptEnginePrivate::get(object.engine()); fun->mark(eng, generation); }
void Math::addFunction(QScriptValueImpl &object, const QString &name, QScriptInternalFunctionSignature fun, int length, const QScriptValue::PropertyFlags flags) { QScriptEnginePrivate *eng_p = QScriptEnginePrivate::get(object.engine()); QScriptValueImpl val = eng_p->createFunction(fun, length, object.classInfo(), name); object.setProperty(name, val, flags); }
void EnumerationClassData::mark(const QScriptValueImpl &object, int generation) { Q_ASSERT(object.isValid()); QScriptEnginePrivate *eng = object.engine(); if (Enumeration::Instance *instance = Enumeration::Instance::get(object, classInfo())) { eng->markObject(instance->object, generation); if (instance->it) eng->markObject(instance->it->object(), generation); } }
bool FunctionClassData::get(const QScriptValueImpl &object, const Member &member, QScriptValueImpl *result) { if (object.classInfo() != classInfo()) return false; QScriptEnginePrivate *eng = QScriptEnginePrivate::get(object.engine()); if (! member.isNativeProperty()) return false; if (member.nameId() == eng->idTable()->id_length) { eng->newNumber(result, object.toFunction()->length); return true; } else if (member.nameId() == eng->idTable()->id_arguments) { eng->newNull(result); return true; } return false; }
bool FunctionClassData::resolve(const QScriptValueImpl &object, QScriptNameIdImpl *nameId, QScript::Member *member, QScriptValueImpl *base) { if (object.classInfo() != classInfo()) return false; QScriptEnginePrivate *eng = QScriptEnginePrivate::get(object.engine()); if ((nameId == eng->idTable()->id_length) || (nameId == eng->idTable()->id_arguments)) { member->native(nameId, /*id=*/ 0, QScriptValue::Undeletable | QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration); *base = object; return true; } return false; }