Changeset 31350 in webkit for trunk/JavaScriptCore/API


Ignore:
Timestamp:
Mar 26, 2008, 8:35:40 PM (17 years ago)
Author:
Adam Roben
Message:

Fix Bug 18060: Assertion failure (JSLock not held) beneath JSCallbackObject<Base>::toString

<http://bugs.webkit.org/show_bug.cgi?id=18060>

Reviewed by Geoff Garen.

Bug fix:

  • API/JSCallbackObjectFunctions.h: (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks instance only be in scope while calling convertToType.

Test:

  • API/testapi.c: (MyObject_convertToType): Implement type conversion to string.
  • API/testapi.js: Add a test for type conversion to string.
Location:
trunk/JavaScriptCore/API
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSCallbackObjectFunctions.h

    r30534 r31350  
    389389    for (JSClassRef jsClass = m_class; jsClass; jsClass = jsClass->parentClass)
    390390        if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) {
    391             JSLock::DropAllLocks dropAllLocks;
    392             if (JSValueRef value = convertToType(ctx, thisRef, kJSTypeString, toRef(exec->exceptionSlot())))
     391            JSValueRef value;
     392            {
     393                JSLock::DropAllLocks dropAllLocks;
     394                value = convertToType(ctx, thisRef, kJSTypeString, toRef(exec->exceptionSlot()));
     395            }
     396            if (value)
    393397                return toJS(value)->getString();
    394398        }
  • trunk/JavaScriptCore/API/testapi.c

    r31296 r31350  
    239239    case kJSTypeNumber:
    240240        return JSValueMakeNumber(context, 1);
     241    case kJSTypeString:
     242        {
     243            JSStringRef string = JSStringCreateWithUTF8CString("MyObjectAsString");
     244            JSValueRef result = JSValueMakeString(context, string);
     245            JSStringRelease(string);
     246            return result;
     247        }
    241248    default:
    242249        break;
  • trunk/JavaScriptCore/API/testapi.js

    r28884 r31350  
    101101shouldBe("+MyObject", 1); // toNumber
    102102shouldBe("(MyObject.toString())", "[object MyObject]"); // toString
     103shouldBe("String(MyObject)", "MyObjectAsString"); // type conversion to string
    103104shouldBe("MyObject - 0", NaN); // toPrimitive
    104105
Note: See TracChangeset for help on using the changeset viewer.