-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathvm.h
45 lines (38 loc) · 1.07 KB
/
vm.h
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
//
// Created by asxe on 2024/1/26.
//
#ifndef STOVE_VM_H
#define STOVE_VM_H
#include "../utils/common.h"
#include "../objectAndClass/include/header_obj.h"
#include "../objectAndClass/include/obj_map.h"
#define OPCODE_SLOTS(opcode, effect) OPCODE_##opcode,
typedef enum {
#include "opcode.inc"
} OpCode;
#undef OPCODE_SLOTS
typedef enum vmResult {
VM_RESULT_SUCCESS,
VM_RESULT_ERROR,
} VMResult; //虚拟机执行的结果,若执行无误,可以将字符码输出到文件缓存,避免下次重新编译
struct vm {
Class *stringClass;
Class *funClass;
Class *listClass;
Class *rangeClass;
Class *mapClass;
Class *nullClass;
Class *boolClass;
Class *numClass;
Class *threadClass;
Class *objectClass;
Class *classOfClass;
uint32_t allocatedBytes; //累计已分配的内存量
ObjHeader *allObjects; //所有已分配对象链表
SymbolTable allMethodNames; //所有类的方法名
ObjMap *allModules;
Parser *curParser; //当前词法分析器
};
void initVM(VM *vm);
VM *newVM(void);
#endif //STOVE_VM_H