Skip to content
GitLab
菜单
项目
群组
代码片段
/
帮助
帮助
支持
社区论坛
快捷键
?
提交反馈
登录/注册
切换导航
菜单
打开侧边栏
Ricolove
SPA Knowledge Base
提交
56362dcc
提交
56362dcc
编辑于
11月 27, 2021
作者:
Ricolove
浏览文件
assi6
上级
b126fc03
变更
2
Hide whitespace changes
Inline
Side-by-side
Assignment 6.md
0 → 100644
浏览文件 @
56362dcc
# Assignment 6
## Tai-e Classes You Need to Copy and Paste
本次作业的
`Solver.java`
有很大一部分可以直接用 Assignment 5 的代码,只需要改成 CS 的版本即可。
### 几乎可以完全复制粘贴的
以下两个方法在 CI 和 CS 的版本是完全一致的,因为它们要处理的对象都已经在调用时配置好了
`context`
。See Lecture 12 page 94.
*
`addPFGEdge`
: 一个字符都不用改。
*
`propagate`
: 现在
`PointToSet`
是一个接口而不是一个实在类了,所以需要用最新的工厂来为你生成新的
`PointToSet`
对象。
### 只需要把 CI 方法换成 CS 方法的
之前很多 API 是由
`PointFlowGraph`
负责的,例如
`getVar`
,
`getStoreField`
。现在,这些 API 转移到了
`CSManager`
上,所以部分函数基本上只要提取对应的
`context`
,再更换 API,就能接着用了。
*
`analyze`
。
*
`Stmt.Processor`
里面除了对
`Invoke`
,
`New`
以外的其它处理方法。
*
`processCall`
里面
`if c:l -> c_t:m not in CG then`
的部分
### 需要一些小小的改动
#### `processCall`
原本只需要
`m = resolveCallee(...)`
就可以确定
`m_this`
,但是现在
`m`
需要一个新的上下文
`c_t`
,因此需要调用
`selectContext`
。
在 lecture notes 中,
`selectContext`
的抽象原型是
`Select(c, l, c':o_i)`
,但是在实现中,
`c`
和
`l`
被整合成了一个
`CSCallSite`
,并且额外添加了一个参数
`JMethod Callee`
。😨啊,这个参数有什么用?!这个额外的参数在本次实验中是没有使用的,所以请坐和放宽,不要惊慌。😆
#### `addReachable, StmtProcessor`
现在为了利用
`context`
信息,每个
`stmtProcess`
需要在每次遇到新方法的时候自行新建。
*
对于
`visit(Invoke)`
,其改动和
`processCall`
相同,只不过现在不需要
`c':o_i`
这个参数了而已。
*
对于
`visit(New)`
,请注意,虽然算法上写的是
`add <c:x, {c:o_i}> to WL`
,然而,两个
`c`
是不一样的,对于 k-limit 的 CI 场景,
`o_i`
的
`c`
是 k-1 的。举个例子:
*
现在是 2-Call-site Sensitive,当
`c:m`
的
`c`
是
`[la, lb]`
的时候…
*
`c:x`
的
`c`
是
`[la, lb]`
*
`c:o_i`
的
`c`
是
`[lb]`
这也就是为什么我们需要在
`ContextSelector`
上实现一个
`selectHeapContext`
。
## `ContextSelector` FAQ You Need to Know
*
直接运行程序的话,默认是以
`CISelector`
运行的,所以你会发现输出里面
`context`
都是空的。为了设置恰当的
`ContextSelector`
,你需要修改
`plan.yml`
。
*
如何处理静态调用的
`selectContext`
已经在手册里提过了,请仔细阅读。
*
`ObjSelector`
所使用的
`context`
是
`Obj`
而不是
`CSObj`
,不要弄混了。
README.md
浏览文件 @
56362dcc
...
...
@@ -12,11 +12,13 @@
3.
✔ - 已发布
4.
✔ - 已发布
5.
✔ - 已发布
5.
✔ - 已发布
## Issues 的更新情况
1.
✖ Assignment 1 的时候还没有此仓库。
1.
✖
-
Assignment 1 的时候还没有此仓库。
2.
✔ - #1 ~ #15
3.
✔ - #16 (此部分难度不高,因此没有收集太多的 issues)
4.
✔ - #17 ~ #34
5.
💭 施工中。建议先看 Assignment 5 的手册的手册。
5.
✖ - 本次 Assignment 几乎没人问问题。
5.
✖ - 本次 Assignment 没人问问题。
编辑
预览
支持
Markdown
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录