Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
5c7b787e
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5c7b787e
编写于
5月 25, 2012
作者:
S
Svetlana Isakova
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reversed traverse in depth
上级
fb08e13d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
8 deletion
+25
-8
compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowGraphTraverser.java
.../jetbrains/jet/lang/cfg/JetControlFlowGraphTraverser.java
+25
-8
未找到文件。
compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowGraphTraverser.java
浏览文件 @
5c7b787e
...
...
@@ -24,10 +24,7 @@ import org.jetbrains.annotations.NotNull;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.lang.cfg.pseudocode.*
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* @author svtk
...
...
@@ -53,6 +50,11 @@ public class JetControlFlowGraphTraverser<D> {
return
straightDirection
?
pseudocode
.
getEnterInstruction
()
:
pseudocode
.
getSinkInstruction
();
}
@NotNull
public
Map
<
Instruction
,
Pair
<
D
,
D
>>
getDataMap
()
{
return
dataMap
;
}
public
void
collectInformationFromInstructionGraph
(
@NotNull
D
initialDataValue
,
@NotNull
D
initialDataValueForEnterInstruction
,
...
...
@@ -82,6 +84,22 @@ public class JetControlFlowGraphTraverser<D> {
}
}
private
static
List
<
Instruction
>
reverseInstructions
(
@NotNull
Pseudocode
pseudocode
)
{
LinkedHashSet
<
Instruction
>
traversedInstructions
=
Sets
.
newLinkedHashSet
();
Instruction
sinkInstruction
=
pseudocode
.
getSinkInstruction
();
traverseInstructions
(
sinkInstruction
,
traversedInstructions
);
return
Lists
.
newArrayList
(
traversedInstructions
);
}
private
static
void
traverseInstructions
(
@NotNull
Instruction
instruction
,
@NotNull
LinkedHashSet
<
Instruction
>
instructions
)
{
if
(((
InstructionImpl
)
instruction
).
isDead
())
return
;
if
(
instructions
.
contains
(
instruction
))
return
;
instructions
.
add
(
instruction
);
for
(
Instruction
previousInstruction
:
instruction
.
getPreviousInstructions
())
{
traverseInstructions
(
previousInstruction
,
instructions
);
}
}
private
void
traverseSubGraph
(
@NotNull
Pseudocode
pseudocode
,
@NotNull
InstructionDataMergeStrategy
<
D
>
instructionDataMergeStrategy
,
...
...
@@ -92,8 +110,7 @@ public class JetControlFlowGraphTraverser<D> {
Instruction
startInstruction
=
getStartInstruction
(
pseudocode
);
if
(!
straightDirection
)
{
instructions
=
Lists
.
newArrayList
(
instructions
);
Collections
.
reverse
(
instructions
);
instructions
=
reverseInstructions
(
pseudocode
);
}
for
(
Instruction
instruction
:
instructions
)
{
boolean
isStart
=
straightDirection
?
instruction
instanceof
SubroutineEnterInstruction
:
instruction
instanceof
SubroutineSinkInstruction
;
...
...
@@ -170,11 +187,11 @@ public class JetControlFlowGraphTraverser<D> {
return
dataMap
.
get
(
pseudocode
.
getExitInstruction
()).
getFirst
();
}
interface
InstructionDataMergeStrategy
<
D
>
{
public
interface
InstructionDataMergeStrategy
<
D
>
{
Pair
<
D
,
D
>
execute
(
@NotNull
Instruction
instruction
,
@NotNull
Collection
<
D
>
incomingEdgesData
);
}
interface
InstructionDataAnalyzeStrategy
<
D
>
{
public
interface
InstructionDataAnalyzeStrategy
<
D
>
{
void
execute
(
@NotNull
Instruction
instruction
,
@Nullable
D
enterData
,
@Nullable
D
exitData
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录