seafoam 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/workflows.yml +39 -0
  3. data/.rubocop.yml +1 -1
  4. data/README.md +75 -2
  5. data/bin/bgv2isabelle +16 -45
  6. data/bin/bgv2json +18 -36
  7. data/bin/cfg2asm +24 -0
  8. data/bin/seafoam +1 -1
  9. data/demos/box-unbox-stats +65 -0
  10. data/docs/getting-graphs.md +4 -0
  11. data/examples/fib-java.bgv.gz +0 -0
  12. data/examples/fib.js +1 -1
  13. data/examples/java/JavaExamples.java +1 -1
  14. data/examples/ruby/clamps.rb +20 -0
  15. data/examples/ruby/graal.patch +15 -0
  16. data/examples/ruby/ruby_examples.rb +278 -0
  17. data/lib/seafoam.rb +5 -0
  18. data/lib/seafoam/annotators/graal.rb +1 -1
  19. data/lib/seafoam/cfg/cfg_parser.rb +93 -0
  20. data/lib/seafoam/cfg/disassembler.rb +70 -0
  21. data/lib/seafoam/commands.rb +185 -29
  22. data/lib/seafoam/graal/source.rb +23 -0
  23. data/lib/seafoam/isabelle_writer.rb +46 -0
  24. data/lib/seafoam/json_writer.rb +58 -0
  25. data/lib/seafoam/version.rb +1 -1
  26. data/seafoam.gemspec +2 -1
  27. data/spec/seafoam/annotators/graal_spec.rb +7 -7
  28. data/spec/seafoam/bgv/bgv_parser_spec.rb +2 -2
  29. data/spec/seafoam/cfg/cfg_parser_spec.rb +21 -0
  30. data/spec/seafoam/cfg/disassembler_spec.rb +32 -0
  31. data/spec/seafoam/command_spec.rb +78 -30
  32. data/spec/seafoam/json_writer_spec.rb +14 -0
  33. data/spec/seafoam/spec_helpers.rb +4 -0
  34. data/tools/render-all +2 -2
  35. metadata +36 -102
  36. data/.github/workflows/rubocop.yml +0 -10
  37. data/.github/workflows/specs.yml +0 -19
  38. data/examples/fib-java.bgv +0 -0
  39. data/examples/fib-js.bgv +0 -0
  40. data/examples/fib-ruby.bgv +0 -0
  41. data/examples/identity.bgv +0 -0
  42. data/examples/java/exampleArithOperator.bgv +0 -0
  43. data/examples/java/exampleArithOperator.cfg +0 -925
  44. data/examples/java/exampleArrayAllocation.bgv +0 -0
  45. data/examples/java/exampleArrayAllocation.cfg +0 -5268
  46. data/examples/java/exampleArrayRead.bgv +0 -0
  47. data/examples/java/exampleArrayRead.cfg +0 -2263
  48. data/examples/java/exampleArrayWrite.bgv +0 -0
  49. data/examples/java/exampleArrayWrite.cfg +0 -2315
  50. data/examples/java/exampleCatch.bgv +0 -0
  51. data/examples/java/exampleCatch.cfg +0 -4150
  52. data/examples/java/exampleCompareOperator.bgv +0 -0
  53. data/examples/java/exampleCompareOperator.cfg +0 -1109
  54. data/examples/java/exampleDoubleSynchronized.bgv +0 -0
  55. data/examples/java/exampleDoubleSynchronized.cfg +0 -26497
  56. data/examples/java/exampleExactArith.bgv +0 -0
  57. data/examples/java/exampleExactArith.cfg +0 -1888
  58. data/examples/java/exampleFieldRead.bgv +0 -0
  59. data/examples/java/exampleFieldRead.cfg +0 -1228
  60. data/examples/java/exampleFieldWrite.bgv +0 -0
  61. data/examples/java/exampleFieldWrite.cfg +0 -1102
  62. data/examples/java/exampleFor.bgv +0 -0
  63. data/examples/java/exampleFor.cfg +0 -3936
  64. data/examples/java/exampleFullEscape.bgv +0 -0
  65. data/examples/java/exampleFullEscape.cfg +0 -5893
  66. data/examples/java/exampleIf.bgv +0 -0
  67. data/examples/java/exampleIf.cfg +0 -2462
  68. data/examples/java/exampleIfNeverTaken.bgv +0 -0
  69. data/examples/java/exampleIfNeverTaken.cfg +0 -2476
  70. data/examples/java/exampleInstanceOfManyImpls.bgv +0 -0
  71. data/examples/java/exampleInstanceOfManyImpls.cfg +0 -6391
  72. data/examples/java/exampleInstanceOfOneImpl.bgv +0 -0
  73. data/examples/java/exampleInstanceOfOneImpl.cfg +0 -2604
  74. data/examples/java/exampleIntSwitch.bgv +0 -0
  75. data/examples/java/exampleIntSwitch.cfg +0 -3121
  76. data/examples/java/exampleInterfaceCallManyImpls.bgv +0 -0
  77. data/examples/java/exampleInterfaceCallManyImpls.cfg +0 -1358
  78. data/examples/java/exampleInterfaceCallOneImpl.bgv +0 -0
  79. data/examples/java/exampleInterfaceCallOneImpl.cfg +0 -3859
  80. data/examples/java/exampleLocalInstanceOf.bgv +0 -0
  81. data/examples/java/exampleLocalInstanceOf.cfg +0 -5276
  82. data/examples/java/exampleLocalSynchronized.bgv +0 -0
  83. data/examples/java/exampleLocalSynchronized.cfg +0 -1364
  84. data/examples/java/exampleLocalVariables.bgv +0 -0
  85. data/examples/java/exampleLocalVariables.cfg +0 -1195
  86. data/examples/java/exampleLocalVariablesState.bgv +0 -0
  87. data/examples/java/exampleLocalVariablesState.cfg +0 -1673
  88. data/examples/java/exampleNestedWhile.bgv +0 -0
  89. data/examples/java/exampleNestedWhile.cfg +0 -15499
  90. data/examples/java/exampleNestedWhileBreak.bgv +0 -0
  91. data/examples/java/exampleNestedWhileBreak.cfg +0 -11162
  92. data/examples/java/exampleNoEscape.bgv +0 -0
  93. data/examples/java/exampleNoEscape.cfg +0 -974
  94. data/examples/java/exampleObjectAllocation.bgv +0 -0
  95. data/examples/java/exampleObjectAllocation.cfg +0 -5287
  96. data/examples/java/examplePartialEscape.bgv +0 -0
  97. data/examples/java/examplePartialEscape.cfg +0 -7042
  98. data/examples/java/examplePhi.bgv +0 -0
  99. data/examples/java/examplePhi.cfg +0 -3227
  100. data/examples/java/exampleReducible.bgv +0 -0
  101. data/examples/java/exampleReducible.cfg +0 -5578
  102. data/examples/java/exampleSimpleCall.bgv +0 -0
  103. data/examples/java/exampleSimpleCall.cfg +0 -1435
  104. data/examples/java/exampleStamp.bgv +0 -0
  105. data/examples/java/exampleStamp.cfg +0 -913
  106. data/examples/java/exampleStaticCall.bgv +0 -0
  107. data/examples/java/exampleStaticCall.cfg +0 -1154
  108. data/examples/java/exampleStringSwitch.bgv +0 -0
  109. data/examples/java/exampleStringSwitch.cfg +0 -15377
  110. data/examples/java/exampleSynchronized.bgv +0 -0
  111. data/examples/java/exampleSynchronized.cfg +0 -26027
  112. data/examples/java/exampleThrow.bgv +0 -0
  113. data/examples/java/exampleThrow.cfg +0 -780
  114. data/examples/java/exampleThrowCatch.bgv +0 -0
  115. data/examples/java/exampleThrowCatch.cfg +0 -744
  116. data/examples/java/exampleUnsafeRead.bgv +0 -0
  117. data/examples/java/exampleUnsafeRead.cfg +0 -912
  118. data/examples/java/exampleUnsafeWrite.bgv +0 -0
  119. data/examples/java/exampleUnsafeWrite.cfg +0 -962
  120. data/examples/java/exampleWhile.bgv +0 -0
  121. data/examples/java/exampleWhile.cfg +0 -3936
  122. data/examples/java/exampleWhileBreak.bgv +0 -0
  123. data/examples/java/exampleWhileBreak.cfg +0 -5963
  124. data/examples/matmult-java.bgv +0 -0
  125. data/examples/matmult-ruby.bgv +0 -0
  126. data/examples/overflow.bgv +0 -0
  127. data/spec/seafoam/bgv/fixtures/not.bgv +0 -1
  128. data/spec/seafoam/bgv/fixtures/unsupported.bgv +0 -1
