seafoam 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/.github/probots.yml +2 -0
  3. data/.github/workflows/rubocop.yml +10 -0
  4. data/.github/workflows/specs.yml +19 -0
  5. data/.gitignore +7 -0
  6. data/.rubocop.yml +34 -0
  7. data/.ruby-version +1 -0
  8. data/.seafoam/config +1 -0
  9. data/CODE_OF_CONDUCT.md +128 -0
  10. data/CONTRIBUTING.md +5 -0
  11. data/Gemfile +2 -0
  12. data/LICENSE.md +7 -0
  13. data/README.md +298 -0
  14. data/bin/bgv2isabelle +53 -0
  15. data/bin/bgv2json +42 -0
  16. data/bin/seafoam +24 -0
  17. data/docs/annotators.md +43 -0
  18. data/docs/bgv.md +284 -0
  19. data/docs/getting-graphs.md +47 -0
  20. data/examples/Fib.java +24 -0
  21. data/examples/MatMult.java +39 -0
  22. data/examples/fib-java.bgv +0 -0
  23. data/examples/fib-js.bgv +0 -0
  24. data/examples/fib-ruby.bgv +0 -0
  25. data/examples/fib.js +15 -0
  26. data/examples/fib.rb +15 -0
  27. data/examples/identity.bgv +0 -0
  28. data/examples/identity.rb +13 -0
  29. data/examples/java/Irreducible.j +35 -0
  30. data/examples/java/IrreducibleDecompiled.java +21 -0
  31. data/examples/java/JavaExamples.java +418 -0
  32. data/examples/java/exampleArithOperator.bgv +0 -0
  33. data/examples/java/exampleArithOperator.cfg +925 -0
  34. data/examples/java/exampleArrayAllocation.bgv +0 -0
  35. data/examples/java/exampleArrayAllocation.cfg +5268 -0
  36. data/examples/java/exampleArrayRead.bgv +0 -0
  37. data/examples/java/exampleArrayRead.cfg +2263 -0
  38. data/examples/java/exampleArrayWrite.bgv +0 -0
  39. data/examples/java/exampleArrayWrite.cfg +2315 -0
  40. data/examples/java/exampleCatch.bgv +0 -0
  41. data/examples/java/exampleCatch.cfg +4150 -0
  42. data/examples/java/exampleCompareOperator.bgv +0 -0
  43. data/examples/java/exampleCompareOperator.cfg +1109 -0
  44. data/examples/java/exampleDoubleSynchronized.bgv +0 -0
  45. data/examples/java/exampleDoubleSynchronized.cfg +26497 -0
  46. data/examples/java/exampleExactArith.bgv +0 -0
  47. data/examples/java/exampleExactArith.cfg +1888 -0
  48. data/examples/java/exampleFieldRead.bgv +0 -0
  49. data/examples/java/exampleFieldRead.cfg +1228 -0
  50. data/examples/java/exampleFieldWrite.bgv +0 -0
  51. data/examples/java/exampleFieldWrite.cfg +1102 -0
  52. data/examples/java/exampleFor.bgv +0 -0
  53. data/examples/java/exampleFor.cfg +3936 -0
  54. data/examples/java/exampleFullEscape.bgv +0 -0
  55. data/examples/java/exampleFullEscape.cfg +5893 -0
  56. data/examples/java/exampleIf.bgv +0 -0
  57. data/examples/java/exampleIf.cfg +2462 -0
  58. data/examples/java/exampleIfNeverTaken.bgv +0 -0
  59. data/examples/java/exampleIfNeverTaken.cfg +2476 -0
  60. data/examples/java/exampleInstanceOfManyImpls.bgv +0 -0
  61. data/examples/java/exampleInstanceOfManyImpls.cfg +6391 -0
  62. data/examples/java/exampleInstanceOfOneImpl.bgv +0 -0
  63. data/examples/java/exampleInstanceOfOneImpl.cfg +2604 -0
  64. data/examples/java/exampleIntSwitch.bgv +0 -0
  65. data/examples/java/exampleIntSwitch.cfg +3121 -0
  66. data/examples/java/exampleInterfaceCallManyImpls.bgv +0 -0
  67. data/examples/java/exampleInterfaceCallManyImpls.cfg +1358 -0
  68. data/examples/java/exampleInterfaceCallOneImpl.bgv +0 -0
  69. data/examples/java/exampleInterfaceCallOneImpl.cfg +3859 -0
  70. data/examples/java/exampleLocalInstanceOf.bgv +0 -0
  71. data/examples/java/exampleLocalInstanceOf.cfg +5276 -0
  72. data/examples/java/exampleLocalSynchronized.bgv +0 -0
  73. data/examples/java/exampleLocalSynchronized.cfg +1364 -0
  74. data/examples/java/exampleLocalVariables.bgv +0 -0
  75. data/examples/java/exampleLocalVariables.cfg +1195 -0
  76. data/examples/java/exampleLocalVariablesState.bgv +0 -0
  77. data/examples/java/exampleLocalVariablesState.cfg +1673 -0
  78. data/examples/java/exampleNestedWhile.bgv +0 -0
  79. data/examples/java/exampleNestedWhile.cfg +15499 -0
  80. data/examples/java/exampleNestedWhileBreak.bgv +0 -0
  81. data/examples/java/exampleNestedWhileBreak.cfg +11162 -0
  82. data/examples/java/exampleNoEscape.bgv +0 -0
  83. data/examples/java/exampleNoEscape.cfg +974 -0
  84. data/examples/java/exampleObjectAllocation.bgv +0 -0
  85. data/examples/java/exampleObjectAllocation.cfg +5287 -0
  86. data/examples/java/examplePartialEscape.bgv +0 -0
  87. data/examples/java/examplePartialEscape.cfg +7042 -0
  88. data/examples/java/examplePhi.bgv +0 -0
  89. data/examples/java/examplePhi.cfg +3227 -0
  90. data/examples/java/exampleReducible.bgv +0 -0
  91. data/examples/java/exampleReducible.cfg +5578 -0
  92. data/examples/java/exampleSimpleCall.bgv +0 -0
  93. data/examples/java/exampleSimpleCall.cfg +1435 -0
  94. data/examples/java/exampleStamp.bgv +0 -0
  95. data/examples/java/exampleStamp.cfg +913 -0
  96. data/examples/java/exampleStaticCall.bgv +0 -0
  97. data/examples/java/exampleStaticCall.cfg +1154 -0
  98. data/examples/java/exampleStringSwitch.bgv +0 -0
  99. data/examples/java/exampleStringSwitch.cfg +15377 -0
  100. data/examples/java/exampleSynchronized.bgv +0 -0
  101. data/examples/java/exampleSynchronized.cfg +26027 -0
  102. data/examples/java/exampleThrow.bgv +0 -0
  103. data/examples/java/exampleThrow.cfg +780 -0
  104. data/examples/java/exampleThrowCatch.bgv +0 -0
  105. data/examples/java/exampleThrowCatch.cfg +744 -0
  106. data/examples/java/exampleUnsafeRead.bgv +0 -0
  107. data/examples/java/exampleUnsafeRead.cfg +912 -0
  108. data/examples/java/exampleUnsafeWrite.bgv +0 -0
  109. data/examples/java/exampleUnsafeWrite.cfg +962 -0
  110. data/examples/java/exampleWhile.bgv +0 -0
  111. data/examples/java/exampleWhile.cfg +3936 -0
  112. data/examples/java/exampleWhileBreak.bgv +0 -0
  113. data/examples/java/exampleWhileBreak.cfg +5963 -0
  114. data/examples/matmult-java.bgv +0 -0
  115. data/examples/matmult-ruby.bgv +0 -0
  116. data/examples/matmult.rb +29 -0
  117. data/examples/overflow.bgv +0 -0
  118. data/examples/overflow.rb +13 -0
  119. data/lib/seafoam.rb +13 -0
  120. data/lib/seafoam/annotators.rb +54 -0
  121. data/lib/seafoam/annotators/fallback.rb +27 -0
  122. data/lib/seafoam/annotators/graal.rb +376 -0
  123. data/lib/seafoam/bgv/bgv_parser.rb +602 -0
  124. data/lib/seafoam/binary/binary_reader.rb +21 -0
  125. data/lib/seafoam/binary/io_binary_reader.rb +88 -0
  126. data/lib/seafoam/colors.rb +18 -0
  127. data/lib/seafoam/commands.rb +447 -0
  128. data/lib/seafoam/config.rb +34 -0
  129. data/lib/seafoam/graph.rb +91 -0
  130. data/lib/seafoam/graphviz_writer.rb +213 -0
  131. data/lib/seafoam/spotlight.rb +28 -0
  132. data/lib/seafoam/version.rb +5 -0
  133. data/seafoam.gemspec +20 -0
  134. data/spec/seafoam/annotators/fallback_spec.rb +69 -0
  135. data/spec/seafoam/annotators/graal_spec.rb +96 -0
  136. data/spec/seafoam/annotators_spec.rb +61 -0
  137. data/spec/seafoam/bgv/bgv_parser_spec.rb +144 -0
  138. data/spec/seafoam/bgv/fixtures/not.bgv +1 -0
  139. data/spec/seafoam/bgv/fixtures/unsupported.bgv +1 -0
  140. data/spec/seafoam/binary/io_binary_reader_spec.rb +176 -0
  141. data/spec/seafoam/command_spec.rb +252 -0
  142. data/spec/seafoam/graph_spec.rb +172 -0
  143. data/spec/seafoam/graphviz_writer_spec.rb +63 -0
  144. data/spec/seafoam/spec_helpers.rb +30 -0
  145. data/spec/seafoam/spotlight_spec.rb +38 -0
  146. data/tools/render-all +36 -0
  147. metadata +238 -0
