]> git.lizzy.rs Git - rust.git/commitdiff
Rebasing fixes.
authorAaron Turon <aturon@mozilla.com>
Fri, 19 Dec 2014 03:41:20 +0000 (19:41 -0800)
committerAaron Turon <aturon@mozilla.com>
Fri, 19 Dec 2014 07:35:53 +0000 (23:35 -0800)
src/libstd/rt/unwind.rs
src/libstd/sys/common/backtrace.rs
src/libstd/sys/common/thread_info.rs
src/libstd/sys/windows/backtrace.rs

index 9f34a72f807793091caa08500d1b507babbbf7b5..5d5440b887d8941004ca2bf4011de214d297624c 100644 (file)
@@ -94,7 +94,7 @@ struct Exception {
          atomic::INIT_ATOMIC_UINT, atomic::INIT_ATOMIC_UINT];
 static CALLBACK_CNT: atomic::AtomicUint = atomic::INIT_ATOMIC_UINT;
 
-thread_local!(static PANICKING: Cell<bool> = Cell::new(false))
+thread_local! { static PANICKING: Cell<bool> = Cell::new(false) }
 
 /// Invoke a closure, capturing the cause of panic if one occurs.
 ///
index 2ff82bfd7a96bc05112961ca771d2e79410b865f..a39c8d6d8fed8b722c9d870edf62bd23cbd1e602 100644 (file)
@@ -40,8 +40,18 @@ pub fn demangle(writer: &mut Writer, s: &str) -> IoResult<()> {
     // expecting, we just print it literally. Note that we must handle non-rust
     // symbols because we could have any function in the backtrace.
     let mut valid = true;
+    let mut inner = s;
     if s.len() > 4 && s.starts_with("_ZN") && s.ends_with("E") {
-        let mut chars = s.slice(3, s.len() - 1).chars();
+        inner = s.slice(3, s.len() - 1);
+    // On Windows, dbghelp strips leading underscores, so we accept "ZN...E" form too.
+    } else if s.len() > 3 && s.starts_with("ZN") && s.ends_with("E") {
+        inner = s.slice(2, s.len() - 1);
+    } else {
+        valid = false;
+    }
+
+    if valid {
+        let mut chars = inner.chars();
         while valid {
             let mut i = 0;
             for c in chars {
@@ -58,32 +68,29 @@ pub fn demangle(writer: &mut Writer, s: &str) -> IoResult<()> {
                 valid = false;
             }
         }
-    } else {
-        valid = false;
     }
 
     // Alright, let's do this.
     if !valid {
         try!(writer.write_str(s));
     } else {
-        let mut s = s.slice_from(3);
         let mut first = true;
-        while s.len() > 1 {
+        while inner.len() > 0 {
             if !first {
                 try!(writer.write_str("::"));
             } else {
                 first = false;
             }
-            let mut rest = s;
+            let mut rest = inner;
             while rest.char_at(0).is_numeric() {
                 rest = rest.slice_from(1);
             }
-            let i: uint = from_str(s.slice_to(s.len() - rest.len())).unwrap();
-            s = rest.slice_from(i);
+            let i: uint = from_str(inner.slice_to(inner.len() - rest.len())).unwrap();
+            inner = rest.slice_from(i);
             rest = rest.slice_to(i);
             while rest.len() > 0 {
                 if rest.starts_with("$") {
-                    macro_rules! demangle(
+                    macro_rules! demangle {
                         ($($pat:expr => $demangled:expr),*) => ({
                             $(if rest.starts_with($pat) {
                                 try!(writer.write_str($demangled));
@@ -95,7 +102,8 @@ macro_rules! demangle(
                             }
 
                         })
-                    )
+                    }
+
                     // see src/librustc/back/link.rs for these mappings
                     demangle! (
                         "$SP$" => "@",
index 0519bc56f0a81a42d1a902c172f7e804816df916..dc21feb17a8e83c660788c6d720399debf17cb8c 100644 (file)
@@ -23,7 +23,7 @@ struct ThreadInfo {
     thread: Thread,
 }
 
-thread_local!(static THREAD_INFO: RefCell<Option<ThreadInfo>> = RefCell::new(None))
+thread_local! { static THREAD_INFO: RefCell<Option<ThreadInfo>> = RefCell::new(None) }
 
 impl ThreadInfo {
     fn with<R>(f: |&mut ThreadInfo| -> R) -> R {
index b5961d783ffab45d1796f33fbbea148af5beea5d..f2f543dd9697f228d5ce78b4fd6f0190c085c44a 100644 (file)
@@ -304,12 +304,12 @@ pub fn write(w: &mut Writer) -> IoResult<()> {
         Err(..) => return Ok(()),
     };
 
-    macro_rules! sym( ($e:expr, $t:ident) => (unsafe {
+    macro_rules! sym{ ($e:expr, $t:ident) => (unsafe {
         match lib.symbol($e) {
             Ok(f) => mem::transmute::<*mut u8, $t>(f),
             Err(..) => return Ok(())
         }
-    }) )
+    }) }
 
     // Fetch the symbols necessary from dbghelp.dll
     let SymFromAddr = sym!("SymFromAddr", SymFromAddrFn);