@@ -0,0 +1,21 @@
1
+ require 'seafoam'
2
+
3
+ require 'rspec'
4
+
5
+ require_relative '../spec_helpers'
6
+
7
+ describe Seafoam::CFG::CFGParser do
8
+ before :all do
9
+ @example_cfg = File.expand_path('../../../examples/java/exampleIf.cfg', __dir__)
10
+ end
11
+
12
+ it 'correctly parses information from an nmethod' do
13
+ parser = Seafoam::CFG::CFGParser.new($stdout, @example_cfg)
14
+ parser.skip_over_cfg 'After code installation'
15
+ nmethod = parser.read_nmethod
16
+ expect(nmethod.code.arch).to eq 'AMD64'
17
+ expect(nmethod.code.arch_width).to eq '64'
18
+ expect(nmethod.code.base).to eq 0x1183037a0
19
+ expect(nmethod.comments.size).to eq 25
20
+ end
21
+ end
@@ -0,0 +1,32 @@
1
+ require 'seafoam'
2
+
3
+ require 'rspec'
4
+
5
+ require_relative '../spec_helpers'
6
+
7
+ describe Seafoam::CFG::Disassembler do
8
+ if Seafoam::SpecHelpers.dependencies_installed?
9
+ it 'can start Capstone Disassembler disassemble an nmethod with and without comments' do
10
+ @example_cfg = File.expand_path('../../../examples/java/exampleIf.cfg', __dir__)
11
+ @file = File.open('tempfile_disassembler_spec.txt', 'w')
12
+ parser = Seafoam::CFG::CFGParser.new(@file, @example_cfg)
13
+ parser.skip_over_cfg 'After code installation'
14
+ @nmethod = parser.read_nmethod
15
+
16
+ disassembler = Seafoam::CFG::Disassembler.new(@file)
17
+ disassembler.disassemble(@nmethod, 0)
18
+ @file.close
19
+
20
+ expect(`wc -l 'tempfile_disassembler_spec.txt'`.to_i).to eq 46
21
+
22
+ @file = File.open('tempfile_disassembler_spec.txt', 'w')
23
+ disassembler = Seafoam::CFG::Disassembler.new(@file)
24
+ disassembler.disassemble(@nmethod, 2)
25
+ @file.close
26
+
27
+ expect(`wc -l 'tempfile_disassembler_spec.txt'`.to_i).to eq 46
28
+
29
+ File.delete(@file)
30
+ end
31
+ end
32
+ end
@@ -8,6 +8,7 @@ require 'rspec'
8
8
  describe Seafoam::Commands do
