Title: [144489] trunk/Source/_javascript_Core
Revision
144489
Author
[email protected]
Date
2013-03-01 13:14:24 -0800 (Fri, 01 Mar 2013)

Log Message

Objective-C API: Passing JS functions to Objective-C callbacks causes JSValue to leak
https://bugs.webkit.org/show_bug.cgi?id=107836

Reviewed by Oliver Hunt.

We've decided to remove support for this feature from the API because there's no way to automatically manage
the memory for clients in a satisfactory manner. Clients can still pass JS functions to Objective-C methods,
but the methods must accept plain JSValues instead of Objective-C blocks.

We now ignore functions that are part of a protocol that inherits from JSExport that accept blocks as arguments.

* API/JSBlockAdaptor.h: Removed.
* API/JSBlockAdaptor.mm: Removed.
* API/ObjCCallbackFunction.mm:
(ArgumentTypeDelegate::typeBlock): Return nil to signal that we want to ignore this function when copying it
to the object from the protocol.
* API/tests/testapi.mm: Added a test to make sure that we ignore methods declared as part of a JSExport-ed protocol
that have block arguments.
(-[TestObject bogusCallback:]):
* _javascript_Core.gypi: Updated build files.
* _javascript_Core.xcodeproj/project.pbxproj:

Modified Paths

Removed Paths

Diff

Deleted: trunk/Source/_javascript_Core/API/JSBlockAdaptor.h (144488 => 144489)


--- trunk/Source/_javascript_Core/API/JSBlockAdaptor.h	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/API/JSBlockAdaptor.h	2013-03-01 21:14:24 UTC (rev 144489)
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#import <_javascript_Core/_javascript_Core.h>
-
-#if JSC_OBJC_API_ENABLED
-
-@interface JSBlockAdaptor : NSObject
-
-- (id)initWithBlockSignatureFromProtocol:(const char *)signature;
-- (id)blockFromValue:(JSValueRef)argument inContext:(JSContext *)context withException:(JSValueRef *)exception;
-
-@end
-
-#endif

Deleted: trunk/Source/_javascript_Core/API/JSBlockAdaptor.mm (144488 => 144489)


