-
Notifications
You must be signed in to change notification settings - Fork 1
/
dev_log.txt
executable file
·58 lines (40 loc) · 1.97 KB
/
dev_log.txt
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
2001/3
1. 实现脚本函数的互相调用
1. 在compiler中加入callv, paramv, 和 endcallv指令.
2. 当编译时发现函数名在pubfunctable中没有时, 到scriptfucntable中查找, 如找到, 则
添加call指令, 操作数是CFucntion的指针.
3. paramv记录参数
4. endcallv指令负责load子函数,
把当前IP, 数据段地址和子函数指针推入call stack, 把当前函数指针指向栈的顶端, IP归零
先分配内存, 然后把数据段的指针指向子函数的内存.
因为所有指针都是物理地址因此参数也可以是指针.
复制参数
5. return时, 把返回值赋给AX, 销毁内存, 恢复IP和数据段指针, pop出子函数指针.
7. 要修改的地方
compiler
实现callv, paramv, endcallv, return
增加call stack, 当前函数指针
修改run函数
8. 所有的return语句必须返回一个值.
9. 修改ValidateAddress函数
使他在验证时遍历callstack中所有的虚拟内存
2. 要考虑当函数的调用参数是一个函数的返回值的情况, 比如: test1(0, test2());
这一情况当前VM会出错.
解决方法: 添加一个函数调用栈, 修改所有和函数调用有关的虚拟汇编指令的实现函数和VM的析构函数
3. 被调用的脚本函数如果传出一根指针, 由于函数在return后它所有的内存已被释放,
因此这根指针是不可用的. 但传入的指针是可以被被调函数使用的.
解决方法: 待解决
4. 实现分配动态内存
5. 函数运行时的超时机制
6. 开放式接口: javalib方式
7. 安全性方面的考虑
8. 跨平台
9. 与其他主流产品的接口和通讯
和psse不一样的地方:
1. compile和compileall的逻辑
2. LoadConfig和GetConfig
3. se_interface.h 的注释和interface个数
4. 没有使用RunScript
使用cocor改造compiler, 就是把生成语法树或代码段的逻辑放到.atg和.frm中
1. CompoundStatement
2. functoncall and ActualParameter