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