--- trunk/Source/_javascript_Core/API/JSBlockAdaptor.mm	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/API/JSBlockAdaptor.mm	2013-03-01 21:14:24 UTC (rev 144489)
@@ -1,400 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#import "_javascript_Core.h"
-
-#if JSC_OBJC_API_ENABLED
-
-#import "APICast.h"
-#import "APIShims.h"
-#import "Error.h"
-#import "JSBlockAdaptor.h"
-#import "JSContextInternal.h"
-#import "JSCJSValue.h"
-#import "JSValueInternal.h"
-#import "JSWrapperMap.h"
-#import "ObjcRuntimeExtras.h"
-#import "Operations.h"
-#import <wtf/OwnPtr.h>
-#import <wtf/RetainPtr.h>
-
-extern "C" {
-id __NSMakeSpecialForwardingCaptureBlock(const char *signature, void (^handler)(NSInvocation *));
-}
-
-class BlockArgument {
-public:
-    virtual ~BlockArgument();
-    virtual JSValueRef get(NSInvocation *, NSInteger, JSContext *, JSValueRef*) = 0;
-
-    OwnPtr<BlockArgument> m_next;
-};
-
-BlockArgument::~BlockArgument()
-{
-}
-
-class BlockArgumentBoolean : public BlockArgument {
-    virtual JSValueRef get(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef*) override
-    {
-        bool value;
-        [invocation getArgument:&value atIndex:argumentNumber];
-        return JSValueMakeBoolean(contextInternalContext(context), value);
-    }
-};
-
-template<typename T>
-class BlockArgumentNumeric : public BlockArgument {
-    virtual JSValueRef get(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef*) override
-    {
-        T value;
-        [invocation getArgument:&value atIndex:argumentNumber];
-        return JSValueMakeNumber(contextInternalContext(context), value);
-    }
-};
-
-class BlockArgumentId : public BlockArgument {
-    virtual JSValueRef get(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef*) override
-    {
-        id value;
-        [invocation getArgument:&value atIndex:argumentNumber];
-        return objectToValue(context, value);
-    }
-};
-
-class BlockArgumentStruct : public BlockArgument {
-public:
-    BlockArgumentStruct(NSInvocation *conversionInvocation, const char* encodedType)
-        : m_conversionInvocation(conversionInvocation)
-        , m_buffer(encodedType)
-    {
-    }
-    
-private:
-    virtual JSValueRef get(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef*) override
-    {
-        [invocation getArgument:m_buffer atIndex:argumentNumber];
-
-        [m_conversionInvocation setArgument:m_buffer atIndex:2];
-        [m_conversionInvocation setArgument:&context atIndex:3];
-        [m_conversionInvocation invokeWithTarget:[JSValue class]];
-
-        JSValue *value;
-        [m_conversionInvocation getReturnValue:&value];
-        return valueInternalValue(value);
-    }
-
-    RetainPtr<NSInvocation> m_conversionInvocation;
-    StructBuffer m_buffer;
-};
-
-class BlockArgumentTypeDelegate {
-public:
-    typedef BlockArgument* ResultType;
-
-    template<typename T>
-    static ResultType typeInteger()
-    {
-        return new BlockArgumentNumeric<T>;
-    }
-
-    template<typename T>
-    static ResultType typeDouble()
-    {
-        return new BlockArgumentNumeric<T>;
-    }
-
-    static ResultType typeBool()
-    {
-        return new BlockArgumentBoolean;
-    }
-
-    static ResultType typeVoid()
-    {
-        RELEASE_ASSERT_NOT_REACHED();
-        return 0;
-    }
-
-    static ResultType typeId()
-    {
-        return new BlockArgumentId;
-    }
-
-    static ResultType typeOfClass(const char*, const char*)
-    {
-        return new BlockArgumentId;
-    }
-
-    static ResultType typeBlock(const char*, const char*)
-    {
-        return 0;
-    }
-
-    static ResultType typeStruct(const char* begin, const char* end)
-    {
-        StringRange copy(begin, end);
-        if (NSInvocation *invocation = valueToTypeInvocationFor(copy))
-            return new BlockArgumentStruct(invocation, copy);
-        return 0;
-    }
-};
-
-class BlockResult {
-public:
-    virtual ~BlockResult()
-    {
-    }
-
-    virtual void set(NSInvocation *, JSContext *, JSValueRef, JSValueRef*) = 0;
-};
-
-class BlockResultVoid : public BlockResult {
-    virtual void set(NSInvocation *, JSContext *, JSValueRef, JSValueRef*) override
-    {
-    }
-};
-
-template<typename T>
-class BlockResultInteger : public BlockResult {
-    virtual void set(NSInvocation *invocation, JSContext *context, JSValueRef result, JSValueRef* exception) override
-    {
-        T value = (T)JSC::toInt32(JSValueToNumber(contextInternalContext(context), result, exception));
-        [invocation setReturnValue:&value];
-    }
-};
-
-template<typename T>
-class BlockResultDouble : public BlockResult {
-    virtual void set(NSInvocation *invocation, JSContext *context, JSValueRef result, JSValueRef* exception) override
-    {
-        T value = (T)JSValueToNumber(contextInternalContext(context), result, exception);
-        [invocation setReturnValue:&value];
-    }
-};
-
-class BlockResultBoolean : public BlockResult {
-    virtual void set(NSInvocation *invocation, JSContext *context, JSValueRef result, JSValueRef*) override
-    {
-        bool value = JSValueToBoolean(contextInternalContext(context), result);
-        [invocation setReturnValue:&value];
-    }
-};
-
-class BlockResultStruct : public BlockResult {
-public:
-    BlockResultStruct(NSInvocation *conversionInvocation, const char* encodedType)
-        : m_conversionInvocation(conversionInvocation)
-        , m_buffer(encodedType)
-    {
-    }
-    
-private:
-    virtual void set(NSInvocation *invocation, JSContext *context, JSValueRef result, JSValueRef*) override
-    {
-        JSValue *value = [JSValue valueWithValue:result inContext:context];
-        [m_conversionInvocation invokeWithTarget:value];
-        [m_conversionInvocation getReturnValue:m_buffer];
-        [invocation setReturnValue:&value];
-    }
-
-    RetainPtr<NSInvocation> m_conversionInvocation;
-    StructBuffer m_buffer;
-};
-
-@implementation JSBlockAdaptor {
-    RetainPtr<NSString> m_signatureWithOffsets;
-    RetainPtr<NSString> m_signatureWithoutOffsets;
-    OwnPtr<BlockResult> m_result;
-    OwnPtr<BlockArgument> m_arguments;
-    size_t m_argumentCount;
-}
-
-// Helper function to add offset information back into a block signature.
-static NSString *buildBlockSignature(NSString *prefix, const char* begin, const char* end, unsigned long long& offset, NSString *postfix)
-{
-    StringRange copy(begin, end);
-    NSString *result = [NSString stringWithFormat:@"%@%s%@%@", prefix, copy.get(), @(offset), postfix];
-    NSUInteger size;
-    NSGetSizeAndAlignment(copy, &size, 0);
-    if (size < 4)
-        size = 4;
-    offset += size;
-    return result;
-}
-
-- (id)initWithBlockSignatureFromProtocol:(const char*)encodedType
-{
-    self = [super init];
-    if (!self)
-        return nil;
-
-    m_signatureWithoutOffsets = [NSString stringWithUTF8String:encodedType];
-    m_argumentCount = 0;
-
-    // Currently only adapting _javascript_ functions to blocks returning void.
-    const char* resultTypeBegin = encodedType;
-    if (*encodedType++ != 'v')
-        return self;
-    OwnPtr<BlockResult> result = adoptPtr(new BlockResultVoid);
-    const char* resultTypeEnd = encodedType;
-
-    if (encodedType[0] != '@' || encodedType[1] != '?')
-        return self;
-    encodedType += 2;
-
-    // The first argument to a block is the block itself.
-    NSString *signature = @"@?0";
-    unsigned long long offset = sizeof(void*);
-
-    OwnPtr<BlockArgument> arguments;
-    OwnPtr<BlockArgument>* nextArgument = &arguments;
-    while (*encodedType) {
-        const char* begin = encodedType;
-        OwnPtr<BlockArgument> argument = adoptPtr(parseObjCType<BlockArgumentTypeDelegate>(encodedType));
-        if (!argument)
-            return self;
-        const char* end = encodedType;
-
-        // Append the type & stack offset of this argument to the signature string.
-        signature = buildBlockSignature(signature, begin, end, offset, @"");
-
-        *nextArgument = argument.release();
-        nextArgument = &(*nextArgument)->m_next;
-        ++m_argumentCount;
-    }
-
-    // Prefix the signature with the return type & total stackframe size.
-    // (this call will also add the return type size to the offset,
-    // which is a nonsense, but harmless since this is the last use).
-    signature = buildBlockSignature(@"", resultTypeBegin, resultTypeEnd, offset, signature);
-
-    m_signatureWithOffsets = signature;
-    m_result = result.release();
-    m_arguments = arguments.release();
-
-    return self;
-}
-
-// The JSBlockAdaptor stores the type string taken from the protocol. This string
-// does not contain invocation layout information. The signature from the block
-// does contain the stackframe offsets. Skip these when comparing strings.
-- (bool)blockMatchesSignature:(id)block
-{
-    if (!_Block_has_signature(block))
-        return false;
-
-    const char* withoutOffsets = [m_signatureWithoutOffsets UTF8String];
-    const char* signature = _Block_signature(block);
-
-    while (true) {
-        while (isdigit(*withoutOffsets))
-            ++withoutOffsets;
-        while (isdigit(*signature))
-            ++signature;
-        
-        if (*withoutOffsets != *signature)
-            return false;
-        if (!*withoutOffsets)
-            return true;
-        ++withoutOffsets;
-        ++signature;
-    }
-}
-
-- (id)blockFromValue:(JSValueRef)argument inContext:(JSContext *)context withException:(JSValueRef*)exception
-{
-    JSGlobalContextRef contextRef = contextInternalContext(context);
-
-    // Check for null/undefined.
-    if (JSValueIsUndefined(contextRef, argument) || JSValueIsNull(contextRef, argument))
-        return nil;
-
-    JSObjectRef function = 0;
-    if (id object = tryUnwrapObjcObject(contextRef, argument)) {
-        // Check if the argument is an Objective-C block.
-        if ([object isKindOfClass:getNSBlockClass()]) {
-            if ([self blockMatchesSignature:object])
-                return object;
-        }
-    } else if (m_signatureWithOffsets && JSValueIsObject(contextRef, argument)) {
-        // Check if the argument is a _javascript_ function
-        // (and that we're able to create a forwarding block for this signature).
-        JSObjectRef object = JSValueToObject(contextRef, argument, exception);
-        if (JSObjectIsFunction(contextRef, object))
-            function = object;
-    }
-
-    if (!function) {
-        JSC::APIEntryShim entryShim(toJS(contextRef));
-        *exception = toRef(JSC::createTypeError(toJS(contextRef), "Invalid argument supplied for Objective-C block"));
-        return nil;
-    }
-
-    // Captured variables.
-    JSBlockAdaptor *adaptor = self;
-    JSValue *value = [JSValue valueWithValue:function inContext:context];
-
-    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=105895
-    // Currently only supporting void functions.
-    return __NSMakeSpecialForwardingCaptureBlock([m_signatureWithOffsets UTF8String], ^(NSInvocation *invocation){
-        // FIXME: https://bugs.webkit.org/show_bug.cgi?id=105894
-        // Rather than requiring that the context be retained, it would probably be more
-        // appropriate to use a new JSContext instance (creating one if necessary).
-        // It would be nice if we could throw a JS exception here, but without a context we have
-        // nothing to work with.
-        JSContext *context = value.context;
-        if (!context)
-            return;
-        JSGlobalContextRef contextRef = contextInternalContext(context);
-
-        JSValueRef argumentArray[adaptor->m_argumentCount];
-
-        size_t argumentNumber = 0;
-        BlockArgument* arguments = adaptor->m_arguments.get();
-        for (BlockArgument* argument = arguments; argument; argument = argument->m_next.get()) {
-            JSValueRef exception = 0;
-            argumentArray[argumentNumber] = argument->get(invocation, argumentNumber + 1, context, &exception);
-            if (exception) {
-                [context notifyException:exception];
-                return;
-            }
-            
-            ++argumentNumber;
-        }
-        size_t argumentCount = argumentNumber;
-
-        JSValueRef exception = 0;
-        JSObjectCallAsFunction(contextRef, JSValueToObject(contextRef, valueInternalValue(value), 0), 0, argumentCount, argumentArray, &exception);
-        if (exception) {
-            [context notifyException:exception];
-            return;
-        }
-    });
-}
-
-@end
-
-#endif