9
9
  before :all do
10
10
  @fib_java = File.expand_path('../../examples/fib-java.bgv', __dir__)
11
+ @fib_ruby = File.expand_path('../../examples/fib-ruby.bgv', __dir__)
11
12
  end
12
13
 
13
14
  before :each do
@@ -19,7 +20,7 @@ describe Seafoam::Commands do
19
20
  it 'prints format and version' do
20
21
  @commands.send :info, @fib_java
21
22
  lines = @out.string.lines.map(&:rstrip)
22
- expect(lines.first).to eq 'BGV 6.1'
23
+ expect(lines.first).to eq 'BGV 7.0'
23
24
  end
24
25
 
25
26
  it 'does not work on a graph' do
@@ -39,11 +40,11 @@ describe Seafoam::Commands do
39
40
  "#{@fib_java}:4 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.common.CanonicalizerPhase"
40
41
  ]
41
42
  expect(lines.drop(lines.length - 5)).to eq [
42
- "#{@fib_java}:46 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.common.PropagateDeoptimizeProbabilityPhase",
43
- "#{@fib_java}:47 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.common.InsertMembarsPhase",
44
- "#{@fib_java}:48 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.schedule.SchedulePhase",
45
- "#{@fib_java}:49 2:Fib.fib(int)/After phase org.graalvm.compiler.core.phases.LowTier",
46
- "#{@fib_java}:50 2:Fib.fib(int)/After low tier"
43
+ "#{@fib_java}:49 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.common.DeadCodeEliminationPhase",
44
+ "#{@fib_java}:50 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.common.PropagateDeoptimizeProbabilityPhase",
45
+ "#{@fib_java}:51 2:Fib.fib(int)/After phase org.graalvm.compiler.phases.schedule.SchedulePhase",
46
+ "#{@fib_java}:52 2:Fib.fib(int)/After phase org.graalvm.compiler.core.phases.LowTier",
47
+ "#{@fib_java}:53 2:Fib.fib(int)/After low tier"
47
48
  ]
