cast-to-yaml 0.1.0 → 0.1.1
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/cast-to-yaml.gemspec +1 -2
 - data/lib/cast-to-yaml.rb +1 -0
 - data/lib/cast-to-yaml/to_h.rb +85 -0
 - data/lib/cast-to-yaml/to_yaml.rb +83 -33
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: be1314489cac42f6fdc88072ecd2c9d18f3ffb9b938a91a4877d64f492b82ab4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a2d1171413f5219ea3f99a62e1e706fe7173ea9ddd7850a77e4a594a99009aee
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c31c63132a199291668840678b8007cab4f3ba9c6303cdded9c7e8cca1e17b923121216c0096815ba92beb422f53c634c3ca0b5cb8a11cfc5db8a3fd762f8755
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 33184e329313552a6661f387bc9d679efac14e44a7b8ece742961c819a9fe980245ab49732d0e1bc8bd88414ffd110ce02c6b63be585ac681127b1adfc7f6ce8
         
     | 
    
        data/cast-to-yaml.gemspec
    CHANGED
    
    | 
         @@ -1,12 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       2 
2 
     | 
    
         
             
              s.name = 'cast-to-yaml'
         
     | 
| 
       3 
     | 
    
         
            -
              s.version = "0.1. 
     | 
| 
      
 3 
     | 
    
         
            +
              s.version = "0.1.1"
         
     | 
| 
       4 
4 
     | 
    
         
             
              s.author = "Brice Videau"
         
     | 
| 
       5 
5 
     | 
    
         
             
              s.email = "bvideau@anl.gov"
         
     | 
| 
       6 
6 
     | 
    
         
             
              s.homepage = "https://github.com/alcf-perfengr/cast-to-yaml"
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.summary = "Extract information fom a c ast"
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.files = Dir[ 'cast-to-yaml.gemspec', 'LICENSE', 'lib/**/*.rb' ]
         
     | 
| 
       9 
     | 
    
         
            -
              s.has_rdoc = false
         
     | 
| 
       10 
9 
     | 
    
         
             
              s.license = 'MIT'
         
     | 
| 
       11 
10 
     | 
    
         
             
              s.required_ruby_version = '>= 2.3.0'
         
     | 
| 
       12 
11 
     | 
    
         
             
              s.add_dependency 'cast', '~> 0.3', '>=0.3.0'
         
     | 
    
        data/lib/cast-to-yaml.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module C
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              class Node
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                #
         
     | 
| 
      
 6 
     | 
    
         
            +
                # Serialize a node to a Hash representation.
         
     | 
| 
      
 7 
     | 
    
         
            +
                #
         
     | 
| 
      
 8 
     | 
    
         
            +
                def to_h
         
     | 
| 
      
 9 
     | 
    
         
            +
                  res = {}
         
     | 
| 
      
 10 
     | 
    
         
            +
                  kind = self.class.kind
         
     | 
| 
      
 11 
     | 
    
         
            +
                  res["kind"] = kind
         
     | 
| 
      
 12 
     | 
    
         
            +
                  fields.each do |f|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    name = f.init_key.to_s
         
     | 
| 
      
 14 
     | 
    
         
            +
                    value = self.send(f.reader)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    if value && !(value == f.make_default)
         
     | 
| 
      
 16 
     | 
    
         
            +
                      res[name] =
         
     | 
| 
      
 17 
     | 
    
         
            +
                        if f.child?
         
     | 
| 
      
 18 
     | 
    
         
            +
                          if value.kind_of? C::NodeList
         
     | 
| 
      
 19 
     | 
    
         
            +
                            value.collect { |n| n.to_h }
         
     | 
| 
      
 20 
     | 
    
         
            +
                          else
         
     | 
| 
      
 21 
     | 
    
         
            +
                            value.to_h
         
     | 
| 
      
 22 
     | 
    
         
            +
                          end
         
     | 