Modified: trunk/Source/_javascript_Core/API/ObjCCallbackFunction.mm (144488 => 144489)


--- trunk/Source/_javascript_Core/API/ObjCCallbackFunction.mm	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/API/ObjCCallbackFunction.mm	2013-03-01 21:14:24 UTC (rev 144489)
@@ -31,7 +31,6 @@
 #import "APICast.h"
 #import "APIShims.h"
 #import "Error.h"
-#import "JSBlockAdaptor.h"
 #import "JSCJSValueInlines.h"
 #import "JSCell.h"
 #import "JSCellInlines.h"
@@ -195,33 +194,6 @@
     StructBuffer m_buffer;
 };
 
-class CallbackArgumentBlockCallback : public CallbackArgument {
-public:
-    static CallbackArgumentBlockCallback* createAdoptingJSBlockAdaptor(JSBlockAdaptor *adaptor)
-    {
-        return new CallbackArgumentBlockCallback(adaptor);
-    }
-
-private:
-    CallbackArgumentBlockCallback(JSBlockAdaptor *adaptor)
-        : m_adaptor(adaptor)
-    {
-    }
-    
-    virtual ~CallbackArgumentBlockCallback()
-    {
-        [m_adaptor release];
-    }
-    
-    virtual void set(NSInvocation *invocation, NSInteger argumentNumber, JSContext *context, JSValueRef argument, JSValueRef* exception) override
-    {
-        id block = [m_adaptor blockFromValue:argument inContext:context withException:exception];
-        [invocation setArgument:&block atIndex:argumentNumber];
-    }
-
-    JSBlockAdaptor *m_adaptor;
-};
-
 class ArgumentTypeDelegate {
 public:
     typedef CallbackArgument* ResultType;
@@ -277,10 +249,9 @@
         return new CallbackArgumentOfClass(cls);
     }
 