48
49
  end
49
50
 
@@ -127,8 +128,8 @@ describe Seafoam::Commands do
127
128
 
128
129
  describe '#props' do
129
130
  it 'prints properties for a file' do
130
- @commands.send :props, @fib_java.to_s
131
- expect(@out.string.gsub(/\n\n/, "\n")).to eq "{\n}\n"
131
+ @commands.send :props, @fib_java
132
+ expect(@out.string.gsub(/\n\n/, "\n")).to eq "{\n \"vm.uuid\": \"28729\"\n}\n"
132
133
  end
133
134
 
134
135
  it 'prints properties for a graph' do
@@ -150,6 +151,28 @@ describe Seafoam::Commands do
150
151
  end
151
152
  end
152
153
 
154
+ describe '#source' do
155
+ it 'prints source information for a node' do
156
+ @commands.send :source, "#{@fib_ruby}:8:2443"
157
+ expect(@out.string).to eq <<~SOURCE
158
+ java.lang.Math#addExact
159
+ org.truffleruby.core.numeric.IntegerNodes$AddNode#add
160
+ org.truffleruby.core.numeric.IntegerNodesFactory$AddNodeFactory$AddNodeGen#executeAdd
161
+ org.truffleruby.core.inlined.InlinedAddNode#intAdd
162
+ org.truffleruby.core.inlined.InlinedAddNodeGen#execute
163
+ org.truffleruby.language.control.IfElseNode#execute
164
+ org.truffleruby.language.control.SequenceNode#execute
165
+ org.truffleruby.language.arguments.CheckArityNode#execute
166
+ org.truffleruby.language.control.SequenceNode#execute
167
+ org.truffleruby.language.methods.CatchForMethodNode#execute
168
+ org.truffleruby.language.methods.ExceptionTranslatingNode#execute
169
+ org.truffleruby.language.RubyRootNode#execute
170
+ org.graalvm.compiler.truffle.runtime.OptimizedCallTarget#executeRootNode
171
+ org.graalvm.compiler.truffle.runtime.OptimizedCallTarget#profiledPERoot
172
+ SOURCE
173
+ end
174
+ end
175
+
153
176
  describe '#render' do
154
177
  it 'does not work on a file' do
155
178
  expect { @commands.send :render, @fib_java }.to raise_error(ArgumentError)
@@ -161,32 +184,57 @@ describe Seafoam::Commands do
161
184
  end
162
185
  end
163
186
 
