Просмотр исходного кода

core: Use unique_ptr for holding the interpreter instances

Lioncash 10 лет назад
Родитель
Сommit
cee8df6ff0
4 измененных файлов с 20 добавлено и 20 удалено
  1. 5 7
      src/citra_qt/debugger/callstack.cpp
  2. 3 5
      src/citra_qt/debugger/registers.cpp
  3. 9 6
      src/core/core.cpp
  4. 3 2
      src/core/core.h

+ 5 - 7
src/citra_qt/debugger/callstack.cpp

@@ -29,18 +29,16 @@ CallstackWidget::CallstackWidget(QWidget* parent): QDockWidget(parent)
 
 
 void CallstackWidget::OnDebugModeEntered()
 void CallstackWidget::OnDebugModeEntered()
 {
 {
-    ARM_Interface* app_core = Core::g_app_core;
-
-    u32 sp = app_core->GetReg(13); //stack pointer
-    u32 ret_addr, call_addr, func_addr;
+    // Stack pointer
+    const u32 sp = Core::g_app_core->GetReg(13);
 
 
     Clear();
     Clear();
 
 
     int counter = 0;
     int counter = 0;
     for (u32 addr = 0x10000000; addr >= sp; addr -= 4)
     for (u32 addr = 0x10000000; addr >= sp; addr -= 4)
     {
     {
-        ret_addr = Memory::Read32(addr);
-        call_addr = ret_addr - 4; //get call address???
+        const u32 ret_addr = Memory::Read32(addr);
+        const u32 call_addr = ret_addr - 4; //get call address???
 
 
         if (Memory::GetPointer(call_addr) == nullptr)
         if (Memory::GetPointer(call_addr) == nullptr)
             break;
             break;
@@ -60,7 +58,7 @@ void CallstackWidget::OnDebugModeEntered()
             // Pre-compute the left-shift and the prefetch offset
             // Pre-compute the left-shift and the prefetch offset
             i_offset <<= 2;
             i_offset <<= 2;
             i_offset += 8;
             i_offset += 8;
-            func_addr = call_addr + i_offset;
+            const u32 func_addr = call_addr + i_offset;
 
 
             callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
             callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
             callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0'))));
             callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0'))));

+ 3 - 5
src/citra_qt/debugger/registers.cpp

@@ -59,16 +59,14 @@ RegistersWidget::RegistersWidget(QWidget* parent) : QDockWidget(parent) {
 }
 }
 
 
 void RegistersWidget::OnDebugModeEntered() {
 void RegistersWidget::OnDebugModeEntered() {
-    ARM_Interface* app_core = Core::g_app_core;
-
-    if (app_core == nullptr)
+    if (!Core::g_app_core)
         return;
         return;
 
 
     for (int i = 0; i < core_registers->childCount(); ++i)
     for (int i = 0; i < core_registers->childCount(); ++i)
-        core_registers->child(i)->setText(1, QString("0x%1").arg(app_core->GetReg(i), 8, 16, QLatin1Char('0')));
+        core_registers->child(i)->setText(1, QString("0x%1").arg(Core::g_app_core->GetReg(i), 8, 16, QLatin1Char('0')));
 
 
     for (int i = 0; i < vfp_registers->childCount(); ++i)
     for (int i = 0; i < vfp_registers->childCount(); ++i)
-        vfp_registers->child(i)->setText(1, QString("0x%1").arg(app_core->GetVFPReg(i), 8, 16, QLatin1Char('0')));
+        vfp_registers->child(i)->setText(1, QString("0x%1").arg(Core::g_app_core->GetVFPReg(i), 8, 16, QLatin1Char('0')));
 
 
     UpdateCPSRValues();
     UpdateCPSRValues();
     UpdateVFPSystemRegisterValues();
     UpdateVFPSystemRegisterValues();

+ 9 - 6
src/core/core.cpp

@@ -2,6 +2,9 @@
 // Licensed under GPLv2 or any later version
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 // Refer to the license.txt file included.
 
 
+#include <memory>
+
+#include "common/make_unique.h"
 #include "common/logging/log.h"
 #include "common/logging/log.h"
 
 
 #include "core/core.h"
 #include "core/core.h"
@@ -17,8 +20,8 @@
 
 
 namespace Core {
 namespace Core {
 
 
-ARM_Interface*     g_app_core = nullptr;  ///< ARM11 application core
-ARM_Interface*     g_sys_core = nullptr;  ///< ARM11 system (OS) core
+std::unique_ptr<ARM_Interface> g_app_core; ///< ARM11 application core
+std::unique_ptr<ARM_Interface> g_sys_core; ///< ARM11 system (OS) core
 
 
 /// Run the core CPU loop
 /// Run the core CPU loop
 void RunLoop(int tight_loop) {
 void RunLoop(int tight_loop) {
@@ -71,16 +74,16 @@ void Stop() {
 
 
 /// Initialize the core
 /// Initialize the core
 int Init() {
 int Init() {
-    g_sys_core = new ARM_DynCom(USER32MODE);
-    g_app_core = new ARM_DynCom(USER32MODE);
+    g_sys_core = Common::make_unique<ARM_DynCom>(USER32MODE);
+    g_app_core = Common::make_unique<ARM_DynCom>(USER32MODE);
 
 
     LOG_DEBUG(Core, "Initialized OK");
     LOG_DEBUG(Core, "Initialized OK");
     return 0;
     return 0;
 }
 }
 
 
 void Shutdown() {
 void Shutdown() {
-    delete g_app_core;
-    delete g_sys_core;
+    g_app_core.reset();
+    g_sys_core.reset();
 
 
     LOG_DEBUG(Core, "Shutdown OK");
     LOG_DEBUG(Core, "Shutdown OK");
 }
 }

+ 3 - 2
src/core/core.h

@@ -4,6 +4,7 @@
 
 
 #pragma once
 #pragma once
 
 
+#include <memory>
 #include "common/common_types.h"
 #include "common/common_types.h"
 
 
 class ARM_Interface;
 class ARM_Interface;
@@ -23,8 +24,8 @@ struct ThreadContext {
     u32 fpexc;
     u32 fpexc;
 };
 };
 
 
-extern ARM_Interface*   g_app_core;     ///< ARM11 application core
-extern ARM_Interface*   g_sys_core;     ///< ARM11 system (OS) core
+extern std::unique_ptr<ARM_Interface> g_app_core; ///< ARM11 application core
+extern std::unique_ptr<ARM_Interface> g_sys_core; ///< ARM11 system (OS) core
 
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////