-    static ResultType typeBlock(const char* begin, const char* end)
+    static ResultType typeBlock(const char*, const char*)
     {
-        StringRange copy(begin, end);
-        return CallbackArgumentBlockCallback::createAdoptingJSBlockAdaptor([[JSBlockAdaptor alloc] initWithBlockSignatureFromProtocol:copy]);
+        return nil;
     }
 
     static ResultType typeStruct(const char* begin, const char* end)

Modified: trunk/Source/_javascript_Core/API/tests/testapi.mm (144488 => 144489)


--- trunk/Source/_javascript_Core/API/tests/testapi.mm	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/API/tests/testapi.mm	2013-03-01 21:14:24 UTC (rev 144489)
@@ -58,6 +58,7 @@
 - (NSString *)testArgumentTypesWithInt:(int)i double:(double)d boolean:(BOOL)b string:(NSString *)s number:(NSNumber *)n array:(NSArray *)a dictionary:(NSDictionary *)o
 );
 - (void)callback:(JSValue *)function;
+- (void)bogusCallback:(void(^)(int))function;
 @end
 
 @interface TestObject : ParentObject <TestObject>
@@ -89,6 +90,10 @@
 {
     [function callWithArguments:[NSArray arrayWithObject:[NSNumber numberWithInt:42]]];
 }
