seafoam 0.9 → 0.10
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.
- checksums.yaml +4 -4
 - data/lib/seafoam/commands.rb +54 -0
 - data/lib/seafoam/passes/graal.rb +0 -2
 - data/lib/seafoam/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: f8665fe768d4900820ca676269cd25028306e8253c2109c71ff4cb31dd7c6e44
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: fd8c52e5cf3daafa9b2673265067b743cc644755c3772c02904c2b815b3a93d2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 815e7031027718cea7a933b7fc5ad822f754f05e3ae5bdc2066775183a9ca98c841b54e682a148c4437a29b1f95c4ede5833a2a1f2995d2c55296a800e71b269
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 462aaad5134c8b6cce229e8456742151354333c5e7c02283e2e90917fa7ad238f3f4f71770519357117f42b1579928ddb0bba3f04b31ddef68d7e41e92f8c016
         
     | 
    
        data/lib/seafoam/commands.rb
    CHANGED
    
    | 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'set'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            module Seafoam
         
     | 
| 
       4 
5 
     | 
    
         
             
              # Implementations of the command-line commands that you can run in Seafoam.
         
     | 
| 
         @@ -39,6 +40,8 @@ module Seafoam 
     | 
|
| 
       39 
40 
     | 
    
         
             
                      render name, *args
         
     | 
| 
       40 
41 
     | 
    
         
             
                    when 'debug'
         
     | 
| 
       41 
42 
     | 
    
         
             
                      debug name, *args
         
     | 
| 
      
 43 
     | 
    
         
            +
                    when 'describe'
         
     | 
| 
      
 44 
     | 
    
         
            +
                      describe name, *args
         
     | 
| 
       42 
45 
     | 
    
         
             
                    else
         
     | 
| 
       43 
46 
     | 
    
         
             
                      raise ArgumentError, "unknown command #{command}"
         
     | 
| 
       44 
47 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -373,6 +376,56 @@ module Seafoam 
     | 
|
| 
       373 
376 
     | 
    
         
             
                  end
         
     | 
| 
       374 
377 
     | 
    
         
             
                end
         
     | 
| 
       375 
378 
     | 
    
         | 
| 
      
 379 
     | 
    
         
            +
                # seafoam file.bgv:n describe
         
     | 
| 
      
 380 
     | 
    
         
            +
                def describe(name, *args)
         
     | 
| 
      
 381 
     | 
    
         
            +
                  file, graph_index, *rest = parse_name(name)
         
     | 
| 
      
 382 
     | 
    
         
            +
             
     | 
| 
      
 383 
     | 
    
         
            +
                  if graph_index.nil? || !rest.all?(&:nil?)
         
     | 
| 
      
 384 
     | 
    
         
            +
                    raise ArgumentError, 'describe only works with a graph'
         
     | 
| 
      
 385 
     | 
    
         
            +
                  end
         
     | 
| 
      
 386 
     | 
    
         
            +
                  raise ArgumentError, 'describe does not take arguments' unless args.empty?
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
                  parser = BGV::BGVParser.new(file)
         
     | 
| 
      
 389 
     | 
    
         
            +
                  parser.read_file_header
         
     | 
| 
      
 390 
     | 
    
         
            +
                  parser.skip_document_props
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
                  loop do
         
     | 
| 
      
 393 
     | 
    
         
            +
                    index, = parser.read_graph_preheader
         
     | 
| 
      
 394 
     | 
    
         
            +
                    break unless index
         
     | 
| 
      
 395 
     | 
    
         
            +
             
     | 
| 
      
 396 
     | 
    
         
            +
                    parser.skip_graph_header
         
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
      
 398 
     | 
    
         
            +
                    if index != graph_index
         
     | 
| 
      
 399 
     | 
    
         
            +
                      parser.skip_graph
         
     | 
| 
      
 400 
     | 
    
         
            +
                      next
         
     | 
| 
      
 401 
     | 
    
         
            +
                    end
         
     | 
| 
      
 402 
     | 
    
         
            +
             
     | 
| 
      
 403 
     | 
    
         
            +
                    graph = parser.read_graph
         
     | 
| 
      
 404 
     | 
    
         
            +
                    notes = Set.new
         
     | 
| 
      
 405 
     | 
    
         
            +
             
     | 
| 
      
 406 
     | 
    
         
            +
                    graph.nodes.each_value do |node|
         
     | 
| 
      
 407 
     | 
    
         
            +
                      node_class = node.props.dig(:node_class, :node_class)
         
     | 