| 
      
 23 
     | 
    
         
            +
                        else
         
     | 
| 
      
 24 
     | 
    
         
            +
                          value
         
     | 
| 
      
 25 
     | 
    
         
            +
                        end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                  return res
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                private
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def self.kind
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @kind ||= name.split('::').last.
         
     | 
| 
      
 35 
     | 
    
         
            +
                    gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
         
     | 
| 
      
 36 
     | 
    
         
            +
                    gsub(/([a-z])([A-Z])/, '\1_\2').downcase
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                #
         
     | 
| 
      
 40 
     | 
    
         
            +
                # Deserialize a node from a given Hash representation.
         
     | 
| 
      
 41 
     | 
    
         
            +
                #
         
     | 
| 
      
 42 
     | 
    
         
            +
                def self.from_h(h)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  params = {}
         
     | 
| 
      
 44 
     | 
    
         
            +
                  fields.each do |f|
         
     | 
| 
      
 45 
     | 
    
         
            +
                    name = f.init_key
         
     | 
| 
      
 46 
     | 
    
         
            +
                    value = h[name.to_s]
         
     | 
| 
      
 47 
     | 
    
         
            +
                    if value
         
     | 
| 
      
 48 
     | 
    
         
            +
                      params[name] =
         
     | 
| 
      
 49 
     | 
    
         
            +
                        if f.child?
         
     | 
| 
      
 50 
     | 
    
         
            +
                          default = f.make_default
         
     | 
| 
      
 51 
     | 
    
         
            +
                          if default.kind_of?(C::NodeList) || value.kind_of?(::Array)
         
     | 
| 
      
 52 
     | 
    
         
            +
                            raise ArgumentError, "node is not a list" unless value.kind_of? ::Array
         
     | 
| 
      
 53 
     | 
    
         
            +
                            default = C::NodeArray.new unless default
         
     | 
| 
      
 54 
     | 
    
         
            +
                            default.push(*(value.collect { |c| C.from_h(c) }))
         
     | 
| 
      
 55 
     | 
    
         
            +
                          else
         
     | 
| 
      
 56 
     | 
    
         
            +
                            C.from_h(value)
         
     | 
| 
      
 57 
     | 
    
         
            +
                          end
         
     | 
| 
      
 58 
     | 
    
         
            +
                        else
         
     | 
| 
      
 59 
     | 
    
         
            +
                          value
         
     | 
| 
      
 60 
     | 
    
         
            +
                        end
         
     | 
| 
      
 61 
     | 
    
         
            +
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  return self.new(params)
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              #
         
     | 
| 
      
 69 
     | 
    
         
            +
              # Deserialize an AST from a given Hash representation.
         
     | 
| 
      
 70 
     | 
    
         
            +
              #
         
     | 
| 
      
 71 
     | 
    
         
            +
              def self.from_h(h)
         
     | 
| 
      
 72 
     | 
    
         
            +
                kind = h["kind"]
         
     | 
| 
      
 73 
     | 
    
         
            +
                raise ArgumentError, "missing node kind" unless kind
         
     | 
| 
      
 74 
     | 
    
         
            +
                klass = C.const_get(class_name_from_kind(kind))
         
     | 
| 
      
 75 
     | 
    
         
            +
                raise ArgumentError, "unknown node" unless klass
         
     | 
| 
      
 76 
     | 
    
         
            +
                return klass.send(:from_h, h)
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
              private
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              def self.class_name_from_kind(kind)
         
     | 
| 
      
 82 
     | 
    
         
            +
                kind.split("_").collect(&:capitalize).join
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/cast-to-yaml/to_yaml.rb
    CHANGED
    
    | 
         @@ -1,13 +1,40 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module C
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
              class Node
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def to_h_split
         
     | 
| 
      
 6 
     | 
    
         
            +
                  res = {}
         
     | 
| 
      
 7 
     | 
    
         
            +
                  kind = self.class.kind
         
     | 