+- (void)bogusCallback:(void(^)(int))function
+{
+    function(42);
+}
 @end
 
 bool testXYZTested = false;
@@ -476,6 +481,8 @@
         context[@"testObject"] = testObject;
         JSValue *result = [context evaluateScript:@"var result = 0; testObject.callback(function(x){ result = x; }); result"];
         checkResult(@"testObject.callback", [result isNumber] && [result toInt32] == 42);
+        result = [context evaluateScript:@"testObject.bogusCallback"];
+        checkResult(@"testObject.bogusCallback == undefined", [result isUndefined]);
     }
 
     @autoreleasepool {

Modified: trunk/Source/_javascript_Core/ChangeLog (144488 => 144489)


--- trunk/Source/_javascript_Core/ChangeLog	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-03-01 21:14:24 UTC (rev 144489)
@@ -1,3 +1,27 @@
+2013-03-01  Mark Hahnenberg  <[email protected]>
+
+        Objective-C API: Passing JS functions to Objective-C callbacks causes JSValue to leak
+        https://bugs.webkit.org/show_bug.cgi?id=107836
+
+        Reviewed by Oliver Hunt.
+
+        We've decided to remove support for this feature from the API because there's no way to automatically manage 
+        the memory for clients in a satisfactory manner. Clients can still pass JS functions to Objective-C methods, 
+        but the methods must accept plain JSValues instead of Objective-C blocks.
+
+        We now ignore functions that are part of a protocol that inherits from JSExport that accept blocks as arguments.
+
+        * API/JSBlockAdaptor.h: Removed.
+        * API/JSBlockAdaptor.mm: Removed.
+        * API/ObjCCallbackFunction.mm:
+        (ArgumentTypeDelegate::typeBlock): Return nil to signal that we want to ignore this function when copying it
+        to the object from the protocol.
+        * API/tests/testapi.mm: Added a test to make sure that we ignore methods declared as part of a JSExport-ed protocol
+        that have block arguments.
+        (-[TestObject bogusCallback:]):
+        * _javascript_Core.gypi: Updated build files.
+        * _javascript_Core.xcodeproj/project.pbxproj:
+
 2013-03-01  Filip Pizlo  <[email protected]>
 
         DFG Branch(LogicalNot) peephole should not try to optimize and work-around the case where LogicalNot may be otherwise live

Modified: trunk/Source/_javascript_Core/_javascript_Core.gypi (144488 => 144489)


--- trunk/Source/_javascript_Core/_javascript_Core.gypi	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/_javascript_Core.gypi	2013-03-01 21:14:24 UTC (rev 144489)
@@ -39,7 +39,6 @@
             'API/JSBase.cpp',
             'API/JSBase.h',
             'API/JSBasePrivate.h',
-            'API/JSBlockAdaptor.h',
             'API/JSCallbackConstructor.cpp',
             'API/JSCallbackConstructor.h',
             'API/JSCallbackFunction.cpp',

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (144488 => 144489)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2013-03-01 21:07:34 UTC (rev 144488)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2013-03-01 21:14:24 UTC (rev 144489)
@@ -618,8 +618,6 @@
 		86EC9DD31328DF82002B2AD7 /* DFGSpeculativeJIT.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EC9DC31328DF82002B2AD7 /* DFGSpeculativeJIT.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		86ECA3EA132DEF1C002B2AD7 /* DFGNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 86ECA3E9132DEF1C002B2AD7 /* DFGNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		86ECA3FA132DF25A002B2AD7 /* DFGScoreBoard.h in Headers */ = {isa = PBXBuildFile; fileRef = 86ECA3F9132DF25A002B2AD7 /* DFGScoreBoard.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		86F3EEBB168CDE930077B92A /* JSBlockAdaptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F3EEB7168CCF750077B92A /* JSBlockAdaptor.h */; };
-		86F3EEBC168CDE930077B92A /* JSBlockAdaptor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 86F3EEB8168CCF750077B92A /* JSBlockAdaptor.mm */; };
 		86F3EEBD168CDE930077B92A /* ObjCCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F3EEB9168CCF750077B92A /* ObjCCallbackFunction.h */; };
 		86F3EEBE168CDE930077B92A /* ObjCCallbackFunction.mm in Sources */ = {isa = PBXBuildFile; fileRef = 86F3EEBA168CCF750077B92A /* ObjCCallbackFunction.mm */; };
 		86F3EEBF168CDE930077B92A /* ObjcRuntimeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F3EEB616855A5B0077B92A /* ObjcRuntimeExtras.h */; };
