class AdLint::Exam::CBuiltin::FN_NEST
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 562 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_compound_statement += T(:enter_block) trav.leave_compound_statement += T(:leave_block) trav.enter_if_statement += T(:check_statement) trav.enter_if_else_statement += T(:check_statement) trav.enter_while_statement += T(:check_statement) trav.enter_do_statement += T(:check_statement) trav.enter_for_statement += T(:check_statement) trav.enter_c99_for_statement += T(:check_statement) @cur_fun = nil end
Private Instance Methods
check_statement(stmt)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 615 def check_statement(stmt) if @cur_fun case stmt when Cc1::IfStatement sub_statement = stmt.statement when Cc1::IfElseStatement if stmt.then_statement.kind_of?(Cc1::CompoundStatement) sub_statement = stmt.else_statement else sub_statement = stmt.then_statement end when Cc1::WhileStatement, Cc1::DoStatement sub_statement = stmt.statement when Cc1::ForStatement, Cc1::C99ForStatement sub_statement = stmt.body_statement end case sub_statement when Cc1::CompoundStatement, Cc1::IfStatement, Cc1::IfElseStatement else @cur_nest_level += 1 @max_nest_level = [@max_nest_level, @cur_nest_level].max end end end
do_execute(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 583 def do_execute(*) end
do_prepare(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 582 def do_prepare(*) end
enter_block(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 602 def enter_block(*) if @cur_fun @cur_nest_level += 1 @max_nest_level = [@max_nest_level, @cur_nest_level].max end end
enter_function(fun_def)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 585 def enter_function(fun_def) @cur_fun = fun_def # NOTE: Nest level of the top of the function is 0. # Function definition must have a compound-statement as the # function body. @max_nest_level = @cur_nest_level = -1 end
leave_block(*)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 609 def leave_block(*) if @cur_fun @cur_nest_level -= 1 end end
leave_function(fun_def)
click to toggle source
# File lib/adlint/exam/c_builtin/cc1_metric.rb, line 593 def leave_function(fun_def) if @cur_fun FN_NEST(FunctionId.new(@cur_fun.identifier.value, @cur_fun.signature.to_s), @cur_fun.location, @max_nest_level) @cur_fun = nil end end