Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kumir2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
2
Issues
2
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
kumir
kumir2
Commits
c6cc9237
Commit
c6cc9237
authored
Nov 28, 2013
by
Victor Yacovlev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Hard cleanups to avoid memory leaks
parent
51f48e97
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
69 additions
and
46 deletions
+69
-46
src/app/main.cpp
src/app/main.cpp
+5
-2
src/plugins/editor/editor.cpp
src/plugins/editor/editor.cpp
+3
-3
src/plugins/editor/editor.h
src/plugins/editor/editor.h
+1
-1
src/plugins/editor/editorplugin.cpp
src/plugins/editor/editorplugin.cpp
+3
-0
src/plugins/kumiranalizer/analizer.cpp
src/plugins/kumiranalizer/analizer.cpp
+3
-0
src/plugins/kumircoderun/kumvariablesmodel.cpp
src/plugins/kumircoderun/kumvariablesmodel.cpp
+2
-2
src/plugins/kumircoderun/kumvariablesmodel.h
src/plugins/kumircoderun/kumvariablesmodel.h
+4
-4
src/plugins/kumircoderun/run.cpp
src/plugins/kumircoderun/run.cpp
+7
-23
src/plugins/kumircoderun/run.h
src/plugins/kumircoderun/run.h
+22
-6
src/shared/extensionsystem/pluginmanager.cpp
src/shared/extensionsystem/pluginmanager.cpp
+10
-0
src/shared/extensionsystem/pluginmanager.h
src/shared/extensionsystem/pluginmanager.h
+2
-0
src/shared/vm/vm.hpp
src/shared/vm/vm.hpp
+7
-5
No files found.
src/app/main.cpp
View file @
c6cc9237
...
...
@@ -242,7 +242,7 @@ public:
}
else
{
return
ret
;
}
}
}
private:
...
...
@@ -327,6 +327,9 @@ int main(int argc, char **argv)
app
->
setSplashScreen
(
splashScreen
);
}
#endif
return
app
->
main
();
int
ret
=
app
->
main
();
ExtensionSystem
::
PluginManager
::
destroy
();
delete
app
;
return
ret
;
}
src/plugins/editor/editor.cpp
View file @
c6cc9237
...
...
@@ -645,10 +645,10 @@ void Editor::createConnections()
connect
(
cursor_
,
SIGNAL
(
updateRequest
()),
plane_
,
SLOT
(
updateCursor
()));
connect
(
cursor_
,
SIGNAL
(
updateRequest
(
int
,
int
)),
plane_
,
SLOT
(
updateText
(
int
,
int
)));
connect
(
autocompleteWidget_
,
SIGNAL
(
requestHelpForAlgorithm
(
QString
)),
connect
(
autocompleteWidget_
.
data
()
,
SIGNAL
(
requestHelpForAlgorithm
(
QString
)),
this
,
SIGNAL
(
requestHelpForAlgorithm
(
QString
)));
connect
(
autocompleteWidget_
,
SIGNAL
(
hidden
()),
plane_
,
SIGNAL
(
enableInsertActions
()));
connect
(
autocompleteWidget_
,
SIGNAL
(
acceptedSuggestion
(
QString
)),
connect
(
autocompleteWidget_
.
data
()
,
SIGNAL
(
hidden
()),
plane_
,
SIGNAL
(
enableInsertActions
()));
connect
(
autocompleteWidget_
.
data
()
,
SIGNAL
(
acceptedSuggestion
(
QString
)),
plane_
,
SLOT
(
finishAutoCompletion
(
QString
)));
}
...
...
src/plugins/editor/editor.h
View file @
c6cc9237
...
...
@@ -148,7 +148,7 @@ private /* fields */:
QScrollBar
*
verticalScrollBar_
;
class
FindReplace
*
findReplace_
;
class
SuggestionsWindow
*
autocompleteWidget_
;
QScopedPointer
<
class
SuggestionsWindow
>
autocompleteWidget_
;
QAction
*
copy_
;
QAction
*
paste_
;
...
...
src/plugins/editor/editorplugin.cpp
View file @
c6cc9237
...
...
@@ -26,6 +26,9 @@ EditorPlugin::~EditorPlugin()
if
(
e
.
e
)
delete
e
.
e
;
}
if
(
settingsPage_
)
{
delete
settingsPage_
;
}
}
...
...
src/plugins/kumiranalizer/analizer.cpp
View file @
c6cc9237
...
...
@@ -216,6 +216,9 @@ AnalizerPrivate::~AnalizerPrivate()
{
delete
lexer
;
delete
pdAutomata
;
delete
builtinModules
[
0
];
delete
builtinModules
[
1
];
delete
builtinModules
[
2
];
}
Analizer
::~
Analizer
()
...
...
src/plugins/kumircoderun/kumvariablesmodel.cpp
View file @
c6cc9237
...
...
@@ -9,8 +9,8 @@ namespace KumirCodeRun {
static
const
int
MAXIMUM_SHOWN_TABLE_ITEMS_COUNT
=
255
;
KumVariablesModel
::
KumVariablesModel
(
VM
::
KumirVM
*
vm
,
VM
::
CriticalSectionLocker
*
mutex
,
std
::
shared_ptr
<
VM
::
KumirVM
>
vm
,
std
::
shared_ptr
<
VM
::
CriticalSectionLocker
>
mutex
,
QObject
*
parent
)
:
QAbstractItemModel
(
parent
)
...
...
src/plugins/kumircoderun/kumvariablesmodel.h
View file @
c6cc9237
...
...
@@ -69,8 +69,8 @@ signals:
public
slots
:
protected:
explicit
KumVariablesModel
(
VM
::
KumirVM
*
vm
,
VM
::
CriticalSectionLocker
*
mutex
,
explicit
KumVariablesModel
(
std
::
shared_ptr
<
VM
::
KumirVM
>
vm
,
std
::
shared_ptr
<
VM
::
CriticalSectionLocker
>
mutex
,
QObject
*
parent
=
0
);
QModelIndex
valueIndex
(
int
row
,
int
column
,
TableOfVariables
*
table
)
const
;
...
...
@@ -81,8 +81,8 @@ protected:
void
emitValueChanged
(
const
VM
::
Variable
&
variable
,
const
QVector
<
int
>
&
indeces
);
private:
VM
::
KumirVM
*
vm_
;
VM
::
CriticalSectionLocker
*
mutex_
;
std
::
shared_ptr
<
VM
::
KumirVM
>
vm_
;
std
::
shared_ptr
<
VM
::
CriticalSectionLocker
>
mutex_
;
QHash
<
QModelIndex
,
QModelIndex
>
parents_
;
mutable
QList
<
KumVariableItem
*>
cache_
;
mutable
QHash
<
KumVariableItem
*
,
QModelIndex
>
modelIndeces_
;
...
...
src/plugins/kumircoderun/run.cpp
View file @
c6cc9237
...
...
@@ -12,37 +12,21 @@ namespace KumirCodeRun {
using
namespace
VM
;
using
namespace
Kumir
;
class
Mutex
:
public
CriticalSectionLocker
{
public:
inline
Mutex
()
{
m
=
new
QMutex
;
}
inline
void
lock
()
{
m
->
lock
();
}
inline
void
unlock
()
{
m
->
unlock
();
}
inline
~
Mutex
()
{
delete
m
;
}
private:
QMutex
*
m
;
};
Run
::
Run
(
QObject
*
parent
)
:
QThread
(
parent
)
{
programLoaded
=
false
;
vm
=
new
KumirVM
(
);
VMMutex_
=
new
Mutex
;
vm
.
reset
(
new
KumirVM
);
VMMutex_
.
reset
(
new
Mutex
)
;
vm
->
setMutex
(
VMMutex_
);
variablesModel_
=
new
KumVariablesModel
(
vm
,
VMMutex_
,
this
);
originFunctionDeep_
=
0
;
interactDoneFlag_
=
stoppingFlag_
=
stepDoneFlag_
=
algDoneFlag_
=
false
;
stoppingMutex_
=
new
QMutex
;
stepDoneMutex_
=
new
QMutex
;
algDoneMutex_
=
new
QMutex
;
interactDoneMutex_
=
new
QMutex
;
stoppingMutex_
.
reset
(
new
QMutex
)
;
stepDoneMutex_
.
reset
(
new
QMutex
)
;
algDoneMutex_
.
reset
(
new
QMutex
)
;
interactDoneMutex_
.
reset
(
new
QMutex
)
;
runMode_
=
RM_ToEnd
;
vm
->
setDebuggingHandler
(
this
);
...
...
@@ -61,7 +45,7 @@ void Run::unlockVMMutex()
void
Run
::
stop
()
{
QMutexLocker
l
(
stoppingMutex_
);
QMutexLocker
l
(
stoppingMutex_
.
data
()
);
stoppingFlag_
=
true
;
if
(
!
isRunning
())
{
emit
lineChanged
(
-
1
,
0u
,
0u
);
...
...
src/plugins/kumircoderun/run.h
View file @
c6cc9237
...
...
@@ -6,6 +6,7 @@
#include "vm/vm.hpp"
#include "interfaces/actorinterface.h"
#include "kumvariablesmodel.h"
#include <memory>
namespace
KumirCodeRun
{
...
...
@@ -14,6 +15,21 @@ using Kumir::real;
using
VM
::
Variable
;
using
VM
::
AnyValue
;
class
Mutex
:
public
VM
::
CriticalSectionLocker
{
public:
inline
Mutex
()
{
m
=
new
QMutex
;
}
inline
void
lock
()
{
m
->
lock
();
}
inline
void
unlock
()
{
m
->
unlock
();
}
inline
~
Mutex
()
{
delete
m
;
}
private:
QMutex
*
m
;
};
class
Run
:
public
QThread
,
public
VM
::
DebuggingInteractionHandler
...
...
@@ -22,7 +38,7 @@ class Run
public:
enum
RunMode
{
RM_StepOver
,
RM_ToEnd
,
RM_StepOut
,
RM_StepIn
};
explicit
Run
(
QObject
*
parent
);
VM
::
KumirVM
*
vm
;
std
::
shared_ptr
<
VM
::
KumirVM
>
vm
;
bool
programLoaded
;
inline
bool
stopped
()
const
{
return
stoppingFlag_
;
}
bool
mustStop
()
const
;
...
...
@@ -103,24 +119,24 @@ protected :
RunMode
runMode_
;
bool
stoppingFlag_
;
Q
Mutex
*
stoppingMutex_
;
Q
ScopedPointer
<
QMutex
>
stoppingMutex_
;
bool
stepDoneFlag_
;
Q
Mutex
*
stepDoneMutex_
;
Q
ScopedPointer
<
QMutex
>
stepDoneMutex_
;
bool
algDoneFlag_
;
Q
Mutex
*
algDoneMutex_
;
Q
ScopedPointer
<
QMutex
>
algDoneMutex_
;
int
originFunctionDeep_
;
Q
Mutex
*
interactDoneMutex_
;
Q
ScopedPointer
<
QMutex
>
interactDoneMutex_
;
bool
interactDoneFlag_
;
QVariantList
inputResult_
;
QVariantList
funcOptResults_
;
QVariant
funcResult_
;
QString
funcError_
;
mutable
class
Mutex
*
VMMutex_
;
mutable
class
std
::
shared_ptr
<
Mutex
>
VMMutex_
;
KumVariablesModel
*
variablesModel_
;
QString
programLoadError_
;
...
...
src/shared/extensionsystem/pluginmanager.cpp
View file @
c6cc9237
...
...
@@ -8,6 +8,7 @@ const QString PluginManager::WorkspacesListKey = "WorkspacesList";
const
QString
PluginManager
::
CurrentWorkspaceKey
=
"CurrentWorkspace"
;
const
QString
PluginManager
::
SkipChooseWorkspaceKey
=
"SkipChooseWorkspace"
;
PluginManager
::
PluginManager
()
:
QObject
()
,
pImpl_
(
new
PluginManagerImpl
)
...
...
@@ -50,6 +51,15 @@ PluginManager::~PluginManager()
}
void
PluginManager
::
destroy
()
{
PluginManager
*
pm
=
instance
();
foreach
(
KPlugin
*
o
,
pm
->
pImpl_
->
objects
)
{
delete
o
;
}
pm
->
pImpl_
->
objects
.
clear
();
}
SettingsPtr
PluginManager
::
globalSettings
()
const
{
return
pImpl_
->
mySettings
;
...
...
src/shared/extensionsystem/pluginmanager.h
View file @
c6cc9237
...
...
@@ -133,6 +133,8 @@ public:
/** Stops all plugins in reverse-order of creation */
void
shutdown
();
static
void
destroy
();
public
/*constants*/
:
static
const
QString
WorkspacesListKey
;
...
...
src/shared/vm/vm.hpp
View file @
c6cc9237
...
...
@@ -23,6 +23,8 @@
#define MAX_RECURSION_SIZE 4000
#endif
#define ShPtr std::shared_ptr
namespace
VM
{
...
...
@@ -33,7 +35,7 @@ public /*typedefs*/:
public
/*methods*/
:
/** Set parsed Kumir bytecode */
inline
void
setProgram
(
const
Bytecode
::
Data
&
data
,
bool
isMain
,
const
String
&
filename
);
inline
void
setProgramDirectory
(
const
Kumir
::
String
&
path
)
{
programDirectory_
=
path
;
}
inline
void
setProgramDirectory
(
const
Kumir
::
String
&
path
)
{
programDirectory_
.
clear
();
programDirectory_
=
path
;
}
inline
bool
loadProgramFromBinaryBuffer
(
std
::
list
<
char
>
&
stream
,
bool
isMain
,
const
String
&
filename
,
String
&
error
);
inline
bool
loadProgramFromTextBuffer
(
const
std
::
string
&
stream
,
bool
isMain
,
const
String
&
filename
,
String
&
error
);
...
...
@@ -68,7 +70,7 @@ public /*methods*/:
* You must set actual Mutex implementation object
* (Qt or C++11) with methods: lock() and unlock()
*/
inline
void
setMutex
(
CriticalSectionLocker
*
m
)
inline
void
setMutex
(
ShPtr
<
CriticalSectionLocker
>
m
)
{
stacksMutex_
=
m
;}
/**
...
...
@@ -131,7 +133,7 @@ private /*fields*/:
EntryPoint
entryPoint_
;
bool
blindMode_
;
bool
nextCallInto_
;
CriticalSectionLocker
*
stacksMutex_
;
ShPtr
<
CriticalSectionLocker
>
stacksMutex_
;
DebuggingInteractionHandler
*
debugHandler_
;
ExternalModuleLoadFunctor
*
externalModuleLoad_
;
ExternalModuleResetFunctor
*
externalModuleReset_
;
...
...
@@ -857,9 +859,9 @@ void KumirVM::reset()
}
Kumir
::
Files
::
setConsoleInputBuffer
(
consoleInputBuffer_
);
Kumir
::
Files
::
setConsoleOutputBuffer
(
consoleOutputBuffer_
);
if
(
stacksMutex_
==
nullptr
)
{
if
(
!
stacksMutex_
)
{
static
CriticalSectionLocker
dummyMutex
;
stacksMutex_
=
&
dummyMutex
;
stacksMutex_
.
reset
(
&
dummyMutex
)
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment