#pragma once #include "Strings.hpp" #include "List.hpp" #include "Map.hpp" #include "instruction.h" #include "statement.h" #include "constants.h" namespace obj { struct MethodObject; namespace BCgen { struct FunctionDefinition { FunctionDefinition* mPrnt = NULL; // signature tp::String mFunctionId; tp::List mArgsOrder; ConstObjectsPool mConstants; tp::Map mLocals; tp::List mInstructions; FunctionDefinition(tp::String function_id, tp::Buffer args, FunctionDefinition* prnt); FunctionDefinition() {} void generateByteCode(ByteCode& out); tp::List::Node* inst(Instruction inst); void EvalExpr(Expression* expr); void EvalStatement(Statement* expr); ConstObject* defineLocal(tp::String id); }; void init(); void deinit(); void Genereate(ByteCode& out, StatementScope* body); bool Compile(MethodObject* obj); }; };