Skip to content

Commit 8ab338c

Browse files
committed
Add variables and lists to edge-activated hats
1 parent 2a4876a commit 8ab338c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/engine/script.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ bool Script::runHatPredicate(Target *target)
6868
vm->setBytecode(impl->hatPredicateBytecodeVector.data());
6969
vm->setConstValues(impl->constValues);
7070
vm->setFunctions(getFunctions());
71+
vm->setVariables(impl->variableValues.data());
72+
vm->setLists(impl->lists.data());
7173
vm->run();
7274
assert(vm->registerCount() == 1);
7375

test/script/script_test.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ TEST_F(ScriptTest, Bytecode)
4545
static Target *targetTest = nullptr;
4646
static IEngine *engineTest = nullptr;
4747
static Script *scriptTest = nullptr;
48+
static Value **variablesTest = nullptr;
49+
static List **listsTest = nullptr;
4850

4951
TEST_F(ScriptTest, HatPredicate)
5052
{
@@ -58,6 +60,8 @@ TEST_F(ScriptTest, HatPredicate)
5860
targetTest = vm->target();
5961
engineTest = vm->engine();
6062
scriptTest = vm->script();
63+
variablesTest = vm->variables();
64+
listsTest = vm->lists();
6165
return 0;
6266
};
6367

@@ -69,16 +73,28 @@ TEST_F(ScriptTest, HatPredicate)
6973
targetTest = vm->target();
7074
engineTest = vm->engine();
7175
scriptTest = vm->script();
76+
variablesTest = vm->variables();
77+
listsTest = vm->lists();
7278
return 0;
7379
};
7480

7581
std::vector<BlockFunc> functions1 = { f1 };
7682
std::vector<BlockFunc> functions2 = { f1, f2, f3 };
7783

84+
Variable var1("", "var1", "a");
85+
Variable var2("", "var2", 4);
86+
script.setVariables({ &var1, &var2 });
87+
88+
List list1("", "list1");
89+
List list2("", "list2");
90+
script.setLists({ &list1, &list2 });
91+
7892
EXPECT_CALL(m_engine, blockFunctions()).WillOnce(ReturnRef(functions1));
7993
targetTest = nullptr;
8094
engineTest = nullptr;
8195
scriptTest = nullptr;
96+
variablesTest = nullptr;
97+
listsTest = nullptr;
8298
script.setConstValues({ "test" });
8399
script.setHatPredicateBytecode({ vm::OP_START, vm::OP_CONST, 0, vm::OP_PRINT, vm::OP_EXEC, 0, vm::OP_HALT });
84100
testing::internal::CaptureStdout();
@@ -87,11 +103,19 @@ TEST_F(ScriptTest, HatPredicate)
87103
ASSERT_EQ(targetTest, &target);
88104
ASSERT_EQ(engineTest, &m_engine);
89105
ASSERT_EQ(scriptTest, &script);
106+
ASSERT_TRUE(variablesTest);
107+
ASSERT_EQ(variablesTest[0], var1.valuePtr());
108+
ASSERT_EQ(variablesTest[1], var2.valuePtr());
109+
ASSERT_TRUE(listsTest);
110+
ASSERT_EQ(listsTest[0], &list1);
111+
ASSERT_EQ(listsTest[1], &list2);
90112

91113
EXPECT_CALL(m_engine, blockFunctions()).WillOnce(ReturnRef(functions2));
92114
targetTest = nullptr;
93115
engineTest = nullptr;
94116
scriptTest = nullptr;
117+
variablesTest = nullptr;
118+
listsTest = nullptr;
95119
script.setHatPredicateBytecode({ vm::OP_START, vm::OP_CONST, 0, vm::OP_PRINT, vm::OP_EXEC, 1, vm::OP_HALT });
96120
script.setConstValues({ 5 });
97121
testing::internal::CaptureStdout();
@@ -105,6 +129,8 @@ TEST_F(ScriptTest, HatPredicate)
105129
targetTest = nullptr;
106130
engineTest = nullptr;
107131
scriptTest = nullptr;
132+
variablesTest = nullptr;
133+
listsTest = nullptr;
108134
script.setHatPredicateBytecode({ vm::OP_START, vm::OP_EXEC, 2, vm::OP_HALT });
109135
ASSERT_FALSE(script.runHatPredicate(&target));
110136
ASSERT_EQ(targetTest, &target);

0 commit comments

Comments
 (0)