164
- it 'supports -o out.pdf' do
165
- @commands.send :render, "#{@fib_java}:0", '--out', 'out.pdf'
166
- expect(`file out.pdf`).to start_with 'out.pdf: PDF document'
167
- end
187
+ if Seafoam::SpecHelpers.dependencies_installed?
188
+ it 'supports -o out.pdf' do
189
+ @commands.send :render, "#{@fib_java}:0", '--out', 'out.pdf'
190
+ expect(`file out.pdf`).to start_with 'out.pdf: PDF document'
191
+ end
168
192
 
169
- it 'supports -o out.svg' do
170
- @commands.send :render, "#{@fib_java}:0", '--out', 'out.svg'
171
- expect(`file out.svg`).to start_with 'out.svg: SVG Scalable Vector Graphics image'
172
- end
193
+ it 'supports -o out.svg' do
194
+ @commands.send :render, "#{@fib_java}:0", '--out', 'out.svg'
195
+ expect(`file out.svg`).to start_with 'out.svg: SVG Scalable Vector Graphics image'
196
+ end
173
197
 
174
- it 'supports -o out.png' do
175
- @commands.send :render, "#{@fib_java}:0", '--out', 'out.png'
176
- expect(`file out.png`).to start_with 'out.png: PNG image data'
177
- end
198
+ it 'supports -o out.png' do
199
+ @commands.send :render, "#{@fib_java}:0", '--out', 'out.png'
200
+ expect(`file out.png`).to start_with 'out.png: PNG image data'
201
+ end
178
202
 
179
- it 'supports -o out.dot' do
180
- @commands.send :render, "#{@fib_java}:0", '--out', 'out.dot'
181
- expect(`file out.dot`).to start_with 'out.dot: ASCII text'
182
- end
203
+ it 'supports -o out.dot' do
204
+ @commands.send :render, "#{@fib_java}:0", '--out', 'out.dot'
205
+ expect(`file out.dot`).to start_with 'out.dot: ASCII text'
206
+ end
207
+
208
+ it 'supports spotlighting nodes' do
209
+ @commands.send :render, "#{@fib_java}:0", '--spotlight', '13'
210
+ end
183
211
 
184
- it 'supports spotlighting nodes' do
185
- @commands.send :render, "#{@fib_java}:0", '--spotlight', '13'
212
+ it 'does not work on a node' do
213
+ expect { @commands.send :render, "#{@fib_java}:0:13" }.to raise_error(ArgumentError)
214
+ end
215
+ else
216
+ it 'raises an exception if Graphviz is not installed' do
217
+ expect do
218
+ @commands.send :render, "#{@fib_java}:0", '--out', 'out.pdf'
219
+ end.to raise_error(RuntimeError, /Could not run Graphviz - is it installed?/)
220
+ end
186
221
  end
222
+ end
187
223
 
188
- it 'does not work on a node' do
189
- expect { @commands.send :render, "#{@fib_java}:0:13" }.to raise_error(ArgumentError)
224
+ describe '#cfg2asm' do
225
+ if Seafoam::SpecHelpers.dependencies_installed?
226
+ it 'prints format and version' do
227
+ @commands.cfg2asm(File.expand_path('../../examples/java/exampleWhile.cfg', __dir__), '--no-comments')
228
+ lines = @out.string.lines.map(&:rstrip)
229
+ expect(lines[1]).to include "0x117df59e0:\tnop dword ptr [rax + rax]"
230
+ expect(lines[-1]).to include "0x117df5a47:\thlt"
231
+ end
232
+ else
233
+ it 'raises an exception if Capstone is not installed' do
234
+ expect do
235
+ @commands.cfg2asm(File.expand_path('../../examples/java/exampleWhile.cfg', __dir__), '--no-comments')
236
+ end.to raise_error(RuntimeError, /Could not load Capstone - is it installed?/)
237
+ end
190
238
  end
191
239
  end
192
240
 
@@ -198,13 +246,13 @@ describe Seafoam::Commands do
198
246
 
199
247
  describe '#help' do
200
248
  it 'does not take any arguments' do
201
- expect { @commands.send :help, 'foo' }.to raise_error(ArgumentError)
249
+ expect { @commands.send :seafoam, '--help', 'foo' }.to raise_error(ArgumentError)
202
250
  end
