From 28a4afd04eb8b4e94d5da14e1c4e87aea226dea0 Mon Sep 17 00:00:00 2001
From: Tom Almeida <tommoa256@gmail.com>
Date: Wed, 23 Jan 2019 15:27:46 +1100
Subject: [PATCH] Move from doing last status variable resolution from inside
 Variable::get_ref() to  Shell::string()

---
 src/lib/shell/mod.rs           | 4 +++-
 src/lib/shell/variables/mod.rs | 4 ----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/lib/shell/mod.rs b/src/lib/shell/mod.rs
index 326f8ce3..3192ee9e 100644
--- a/src/lib/shell/mod.rs
+++ b/src/lib/shell/mod.rs
@@ -434,7 +434,9 @@ impl<'a> Expander for Shell {
     /// Expand a string variable given if its quoted / unquoted
     fn string(&self, name: &str, quoted: bool) -> Option<types::Str> {
         use ascii_helpers::AsciiReplace;
-        if quoted {
+        if name == "?" {
+            Some(types::Str::from(self.previous_status.to_string()))
+        } else if quoted {
             self.get::<types::Str>(name)
         } else {
             self.get::<types::Str>(name)
diff --git a/src/lib/shell/variables/mod.rs b/src/lib/shell/variables/mod.rs
index 3f241562..108a50b1 100644
--- a/src/lib/shell/variables/mod.rs
+++ b/src/lib/shell/variables/mod.rs
@@ -318,10 +318,6 @@ impl Variables {
         const GLOBAL_NS: &str = "global::";
         const SUPER_NS: &str = "super::";
 
-        if name == "?" {
-            return self.scopes().last()?.get("?");
-        }
-
         let mut up_namespace: isize = if name.starts_with(GLOBAL_NS) {
             name = &name[GLOBAL_NS.len()..];
             // Go up as many namespaces as possible
-- 
GitLab