Skip to content

Commit 1db403e

Browse files
committed
Add variable and list vector setters to VirtualMachine
1 parent b7035b7 commit 1db403e

File tree

4 files changed

+39
-4
lines changed

4 files changed

+39
-4
lines changed

include/scratchcpp/virtualmachine.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class LIBSCRATCHCPP_EXPORT VirtualMachine
102102
void setConstValues(const Value *values);
103103
void setVariables(Value **variables);
104104
void setLists(List **lists);
105+
void setVariablesVector(const std::vector<Value *> &variables);
106+
void setListsVector(const std::vector<List *> &lists);
105107

106108
void setBytecode(unsigned int *code);
107109

src/engine/virtualmachine.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,26 @@ void VirtualMachine::setLists(List **lists)
5050
impl->lists = lists;
5151
}
5252

53+
/*!
54+
* Sets the vector of variables.
55+
* Use this instead of setVariables() if you can't store the array (data pointer) anywhere.
56+
*/
57+
void VirtualMachine::setVariablesVector(const std::vector<Value *> &variables)
58+
{
59+
impl->variablesVector = variables;
60+
impl->variables = impl->variablesVector.data();
61+
}
62+
63+
/*!
64+
* Sets the vector of lists.
65+
* Use this instead of setLists() if you can't store the array (data pointer) anywhere.
66+
*/
67+
void VirtualMachine::setListsVector(const std::vector<List *> &lists)
68+
{
69+
impl->listsVector = lists;
70+
impl->lists = impl->listsVector.data();
71+
}
72+
5373
/*! Sets the bytecode of the script. */
5474
void VirtualMachine::setBytecode(unsigned int *code)
5575
{

src/engine/virtualmachine_p.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ struct VirtualMachinePrivate
5959
BlockFunc *functions = nullptr;
6060
const Value *constValues = nullptr;
6161
Value **variables = nullptr;
62+
std::vector<Value *> variablesVector;
6263
List **lists = nullptr;
64+
std::vector<List *> listsVector;
6365

6466
Value **regs = nullptr;
6567
size_t regCount = 0;

test/virtual_machine/virtual_machine_test.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,35 @@ TEST(VirtualMachineTest, ConstValues)
4848

4949
TEST(VirtualMachineTest, Variables)
5050
{
51-
Value var;
52-
Value *variables[] = { &var };
51+
Value var1, var2;
52+
Value *variables[] = { &var1, &var2 };
5353

5454
VirtualMachine vm;
5555
ASSERT_EQ(vm.variables(), nullptr);
56+
5657
vm.setVariables(variables);
5758
ASSERT_EQ(vm.variables(), variables);
59+
60+
vm.setVariablesVector({ &var1, &var2 });
61+
ASSERT_EQ(vm.variables()[0], &var1);
62+
ASSERT_EQ(vm.variables()[1], &var2);
5863
}
5964

6065
TEST(VirtualMachineTest, Lists)
6166
{
62-
List list("", "");
63-
List *lists[] = { &list };
67+
List list1("", "");
68+
List list2("", "");
69+
List *lists[] = { &list1, &list2 };
6470

6571
VirtualMachine vm;
6672
ASSERT_EQ(vm.lists(), nullptr);
73+
6774
vm.setLists(lists);
6875
ASSERT_EQ(vm.lists(), lists);
76+
77+
vm.setListsVector({ &list1, &list2 });
78+
ASSERT_EQ(vm.lists()[0], &list1);
79+
ASSERT_EQ(vm.lists()[1], &list2);
6980
}
7081

7182
TEST(VirtualMachineTest, Bytecode)

0 commit comments

Comments
 (0)