Reviewed by Darin.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Feb 2006 19:34:53 +0000 (19:34 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Feb 2006 19:34:53 +0000 (19:34 +0000)
        Replaced the old NS_DURING exception blocking with @try/@catch.

        * JavaScriptCorePrefix.h: undef try and catch to workaround a C++ conflict
        * bindings/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bindings/objc/objc_runtime.mm:
        (ObjcField::valueFromInstance):
        (ObjcField::setValueToInstance):
        (ObjcArray::setValueAt):
        (ObjcArray::valueAt):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@12780 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCorePrefix.h
JavaScriptCore/bindings/objc/objc_instance.mm
JavaScriptCore/bindings/objc/objc_runtime.mm

index ffb85a77edff76b143a1122f9239db7fe83a58b1..868493250f47342a39e530e426536dfd48dbd772 100644 (file)
@@ -1,3 +1,21 @@
+2006-02-13  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Darin.
+
+        Replaced the old NS_DURING exception blocking with @try/@catch.
+
+        * JavaScriptCorePrefix.h: undef try and catch to workaround a C++ conflict
+        * bindings/objc/objc_instance.mm:
+        (ObjcInstance::invokeMethod):
+        (ObjcInstance::invokeDefaultMethod):
+        (ObjcInstance::setValueOfUndefinedField):
+        (ObjcInstance::getValueOfUndefinedField):
+        * bindings/objc/objc_runtime.mm:
+        (ObjcField::valueFromInstance):
+        (ObjcField::setValueToInstance):
+        (ObjcArray::setValueAt):
+        (ObjcArray::valueAt):
+
 2006-02-13  Darin Adler  <darin@apple.com>
 
         - fix a couple problems building on Windows, based on requests
index 9a2270110967793fc0ef3ebad42b3567a3734478..48e44eb1952d59e7a9680de9d2ffceee3ae2ab85 100644 (file)
@@ -48,3 +48,7 @@
 #include <typeinfo>
 
 #endif
+
+// Work around bug with C++ library that screws up Objective-C++ when exception support is disabled.
+#undef try
+#undef catch
index 8fc90f822d549b46f4846711eb84e4bc96ca4fe5..62fe79065ee13f540eb74ecbb0778ae09d9b9889 100644 (file)
@@ -131,7 +131,7 @@ JSValue *ObjcInstance::invokeMethod (ExecState *exec, const MethodList &methodLi
     // name match for a particular method.
     assert (methodList.length() == 1);
 
-NS_DURING
+@try {
     
     ObjcMethod *method = 0;
     method = static_cast<ObjcMethod*>(methodList.methodAt(0));
@@ -143,7 +143,7 @@ NS_DURING
     if (method->isFallbackMethod()) {
         if (objcValueTypeForType([signature methodReturnType]) != ObjcObjectType) {
             NSLog(@"Incorrect signature for invokeUndefinedMethodFromWebScript:withArguments: -- return type must be object.");
-            NS_VALUERETURN(jsUndefined(), JSValue *);
+            return jsUndefined();
         }
         
         // Invoke invokeUndefinedMethodFromWebScript:withArguments:, pass JavaScript function
@@ -230,11 +230,11 @@ NS_DURING
         resultValue = convertObjcValueToValue (exec, buffer, objcValueType);
     }
 
-NS_HANDLER
+} @catch(NSException *localException) {
     
     resultValue = jsUndefined();
 
-NS_ENDHANDLER
+}
 
     return resultValue;
 }
@@ -243,10 +243,10 @@ JSValue *ObjcInstance::invokeDefaultMethod (ExecState *exec, const List &args)
 {
     JSValue *resultValue;
     
-NS_DURING
+@try {
 
     if (![_instance respondsToSelector:@selector(invokeDefaultMethodWithArguments:)])
-        NS_VALUERETURN(jsUndefined(), JSValue *);
+        return jsUndefined();
     
     NSMethodSignature *signature = [_instance methodSignatureForSelector:@selector(invokeDefaultMethodWithArguments:)];
     NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
@@ -256,7 +256,7 @@ NS_DURING
     
     if (objcValueTypeForType([signature methodReturnType]) != ObjcObjectType) {
         NSLog(@"Incorrect signature for invokeDefaultMethodWithArguments: -- return type must be object.");
-        NS_VALUERETURN(jsUndefined(), JSValue *);
+        return jsUndefined();
     }
     
     NSMutableArray *objcArgs = [NSMutableArray array];
@@ -281,11 +281,11 @@ NS_DURING
     [invocation getReturnValue:buffer];
     resultValue = convertObjcValueToValue (exec, buffer, objcValueType);
 
-NS_HANDLER
+} @catch(NSException *localException) {
 
     resultValue = jsUndefined();
 
-NS_ENDHANDLER
+}
 
     return resultValue;
 }
@@ -314,16 +314,16 @@ void ObjcInstance::setValueOfUndefinedField (ExecState *exec, const Identifier &
     // throws an exception.
     if ([targetObject respondsToSelector:@selector(setValue:forUndefinedKey:)]){
         
-        NS_DURING
+        @try {
         
             ObjcValue objcValue = convertValueToObjcValue (exec, aValue, ObjcObjectType);
             [targetObject setValue:objcValue.objectValue forUndefinedKey:[NSString stringWithCString:property.ascii()]];
         
-        NS_HANDLER
+        } @catch(NSException *localException) {
             
             // Do nothing.  Class did not override valueForUndefinedKey:.
             
-        NS_ENDHANDLER
+        }
         
     }
 }
@@ -334,8 +334,6 @@ JSValue *ObjcInstance::getValueOfField (ExecState *exec, const Field *aField) co
 
 JSValue *ObjcInstance::getValueOfUndefinedField (ExecState *exec, const Identifier &property, JSType hint) const
 {
-    JSValue *volatile result = jsUndefined();
-    
     id targetObject = getObject();
     
     // This check is not really necessary because NSObject implements
@@ -344,20 +342,20 @@ JSValue *ObjcInstance::getValueOfUndefinedField (ExecState *exec, const Identifi
     if ([targetObject respondsToSelector:@selector(valueForUndefinedKey:)]){
         id objcValue;
         
-        NS_DURING
+        @try {
         
             objcValue = [targetObject valueForUndefinedKey:[NSString stringWithCString:property.ascii()]];
-            result = convertObjcValueToValue (exec, &objcValue, ObjcObjectType);
+            return convertObjcValueToValue (exec, &objcValue, ObjcObjectType);
         
-        NS_HANDLER
+        } @catch(NSException *localException) {
             
             // Do nothing.  Class did not override valueForUndefinedKey:.
             
-        NS_ENDHANDLER
+        }
         
     }
-    
-    return result;
+
+    return jsUndefined();
 }
 
 JSValue *ObjcInstance::defaultValue (JSType hint) const
index 81cac2715ca9823a2f9ce338f16a07ab7e8b592b..ead8b868fe11528ea1b359ec1b10589fac8d19f5 100644 (file)
@@ -105,27 +105,22 @@ RuntimeType ObjcField::type() const
 
 JSValue *ObjcField::valueFromInstance(ExecState *exec, const Instance *instance) const
 {
-    JSValue *aValue;
     id targetObject = (static_cast<const ObjcInstance*>(instance))->getObject();
-    id objcValue = nil;
 
-    NS_DURING
+    @try {
     
         NSString *key = [NSString stringWithCString:name()];
-        objcValue = [targetObject valueForKey:key];
-        
-    NS_HANDLER
+        id objcValue = [targetObject valueForKey:key];
+        if (objcValue)
+            return convertObjcValueToValue (exec, &objcValue, ObjcObjectType);
+
+    } @catch(NSException *localException) {
         
         throwError(exec, GeneralError, [localException reason]);
         
-    NS_ENDHANDLER
-
-    if (objcValue)
-        aValue = convertObjcValueToValue (exec, &objcValue, ObjcObjectType);
-    else
-        aValue = jsUndefined();
+    }
 
-    return aValue;
+    return jsUndefined();
 }
 
 static id convertValueToObjcObject (ExecState *exec, JSValue *value)
@@ -145,16 +140,16 @@ void ObjcField::setValueToInstance(ExecState *exec, const Instance *instance, JS
     id targetObject = (static_cast<const ObjcInstance*>(instance))->getObject();
     id value = convertValueToObjcObject(exec, aValue);
     
-    NS_DURING
+    @try {
     
         NSString *key = [NSString stringWithCString:name()];
         [targetObject setValue:value forKey:key];
 
-    NS_HANDLER
+    } @catch(NSException *localException) {
         
         throwError(exec, GeneralError, [localException reason]);
         
-    NS_ENDHANDLER
+    }
 }
 
 // ---------------------- ObjcArray ----------------------
@@ -201,15 +196,15 @@ void ObjcArray::setValueAt(ExecState *exec, unsigned int index, JSValue *aValue)
     // array.
     ObjcValue oValue = convertValueToObjcValue (exec, aValue, ObjcObjectType);
 
-NS_DURING
+    @try {
 
-    [_array insertObject:oValue.objectValue atIndex:index];
+        [_array insertObject:oValue.objectValue atIndex:index];
 
-NS_HANDLER
-    
-    throwError(exec, GeneralError, "Objective-C exception.");
-    
-NS_ENDHANDLER
+    } @catch(NSException *localException) {
+
+        throwError(exec, GeneralError, "Objective-C exception.");
+
+    }
 }
 
 
@@ -217,26 +212,20 @@ JSValue *ObjcArray::valueAt(ExecState *exec, unsigned int index) const
 {
     if (index > [_array count])
         return throwError(exec, RangeError, "Index exceeds array size.");
-    
-    ObjectStructPtr obj = 0;
-    JSObject * volatile error;
-    volatile bool haveError = false;
 
-NS_DURING
+    @try {
 
-    obj = [_array objectAtIndex:index];
-    
-NS_HANDLER
-    
-    error = throwError(exec, GeneralError, "Objective-C exception.");
-    haveError = true;
-    
-NS_ENDHANDLER
+        id obj = [_array objectAtIndex:index];
+        if (obj)
+            return convertObjcValueToValue (exec, &obj, ObjcObjectType);
 
-    if (haveError)
-        return error;
-        
-    return convertObjcValueToValue (exec, &obj, ObjcObjectType);
+    } @catch(NSException *localException) {
+
+        return throwError(exec, GeneralError, "Objective-C exception.");
+
+    }
+
+    return jsUndefined();
 }
 
 unsigned int ObjcArray::getLength() const