Value RuntimeObjectImp::get(ExecState *exec, const Identifier &propertyName) const { Value result = Undefined(); instance->begin(); Class *aClass = instance->getClass(); if (aClass) { // See if the instance have a field with the specified name. Field *aField = aClass->fieldNamed(propertyName.ascii(), instance); if (aField) { result = instance->getValueOfField (exec, aField); } else { // Now check if a method with specified name exists, if so return a function object for // that method. MethodList methodList = aClass->methodsNamed(propertyName.ascii(), instance); if (methodList.length() > 0) { result = Object (new RuntimeMethodImp(exec, propertyName, methodList)); } } if (result.type() == UndefinedType) { // Try a fallback object. result = aClass->fallbackObject (exec, instance, propertyName); } } instance->end(); return result; }
bool RuntimeObjectImp::hasProperty(ExecState *exec, const Identifier &propertyName) const { bool result = false; instance->begin(); Field *aField = instance->getClass()->fieldNamed(propertyName.ascii(), instance); if (aField) { instance->end(); return true; } MethodList methodList = instance->getClass()->methodsNamed(propertyName.ascii(), instance); instance->end(); if (methodList.length() > 0) return true; return result; }