203
251
  end
204
252
 
205
253
  describe '#version' do
206
254
  it 'does not take any arguments' do
207
- expect { @commands.send :help, 'foo' }.to raise_error(ArgumentError)
255
+ expect { @commands.send :version, 'foo' }.to raise_error(ArgumentError)
208
256
  end
209
257
  end
210
258
 
@@ -0,0 +1,14 @@
1
+ require 'seafoam'
2
+
3
+ require 'rspec'
4
+
5
+ require_relative 'spec_helpers'
6
+
7
+ describe Seafoam::JSONWriter do
8
+ describe '#prepare_json' do
9
+ it 'transforms a NaN to the string [NaN]' do
10
+ writer = Seafoam::JSONWriter.new(nil)
11
+ expect(writer.send(:prepare_json, { a: 1.0, b: Float::NAN, c: 2.0 })).to eq({ a: 1.0, b: '[NaN]', c: 2.0 })
12
+ end
13
+ end
14
+ end
@@ -26,5 +26,9 @@ module Seafoam
26
26
  end
27
27
  end
28
28
  end
29
+
30
+ def self.dependencies_installed?
31
+ ENV['NO_DEPENDENCIES_INSTALLED'].nil?
32
+ end
29
33
  end
30
34
  end
data/tools/render-all CHANGED
@@ -30,7 +30,7 @@ Dir.glob(File.expand_path('../examples/java/*.bgv', __dir__)).each do |bgv|
30
30
  extra_options.push '--show-frame-state'
31
31
  end
32
32
  phases.each do |phase|
33
- commands.run "#{bgv}:#{phase}", 'render', *extra_options, '--out', File.expand_path("../#{basename}@#{phase}.png", __dir__)
34
- commands.run "#{bgv}:#{phase}", 'render', *extra_options, '--out', File.expand_path("../#{basename}@#{phase}.svg", __dir__)
33
+ commands.seafoam "#{bgv}:#{phase}", 'render', *extra_options, '--out', File.expand_path("../#{basename}@#{phase}.png", __dir__)
34
+ commands.seafoam "#{bgv}:#{phase}", 'render', *extra_options, '--out', File.expand_path("../#{basename}@#{phase}.svg", __dir__)
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seafoam
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Seaton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-10 00:00:00.000000000 Z
11
+ date: 2021-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: crabstone
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,8 +66,8 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0.74'
55
- description:
56
- email:
69
+ description:
70
+ email:
57
71
  executables:
58
72
  - seafoam
59
73
  - bgv2json
@@ -62,8 +76,7 @@ extensions: []
62
76
  extra_rdoc_files: []
63
77
  files:
64
78
  - ".github/probots.yml"
65
- - ".github/workflows/rubocop.yml"
66
- - ".github/workflows/specs.yml"
79
+ - ".github/workflows/workflows.yml"
67
80
  - ".gitignore"
68
81
  - ".rubocop.yml"
69
82
  - ".ruby-version"
@@ -75,7 +88,9 @@ files:
75
88
  - README.md
76
89
  - bin/bgv2isabelle
77
90
  - bin/bgv2json
91
+ - bin/cfg2asm
78
92
  - bin/seafoam
93
+ - demos/box-unbox-stats
79
94
  - docs/annotators.md
80
95
  - docs/bgv.md
81
96
  - docs/getting-graphs.md
@@ -86,116 +101,35 @@ files:
86
101
  - docs/json.md
87
102
  - examples/Fib.java
88
103
  - examples/MatMult.java
89
- - examples/fib-java.bgv
90
104
  - examples/fib-java.bgv.gz
91
- - examples/fib-js.bgv
92
- - examples/fib-ruby.bgv
93
105
  - examples/fib.js
94
106
  - examples/fib.rb
95
- - examples/identity.bgv
96
107
  - examples/identity.rb
97
108
  - examples/java/Irreducible.class
98
109
  - examples/java/Irreducible.j