@@ -0,0 +1,30 @@
1
+ module Seafoam
2
+ module SpecHelpers
3
+ SAMPLE_BGV = [
4
+ 'fib-java.bgv',
5
+ 'fib-js.bgv',
6
+ 'fib-ruby.bgv',
7
+ 'matmult-java.bgv',
8
+ 'matmult-ruby.bgv'
9
+ ].map { |f| File.expand_path("../../examples/#{f}", __dir__) }
10
+
11
+ def self.example_graph(file, graph_index)
12
+ file = File.expand_path("../../examples/#{file}.bgv", __dir__)
13
+ parser = Seafoam::BGV::BGVParser.new(File.new(file))
14
+ parser.read_file_header
15
+ parser.skip_document_props
16
+ loop do
17
+ index, = parser.read_graph_preheader
18
+ raise unless index
19
+
20
+ if index == graph_index
21
+ parser.read_graph_header
22
+ break parser.read_graph
23
+ else
24
+ parser.skip_graph_header
25
+ parser.skip_graph
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ require 'seafoam'
2
+
3
+ require 'rspec'
4
+
5
+ describe Seafoam::Spotlight do
6
+ before :each do
7
+ file = File.expand_path('../../examples/fib-java.bgv', __dir__)
8
+ parser = Seafoam::BGV::BGVParser.new(File.new(file))
9
+ parser.read_file_header
10
+ parser.skip_document_props
11
+ parser.read_graph_preheader
12
+ parser.read_graph_header
13
+ @graph = parser.read_graph
14
+ end
15
+
16
+ it 'marks individual nodes as lit' do
17
+ spotlight = Seafoam::Spotlight.new(@graph)
18
+ spotlight.light @graph.nodes[13]
19
+ expect(@graph.nodes[13].props[:spotlight]).to eq 'lit'
20
+ end
21
+
22
+ it 'marks surrounding nodes as shaded' do
23
+ spotlight = Seafoam::Spotlight.new(@graph)
24
+ spotlight.light @graph.nodes[13]
25
+ expect(@graph.nodes.values
26
+ .select { |n| n.props[:spotlight] == 'shaded' }
27
+ .map(&:id).sort).to eq [6, 12, 14, 18, 19, 20]
28
+ end
29
+
30
+ it 'marks other nodes as hidden' do
31
+ spotlight = Seafoam::Spotlight.new(@graph)
32
+ spotlight.light @graph.nodes[13]
33
+ spotlight.shade
34
+ expect(@graph.nodes.values
35
+ .select { |n| n.props[:hidden] }
36
+ .map(&:id).sort).to eq [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 15, 16, 17, 21]
37
+ end
38
+ end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.push File.expand_path('../lib', __dir__)
4
+ require 'seafoam'
5
+
6
+ config = Seafoam::Config.new
7
+ commands = Seafoam::Commands.new($stdout, config)
8
+
9
+ extra = {
10
+ 'exampleArrayRead' => [42],
11
+ 'exampleDoubleSynchronized' => [48, 49],
12
+ 'exampleFieldRead' => [42],
13
+ 'exampleFullEscape' => [33],
14
+ 'exampleInstanceOfManyImpls' => [65],
15
+ 'exampleInstanceOfOneImpl' => [65],
16
+ 'exampleInterfaceCallOneImpl' => [9],
17
+ 'exampleInterfaceCallManyImpls' => [9],
18
+ 'exampleLocalSynchronized' => [33],
19
+ 'exampleNoEscape' => [33],
20
+ 'examplePartialEscape' => [33],
21
+ 'exampleUnsafeRead' => [42]
22
+ }
23
+
24
+ Dir.glob(File.expand_path('../examples/java/*.bgv', __dir__)).each do |bgv|
25
+ basename = File.basename(bgv, '.bgv')
26
+ phases = [6]
27
+ phases.push(*(extra[basename] || []))
28
+ extra_options = []
29
+ if basename == 'exampleLocalVariablesState'
30
+ extra_options.push '--show-frame-state'
31
+ end
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__)
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,238 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seafoam
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.2'
5
+ platform: ruby
6
+ authors:
7
+ - Chris Seaton
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: benchmark-ips
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.74'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.74'
55
+ description:
56
+ email:
57
+ executables:
58
+ - seafoam
59
+ - bgv2json
60
+ - bgv2isabelle
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".github/probots.yml"
65
+ - ".github/workflows/rubocop.yml"
66
+ - ".github/workflows/specs.yml"
67
+ - ".gitignore"
68
+ - ".rubocop.yml"
69
+ - ".ruby-version"
70
+ - ".seafoam/config"
71
+ - CODE_OF_CONDUCT.md
72
+ - CONTRIBUTING.md
73
+ - Gemfile
74
+ - LICENSE.md
75
+ - README.md
76
+ - bin/bgv2isabelle
77
+ - bin/bgv2json
78
+ - bin/seafoam
79
+ - docs/annotators.md
80
+ - docs/bgv.md
81
+ - docs/getting-graphs.md
82
+ - docs/images/igv.png
83
+ - docs/images/seafoam.png
84
+ - docs/images/spotlight-igv.png
85
+ - docs/images/spotlight-seafoam.png
86
+ - examples/Fib.java
87
+ - examples/MatMult.java
88
+ - examples/fib-java.bgv
89
+ - examples/fib-js.bgv
90
+ - examples/fib-ruby.bgv
91
+ - examples/fib.js
92
+ - examples/fib.rb
93
+ - examples/identity.bgv
94
+ - examples/identity.rb
95
+ - examples/java/Irreducible.class
96
+ - examples/java/Irreducible.j
97
+ - examples/java/IrreducibleDecompiled.java
98
+ - examples/java/JavaExamples.java
99
+ - examples/java/exampleArithOperator.bgv
100
+ - examples/java/exampleArithOperator.cfg
101
+ - examples/java/exampleArrayAllocation.bgv
102
+ - examples/java/exampleArrayAllocation.cfg
103
+ - examples/java/exampleArrayRead.bgv
104
+ - examples/java/exampleArrayRead.cfg
105
+ - examples/java/exampleArrayWrite.bgv
106
+ - examples/java/exampleArrayWrite.cfg
107
+ - examples/java/exampleCatch.bgv
108
+ - examples/java/exampleCatch.cfg
109
+ - examples/java/exampleCompareOperator.bgv
110
+ - examples/java/exampleCompareOperator.cfg
111
+ - examples/java/exampleDoubleSynchronized.bgv
112
+ - examples/java/exampleDoubleSynchronized.cfg
113
+ - examples/java/exampleExactArith.bgv
114
+ - examples/java/exampleExactArith.cfg
115
+ - examples/java/exampleFieldRead.bgv
116
+ - examples/java/exampleFieldRead.cfg
117
+ - examples/java/exampleFieldWrite.bgv
118
+ - examples/java/exampleFieldWrite.cfg
119
+ - examples/java/exampleFor.bgv
120
+ - examples/java/exampleFor.cfg
121
+ - examples/java/exampleFullEscape.bgv
122
+ - examples/java/exampleFullEscape.cfg
123
+ - examples/java/exampleIf.bgv
124
+ - examples/java/exampleIf.cfg
125
+ - examples/java/exampleIfNeverTaken.bgv
126
+ - examples/java/exampleIfNeverTaken.cfg
127
+ - examples/java/exampleInstanceOfManyImpls.bgv
128
+ - examples/java/exampleInstanceOfManyImpls.cfg
129
+ - examples/java/exampleInstanceOfOneImpl.bgv
130
+ - examples/java/exampleInstanceOfOneImpl.cfg
131
+ - examples/java/exampleIntSwitch.bgv
132
+ - examples/java/exampleIntSwitch.cfg
133
+ - examples/java/exampleInterfaceCallManyImpls.bgv
134
+ - examples/java/exampleInterfaceCallManyImpls.cfg
135
+ - examples/java/exampleInterfaceCallOneImpl.bgv
136
+ - examples/java/exampleInterfaceCallOneImpl.cfg
137
+ - examples/java/exampleLocalInstanceOf.bgv
138
+ - examples/java/exampleLocalInstanceOf.cfg
139
+ - examples/java/exampleLocalSynchronized.bgv
140
+ - examples/java/exampleLocalSynchronized.cfg
141
+ - examples/java/exampleLocalVariables.bgv
142
+ - examples/java/exampleLocalVariables.cfg
143
+ - examples/java/exampleLocalVariablesState.bgv
144
+ - examples/java/exampleLocalVariablesState.cfg
145
+ - examples/java/exampleNestedWhile.bgv
146
+ - examples/java/exampleNestedWhile.cfg
147
+ - examples/java/exampleNestedWhileBreak.bgv
148
+ - examples/java/exampleNestedWhileBreak.cfg
149
+ - examples/java/exampleNoEscape.bgv
150
+ - examples/java/exampleNoEscape.cfg
151
+ - examples/java/exampleObjectAllocation.bgv
152
+ - examples/java/exampleObjectAllocation.cfg
153
+ - examples/java/examplePartialEscape.bgv
154
+ - examples/java/examplePartialEscape.cfg
155
+ - examples/java/examplePhi.bgv
156
+ - examples/java/examplePhi.cfg
157
+ - examples/java/exampleReducible.bgv
158
+ - examples/java/exampleReducible.cfg
159
+ - examples/java/exampleSimpleCall.bgv
160
+ - examples/java/exampleSimpleCall.cfg
161
+ - examples/java/exampleStamp.bgv
162
+ - examples/java/exampleStamp.cfg
163
+ - examples/java/exampleStaticCall.bgv
164
+ - examples/java/exampleStaticCall.cfg
165
+ - examples/java/exampleStringSwitch.bgv
166
+ - examples/java/exampleStringSwitch.cfg
167
+ - examples/java/exampleSynchronized.bgv
168
+ - examples/java/exampleSynchronized.cfg
169
+ - examples/java/exampleThrow.bgv
170
+ - examples/java/exampleThrow.cfg
171
+ - examples/java/exampleThrowCatch.bgv
172
+ - examples/java/exampleThrowCatch.cfg
173
+ - examples/java/exampleUnsafeRead.bgv
174
+ - examples/java/exampleUnsafeRead.cfg
175
+ - examples/java/exampleUnsafeWrite.bgv
176
+ - examples/java/exampleUnsafeWrite.cfg
177
+ - examples/java/exampleWhile.bgv
178
+ - examples/java/exampleWhile.cfg
179
+ - examples/java/exampleWhileBreak.bgv
180
+ - examples/java/exampleWhileBreak.cfg
181
+ - examples/matmult-java.bgv
182
+ - examples/matmult-ruby.bgv
183
+ - examples/matmult.rb
184
+ - examples/overflow.bgv
185
+ - examples/overflow.rb
186
+ - lib/seafoam.rb
187
+ - lib/seafoam/annotators.rb
188
+ - lib/seafoam/annotators/fallback.rb
189
+ - lib/seafoam/annotators/graal.rb
190
+ - lib/seafoam/bgv/bgv_parser.rb
191
+ - lib/seafoam/binary/binary_reader.rb
192
+ - lib/seafoam/binary/io_binary_reader.rb
193
+ - lib/seafoam/colors.rb
194
+ - lib/seafoam/commands.rb
195
+ - lib/seafoam/config.rb
196
+ - lib/seafoam/graph.rb
197
+ - lib/seafoam/graphviz_writer.rb
198
+ - lib/seafoam/spotlight.rb
199
+ - lib/seafoam/version.rb
200
+ - seafoam.gemspec
201
+ - spec/seafoam/annotators/fallback_spec.rb
202
+ - spec/seafoam/annotators/graal_spec.rb
203
+ - spec/seafoam/annotators_spec.rb
204
+ - spec/seafoam/bgv/bgv_parser_spec.rb
205
+ - spec/seafoam/bgv/fixtures/not.bgv
206
+ - spec/seafoam/bgv/fixtures/unsupported.bgv
207
+ - spec/seafoam/binary/io_binary_reader_spec.rb
208
+ - spec/seafoam/command_spec.rb
209
+ - spec/seafoam/graph_spec.rb
210
+ - spec/seafoam/graphviz_writer_spec.rb
211
+ - spec/seafoam/spec_helpers.rb
212
+ - spec/seafoam/spotlight_spec.rb
213
+ - tools/render-all
214
+ homepage: https://github.com/Shopify/seafoam
215
+ licenses:
216
+ - MIT
217
+ metadata: {}
218
+ post_install_message:
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: 2.5.8
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubyforge_project:
234
+ rubygems_version: 2.7.6.2
235
+ signing_key:
236
+ specification_version: 4
237
+ summary: A tool for working with compiler graphs
238
+ test_files: []