From a6e26eecd6b01e067ec0613f499fad6597e46141 Mon Sep 17 00:00:00 2001
From: "SND\\ussrhero_cp"
 <SND\ussrhero_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Fri, 8 Jul 2016 21:58:16 +0000
Subject: [PATCH] [0.3.x] added : supported static local variables

git-svn-id: https://pykd.svn.codeplex.com/svn@91002 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/pycpucontext.cpp | 22 ++++++++++++++++++++++
 pykd/pycpucontext.h   |  2 ++
 2 files changed, 24 insertions(+)

diff --git a/pykd/pycpucontext.cpp b/pykd/pycpucontext.cpp
index 578ef11..7bab7c1 100644
--- a/pykd/pycpucontext.cpp
+++ b/pykd/pycpucontext.cpp
@@ -150,6 +150,7 @@ python::list StackFrameAdapter::getLocalsList(kdlib::StackFramePtr& frame)
 
     LocalVarList  localLst;
     unsigned long  localCount;
+    unsigned long  staticCount;
 
     do {
         AutoRestorePyState  pystate;
@@ -161,6 +162,16 @@ python::list StackFrameAdapter::getLocalsList(kdlib::StackFramePtr& frame)
 
             localLst.push_back( std::make_pair( paramName, param) );
         }
+
+        staticCount = frame->getStaticVarCount();
+        for (unsigned long i = 0; i < staticCount; ++i)
+        {
+            kdlib::TypedVarPtr  param = frame->getStaticVar(i);
+            std::wstring  paramName = frame->getStaticVarName(i);
+
+            localLst.push_back(std::make_pair(paramName, param));
+        }
+
     } while(false);
 
     python::list  pyLst;
@@ -179,6 +190,7 @@ python::dict StackFrameAdapter::getLocalsDict(kdlib::StackFramePtr& frame)
 
     LocalVarList  localLst;
     unsigned long  localCount;
+    unsigned long  staticCount;
 
     do {
         AutoRestorePyState  pystate;
@@ -190,6 +202,16 @@ python::dict StackFrameAdapter::getLocalsDict(kdlib::StackFramePtr& frame)
 
             localLst.push_back( std::make_pair( paramName, param) );
         }
+
+        staticCount = frame->getStaticVarCount();
+        for (unsigned long i = 0; i < staticCount; ++i)
+        {
+            kdlib::TypedVarPtr  param = frame->getStaticVar(i);
+            std::wstring  paramName = frame->getStaticVarName(i);
+
+            localLst.push_back(std::make_pair(paramName, param));
+        }
+
     } while(false);
 
     python::dict  pyLst;
diff --git a/pykd/pycpucontext.h b/pykd/pycpucontext.h
index a81f5bb..a240d9e 100644
--- a/pykd/pycpucontext.h
+++ b/pykd/pycpucontext.h
@@ -60,6 +60,8 @@ public:
 
     static kdlib::TypedVarPtr getLocal( kdlib::StackFramePtr& frame, const std::wstring &paramName ) {
         AutoRestorePyState  pystate;
+        if (frame->findStaticVar(paramName))
+            return frame->getStaticVar(paramName);
         return frame->getLocalVar(paramName);
     }
 };