Skip to content

Commit 2050088

Browse files
committed
Add more getters to VirtualMachine
1 parent 0a3368b commit 2050088

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

include/scratchcpp/virtualmachine.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ class LIBSCRATCHCPP_EXPORT VirtualMachine
105105

106106
void setBytecode(unsigned int *code);
107107

108+
unsigned int **procedures() const;
109+
const BlockFunc *functions() const;
108110
const Value *constValues() const;
111+
Value **variables() const;
112+
List **lists() const;
109113

110114
unsigned int *bytecode() const;
111115

src/engine/virtualmachine.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,36 @@ void VirtualMachine::setBytecode(unsigned int *code)
5757
impl->pos = code;
5858
}
5959

60+
/*! Returns the array of procedures. */
61+
unsigned int **VirtualMachine::procedures() const
62+
{
63+
return impl->procedures;
64+
}
65+
66+
/*! Returns the array of functions (block implementation function pointers). */
67+
const BlockFunc *VirtualMachine::functions() const
68+
{
69+
return impl->functions;
70+
}
71+
6072
/*! Returns the array of constant values. */
6173
const Value *VirtualMachine::constValues() const
6274
{
6375
return impl->constValues;
6476
}
6577

78+
/*! Returns the array of Value pointers of variables. */
79+
Value **VirtualMachine::variables() const
80+
{
81+
return impl->variables;
82+
}
83+
84+
/*! Returns the array of lists. */
85+
List **VirtualMachine::lists() const
86+
{
87+
return impl->lists;
88+
}
89+
6690
/*! Returns the bytecode array. */
6791
unsigned int *VirtualMachine::bytecode() const
6892
{

test/virtual_machine/virtual_machine_test.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ TEST(VirtualMachineTest, Constructors)
2525
ASSERT_EQ(vm2.script(), &script);
2626
}
2727

28+
TEST(VirtualMachineTest, Procedures)
29+
{
30+
static unsigned int procedure[] = { OP_START, OP_HALT };
31+
static unsigned int *procedures[] = { procedure };
32+
33+
VirtualMachine vm;
34+
ASSERT_EQ(vm.procedures(), nullptr);
35+
vm.setProcedures(procedures);
36+
ASSERT_EQ(vm.procedures(), procedures);
37+
}
38+
2839
TEST(VirtualMachineTest, ConstValues)
2940
{
3041
static Value constValues[] = { "test1", "test2" };
@@ -35,6 +46,28 @@ TEST(VirtualMachineTest, ConstValues)
3546
ASSERT_EQ(vm.constValues(), constValues);
3647
}
3748

49+
TEST(VirtualMachineTest, Variables)
50+
{
51+
Value var;
52+
Value *variables[] = { &var };
53+
54+
VirtualMachine vm;
55+
ASSERT_EQ(vm.variables(), nullptr);
56+
vm.setVariables(variables);
57+
ASSERT_EQ(vm.variables(), variables);
58+
}
59+
60+
TEST(VirtualMachineTest, Lists)
61+
{
62+
List list("", "");
63+
List *lists[] = { &list };
64+
65+
VirtualMachine vm;
66+
ASSERT_EQ(vm.lists(), nullptr);
67+
vm.setLists(lists);
68+
ASSERT_EQ(vm.lists(), lists);
69+
}
70+
3871
TEST(VirtualMachineTest, Bytecode)
3972
{
4073
static unsigned int bytecode[] = { OP_START, OP_HALT };
@@ -1240,7 +1273,17 @@ TEST(VirtualMachineTest, OP_EXEC)
12401273
}
12411274
}
12421275

1243-
TEST(VirtualMachineTest, Procedures)
1276+
TEST(VirtualMachineTest, Functions)
1277+
{
1278+
static BlockFunc functions[] = { &testFunction1, &testFunction2 };
1279+
1280+
VirtualMachine vm;
1281+
ASSERT_EQ(vm.functions(), nullptr);
1282+
vm.setFunctions(functions);
1283+
ASSERT_EQ(vm.functions(), functions);
1284+
}
1285+
1286+
TEST(VirtualMachineTest, RunProcedures)
12441287
{
12451288
static unsigned int bytecode[] = {
12461289
OP_START, OP_INIT_PROCEDURE, OP_CONST, 0, OP_ADD_ARG, OP_CONST, 1, OP_ADD_ARG, OP_CALL_PROCEDURE, 0, OP_NULL, OP_EXEC, 0, OP_INIT_PROCEDURE, OP_CALL_PROCEDURE, 1, OP_HALT

0 commit comments

Comments
 (0)