Commit 337be150 authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'isolate-declarations'

d3310212

 clang-tidy: isolate declarations for readability
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !3704
parents 6e1ff50e d3310212
...@@ -28,7 +28,6 @@ readability-*,\ ...@@ -28,7 +28,6 @@ readability-*,\
-readability-implicit-bool-cast,\ -readability-implicit-bool-cast,\
-readability-implicit-bool-conversion,\ -readability-implicit-bool-conversion,\
-readability-inconsistent-declaration-parameter-name,\ -readability-inconsistent-declaration-parameter-name,\
-readability-isolate-declaration,\
-readability-magic-numbers,\ -readability-magic-numbers,\
-readability-named-parameter,\ -readability-named-parameter,\
-readability-redundant-declaration,\ -readability-redundant-declaration,\
......
...@@ -56,7 +56,8 @@ void onsig(int /*unused*/) ...@@ -56,7 +56,8 @@ void onsig(int /*unused*/)
cbreak(); /* nl- or cr not needed */ cbreak(); /* nl- or cr not needed */
keypad(stdscr, true); /* Use key symbols as KEY_DOWN */ keypad(stdscr, true); /* Use key symbols as KEY_DOWN */
refresh(); refresh();
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
cmCursesForm::CurrentForm->Render(1, 1, x, y); cmCursesForm::CurrentForm->Render(1, 1, x, y);
cmCursesForm::CurrentForm->UpdateStatusBar(); cmCursesForm::CurrentForm->UpdateStatusBar();
...@@ -127,7 +128,8 @@ int main(int argc, char const* const* argv) ...@@ -127,7 +128,8 @@ int main(int argc, char const* const* argv)
signal(SIGWINCH, onsig); signal(SIGWINCH, onsig);
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) { if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) {
endwin(); endwin();
......
...@@ -38,7 +38,8 @@ cmCursesLongMessageForm::~cmCursesLongMessageForm() ...@@ -38,7 +38,8 @@ cmCursesLongMessageForm::~cmCursesLongMessageForm()
void cmCursesLongMessageForm::UpdateStatusBar() void cmCursesLongMessageForm::UpdateStatusBar()
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
char bar[cmCursesMainForm::MAX_WIDTH]; char bar[cmCursesMainForm::MAX_WIDTH];
...@@ -81,7 +82,8 @@ void cmCursesLongMessageForm::UpdateStatusBar() ...@@ -81,7 +82,8 @@ void cmCursesLongMessageForm::UpdateStatusBar()
void cmCursesLongMessageForm::PrintKeys() void cmCursesLongMessageForm::PrintKeys()
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) { if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) {
return; return;
...@@ -98,7 +100,8 @@ void cmCursesLongMessageForm::PrintKeys() ...@@ -98,7 +100,8 @@ void cmCursesLongMessageForm::PrintKeys()
void cmCursesLongMessageForm::Render(int /*left*/, int /*top*/, int /*width*/, void cmCursesLongMessageForm::Render(int /*left*/, int /*top*/, int /*width*/,
int /*height*/) int /*height*/)
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
if (this->Form) { if (this->Form) {
......
...@@ -320,7 +320,8 @@ void cmCursesMainForm::Render(int left, int top, int width, int height) ...@@ -320,7 +320,8 @@ void cmCursesMainForm::Render(int left, int top, int width, int height)
void cmCursesMainForm::PrintKeys(int process /* = 0 */) void cmCursesMainForm::PrintKeys(int process /* = 0 */)
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
if (x < cmCursesMainForm::MIN_WIDTH || x < this->InitialWidth || if (x < cmCursesMainForm::MIN_WIDTH || x < this->InitialWidth ||
y < cmCursesMainForm::MIN_HEIGHT) { y < cmCursesMainForm::MIN_HEIGHT) {
...@@ -391,7 +392,8 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */) ...@@ -391,7 +392,8 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */)
// on the status bar. Designed for a width of 80 chars. // on the status bar. Designed for a width of 80 chars.
void cmCursesMainForm::UpdateStatusBar(const char* message) void cmCursesMainForm::UpdateStatusBar(const char* message)
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
// If window size is too small, display error and return // If window size is too small, display error and return
if (x < cmCursesMainForm::MIN_WIDTH || x < this->InitialWidth || if (x < cmCursesMainForm::MIN_WIDTH || x < this->InitialWidth ||
...@@ -509,7 +511,8 @@ void cmCursesMainForm::UpdateProgress(const std::string& msg, float prog) ...@@ -509,7 +511,8 @@ void cmCursesMainForm::UpdateProgress(const std::string& msg, float prog)
int cmCursesMainForm::Configure(int noconfigure) int cmCursesMainForm::Configure(int noconfigure)
{ {
int xi, yi; int xi;
int yi;
getmaxyx(stdscr, yi, xi); getmaxyx(stdscr, yi, xi);
curses_move(1, 1); curses_move(1, 1);
...@@ -552,7 +555,8 @@ int cmCursesMainForm::Configure(int noconfigure) ...@@ -552,7 +555,8 @@ int cmCursesMainForm::Configure(int noconfigure)
if (cmSystemTools::GetErrorOccuredFlag()) { if (cmSystemTools::GetErrorOccuredFlag()) {
this->OkToGenerate = false; this->OkToGenerate = false;
} }
int xx, yy; int xx;
int yy;
getmaxyx(stdscr, yy, xx); getmaxyx(stdscr, yy, xx);
cmCursesLongMessageForm* msgs = cmCursesLongMessageForm* msgs =
new cmCursesLongMessageForm(this->Errors, new cmCursesLongMessageForm(this->Errors,
...@@ -581,7 +585,8 @@ int cmCursesMainForm::Configure(int noconfigure) ...@@ -581,7 +585,8 @@ int cmCursesMainForm::Configure(int noconfigure)
int cmCursesMainForm::Generate() int cmCursesMainForm::Generate()
{ {
int xi, yi; int xi;
int yi;
getmaxyx(stdscr, yi, xi); getmaxyx(stdscr, yi, xi);
curses_move(1, 1); curses_move(1, 1);
...@@ -610,7 +615,8 @@ int cmCursesMainForm::Generate() ...@@ -610,7 +615,8 @@ int cmCursesMainForm::Generate()
} }
// reset error condition // reset error condition
cmSystemTools::ResetErrorOccuredFlag(); cmSystemTools::ResetErrorOccuredFlag();
int xx, yy; int xx;
int yy;
getmaxyx(stdscr, yy, xx); getmaxyx(stdscr, yy, xx);
const char* title = "Messages during last pass."; const char* title = "Messages during last pass.";
if (cmSystemTools::GetErrorOccuredFlag()) { if (cmSystemTools::GetErrorOccuredFlag()) {
...@@ -707,7 +713,8 @@ void cmCursesMainForm::FixValue(cmStateEnums::CacheEntryType type, ...@@ -707,7 +713,8 @@ void cmCursesMainForm::FixValue(cmStateEnums::CacheEntryType type,
void cmCursesMainForm::HandleInput() void cmCursesMainForm::HandleInput()
{ {
int x = 0, y = 0; int x = 0;
int y = 0;
if (!this->Form) { if (!this->Form) {
return; return;
......
...@@ -64,7 +64,8 @@ void cmCursesStringWidget::OnType(int& key, cmCursesMainForm* fm, ...@@ -64,7 +64,8 @@ void cmCursesStringWidget::OnType(int& key, cmCursesMainForm* fm,
bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm, bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
WINDOW* w) WINDOW* w)
{ {
int x, y; int x;
int y;
FORM* form = fm->GetForm(); FORM* form = fm->GetForm();
// when not in edit mode, edit mode is entered by pressing enter or i (vim // when not in edit mode, edit mode is entered by pressing enter or i (vim
...@@ -179,7 +180,8 @@ const char* cmCursesStringWidget::GetValue() ...@@ -179,7 +180,8 @@ const char* cmCursesStringWidget::GetValue()
bool cmCursesStringWidget::PrintKeys() bool cmCursesStringWidget::PrintKeys()
{ {
int x, y; int x;
int y;
getmaxyx(stdscr, y, x); getmaxyx(stdscr, y, x);
if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) { if (x < cmCursesMainForm::MIN_WIDTH || y < cmCursesMainForm::MIN_HEIGHT) {
return false; return false;
......
...@@ -210,7 +210,8 @@ void QCMakeCacheModel::clear() ...@@ -210,7 +210,8 @@ void QCMakeCacheModel::clear()
void QCMakeCacheModel::setProperties(const QCMakePropertyList& props) void QCMakeCacheModel::setProperties(const QCMakePropertyList& props)
{ {
QSet<QCMakeProperty> newProps, newProps2; QSet<QCMakeProperty> newProps;
QSet<QCMakeProperty> newProps2;
if (this->ShowNewProperties) { if (this->ShowNewProperties) {
newProps = props.toSet(); newProps = props.toSet();
......
...@@ -33,10 +33,18 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args, ...@@ -33,10 +33,18 @@ bool cmAddCustomCommandCommand(std::vector<std::string> const& args,
} }
cmMakefile& mf = status.GetMakefile(); cmMakefile& mf = status.GetMakefile();
std::string source, target, main_dependency, working, depfile, job_pool; std::string source;
std::string target;
std::string main_dependency;
std::string working;
std::string depfile;
std::string job_pool;
std::string comment_buffer; std::string comment_buffer;
const char* comment = nullptr; const char* comment = nullptr;
std::vector<std::string> depends, outputs, output, byproducts; std::vector<std::string> depends;
std::vector<std::string> outputs;
std::vector<std::string> output;
std::vector<std::string> byproducts;
bool verbatim = false; bool verbatim = false;
bool append = false; bool append = false;
bool uses_terminal = false; bool uses_terminal = false;
......
...@@ -43,7 +43,8 @@ bool cmAddCustomTargetCommand(std::vector<std::string> const& args, ...@@ -43,7 +43,8 @@ bool cmAddCustomTargetCommand(std::vector<std::string> const& args,
cmCustomCommandLines commandLines; cmCustomCommandLines commandLines;
// Accumulate dependencies. // Accumulate dependencies.
std::vector<std::string> depends, byproducts; std::vector<std::string> depends;
std::vector<std::string> byproducts;
std::string working_directory; std::string working_directory;
bool verbatim = false; bool verbatim = false;
bool uses_terminal = false; bool uses_terminal = false;
......
...@@ -59,7 +59,8 @@ bool cmBinUtilsMacOSMachOLinker::ScanDependencies( ...@@ -59,7 +59,8 @@ bool cmBinUtilsMacOSMachOLinker::ScanDependencies(
bool cmBinUtilsMacOSMachOLinker::ScanDependencies( bool cmBinUtilsMacOSMachOLinker::ScanDependencies(
std::string const& file, std::string const& executablePath) std::string const& file, std::string const& executablePath)
{ {
std::vector<std::string> libs, rpaths; std::vector<std::string> libs;
std::vector<std::string> rpaths;
if (!this->Tool->GetFileInfo(file, libs, rpaths)) { if (!this->Tool->GetFileInfo(file, libs, rpaths)) {
return false; return false;
} }
......
...@@ -2759,7 +2759,9 @@ bool HandleGetRuntimeDependenciesCommand(std::vector<std::string> const& args, ...@@ -2759,7 +2759,9 @@ bool HandleGetRuntimeDependenciesCommand(std::vector<std::string> const& args,
return false; return false;
} }
std::vector<std::string> deps, unresolvedDeps, conflictingDeps; std::vector<std::string> deps;
std::vector<std::string> unresolvedDeps;
std::vector<std::string> conflictingDeps;
for (auto const& val : archive.GetResolvedPaths()) { for (auto const& val : archive.GetResolvedPaths()) {
bool unique = true; bool unique = true;
auto it = val.second.begin(); auto it = val.second.begin();
......
...@@ -38,7 +38,8 @@ bool cmFileTimeCache::Compare(std::string const& f1, std::string const& f2, ...@@ -38,7 +38,8 @@ bool cmFileTimeCache::Compare(std::string const& f1, std::string const& f2,
int* result) int* result)
{ {
// Get the modification time for each file. // Get the modification time for each file.
cmFileTime ft1, ft2; cmFileTime ft1;
cmFileTime ft2;
if (this->Load(f1, ft1) && this->Load(f2, ft2)) { if (this->Load(f1, ft1) && this->Load(f2, ft2)) {
// Compare the two modification times. // Compare the two modification times.
*result = ft1.Compare(ft2); *result = ft1.Compare(ft2);
...@@ -52,7 +53,8 @@ bool cmFileTimeCache::Compare(std::string const& f1, std::string const& f2, ...@@ -52,7 +53,8 @@ bool cmFileTimeCache::Compare(std::string const& f1, std::string const& f2,
bool cmFileTimeCache::DifferS(std::string const& f1, std::string const& f2) bool cmFileTimeCache::DifferS(std::string const& f1, std::string const& f2)
{ {
// Get the modification time for each file. // Get the modification time for each file.
cmFileTime ft1, ft2; cmFileTime ft1;
cmFileTime ft2;
if (this->Load(f1, ft1) && this->Load(f2, ft2)) { if (this->Load(f1, ft1) && this->Load(f2, ft2)) {
// Compare the two modification times. // Compare the two modification times.
return ft1.DifferS(ft2); return ft1.DifferS(ft2);
......
...@@ -275,7 +275,8 @@ static const struct InListNode : public cmGeneratorExpressionNode ...@@ -275,7 +275,8 @@ static const struct InListNode : public cmGeneratorExpressionNode
const GeneratorExpressionContent* /*content*/, const GeneratorExpressionContent* /*content*/,
cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override cmGeneratorExpressionDAGChecker* /*dagChecker*/) const override
{ {
std::vector<std::string> values, checkValues; std::vector<std::string> values;
std::vector<std::string> checkValues;
bool check = false; bool check = false;
switch (context->LG->GetPolicyStatus(cmPolicies::CMP0085)) { switch (context->LG->GetPolicyStatus(cmPolicies::CMP0085)) {
case cmPolicies::WARN: case cmPolicies::WARN:
...@@ -344,7 +345,8 @@ static const struct FilterNode : public cmGeneratorExpressionNode ...@@ -344,7 +345,8 @@ static const struct FilterNode : public cmGeneratorExpressionNode
return {}; return {};
} }
std::vector<std::string> values, result; std::vector<std::string> values;
std::vector<std::string> result;
cmExpandList(parameters.front(), values, true); cmExpandList(parameters.front(), values, true);
std::copy_if(values.cbegin(), values.cend(), std::back_inserter(result), std::copy_if(values.cbegin(), values.cend(), std::back_inserter(result),
...@@ -1105,7 +1107,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode ...@@ -1105,7 +1107,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
static cmsys::RegularExpression propertyNameValidator("^[A-Za-z0-9_]+$"); static cmsys::RegularExpression propertyNameValidator("^[A-Za-z0-9_]+$");
cmGeneratorTarget const* target = nullptr; cmGeneratorTarget const* target = nullptr;
std::string targetName, propertyName; std::string targetName;
std::string propertyName;
if (parameters.size() == 2) { if (parameters.size() == 2) {
targetName = parameters[0]; targetName = parameters[0];
......
...@@ -526,7 +526,9 @@ std::string cmGeneratorTarget::GetFilePrefix( ...@@ -526,7 +526,9 @@ std::string cmGeneratorTarget::GetFilePrefix(
return prefix ? prefix : std::string(); return prefix ? prefix : std::string();
} }
std::string prefix, suffix, base; std::string prefix;
std::string suffix;
std::string base;
this->GetFullNameInternal(config, artifact, prefix, base, suffix); this->GetFullNameInternal(config, artifact, prefix, base, suffix);
return prefix; return prefix;
} }
...@@ -539,7 +541,9 @@ std::string cmGeneratorTarget::GetFileSuffix( ...@@ -539,7 +541,9 @@ std::string cmGeneratorTarget::GetFileSuffix(
return suffix ? suffix : std::string(); return suffix ? suffix : std::string();
} }
std::string prefix, suffix, base; std::string prefix;
std::string suffix;
std::string base;
this->GetFullNameInternal(config, artifact, prefix, base, suffix); this->GetFullNameInternal(config, artifact, prefix, base, suffix);
return suffix; return suffix;
} }
......
...@@ -74,7 +74,8 @@ std::map<std::string, LinkLibraryScopeType> getScopedLinkLibrariesFromTarget( ...@@ -74,7 +74,8 @@ std::map<std::string, LinkLibraryScopeType> getScopedLinkLibrariesFromTarget(
{ {
char sep = ';'; char sep = ';';
std::map<std::string, LinkLibraryScopeType> tokens; std::map<std::string, LinkLibraryScopeType> tokens;
size_t start = 0, end = 0; size_t start = 0;
size_t end = 0;
const char* pInterfaceLinkLibraries = const char* pInterfaceLinkLibraries =
Target->GetProperty("INTERFACE_LINK_LIBRARIES"); Target->GetProperty("INTERFACE_LINK_LIBRARIES");
......
...@@ -688,7 +688,8 @@ void cmInstallTargetGenerator::AddChrpathPatchRule( ...@@ -688,7 +688,8 @@ void cmInstallTargetGenerator::AddChrpathPatchRule(
std::string installNameTool = std::string installNameTool =
mf->GetSafeDefinition("CMAKE_INSTALL_NAME_TOOL"); mf->GetSafeDefinition("CMAKE_INSTALL_NAME_TOOL");
std::vector<std::string> oldRuntimeDirs, newRuntimeDirs; std::vector<std::string> oldRuntimeDirs;
std::vector<std::string> newRuntimeDirs;
cli->GetRPath(oldRuntimeDirs, false); cli->GetRPath(oldRuntimeDirs, false);
cli->GetRPath(newRuntimeDirs, true); cli->GetRPath(newRuntimeDirs, true);
......
...@@ -695,7 +695,8 @@ public: ...@@ -695,7 +695,8 @@ public:
} }
this->Indexes.resize(size); this->Indexes.resize(size);
auto start = this->Start, step = this->Step; auto start = this->Start;
auto step = this->Step;
std::generate(this->Indexes.begin(), this->Indexes.end(), std::generate(this->Indexes.begin(), this->Indexes.end(),
[&start, step]() -> int { [&start, step]() -> int {
auto r = start; auto r = start;
...@@ -919,8 +920,10 @@ bool cmListCommand::HandleTransformCommand( ...@@ -919,8 +920,10 @@ bool cmListCommand::HandleTransformCommand(
} }
} }
const std::string REGEX{ "REGEX" }, AT{ "AT" }, FOR{ "FOR" }, const std::string REGEX{ "REGEX" };
OUTPUT_VARIABLE{ "OUTPUT_VARIABLE" }; const std::string AT{ "AT" };
const std::string FOR{ "FOR" };
const std::string OUTPUT_VARIABLE{ "OUTPUT_VARIABLE" };
// handle optional arguments // handle optional arguments
while (args.size() > index) { while (args.size() > index) {
...@@ -997,7 +1000,9 @@ bool cmListCommand::HandleTransformCommand( ...@@ -997,7 +1000,9 @@ bool cmListCommand::HandleTransformCommand(
return false; return false;
} }
int start = 0, stop = 0, step = 1; int start = 0;
int stop = 0;
int step = 1;
bool valid = true; bool valid = true;
try { try {
std::size_t pos; std::size_t pos;
......
...@@ -1033,8 +1033,8 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( ...@@ -1033,8 +1033,8 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit(
// Support putting all the in-project include directories first if // Support putting all the in-project include directories first if
// it is requested by the project. // it is requested by the project.
if (this->Makefile->IsOn("CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE")) { if (this->Makefile->IsOn("CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE")) {
std::string const &topSourceDir = this->GetState()->GetSourceDirectory(), std::string const& topSourceDir = this->GetState()->GetSourceDirectory();
&topBinaryDir = this->GetState()->GetBinaryDirectory(); std::string const& topBinaryDir = this->GetState()->GetBinaryDirectory();
for (BT<std::string> const& udr : userDirs) { for (BT<std::string> const& udr : userDirs) {
// Emit this directory only if it is a subdirectory of the // Emit this directory only if it is a subdirectory of the
// top-level source or binary tree. // top-level source or binary tree.
......
...@@ -556,7 +556,8 @@ void cmLocalNinjaGenerator::WriteCustomCommandBuildStatements() ...@@ -556,7 +556,8 @@ void cmLocalNinjaGenerator::WriteCustomCommandBuildStatements()
++j; ++j;
for (; j != i->second.end(); ++j) { for (; j != i->second.end(); ++j) {
std::vector<std::string> jDeps, depsIntersection; std::vector<std::string> jDeps;
std::vector<std::string> depsIntersection;
this->GetGlobalNinjaGenerator()->AppendTargetDependsClosure(*j, jDeps); this->GetGlobalNinjaGenerator()->AppendTargetDependsClosure(*j, jDeps);
std::sort(jDeps.begin(), jDeps.end()); std::sort(jDeps.begin(), jDeps.end());
std::set_intersection(ccTargetDeps.begin(), ccTargetDeps.end(), std::set_intersection(ccTargetDeps.begin(), ccTargetDeps.end(),
......
...@@ -967,7 +967,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement() ...@@ -967,7 +967,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
&gt->GetPostBuildCommands() &gt->GetPostBuildCommands()
}; };
std::vector<std::string> preLinkCmdLines, postBuildCmdLines; std::vector<std::string> preLinkCmdLines;
std::vector<std::string> postBuildCmdLines;
std::vector<std::string>* cmdLineLists[3] = { &preLinkCmdLines, std::vector<std::string>* cmdLineLists[3] = { &preLinkCmdLines,
&preLinkCmdLines, &preLinkCmdLines,
&postBuildCmdLines }; &postBuildCmdLines };
......
...@@ -43,7 +43,8 @@ void cmNinjaUtilityTargetGenerator::Generate() ...@@ -43,7 +43,8 @@ void cmNinjaUtilityTargetGenerator::Generate()
cmNinjaBuild phonyBuild("phony"); cmNinjaBuild phonyBuild("phony");
std::vector<std::string> commands; std::vector<std::string> commands;
cmNinjaDeps deps, util_outputs(1, utilCommandName); cmNinjaDeps deps;
cmNinjaDeps util_outputs(1, utilCommandName);
bool uses_terminal = false; bool uses_terminal = false;
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment