def parse_with_ancestors name
      # find .mof file
      mofdata = classmap()[name]
      unless mofdata
        raise "Can't find MOF for #{name}"
      end
      mofpath = mofdata[:path]
      # parsed before ?
      mof = mofdata[:mof] rescue nil
      unless mof
        # not parsed, parse now
        puts "Reading mof from #{mofpath}" if Wbem.debug
        begin
          mofs = parser().parse [ QUALIFIERS, "qualifiers_intel.mof", mofpath ]
        rescue Exception => e
          parser.error_handler e
        end
#        puts "==> #{mofs.inspect}"
        # Iterate over all parsed classes
        mofs[mofpath].classes.each do |mofclass|
          next unless mofclass.name == name
          classmap()[name] = { :path => mofpath, :mof => mofclass }
          if mofclass.superclass
            parse_with_ancestors mofclass.superclass
          end
        end
      end
    end
def parse_with_ancestors name
      # find .mof file
      mofdata = classmap()[name]
      unless mofdata
        raise "Can't find MOF for #{name}"
      end
      mofpath = mofdata[:path]
      # parsed before ?
      mof = mofdata[:mof] rescue nil
      unless mof
        # not parsed, parse now
        puts "Reading mof from #{mofpath}" if Wbem.debug
        begin
          mofs = parser().parse [ QUALIFIERS, "qualifiers_intel.mof", mofpath ]
        rescue Exception => e
          parser.error_handler e
        end
#        puts "==> #{mofs.inspect}"
        # Iterate over all parsed classes
        mofs[mofpath].classes.each do |mofclass|
          next unless mofclass.name == name
          classmap()[name] = { :path => mofpath, :mof => mofclass }
          if mofclass.superclass
            parse_with_ancestors mofclass.superclass
          end
        end
      end
    end
parse_with_ancestors

 Find the superclass name of a class, parse its mof file
 returns Hash of { classname -> CIM::Class }