| 
      
 8 
     | 
    
         
            +
                  res["kind"] = kind
         
     | 
| 
      
 9 
     | 
    
         
            +
                  fields.each do |f|
         
     | 
| 
      
 10 
     | 
    
         
            +
                    name = f.init_key.to_s
         
     | 
| 
      
 11 
     | 
    
         
            +
                    value = self.send(f.reader)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    if value && !(value == f.make_default)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      res[name] =
         
     | 
| 
      
 14 
     | 
    
         
            +
                        if f.child?
         
     | 
| 
      
 15 
     | 
    
         
            +
                          if value.kind_of? C::NodeList
         
     | 
| 
      
 16 
     | 
    
         
            +
                            value.collect { |n| n.to_h_split }
         
     | 
| 
      
 17 
     | 
    
         
            +
                          else
         
     | 
| 
      
 18 
     | 
    
         
            +
                            value.to_h_split
         
     | 
| 
      
 19 
     | 
    
         
            +
                          end
         
     | 
| 
      
 20 
     | 
    
         
            +
                        else
         
     | 
| 
      
 21 
     | 
    
         
            +
                          value
         
     | 
| 
      
 22 
     | 
    
         
            +
                        end
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  return res
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
       3 
30 
     | 
    
         
             
              class Declarator
         
     | 
| 
       4 
     | 
    
         
            -
                def  
     | 
| 
      
 31 
     | 
    
         
            +
                def to_h_split(declaration)
         
     | 
| 
       5 
32 
     | 
    
         
             
                  res = {}
         
     | 
| 
       6 
33 
     | 
    
         
             
                  res["name"] = name.dup
         
     | 
| 
       7 
34 
     | 
    
         
             
                  res["type"] = if indirect_type
         
     | 
| 
       8 
     | 
    
         
            -
                      indirect_type. 
     | 
| 
      
 35 
     | 
    
         
            +
                      indirect_type.to_h_split(declaration)
         
     | 
| 
       9 
36 
     | 
    
         
             
                    else
         
     | 
| 
       10 
     | 
    
         
            -
                      declaration.type. 
     | 
| 
      
 37 
     | 
    
         
            +
                      declaration.type.to_h_split
         
     | 
| 
       11 
38 
     | 
    
         
             
                    end
         
     | 
| 
       12 
39 
     | 
    
         
             
                  if init
         
     | 
| 
       13 
40 
     | 
    
         
             
                    res["init"] = init.to_s
         
     | 
| 
         @@ -23,14 +50,17 @@ module C 
     | 
|
| 
       23 
50 
     | 
    
         | 
| 
       24 
51 
     | 
    
         
             
                def to_a
         
     | 
| 
       25 
52 
     | 
    
         
             
                  declarators.collect { |d|
         
     | 
| 
       26 
     | 
    
         
            -
                    d. 
     | 
| 
      
 53 
     | 
    
         
            +
                    res = d.to_h_split(self)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    res["storage"] = storage.to_s if storage
         
     | 
| 
      
 55 
     | 
    
         
            +
                    res["inline"] = true if inline?
         
     | 
| 
      
 56 
     | 
    
         
            +
                    res
         
     | 
| 
       27 
57 
     | 
    
         
             
                  }
         
     | 
| 
       28 
58 
     | 
    
         
             
                end
         
     | 
| 
       29 
59 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                def extract(res = Hash::new { |h, k| h[k] = [] })
         
     | 
| 
      
 60 
     | 
    
         
            +
                def extract(res = Hash::new { |h, k| h[k] = [] }, declarations: true)
         
     | 
| 
       31 
61 
     | 
    
         
             
                  if typedef?
         
     | 
| 
       32 
62 
     | 
    
         
             
                    declarators.each { |d|
         
     | 
| 
       33 
     | 
    
         
            -
                      res["typedefs"].push d. 
     | 
| 
      
 63 
     | 
    
         
            +
                      res["typedefs"].push d.to_h_split(self)
         
     | 
| 
       34 
64 
     | 
    
         
             
                    }
         
     | 