99
110
  - examples/java/IrreducibleDecompiled.java
100
111
  - examples/java/JavaExamples.java
101
- - examples/java/exampleArithOperator.bgv
102
- - examples/java/exampleArithOperator.cfg
103
- - examples/java/exampleArrayAllocation.bgv
104
- - examples/java/exampleArrayAllocation.cfg
105
- - examples/java/exampleArrayRead.bgv
106
- - examples/java/exampleArrayRead.cfg
107
- - examples/java/exampleArrayWrite.bgv
108
- - examples/java/exampleArrayWrite.cfg
109
- - examples/java/exampleCatch.bgv
110
- - examples/java/exampleCatch.cfg
111
- - examples/java/exampleCompareOperator.bgv
112
- - examples/java/exampleCompareOperator.cfg
113
- - examples/java/exampleDoubleSynchronized.bgv
114
- - examples/java/exampleDoubleSynchronized.cfg
115
- - examples/java/exampleExactArith.bgv
116
- - examples/java/exampleExactArith.cfg
117
- - examples/java/exampleFieldRead.bgv
118
- - examples/java/exampleFieldRead.cfg
119
- - examples/java/exampleFieldWrite.bgv
120
- - examples/java/exampleFieldWrite.cfg
121
- - examples/java/exampleFor.bgv
122
- - examples/java/exampleFor.cfg
123
- - examples/java/exampleFullEscape.bgv
124
- - examples/java/exampleFullEscape.cfg
125
- - examples/java/exampleIf.bgv
126
- - examples/java/exampleIf.cfg
127
- - examples/java/exampleIfNeverTaken.bgv
128
- - examples/java/exampleIfNeverTaken.cfg
129
- - examples/java/exampleInstanceOfManyImpls.bgv
130
- - examples/java/exampleInstanceOfManyImpls.cfg
131
- - examples/java/exampleInstanceOfOneImpl.bgv
132
- - examples/java/exampleInstanceOfOneImpl.cfg
133
- - examples/java/exampleIntSwitch.bgv
134
- - examples/java/exampleIntSwitch.cfg
135
- - examples/java/exampleInterfaceCallManyImpls.bgv
136
- - examples/java/exampleInterfaceCallManyImpls.cfg
137
- - examples/java/exampleInterfaceCallOneImpl.bgv
138
- - examples/java/exampleInterfaceCallOneImpl.cfg
139
- - examples/java/exampleLocalInstanceOf.bgv
140
- - examples/java/exampleLocalInstanceOf.cfg
141
- - examples/java/exampleLocalSynchronized.bgv
142
- - examples/java/exampleLocalSynchronized.cfg
143
- - examples/java/exampleLocalVariables.bgv
144
- - examples/java/exampleLocalVariables.cfg
145
- - examples/java/exampleLocalVariablesState.bgv
146
- - examples/java/exampleLocalVariablesState.cfg
147
- - examples/java/exampleNestedWhile.bgv
148
- - examples/java/exampleNestedWhile.cfg
149
- - examples/java/exampleNestedWhileBreak.bgv
150
- - examples/java/exampleNestedWhileBreak.cfg
151
- - examples/java/exampleNoEscape.bgv
152
- - examples/java/exampleNoEscape.cfg
153
- - examples/java/exampleObjectAllocation.bgv
154
- - examples/java/exampleObjectAllocation.cfg
155
- - examples/java/examplePartialEscape.bgv
156
- - examples/java/examplePartialEscape.cfg
157
- - examples/java/examplePhi.bgv
158
- - examples/java/examplePhi.cfg
159
- - examples/java/exampleReducible.bgv
160
- - examples/java/exampleReducible.cfg
161
- - examples/java/exampleSimpleCall.bgv
162
- - examples/java/exampleSimpleCall.cfg
163
- - examples/java/exampleStamp.bgv
164
- - examples/java/exampleStamp.cfg
165
- - examples/java/exampleStaticCall.bgv
166
- - examples/java/exampleStaticCall.cfg
167
- - examples/java/exampleStringSwitch.bgv
168
- - examples/java/exampleStringSwitch.cfg
169
- - examples/java/exampleSynchronized.bgv
170
- - examples/java/exampleSynchronized.cfg
171
- - examples/java/exampleThrow.bgv
172
- - examples/java/exampleThrow.cfg
173
- - examples/java/exampleThrowCatch.bgv
174
- - examples/java/exampleThrowCatch.cfg
175
- - examples/java/exampleUnsafeRead.bgv
176
- - examples/java/exampleUnsafeRead.cfg
177
- - examples/java/exampleUnsafeWrite.bgv
178
- - examples/java/exampleUnsafeWrite.cfg
179
- - examples/java/exampleWhile.bgv
180
- - examples/java/exampleWhile.cfg
181
- - examples/java/exampleWhileBreak.bgv
182
- - examples/java/exampleWhileBreak.cfg
183
- - examples/matmult-java.bgv
184
- - examples/matmult-ruby.bgv
185
112
  - examples/matmult.rb
