class AdLint::Exam::CBuiltin::VarDefExtraction

Public Class Methods

new(phase_ctxt) click to toggle source
Calls superclass method AdLint::Examination::new
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 149
def initialize(phase_ctxt)
  super
  interp = phase_ctxt[:cc1_interpreter]
  interp.on_variable_defined  += T(:extract_variable)
  interp.on_parameter_defined += T(:extract_parameter)
  interp.on_block_started     += T(:enter_block)
  interp.on_block_ended       += T(:leave_block)
  @block_level = 0
end

Private Instance Methods

do_execute(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 161
def do_execute(*) end
do_prepare(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 160
def do_prepare(*) end
enter_block(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 192
def enter_block(*)
  @block_level += 1
end
extract_parameter(param_def, var) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 184
def extract_parameter(param_def, var)
  if var.named?
    VARDEF(param_def.identifier.location, "I", "P",
           storage_class_type(param_def.storage_class_specifier),
           param_def.identifier.value, param_def.type.brief_image)
  end
end
extract_variable(var_def, var) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 163
def extract_variable(var_def, var)
  case
  when var.declared_as_extern?
    VARDEF(var_def.identifier.location, "X", @block_level == 0 ? "F" : "B",
           storage_class_type(var_def.storage_class_specifier),
           var_def.identifier.value, var_def.type.brief_image)
  when var.declared_as_static?
    VARDEF(var_def.identifier.location, "I", @block_level == 0 ? "F" : "B",
           storage_class_type(var_def.storage_class_specifier),
           var_def.identifier.value, var_def.type.brief_image)
  when var.declared_as_auto?
    VARDEF(var_def.identifier.location, "I", @block_level == 0 ? "F" : "B",
           storage_class_type(var_def.storage_class_specifier),
           var_def.identifier.value, var_def.type.brief_image)
  when var.declared_as_register?
    VARDEF(var_def.identifier.location, "I", @block_level == 0 ? "F" : "B",
           storage_class_type(var_def.storage_class_specifier),
           var_def.identifier.value, var_def.type.brief_image)
  end
end
leave_block(*) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 196
def leave_block(*)
  @block_level -= 1
end
storage_class_type(sc_spec) click to toggle source
# File lib/adlint/exam/c_builtin/cc1_code.rb, line 200
def storage_class_type(sc_spec)
  if sc_spec
    case sc_spec.type
    when :AUTO
      "A"
    when :REGISTER
      "R"
    when :STATIC
      "S"
    when :EXTERN
      "E"
    else
      "N"
    end
  else
    "N"
  end
end