本文整理汇总了C++中JSUserObject类的典型用法代码示例。如果您正苦于以下问题:C++ JSUserObject类的具体用法?C++ JSUserObject怎么用?C++ JSUserObject使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了JSUserObject类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: IdentifierToCFString
void UserObjectImp::put(ExecState *exec, const Identifier &propertyName, JSValue value, PutPropertySlot&)
{
if (!fJSUserObject)
return;
CFStringRef cfPropName = IdentifierToCFString(propertyName);
JSUserObject *jsValueObj = KJSValueToJSObject(value, exec);
fJSUserObject->SetProperty(cfPropName, jsValueObj);
if (jsValueObj) jsValueObj->Release();
ReleaseCFType(cfPropName);
}
示例2: assert
JSValue *UserObjectImp::userObjectGetter(ExecState *, JSObject *, const Identifier& propertyName, const PropertySlot& slot)
{
UserObjectImp *thisObj = static_cast<UserObjectImp *>(slot.slotBase());
// getOwnPropertySlot should have guarded against a null fJSUserObject.
assert(thisObj->fJSUserObject);
CFStringRef cfPropName = IdentifierToCFString(propertyName);
JSUserObject *jsResult = thisObj->fJSUserObject->CopyProperty(cfPropName);
ReleaseCFType(cfPropName);
JSValue *result = JSObjectKJSValue(jsResult);
jsResult->Release();
return result;
}
示例3: GetJSUserObject
void UserObjectImp::getPropertyNames(ExecState *exec, PropertyNameArray& propertyNames)
{
JSUserObject* ptr = GetJSUserObject();
if (ptr) {
CFArrayRef cfPropertyNames = ptr->CopyPropertyNames();
if (cfPropertyNames) {
CFIndex count = CFArrayGetCount(cfPropertyNames);
CFIndex i;
for (i = 0; i < count; i++) {
CFStringRef propertyName = (CFStringRef)CFArrayGetValueAtIndex(cfPropertyNames, i);
propertyNames.add(CFStringToIdentifier(propertyName));
}
CFRelease(cfPropertyNames);
}
}
JSObject::getPropertyNames(exec, propertyNames);
}
示例4: IdentifierToCFString
bool UserObjectImp::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName, PropertySlot& slot)
{
if (!fJSUserObject)
return false;
CFStringRef cfPropName = IdentifierToCFString(propertyName);
JSUserObject *jsResult = fJSUserObject->CopyProperty(cfPropName);
ReleaseCFType(cfPropName);
if (jsResult) {
slot.setCustom(this, userObjectGetter);
jsResult->Release();
return true;
} else {
JSValue *kjsValue = toPrimitive(exec);
if (kjsValue->type() != NullType && kjsValue->type() != UndefinedType) {
JSObject *kjsObject = kjsValue->toObject(exec);
if (kjsObject->getPropertySlot(exec, propertyName, slot))
return true;
}
}
return JSObject::getOwnPropertySlot(exec, propertyName, slot);
}
示例5: KJSValueToJSObject
//--------------------------------------------------------------------------
// KJSValueToJSObject
//--------------------------------------------------------------------------
JSUserObject* KJSValueToJSObject(JSValue inValue, ExecState *exec)
{
JSUserObject* result = 0;
if (inValue.inherits(&UserObjectImp::info)) {
UserObjectImp* userObjectImp = static_cast<UserObjectImp *>(asObject(inValue));
result = userObjectImp->GetJSUserObject();
if (result)
result->Retain();
} else {
JSValueWrapper* wrapperValue = new JSValueWrapper(inValue);
if (wrapperValue) {
JSObjectCallBacks callBacks;
JSValueWrapper::GetJSObectCallBacks(callBacks);
result = (JSUserObject*)JSObjectCreate(wrapperValue, &callBacks);
if (!result) {
delete wrapperValue;
}
}
}
return result;
}
示例6: jsUndefined
JSValue *UserObjectImp::callAsFunction(ExecState *exec, JSObject *thisObj, const List &args)
{
JSValue *result = jsUndefined();
JSUserObject* jsThisObj = KJSValueToJSObject(thisObj, exec);
if (jsThisObj) {
CFIndex argCount = args.size();
CFArrayCallBacks arrayCallBacks;
JSTypeGetCFArrayCallBacks(&arrayCallBacks);
CFMutableArrayRef jsArgs = CFArrayCreateMutable(0, 0, &arrayCallBacks);
if (jsArgs) {
for (CFIndex i = 0; i < argCount; i++) {
JSUserObject* jsArg = KJSValueToJSObject(args[i], exec);
CFArrayAppendValue(jsArgs, (void*)jsArg);
jsArg->Release();
}
}
JSUserObject* jsResult;
{ // scope
JSLock::DropAllLocks dropLocks;
// implementsCall should have guarded against a NULL fJSUserObject.
assert(fJSUserObject);
jsResult = fJSUserObject->CallFunction(jsThisObj, jsArgs);
}
if (jsResult) {
result = JSObjectKJSValue(jsResult);
jsResult->Release();
}
ReleaseCFType(jsArgs);
jsThisObj->Release();
}
return result;
}
示例7: jsUndefined
JSValue UserObjectImp::callAsFunction(ExecState *exec)
{
JSValue result = jsUndefined();
JSUserObject* jsThisObj = KJSValueToJSObject(exec->hostThisValue().toThisObject(exec), exec);
if (jsThisObj) {
CFIndex argCount = exec->argumentCount();
CFArrayCallBacks arrayCallBacks;
JSTypeGetCFArrayCallBacks(&arrayCallBacks);
CFMutableArrayRef jsArgs = CFArrayCreateMutable(0, 0, &arrayCallBacks);
if (jsArgs) {
for (CFIndex i = 0; i < argCount; i++) {
JSUserObject* jsArg = KJSValueToJSObject(exec->argument(i), exec);
CFArrayAppendValue(jsArgs, (void*)jsArg);
jsArg->Release();
}
}
JSUserObject* jsResult;
{ // scope
JSGlueAPICallback apiCallback(exec);
// getCallData should have guarded against a NULL fJSUserObject.
assert(fJSUserObject);
jsResult = fJSUserObject->CallFunction(jsThisObj, jsArgs);
}
if (jsResult) {
result = JSObjectKJSValue(jsResult);
jsResult->Release();
}
ReleaseCFType(jsArgs);
jsThisObj->Release();
}
return result;
}
示例8: KJSValueToJSObject
UString UserObjectImp::toString(ExecState *exec) const
{
UString result;
JSUserObject* jsObjPtr = KJSValueToJSObject(toObject(exec), exec);
CFTypeRef cfValue = jsObjPtr ? jsObjPtr->CopyCFValue() : 0;
if (cfValue)
{
CFTypeID cfType = CFGetTypeID(cfValue);
if (cfValue == GetCFNull())
{
//
}
else if (cfType == CFBooleanGetTypeID())
{
if (cfValue == kCFBooleanTrue)
{
result = "true";
}
else
{
result = "false";
}
}
else if (cfType == CFStringGetTypeID())
{
result = CFStringToUString((CFStringRef)cfValue);
}
else if (cfType == CFNumberGetTypeID())
{
if (cfValue == kCFNumberNaN)
{
result = "Nan";
}
else if (CFNumberCompare(kCFNumberPositiveInfinity, (CFNumberRef)cfValue, 0) == 0)
{
result = "Infinity";
}
else if (CFNumberCompare(kCFNumberNegativeInfinity, (CFNumberRef)cfValue, 0) == 0)
{
result = "-Infinity";
}
else
{
CFStringRef cfNumStr;
double d = 0;
CFNumberGetValue((CFNumberRef)cfValue, kCFNumberDoubleType, &d);
if (CFNumberIsFloatType((CFNumberRef)cfValue))
{
cfNumStr = CFStringCreateWithFormat(0, 0, CFSTR("%f"), d);
}
else
{
cfNumStr = CFStringCreateWithFormat(0, 0, CFSTR("%.0f"), d);
}
result = CFStringToUString(cfNumStr);
ReleaseCFType(cfNumStr);
}
}
else if (cfType == CFArrayGetTypeID())
{
//
}
else if (cfType == CFDictionaryGetTypeID())
{
//
}
else if (cfType == CFSetGetTypeID())
{
//
}
else if (cfType == CFURLGetTypeID())
{
CFURLRef absURL = CFURLCopyAbsoluteURL((CFURLRef)cfValue);
if (absURL)
{
CFStringRef cfStr = CFURLGetString(absURL);
if (cfStr)
{
result = CFStringToUString(cfStr);
}
ReleaseCFType(absURL);
}
}
}
ReleaseCFType(cfValue);
if (jsObjPtr) jsObjPtr->Release();
return result;
}
示例9: KJSValueToCFTypeInternal
//--------------------------------------------------------------------------
// KJSValueToCFTypeInternal
//--------------------------------------------------------------------------
// Caller is responsible for releasing the returned CFTypeRef
CFTypeRef KJSValueToCFTypeInternal(JSValue inValue, ExecState *exec, ObjectImpList* inImps)
{
if (!inValue)
return 0;
CFTypeRef result = 0;
JSGlueAPIEntry entry;
if (inValue.isBoolean())
{
result = inValue.toBoolean(exec) ? kCFBooleanTrue : kCFBooleanFalse;
RetainCFType(result);
return result;
}
if (inValue.isString())
{
UString uString = inValue.toString(exec);
result = UStringToCFString(uString);
return result;
}
if (inValue.isNumber())
{
double number1 = inValue.toNumber(exec);
double number2 = (double)inValue.toInteger(exec);
if (number1 == number2)
{
int intValue = (int)number2;
result = CFNumberCreate(0, kCFNumberIntType, &intValue);
}
else
{
result = CFNumberCreate(0, kCFNumberDoubleType, &number1);
}
return result;
}
if (inValue.isObject())
{
if (inValue.inherits(&UserObjectImp::info)) {
UserObjectImp* userObjectImp = static_cast<UserObjectImp *>(asObject(inValue));
JSUserObject* ptr = userObjectImp->GetJSUserObject();
if (ptr)
{
result = ptr->CopyCFValue();
}
}
else
{
JSObject *object = inValue.toObject(exec);
UInt8 isArray = false;
// if two objects reference each
JSObject* imp = object;
ObjectImpList* temp = inImps;
while (temp) {
if (imp == temp->imp) {
return CFRetain(GetCFNull());
}
temp = temp->next;
}
ObjectImpList imps;
imps.next = inImps;
imps.imp = imp;
//[...] HACK since we do not have access to the class info we use class name instead
#if 0
if (object->inherits(&ArrayInstanceImp::info))
#else
if (object->className() == "Array")
#endif
{
isArray = true;
JSGlueGlobalObject* globalObject = static_cast<JSGlueGlobalObject*>(exec->dynamicGlobalObject());
if (globalObject && (globalObject->Flags() & kJSFlagConvertAssociativeArray)) {
PropertyNameArray propNames(exec);
object->getPropertyNames(exec, propNames);
PropertyNameArray::const_iterator iter = propNames.begin();
PropertyNameArray::const_iterator end = propNames.end();
while(iter != end && isArray)
{
Identifier propName = *iter;
UString ustr = propName.ustring();
const UniChar* uniChars = (const UniChar*)ustr.characters();
int size = ustr.length();
while (size--) {
if (uniChars[size] < '0' || uniChars[size] > '9') {
isArray = false;
break;
}
}
iter++;
//.........这里部分代码省略.........