| 
       35 
65 
     | 
    
         
             
                  else
         
     | 
| 
       36 
66 
     | 
    
         
             
                    declarators.each { |d|
         
     | 
| 
         @@ -38,17 +68,29 @@ module C 
     | 
|
| 
       38 
68 
     | 
    
         
             
                        f = {}
         
     | 
| 
       39 
69 
     | 
    
         
             
                        f["name"] = d.name
         
     | 
| 
       40 
70 
     | 
    
         
             
                        if d.indirect_type.type
         
     | 
| 
       41 
     | 
    
         
            -
                          f["type"] = d.indirect_type.type. 
     | 
| 
      
 71 
     | 
    
         
            +
                          f["type"] = d.indirect_type.type.to_h_split(self)
         
     | 
| 
       42 
72 
     | 
    
         
             
                        else
         
     | 
| 
       43 
     | 
    
         
            -
                          f["type"] = type. 
     | 
| 
      
 73 
     | 
    
         
            +
                          f["type"] = type.to_h_split(self)
         
     | 
| 
       44 
74 
     | 
    
         
             
                        end
         
     | 
| 
       45 
75 
     | 
    
         
             
                        if d.indirect_type.params
         
     | 
| 
       46 
     | 
    
         
            -
                          f["params"] = d.indirect_type.params.collect { |p| p. 
     | 
| 
      
 76 
     | 
    
         
            +
                          f["params"] = d.indirect_type.params.collect { |p| p.to_h_split }
         
     | 
| 
      
 77 
     | 
    
         
            +
                        end
         
     | 
| 
      
 78 
     | 
    
         
            +
                        if d.indirect_type.var_args?
         
     | 
| 
      
 79 
     | 
    
         
            +
                          f["var_args"] = true
         
     | 
| 
      
 80 
     | 
    
         
            +
                        end
         
     | 
| 
      
 81 
     | 
    
         
            +
                        if inline?
         
     | 
| 
      
 82 
     | 
    
         
            +
                          f["inline"] = true
         
     | 
| 
      
 83 
     | 
    
         
            +
                        end
         
     | 
| 
      
 84 
     | 
    
         
            +
                        if storage
         
     | 
| 
      
 85 
     | 
    
         
            +
                          f["storage"] = storage.to_s
         
     | 
| 
       47 
86 
     | 
    
         
             
                        end
         
     | 
| 
       48 
87 
     | 
    
         | 
| 
       49 
88 
     | 
    
         
             
                        res["functions"].push f
         
     | 
| 
       50 
     | 
    
         
            -
                       
     | 
| 
       51 
     | 
    
         
            -
                         
     | 
| 
      
 89 
     | 
    
         
            +
                      elsif declarations
         
     | 
| 
      
 90 
     | 
    
         
            +
                        r = d.to_h_split(self)
         
     | 
| 
      
 91 
     | 
    
         
            +
                        r["storage"] = storage.to_s if storage
         
     | 
| 
      
 92 
     | 
    
         
            +
                        r["inline"] = true if inline?
         
     | 
| 
      
 93 
     | 
    
         
            +
                        res["declarations"].push r
         
     | 
| 
       52 
94 
     | 
    
         
             
                      end
         
     | 
| 
       53 
95 
     | 
    
         
             
                    }
         
     | 
| 
       54 
96 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -57,6 +99,7 @@ module C 
     | 
|
| 
       57 
99 
     | 
    
         
             
                    s["name"] = type.name
         
     | 
| 
       58 
100 
     | 
    
         
             
                    m = []
         
     | 
| 
       59 
101 
     | 
    
         
             
                    type.members.each { |mem|
         
     | 
| 
      
 102 
     | 
    
         
            +
                      mem.extract(res, declarations: false)
         
     | 
| 
       60 
103 
     | 
    
         
             
                      m += mem.to_a
         
     | 
| 
       61 
104 
     | 
    
         
             
                    }
         
     | 
| 
       62 
105 
     | 
    
         
             
                    s["members"] = m
         
     | 
| 
         @@ -66,7 +109,7 @@ module C 
     | 
|
| 
       66 
109 
     | 
    
         
             
                    s["name"] = type.name
         
     | 
| 
       67 
110 
     | 
    
         
             
                    m = []
         
     | 
| 
       68 
111 
     | 
    
         
             
                    type.members.each { |mem|
         
     | 
| 
       69 
     | 
    
         
            -
                      m.push mem. 
     | 
| 
      
 112 
     | 
    
         
            +
                      m.push mem.to_h_split
         
     | 
| 
       70 
113 
     | 
    
         
             
                    }
         
     | 
| 
       71 
114 
     | 
    
         
             
                    s["members"] = m
         
     | 
| 
       72 
115 
     | 
    
         
             
                    res["enums"].push s
         
     | 
| 
         @@ -75,6 +118,7 @@ module C 
     | 
|
| 
       75 
118 
     | 
    
         
             
                    s["name"] = type.name
         
     | 
| 
       76 
119 
     | 
    
         
             
                    m = []
         
     | 
| 
       77 
120 
     | 
    
         
             
                    type.members.each { |mem|
         
     | 
| 
      
 121 
     | 
    
         
            +
                      mem.extract(res, declarations: false)
         
     | 
| 
       78 
122 
     | 
    
         
             
                      m += mem.to_a
         
     | 
| 
       79 
123 
     | 
    
         
             
                    }
         
     | 
| 
       80 
124 
     | 
    
         
             
                    s["members"] = m
         
     | 
| 
         @@ -89,7 +133,7 @@ module C 
     | 
|
| 
       89 
133 
     | 
    
         
             
                  entities.select { |e|
         
     | 
| 
       90 
134 
     | 
    
         
             
                    e.kind_of? Declaration
         
     | 
| 
       91 
135 
     | 
    
         
             
                  }.each { |e|
         
     | 
| 
       92 
     | 
    
         
            -
                    e.extract(res)
         
     | 
| 
      
 136 
     | 
    
         
            +
                    e.extract(res, declarations: true)
         
     | 
| 
       93 
137 
     | 
    
         
             
                  }
         
     | 
| 
       94 
138 
     | 
    
         
             
                  res
         
     | 
| 
       95 
139 
     | 
    
         
             
                end
         
     | 
| 
         @@ -99,7 +143,7 @@ module C 
     | 
|
| 
       99 
143 
     | 
    
         
             
              float_longnesses = ['float', 'double', 'long double']
         
     | 
| 
       100 
144 
     | 
    
         
             
              ## DirectTypes
         
     | 
| 
       101 
145 
     | 
    
         
             
              class Struct
         
     | 
| 
       102 
     | 
    
         
            -
                def  
     | 
| 
      
 146 
     | 
    
         
            +
                def to_h_split(_ = nil)
         
     | 
| 
       103 
147 
     | 
    
         
             
                  res = {}
         
     | 
| 
       104 
148 
     | 
    
         
             
                  res["kind"] = "struct"
         
     | 
| 
       105 
149 
     | 
    
         
             
                  if name
         
     | 
| 
         @@ -119,7 +163,7 @@ module C 
     | 
|
| 
       119 
163 
     | 
    
         
             
              end
         
     | 
| 
       120 
164 
     | 
    
         | 
| 
       121 
165 
     | 
    
         
             
              class Union
         
     | 
| 
       122 
     | 
    
         
            -
                def  
     | 
| 
      
 166 
     | 
    
         
            +
                def to_h_split(_ = nil)
         
     | 
| 
       123 
167 
     | 
    
         
             
                  res = {}
         
     | 
| 
       124 
168 
     | 
    
         
             
                  res["kind"] = "union"
         
     | 
| 
       125 
169 
     | 
    
         
             
                  if name
         
     | 
| 
         @@ -139,7 +183,7 @@ module C 
     | 
|
| 
       139 
183 
     | 
    
         
             
              end
         
     | 
| 
       140 
184 
     | 
    
         | 
| 
       141 
185 
     | 
    
         
             
              class Enum
         
     | 
| 
       142 
     | 
    
         
            -
                def  
     | 
| 
      
 186 
     | 
    
         
            +
                def to_h_split
         
     | 
| 
       143 
187 
     | 
    
         
             
                  res = {}
         
     | 
| 
       144 
188 
     | 
    
         
             
                  res["kind"] = "enum"
         
     | 
| 
       145 
189 
     | 
    
         
             
                  if name
         
     | 
| 
         @@ -147,7 +191,7 @@ module C 
     | 
|
| 
       147 
191 
     | 
    
         
             
                  else
         
     | 
| 
       148 
192 
     | 
    
         
             
                    m = []
         
     | 
| 
       149 
193 
     | 
    
         
             
                    members.each { |mem|
         
     | 
| 
       150 
     | 
    
         
            -
                      m.push mem. 
     | 
| 
      
 194 
     | 
    
         
            +
                      m.push mem.to_h_split
         
     | 
| 
       151 
195 
     | 
    
         
             
                    }
         
     | 
| 
       152 
196 
     | 
    
         
             
                    res["members"] = m
         
     | 
| 
       153 
197 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -159,7 +203,7 @@ module C 
     | 
|
| 
       159 
203 
     | 
    
         
             
              end
         
     | 
| 
       160 
204 
     | 
    
         | 
| 
       161 
205 
     | 
    
         
             
              class Enumerator
         
     | 
| 
       162 
     | 
    
         
            -
                def  
     | 
| 
      
 206 
     | 
    
         
            +
                def to_h_split
         
     | 
| 
       163 
207 
     | 
    
         
             
                  res = {}
         
     | 
| 
       164 
208 
     | 
    
         
             
                  res["name"] = name
         
     | 
| 
       165 
209 
     | 
    
         
             
                  if val
         
     | 
| 
         @@ -182,7 +226,7 @@ module C 
     | 
|
| 
       182 
226 
     | 
    
         
             
                [Complex   , proc{"_Complex #{float_longnesses[longness]}"}],
         
     | 
| 
       183 
227 
     | 
    
         
             
                [Imaginary , proc{"_Imaginary #{float_longnesses[longness]}"}]
         
     | 
| 
       184 
228 
     | 
    
         
             
              ].each do |c, x|
         
     | 
