Skip to content

Commit c6f7e47

Browse files
committed
Use static_cast where possible
Resolves: #447 Blocks don't need this change because they're going to be refactored.
1 parent b8e612a commit c6f7e47

File tree

4 files changed

+15
-12
lines changed

4 files changed

+15
-12
lines changed

src/engine/internal/engine.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,7 +1336,7 @@ Stage *Engine::stage() const
13361336
if (it == m_targets.end())
13371337
return nullptr;
13381338
else
1339-
return dynamic_cast<Stage *>((*it).get());
1339+
return static_cast<Stage *>((*it).get());
13401340
}
13411341

13421342
const std::vector<std::shared_ptr<Monitor>> &Engine::monitors() const
@@ -1658,8 +1658,7 @@ const std::vector<Script *> &Engine::getHats(Target *target, HatType type)
16581658

16591659
// Get root if this is a clone
16601660
if (!target->isStage()) {
1661-
Sprite *sprite = dynamic_cast<Sprite *>(target);
1662-
assert(sprite);
1661+
Sprite *sprite = static_cast<Sprite *>(target);
16631662

16641663
if (sprite->isClone())
16651664
target = sprite->cloneSprite();
@@ -1746,7 +1745,7 @@ const std::unordered_set<std::string> &Engine::unsupportedBlocks() const
17461745

17471746
void Engine::compileMonitor(std::shared_ptr<Monitor> monitor)
17481747
{
1749-
Target *target = monitor->sprite() ? dynamic_cast<Target *>(monitor->sprite()) : stage();
1748+
Target *target = monitor->sprite() ? static_cast<Target *>(monitor->sprite()) : stage();
17501749
Compiler compiler(this, target);
17511750
auto block = monitor->block();
17521751
auto section = blockSection(block->opcode());
@@ -1812,9 +1811,8 @@ void Engine::deleteClones()
18121811
m_clones.clear();
18131812

18141813
for (auto target : m_targets) {
1815-
Sprite *sprite = dynamic_cast<Sprite *>(target.get());
1816-
1817-
if (sprite) {
1814+
if (!target->isStage()) {
1815+
Sprite *sprite = static_cast<Sprite *>(target.get());
18181816
std::vector<std::shared_ptr<Sprite>> clones = sprite->clones();
18191817

18201818
for (auto clone : clones) {
@@ -1837,7 +1835,7 @@ void Engine::removeExecutableClones()
18371835
void Engine::addVarOrListMonitor(std::shared_ptr<Monitor> monitor, Target *target)
18381836
{
18391837
if (!target->isStage())
1840-
monitor->setSprite(dynamic_cast<Sprite *>(target));
1838+
monitor->setSprite(static_cast<Sprite *>(target));
18411839

18421840
monitor->setBlockSection(blockSection(monitor->opcode()));
18431841
auto container = blockSectionContainer(monitor->opcode());

src/internal/scratch3reader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ bool Scratch3Reader::load()
408408

409409
for (auto target : m_targets) {
410410
if (!target->isStage()) {
411-
Sprite *sprite = dynamic_cast<Sprite *>(target.get());
411+
Sprite *sprite = static_cast<Sprite *>(target.get());
412412

413413
if (sprite->name() == name) {
414414
monitor->setSprite(sprite);

src/scratch/monitor.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,12 @@ void Monitor::setBlockSection(std::shared_ptr<IBlockSection> blockSection)
9595
/*! Convenience method which calls block()->target(). */
9696
Sprite *Monitor::sprite() const
9797
{
98-
return dynamic_cast<Sprite *>(impl->block->target());
98+
Target *target = impl->block->target();
99+
100+
if (target && !target->isStage())
101+
return static_cast<Sprite *>(target);
102+
103+
return nullptr;
99104
}
100105

101106
/*! Convenience method which calls block()->setTarget(). */

test/engine/engine_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ TEST(EngineTest, Clear)
7171
{
7272
Engine engine;
7373

74-
auto target1 = std::make_shared<Target>();
75-
auto target2 = std::make_shared<Target>();
74+
auto target1 = std::make_shared<Sprite>();
75+
auto target2 = std::make_shared<Sprite>();
7676
engine.setTargets({ target1, target2 });
7777

7878
auto broadcast1 = std::make_shared<Broadcast>("", "");

0 commit comments

Comments
 (0)