| 
      
 408 
     | 
    
         
            +
                      case node_class
         
     | 
| 
      
 409 
     | 
    
         
            +
                      when 'org.graalvm.compiler.nodes.IfNode'
         
     | 
| 
      
 410 
     | 
    
         
            +
                        notes.add 'branches'
         
     | 
| 
      
 411 
     | 
    
         
            +
                      when 'org.graalvm.compiler.nodes.LoopBeginNode'
         
     | 
| 
      
 412 
     | 
    
         
            +
                        notes.add 'loops'
         
     | 
| 
      
 413 
     | 
    
         
            +
                      when 'org.graalvm.compiler.nodes.InvokeNode', 'org.graalvm.compiler.nodes.InvokeWithExceptionNode'
         
     | 
| 
      
 414 
     | 
    
         
            +
                        notes.add 'calls'
         
     | 
| 
      
 415 
     | 
    
         
            +
                      end
         
     | 
| 
      
 416 
     | 
    
         
            +
                    end
         
     | 
| 
      
 417 
     | 
    
         
            +
             
     | 
| 
      
 418 
     | 
    
         
            +
                    notes.add 'deopts' if graph.nodes[0].outputs.map(&:to)
         
     | 
| 
      
 419 
     | 
    
         
            +
                                               .all? { |t| t.props.dig(:node_class, :node_class) == 'org.graalvm.compiler.nodes.DeoptimizeNode' }
         
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
                    notes.add 'linear' unless notes.include?('branches') || notes.include?('loops')
         
     | 
| 
      
 422 
     | 
    
         
            +
             
     | 
| 
      
 423 
     | 
    
         
            +
                    @out.puts ["#{graph.nodes.size} nodes", *notes].join(', ')
         
     | 
| 
      
 424 
     | 
    
         
            +
             
     | 
| 
      
 425 
     | 
    
         
            +
                    break
         
     | 
| 
      
 426 
     | 
    
         
            +
                  end
         
     | 
| 
      
 427 
     | 
    
         
            +
                end
         
     | 
| 
      
 428 
     | 
    
         
            +
             
     | 
| 
       376 
429 
     | 
    
         
             
                # seafoam file.bgv:n render options...
         
     | 
| 
       377 
430 
     | 
    
         
             
                def render(name, *args)
         
     | 
| 
       378 
431 
     | 
    
         
             
                  file, graph_index, *rest = parse_name(name)
         
     | 
| 
         @@ -564,6 +617,7 @@ module Seafoam 
     | 
|
| 
       564 
617 
     | 
    
         
             
                  @out.puts '        file.bgv[:graph][:node[-edge]] edges'
         
     | 
| 
       565 
618 
     | 
    
         
             
                  @out.puts '        file.bgv[:graph][:node[-edge]] props'
         
     | 
| 
       566 
619 
     | 
    
         
             
                  @out.puts '        file.bgv:graph:node source'
         
     | 
| 
      
 620 
     | 
    
         
            +
                  @out.puts '        file.bgv:graph describe'
         
     | 
| 
       567 
621 
     | 
    
         
             
                  @out.puts '        file.bgv:graph render'
         
     | 
| 
       568 
622 
     | 
    
         
             
                  @out.puts '              --spotlight n,n,n...'
         
     | 
| 
       569 
623 
     | 
    
         
             
                  @out.puts '              --out graph.pdf'
         
     | 
    
        data/lib/seafoam/passes/graal.rb
    CHANGED
    
    | 
         @@ -262,8 +262,6 @@ module Seafoam 
     | 
|
| 
       262 
262 
     | 
    
         
             
                      # loopBegin edges point from LoopEndNode (continue) and LoopExitNode
         
     | 
| 
       263 
263 
     | 
    
         
             
                      # (break) to the LoopBeginNode. Both are drawn reversed.
         
     | 
| 
       264 
264 
     | 
    
         
             
                      when 'loopBegin'
         
     | 
| 
       265 
     | 
    
         
            -
                        edge.props[:hidden] = true
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
265 
     | 
    
         
             
                        case edge.to.props.dig(:node_class, :node_class)
         
     | 
| 
       268 
266 
     | 
    
         
             
                        when 'org.graalvm.compiler.nodes.LoopEndNode'
         
     | 
| 
       269 
267 
     | 
    
         
             
                          # If it's from the LoopEnd then it's the control edge to follow.
         
     | 
    
        data/lib/seafoam/version.rb
    CHANGED
    
    
    
        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 
     | 
    
         
            +
              version: '0.10'
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Chris Seaton
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-12-10 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: crabstone
         
     |