You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2012/05/01 13:50:02 UTC

ios commit: CDVDebugWebView - handle non-exceptions being thrown

Updated Branches:
  refs/heads/master 9ee4e6aab -> 7b4029766


CDVDebugWebView - handle non-exceptions being thrown


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/7b402976
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/7b402976
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/7b402976

Branch: refs/heads/master
Commit: 7b40297668f7413e50cb72beab8d63a83c412dea
Parents: 9ee4e6a
Author: Shazron Abdullah <sh...@apache.org>
Authored: Tue May 1 04:49:53 2012 -0700
Committer: Shazron Abdullah <sh...@apache.org>
Committed: Tue May 1 04:49:53 2012 -0700

----------------------------------------------------------------------
 CordovaLib/Classes/debugview/CDVDebugWebView.m |   31 ++++++++++++++++--
 1 files changed, 27 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/7b402976/CordovaLib/Classes/debugview/CDVDebugWebView.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/debugview/CDVDebugWebView.m b/CordovaLib/Classes/debugview/CDVDebugWebView.m
index 8714dd7..b0fbca6 100644
--- a/CordovaLib/Classes/debugview/CDVDebugWebView.m
+++ b/CordovaLib/Classes/debugview/CDVDebugWebView.m
@@ -139,16 +139,39 @@
     forWebFrame:(WebFrame *)webFrame
 {
     WebScriptObject* exception = [frame exception]; // this is the bound JavaScript Error object which has two properties: name and message
-    // we use KVC to extract the name and message
-    NSString* exceptionName = [exception valueForKey:@"name"];
-    NSString* exceptionMessage = [exception valueForKey:@"message"];
+    
+    NSString *exceptionName, *exceptionMessage;
+    
+    if ([exception isKindOfClass:[NSString class]]) {
+        exceptionName = @"string";
+        exceptionMessage = (NSString*)exception;
+    } else  if ([exception isKindOfClass:[NSNumber class]]) {
+        exceptionName = @"number";
+        exceptionMessage = [((NSNumber*)exception) stringValue];
+    } 
+    else {
+        // we use KVC to extract the name and message
+        @try  {
+            exceptionName = [exception valueForKey:@"name"];
+            exceptionMessage = [exception valueForKey:@"message"];
+        } @catch (NSException* exc) {
+            if ([[exc name] isEqualToString:NSUndefinedKeyException]) {
+                exceptionName = @"type unknown";
+                exceptionMessage = @"(not an exception object)";
+            }
+        }
+    }
 
     CDVDebugWebSourceData* sourceData = [self.sourceDataDict objectForKey:[NSNumber numberWithInt:sid]];
     
+    NSUInteger max_lines = [sourceData.sourceLines count];
+    if (lineno > max_lines) {
+        lineno = max_lines;
+    }
     NSString* url = sourceData.fromURL? [sourceData trimFilePath] : @"obj-c";
     NSString* line = [sourceData.sourceLines objectAtIndex:lineno-1];
 
-    NSLog(@"JavaScript exception: (%@):%d - %@ - %@\n\tLine: %@", url, lineno, exceptionName, exceptionMessage, line);
+    NSLog(@"JavaScript exception: (%@):%d - %@ - %@\n\tFunction name: '%@'\tLine: '%@'", url, lineno, exceptionName, exceptionMessage, [frame functionName], line);
 }
 
 @end