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
670
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.2k
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
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
990
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Practical Orchestrator
shlominoach
191
11k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
Six Lessons from altMBA
skipperchong
29
4.3k
Un-Boring Meetings
codingconduct
0
350
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
We Have a Design System, Now What?
morganepeng
55
8.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
360
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