| 
       185 
     | 
    
         
            -
                c.send(:define_method, : 
     | 
| 
      
 229 
     | 
    
         
            +
                c.send(:define_method, :to_h_split) do |_ = nil|
         
     | 
| 
       186 
230 
     | 
    
         
             
                  res = {}
         
     | 
| 
       187 
231 
     | 
    
         
             
                  if self.kind_of? CustomType
         
     | 
| 
       188 
232 
     | 
    
         
             
                    res["kind"] = "custom_type"
         
     | 
| 
         @@ -199,7 +243,7 @@ module C 
     | 
|
| 
       199 
243 
     | 
    
         | 
| 
       200 
244 
     | 
    
         
             
              ## IndirectTypes
         
     | 
| 
       201 
245 
     | 
    
         
             
              class Pointer
         
     | 
| 
       202 
     | 
    
         
            -
                def  
     | 
| 
      
 246 
     | 
    
         
            +
                def to_h_split(declaration = nil)
         
     | 
| 
       203 
247 
     | 
    
         
             
                  res = {}
         
     | 
| 
       204 
248 
     | 
    
         
             
                  res["kind"] = "pointer"
         
     | 
| 
       205 
249 
     | 
    
         
             
                  res["const"] = true if const?
         
     | 
| 
         @@ -207,28 +251,29 @@ module C 
     | 
|
| 
       207 
251 
     | 
    
         
             
                  res["volatile"] = true if volatile?
         
     | 
| 
       208 
252 
     | 
    
         
             
                  if type
         
     | 
| 
       209 
253 
     | 
    
         
             
                    if declaration
         
     | 
| 
       210 
     | 
    
         
            -
                      res["type"] = type. 
     | 
| 
      
 254 
     | 
    
         
            +
                      res["type"] = type.to_h_split(declaration)
         
     | 
| 
       211 
255 
     | 
    
         
             
                    else
         
     | 
| 
       212 
     | 
    
         
            -
                      res["type"] = type. 
     | 
| 
      
 256 
     | 
    
         
            +
                      res["type"] = type.to_h_split
         
     | 
| 
       213 
257 
     | 
    
         
             
                    end
         
     | 
| 
       214 
258 
     | 
    
         
             
                  else
         
     | 
| 
       215 
     | 
    
         
            -
                    res["type"] = declaration.type. 
     | 
| 
      
 259 
     | 
    
         
            +
                    res["type"] = declaration.type.to_h_split
         
     | 
| 
       216 
260 
     | 
    
         
             
                  end
         
     | 
| 
       217 
261 
     | 
    
         
             
                  res
         
     | 
| 
       218 
262 
     | 
    
         
             
                end
         
     | 
| 
       219 
263 
     | 
    
         
             
              end
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
       220 
265 
     | 
    
         
             
              class Array
         
     | 
| 
       221 
     | 
    
         
            -
                def  
     | 
| 
      
 266 
     | 
    
         
            +
                def to_h_split(declaration = nil)
         
     | 
| 
       222 
267 
     | 
    
         
             
                  res = {}
         
     | 
| 
       223 
268 
     | 
    
         
             
                  res["kind"] = "array"
         
     | 
| 
       224 
269 
     | 
    
         
             
                  if type
         
     | 
| 
       225 
270 
     | 
    
         
             
                    if declaration
         
     | 
| 
       226 
     | 
    
         
            -
                      res["type"] = type. 
     | 
| 
      
 271 
     | 
    
         
            +
                      res["type"] = type.to_h_split(declaration)
         
     | 
| 
       227 
272 
     | 
    
         
             
                    else
         
     | 
| 
       228 
     | 
    
         
            -
                      res["type"] = type. 
     | 
| 
      
 273 
     | 
    
         
            +
                      res["type"] = type.to_h_split
         
     | 
| 
       229 
274 
     | 
    
         
             
                    end
         
     | 
| 
       230 
275 
     | 
    
         
             
                  else
         
     | 
| 
       231 
     | 
    
         
            -
                    res["type"] = declaration.type. 
     | 
| 
      
 276 
     | 
    
         
            +
                    res["type"] = declaration.type.to_h_split
         
     | 
| 
       232 
277 
     | 
    
         
             
                  end
         
     | 
| 
       233 
278 
     | 
    
         
             
                  if length
         
     | 
| 
       234 
279 
     | 
    
         
             
                    res["length"] = length.to_s
         
     | 
| 
         @@ -236,30 +281,35 @@ module C 
     | 
|
| 
       236 
281 
     | 
    
         
             
                  res
         
     | 
| 
       237 
282 
     | 
    
         
             
                end
         
     | 
| 
       238 
283 
     | 
    
         
             
              end
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
       239 
285 
     | 
    
         
             
              class Function
         
     | 
| 
       240 
     | 
    
         
            -
                def  
     | 
| 
      
 286 
     | 
    
         
            +
                def to_h_split(declaration, no_types=false)
         
     | 
| 
       241 
287 
     | 
    
         
             
                  res = {}
         
     | 
| 
       242 
288 
     | 
    
         
             
                  res["kind"] = "function"
         
     | 
| 
       243 
289 
     | 
    
         
             
                  if type
         
     | 
| 
       244 
     | 
    
         
            -
                    res["type"] = type. 
     | 
| 
      
 290 
     | 
    
         
            +
                    res["type"] = type.to_h_split(declaration)
         
     | 
| 
       245 
291 
     | 
    
         
             
                  else
         
     | 
| 
       246 
     | 
    
         
            -
                    res["type"] = declaration.type. 
     | 
| 
      
 292 
     | 
    
         
            +
                    res["type"] = declaration.type.to_h_split
         
     | 
| 
       247 
293 
     | 
    
         
             
                  end
         
     | 
| 
       248 
294 
     | 
    
         
             
                  if !params.nil?
         
     | 
| 
       249 
295 
     | 
    
         
             
                    res["params"] = if no_types
         
     | 
| 
       250 
296 
     | 
    
         
             
                        params.collect{|p| p.name }
         
     | 
| 
       251 
297 
     | 
    
         
             
                      else
         
     | 
| 
       252 
     | 
    
         
            -
                        params.collect{|p| p. 
     | 
| 
      
 298 
     | 
    
         
            +
                        params.collect{|p| p.to_h_split }
         
     | 
| 
       253 
299 
     | 
    
         
             
                      end
         
     | 
| 
       254 
300 
     | 
    
         
             
                  end
         
     | 
| 
      
 301 
     | 
    
         
            +
                  if var_args?
         
     | 
| 
      
 302 
     | 
    
         
            +
                    res["var_args"] = true
         
     | 
| 
      
 303 
     | 
    
         
            +
                  end
         
     | 
| 
       255 
304 
     | 
    
         
             
                  res
         
     | 
| 
       256 
305 
     | 
    
         
             
                end
         
     | 
| 
       257 
306 
     | 
    
         
             
              end
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
       258 
308 
     | 
    
         
             
              class Parameter
         
     | 
| 
       259 
     | 
    
         
            -
                def  
     | 
| 
      
 309 
     | 
    
         
            +
                def to_h_split
         
     | 
| 
       260 
310 
     | 
    
         
             
                  res = {}
         
     | 
| 
       261 
311 
     | 
    
         
             
                  res["name"] = name.to_s if name.to_s != ''
         
     | 
| 
       262 
     | 
    
         
            -
                  res["type"] = type. 
     | 
| 
      
 312 
     | 
    
         
            +
                  res["type"] = type.to_h_split
         
     | 
| 
       263 
313 
     | 
    
         
             
                  res["register"] = true if register?
         
     | 
| 
       264 
314 
     | 
    
         
             
                  res
         
     | 
| 
       265 
315 
     | 
    
         
             
                end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: cast-to-yaml
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Brice Videau
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-08-27 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: cast
         
     | 
| 
         @@ -39,6 +39,7 @@ files: 
     | 
|
| 
       39 
39 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       40 
40 
     | 
    
         
             
            - cast-to-yaml.gemspec
         
     | 
| 
       41 
41 
     | 
    
         
             
            - lib/cast-to-yaml.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/cast-to-yaml/to_h.rb
         
     | 
| 
       42 
43 
     | 
    
         
             
            - lib/cast-to-yaml/to_yaml.rb
         
     | 
| 
       43 
44 
     | 
    
         
             
            homepage: https://github.com/alcf-perfengr/cast-to-yaml
         
     | 
| 
       44 
45 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -59,8 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       59 
60 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       60 
61 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       61 
62 
     | 
    
         
             
            requirements: []
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
            rubygems_version: 2.7.6.2
         
     | 
| 
      
 63 
     | 
    
         
            +
            rubygems_version: 3.1.2
         
     | 
| 
       64 
64 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       65 
65 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       66 
66 
     | 
    
         
             
            summary: Extract information fom a c ast
         
     |