Skip to content

Commit 8ebe424

Browse files
committed
fix #386: Ignore nonexistent targets in sensing_of
1 parent 0d7a4d0 commit 8ebe424

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/blocks/sensingblocks.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ void SensingBlocks::compileOf(Compiler *compiler)
157157
assert(engine);
158158
int index = engine->findTarget(value);
159159

160+
if (index == -1) {
161+
compiler->addInstruction(vm::OP_NULL);
162+
return;
163+
}
164+
160165
switch (option) {
161166
case XPosition:
162167
f = &xPositionOfSpriteByIndex;

test/blocks/sensing_blocks_test.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,11 @@ TEST_F(SensingBlocksTest, Of)
732732
addDropdownField(block25, "PROPERTY", SensingBlocks::PROPERTY, "some variable", static_cast<SensingBlocks::FieldValues>(-1));
733733
addDropdownInput(block25, "OBJECT", SensingBlocks::OBJECT, "", createNullBlock("aj"));
734734

735+
// [some variable] of (Nonexistent sprite)
736+
auto block26 = std::make_shared<Block>("ak", "sensing_of");
737+
addDropdownField(block26, "PROPERTY", SensingBlocks::PROPERTY, "some variable", static_cast<SensingBlocks::FieldValues>(-1));
738+
addDropdownInput(block26, "OBJECT", SensingBlocks::OBJECT, "Nonexistent sprite");
739+
735740
compiler.init();
736741

737742
EXPECT_CALL(m_engineMock, findTarget("Sprite2")).Times(9).WillRepeatedly(Return(6));
@@ -845,6 +850,10 @@ TEST_F(SensingBlocksTest, Of)
845850
compiler.setBlock(block25);
846851
SensingBlocks::compileOf(&compiler);
847852

853+
EXPECT_CALL(m_engineMock, findTarget("Nonexistent sprite")).WillOnce(Return(-1));
854+
compiler.setBlock(block26);
855+
SensingBlocks::compileOf(&compiler);
856+
848857
compiler.end();
849858

850859
ASSERT_EQ(
@@ -932,6 +941,7 @@ TEST_F(SensingBlocksTest, Of)
932941
vm::OP_NULL,
933942
vm::OP_EXEC,
934943
18,
944+
vm::OP_NULL,
935945
vm::OP_HALT }));
936946
ASSERT_EQ(compiler.constValues(), std::vector<Value>({ 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, "some variable" }));
937947
ASSERT_EQ(compiler.variables(), std::vector<Variable *>({ v2.get(), v3.get() }));

0 commit comments

Comments
 (0)