@@ -1508,8 +1506,6 @@
 		86ECA3E9132DEF1C002B2AD7 /* DFGNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGNode.h; path = dfg/DFGNode.h; sourceTree = "<group>"; };
 		86ECA3F9132DF25A002B2AD7 /* DFGScoreBoard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGScoreBoard.h; path = dfg/DFGScoreBoard.h; sourceTree = "<group>"; };
 		86F3EEB616855A5B0077B92A /* ObjcRuntimeExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjcRuntimeExtras.h; sourceTree = "<group>"; };
-		86F3EEB7168CCF750077B92A /* JSBlockAdaptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBlockAdaptor.h; sourceTree = "<group>"; };
-		86F3EEB8168CCF750077B92A /* JSBlockAdaptor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JSBlockAdaptor.mm; sourceTree = "<group>"; };
 		86F3EEB9168CCF750077B92A /* ObjCCallbackFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjCCallbackFunction.h; sourceTree = "<group>"; };
 		86F3EEBA168CCF750077B92A /* ObjCCallbackFunction.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjCCallbackFunction.mm; sourceTree = "<group>"; };
 		86F75EFB151C062F007C9BA3 /* RegExpCachedResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpCachedResult.cpp; sourceTree = "<group>"; };
@@ -2159,8 +2155,6 @@
 				1421359A0A677F4F00A8195E /* JSBase.cpp */,
 				142711380A460BBB0080EEEA /* JSBase.h */,
 				140D17D60E8AD4A9000CD17D /* JSBasePrivate.h */,
-				86F3EEB7168CCF750077B92A /* JSBlockAdaptor.h */,
-				86F3EEB8168CCF750077B92A /* JSBlockAdaptor.mm */,
 				1440F8AD0A508D200005F061 /* JSCallbackConstructor.cpp */,
 				1440F8AC0A508D200005F061 /* JSCallbackConstructor.h */,
 				1440F8900A508B100005F061 /* JSCallbackFunction.cpp */,
@@ -3122,7 +3116,6 @@
 				BC18C4170E16F5CD00B34460 /* JSArray.h in Headers */,
 				BC18C4180E16F5CD00B34460 /* JSBase.h in Headers */,
 				140D17D70E8AD4A9000CD17D /* JSBasePrivate.h in Headers */,
-				86F3EEBB168CDE930077B92A /* JSBlockAdaptor.h in Headers */,
 				86FA9E92142BBB2E001773B7 /* JSBoundFunction.h in Headers */,
 				BC18C4190E16F5CD00B34460 /* JSCallbackConstructor.h in Headers */,
 				BC18C41A0E16F5CD00B34460 /* JSCallbackFunction.h in Headers */,
@@ -3867,7 +3860,6 @@
 				140566C4107EC255005DBC8D /* JSAPIValueWrapper.cpp in Sources */,
 				147F39D0107EC37600427A48 /* JSArray.cpp in Sources */,
 				1421359B0A677F4F00A8195E /* JSBase.cpp in Sources */,
-				86F3EEBC168CDE930077B92A /* JSBlockAdaptor.mm in Sources */,
 				86FA9E91142BBB2E001773B7 /* JSBoundFunction.cpp in Sources */,
 				1440F8AF0A508D200005F061 /* JSCallbackConstructor.cpp in Sources */,
 				1440F8920A508B100005F061 /* JSCallbackFunction.cpp in Sources */,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to