class AdLint::Exam::CBuiltin::W0827

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20119
def initialize(phase_ctxt)
  super
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_variable_definition += T(:enter_variable_definition)
end

Private Instance Methods

check(type, init) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20141
def check(type, init)
  return unless init

  if inits = init.initializers
    case
    when type.array?
      check(type.base_type, inits.first)
    when type.struct?
      type.members.zip(inits).each { |m, i| i and check(m.type, i) }
    end
  else
    W(init.location) if type.struct?
  end
end
enter_variable_definition(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_check.rb, line 20126
def enter_variable_definition(node)
  if outmost_init = node.initializer
    if inits = outmost_init.initializers
      case
      when node.type.array?
        check(node.type.base_type, inits.first)
      when node.type.struct?
        node.type.members.zip(inits).each do |memb, init|
          check(memb.type, init) if init
        end
      end
    end
  end
end