class AdLint::Exam::CBuiltin::FN_UELS

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 508
def initialize(phase_ctxt)
  super
  @fpath = phase_ctxt[:sources].first.fpath
  trav = phase_ctxt[:cc1_ast_traversal]
  trav.enter_ansi_function_definition  += T(:enter_function)
  trav.leave_ansi_function_definition  += T(:leave_function)
  trav.enter_kandr_function_definition += T(:enter_function)
  trav.leave_kandr_function_definition += T(:leave_function)
  trav.enter_if_else_statement         += T(:enter_if_else_statement)
  trav.leave_if_else_statement         += T(:leave_if_else_statement)
  @cur_fun = nil
  @if_else_stmt_chain = 0
  @incomplete_if_else_stmt_cnt = 0
end

Private Instance Methods

do_execute(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 525
def do_execute(*) end
do_prepare(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 524
def do_prepare(*) end
enter_function(fun_def) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 527
def enter_function(fun_def)
  @cur_fun = fun_def
  @if_else_stmt_chain = 0
  @incomplete_if_else_stmt_cnt = 0
end
enter_if_else_statement(node) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 544
def enter_if_else_statement(node)
  @if_else_stmt_chain += 1

  if @cur_fun && @if_else_stmt_chain > 0
    if node.else_statement.kind_of?(Cc1::IfStatement)
      @incomplete_if_else_stmt_cnt += 1
    end
  end
end
leave_function(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 533
def leave_function(*)
  if @cur_fun
    FN_UELS(FunctionId.new(@cur_fun.identifier.value,
                           @cur_fun.signature.to_s),
            @cur_fun.location, @incomplete_if_else_stmt_cnt)
    @cur_fun = nil
    @if_else_stmt_chain = 0
    @incomplete_if_else_stmt_cnt = 0
  end
end
leave_if_else_statement(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 554
def leave_if_else_statement(*)
  @if_else_stmt_chain -= 1
end