186
- - examples/overflow.bgv
187
113
  - examples/overflow.rb
114
+ - examples/ruby/clamps.rb
115
+ - examples/ruby/graal.patch
116
+ - examples/ruby/ruby_examples.rb
188
117
  - lib/seafoam.rb
189
118
  - lib/seafoam/annotators.rb
190
119
  - lib/seafoam/annotators/fallback.rb
191
120
  - lib/seafoam/annotators/graal.rb
192
121
  - lib/seafoam/bgv/bgv_parser.rb
193
122
  - lib/seafoam/binary/io_binary_reader.rb
123
+ - lib/seafoam/cfg/cfg_parser.rb
124
+ - lib/seafoam/cfg/disassembler.rb
194
125
  - lib/seafoam/colors.rb
195
126
  - lib/seafoam/commands.rb
196
127
  - lib/seafoam/config.rb
128
+ - lib/seafoam/graal/source.rb
197
129
  - lib/seafoam/graph.rb
198
130
  - lib/seafoam/graphviz_writer.rb
131
+ - lib/seafoam/isabelle_writer.rb
132
+ - lib/seafoam/json_writer.rb
199
133
  - lib/seafoam/spotlight.rb
200
134
  - lib/seafoam/version.rb
201
135
  - seafoam.gemspec
@@ -203,12 +137,13 @@ files:
203
137
  - spec/seafoam/annotators/graal_spec.rb
204
138
  - spec/seafoam/annotators_spec.rb
205
139
  - spec/seafoam/bgv/bgv_parser_spec.rb
206
- - spec/seafoam/bgv/fixtures/not.bgv
207
- - spec/seafoam/bgv/fixtures/unsupported.bgv
208
140
  - spec/seafoam/binary/io_binary_reader_spec.rb
141
+ - spec/seafoam/cfg/cfg_parser_spec.rb
142
+ - spec/seafoam/cfg/disassembler_spec.rb
209
143
  - spec/seafoam/command_spec.rb
210
144
  - spec/seafoam/graph_spec.rb
211
145
  - spec/seafoam/graphviz_writer_spec.rb
146
+ - spec/seafoam/json_writer_spec.rb
212
147
  - spec/seafoam/spec_helpers.rb
213
148
  - spec/seafoam/spotlight_spec.rb
214
149
  - tools/render-all
@@ -216,7 +151,7 @@ homepage: https://github.com/Shopify/seafoam
216
151
  licenses:
217
152
  - MIT
218
153
  metadata: {}
219
- post_install_message:
154
+ post_install_message:
220
155
  rdoc_options: []
221
156
  require_paths:
222
157
  - lib
@@ -231,9 +166,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
166
  - !ruby/object:Gem::Version
232
167
  version: '0'
233
168
  requirements: []
234
- rubyforge_project:
235
- rubygems_version: 2.7.6.2
236
- signing_key:
169
+ rubygems_version: 3.0.3
170
+ signing_key:
237
171
  specification_version: 4
238
172
  summary: A tool for working with compiler graphs
239
173
  test_files: []