Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Roslyn でフロー解析してみる
Search
ruccho
May 29, 2026
690
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Roslyn でフロー解析してみる
ruccho
May 29, 2026
More Decks by ruccho
See All by ruccho
WebAssemblyインタプリタを書く ~Component Modelを添えて~
ruccho
1
1.3k
URP の 2D Renderer と たわむれる
ruccho
0
15
Colonies
ruccho
0
680
タイルマップ拡張のススメ / Recommendation of Unity Tilemap Gotanda.unity #14
ruccho
0
3.7k
Featured
See All Featured
Making Projects Easy
brettharned
120
6.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Mind Mapping
helmedeiros
PRO
1
300
Amusing Abliteration
ianozsvald
1
240
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
Transcript
Roslynでフロー解析してみる るっちょ @ruccho_dev
自己紹介です • Unity で個人ゲーム開発してます • 趣味と仕事で .NET / Unity 向けのライブラリ開発してます
Roslyn • 我々がいつも使っている C# コンパイラ実装のこと • C# で書かれていて NuGet で配布されており、ライブラリとして利用可能
• Analyzer や Source Generator を実装するときによく触る
Roslyn のコード解析インタフェース 具体的 抽象的 SyntaxTree / Syntax SemanticModel / Symbol
ControlFlowGraph / Operation 構文解析 意味論解析 フロー解析など
ControlFlowGraph コード上の命令と、その流れをグラフ構造で表現したオブジェクト (非常に知名度が低い!)
ControlFlowGraphを取得する RegisterOperationAction のコールバックで得られる OperationAnalysisContext に対して GetControlFlowGraph() する
ControlFlowGraphの基本構造 • メソッド内の命令をある程度のまとまりに分割した BasicBlock ◦ ControlFlowGraph.Blocks で BasicBlock のリストが得られる •
BasicBlock 間をつなげる ControlFlowBranch によって遷移構造を表現
ブロック
ブロック 各 Block は2通りの遷移先を持てる • FallthroughSuccessor ◦ デフォルトの遷移先Block • ConditionalSuccessor
◦ 指定条件を満たした場合の移動先Block ◦ 今回はelseへの分岐で使用 ◦ ない場合もある Entry Exit
ブロック Entry Exit 各ブロック内の命令も解析したい!
ブロック
ブロック 各ブロック内の命令も解析したい! Entry Exit
IOperation 各 BasicBlockは命令 (IOperation)のリストを含んでいる
IOperation のツリー構造 ExpressionStatement Invocation Argument BinaryOperator Literal BinaryOperator Literal Conversion
Literal
None
Roslynでフロー解析してみる るっちょ @ruccho_dev