-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScriptCompile.h
More file actions
101 lines (77 loc) · 2.34 KB
/
ScriptCompile.h
File metadata and controls
101 lines (77 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef SCRIPT_COMPILE_H
#define SCRIPT_COMPILE_H
#include "ScriptScope.h"
#include "ScriptCompileMemoryTarget.h"
#include "ScriptFunctionPrototype.h"
#include "ScriptClassData.h"
#include "ScriptAssemblyHelper.h"
#include "ScriptFunctionCompileData.h"
#include "ScriptLinkData.h"
#include <vector>
#include <memory>
#include <unordered_map>
#include <set>
class ScriptCompile
{
public:
ScriptCompile(void * base_pointer);
~ScriptCompile();
void BeginFunction();
void EndFunction();
void BeginScope();
void EndScope();
void EndScopeAggresive();
void Compile();
void Link();
void AddStackDependant();
void AddStackDependantNegative();
template <typename T>
T GetAt(size_t position)
{
T ret;
auto prev = ss.tellg();
ss.seekg(position);
ss.read((char*)&ret, sizeof(T));
ss.seekg(prev);
return ret;
}
template <typename T>
void SetAt(size_t position, const T& rhs)
{
auto prev = ss.tellp();
ss.seekp(position);
ss.write((char*)&rhs, sizeof(T));
ss.seekp(prev);
}
void Cut(size_t start, size_t size);
void Adjust(size_t start, off_t size);
void PushVariable(const std::string& name);
void PushVariable(const std::string& name, ScriptTypeData type);
void PushVariable(const std::string& name, ScriptTypeData type, ScriptCompileMemoryTarget target);
void PushVariable(const std::string& name, ScriptTypeData type, int32_t value);
void AddParameterStack(const std::string& name, ScriptTypeData type, int32_t offset);
void AddParameterRegister(const std::string& name, ScriptTypeData type, uint8_t reg);
ScriptVariableData GetVariable(const std::string& name);
void SetClass(const std::string& name);
bool IsBusy(uint8_t reg);
bool IsFree(uint8_t reg);
void SetBusy(uint8_t reg);
void SetFree(uint8_t reg);
std::unique_ptr<ScriptFunctionPrototype> proto;
std::shared_ptr<ScriptClassData> current_class;
std::unordered_map<std::string, std::shared_ptr<ScriptClassData>> classes;
std::vector<ScriptFunctionCompileData> function_code;
std::stringstream ss;
void * base_pointer;
ScriptAssemblyHelper sasm;
std::vector<ScriptScope> scope;
size_t stack, max_stack;
std::vector<size_t> stack_dependants;
std::vector<size_t> stack_dependants_negative;
ScriptCompileMemoryTarget target;
std::set<uint8_t> busy_registers;
std::vector<size_t> rel8;
std::vector<size_t> rel32;
std::vector<ScriptLinkData> links;
};
#endif