Skip to content

Commit ba8b217

Browse files
committed
Engine: Compile procedures
1 parent 632ebe5 commit ba8b217

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/engine/engine.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ void Engine::compile()
7272
std::vector<Variable *> variables;
7373
std::vector<List *> lists;
7474
std::vector<InputValue *> constInputValues;
75+
std::vector<std::string> procedures;
76+
std::unordered_map<std::string, unsigned int *> procedureBytecodeMap;
7577
auto blocks = target->blocks();
7678
for (auto block : blocks) {
7779
if (block->topLevel()) {
@@ -81,21 +83,37 @@ void Engine::compile()
8183
compiler.setConstInputValues(constInputValues);
8284
compiler.setVariables(variables);
8385
compiler.setLists(lists);
86+
compiler.setProcedures(procedures);
8487
compiler.compile();
8588
variables = compiler.variables();
8689
lists = compiler.lists();
8790
constInputValues = compiler.constInputValues();
91+
procedures = compiler.procedures();
92+
8893
auto vm = std::make_shared<VirtualMachine>(target.get(), this);
8994
vm->setFunctions(m_functions);
9095
vm->setConstValues(compiler.constValues());
9196
vm->setVariables(compiler.variablePtrs());
9297
vm->setLists(lists);
9398
vm->setBytecode(compiler.bytecode());
99+
if (block->opcode() == "procedures_definition") {
100+
auto b = block->inputAt(block->findInput("custom_block"))->valueBlock();
101+
procedureBytecodeMap[b->mutationPrototype()->procCode()] = vm->bytecode();
102+
}
94103
m_scripts[block] = vm;
95104
} else
96105
std::cout << "warning: unsupported top level block: " << block->opcode() << std::endl;
97106
}
98107
}
108+
109+
std::vector<unsigned int *> procedureBytecodes;
110+
for (const std::string &code : procedures)
111+
procedureBytecodes.push_back(procedureBytecodeMap[code]);
112+
113+
for (auto block : blocks) {
114+
if (m_scripts.count(block) == 1)
115+
m_scripts[block]->setProcedures(procedureBytecodes);
116+
}
99117
}
100118
}
101119

0 commit comments

Comments
 (0)