class AdLint::Exam::CBuiltin::W0549
Public Class Methods
new(phase_ctxt)
click to toggle source
Calls superclass method
AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cpp_check.rb, line 888 def initialize(phase_ctxt) super interp = phase_ctxt[:cpp_interpreter] interp.on_function_like_macro_defined += T(:check) interp.on_va_function_like_macro_defined += T(:check) end
Private Instance Methods
check(*, macro)
click to toggle source
# File lib/adlint/exam/c_builtin/cpp_check.rb, line 896 def check(*, macro) return unless macro.replacement_list macro.parameter_names.each do |name| macro.replacement_list.tokens.each_with_index do |pp_tok, idx| next unless pp_tok.value == name prv_tok = macro.replacement_list.tokens[[idx - 1, 0].max] nxt_tok = macro.replacement_list.tokens[idx + 1] next if prv_tok && prv_tok.value =~ /\A##?\z/ next if nxt_tok && nxt_tok.value == "##" unless prv_tok && prv_tok.value == "(" W(pp_tok.location) next end unless nxt_tok && nxt_tok.value == ")" W(pp_tok.location) next end end end end